commit eac33d84c01f8de6e58ca98590f64323e5cf9e0f Author: Jacek Pyziak Date: Sun Feb 22 21:59:33 2026 +0100 first commit diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..f9471bc --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,54 @@ +{ + "permissions": { + "allow": [ + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../../updates/0.20/ver_0.295.zip'' -Force\")", + "Bash(git add:*)", + "Bash(git commit:*)", + "Bash(git push:*)", + "Bash(php phpunit.phar:*)", + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../../updates/0.20/ver_0.296.zip'' -Force\")", + "Bash(ls:*)", + "Bash(git -C \"C:/visual studio code/projekty/shopPRO\" rev-parse --show-toplevel)", + "Bash(powershell -File:*)", + "Bash(git status:*)", + "Bash(powershell -Command \"& { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::OpenRead\\(''updates/0.20/ver_0.296.zip''\\).Entries | ForEach-Object { Write-Output $_.FullName } }\")", + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.296.zip'' -Force\")", + "Bash(powershell -Command \"Add-Type -AssemblyName System.IO.Compression.FileSystem; [IO.Compression.ZipFile]::OpenRead\\(\\(Resolve-Path ''updates/0.20/ver_0.296.zip''\\)\\).Entries.FullName\")", + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.297.zip'' -Force\")", + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../../updates/0.20/ver_0.299.zip'' -Force\")", + "Bash(powershell -Command \"Remove-Item -Recurse -Force 'c:/visual studio code/projekty/shopPRO/temp/temp_299'\":*)", + "Bash(powershell -Command \"\\(Get-ChildItem ''c:/visual studio code/projekty/shopPRO/updates/0.20/ver_0.299.zip''\\).Length; [System.IO.Compression.ZipFile]::OpenRead\\(''c:/visual studio code/projekty/shopPRO/updates/0.20/ver_0.299.zip''\\).Entries | ForEach-Object { $_.FullName }\")", + "Bash(powershell -Command \"Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::OpenRead\\(''c:/visual studio code/projekty/shopPRO/updates/0.20/ver_0.299.zip''\\).Entries | ForEach-Object { $_.FullName }\")", + "Bash(unzip:*)", + "mcp__serena__find_symbol", + "mcp__serena__find_file", + "mcp__serena__activate_project", + "mcp__serena__check_onboarding_performed", + "Bash(tail:*)", + "WebFetch(domain:shoppro.project-dc.pl)", + "Bash(cd:*)", + "mcp__serena__get_symbols_overview", + "mcp__serena__search_for_pattern", + "mcp__serena__read_file", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && powershell.exe -ExecutionPolicy Bypass -File \"C:/visual studio code/projekty/shopPRO/test.ps1\" 2>&1)", + "mcp__serena__replace_content", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && npx sass admin/layout/style-scss/style.scss admin/layout/style-css/style.css --source-map 2>&1)", + "Bash(head:*)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -rf temp/temp_304 && powershell -File \"./build-update.ps1\" -FromTag v0.303 -ToTag v0.304 -ChangelogEntry \"NEW - konfigurowalne limity kwotowe metod platnosci \\(min/max kwota zamowienia\\)\" 2>&1)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -rf temp/temp_305 && powershell -File \"./build-update.ps1\" -FromTag v0.304 -ToTag v0.305 -ChangelogEntry \"FIX - naprawa kolejnosci atrybutow permutacji, NEW - pasek postepu darmowej dostawy w koszyku\" 2>&1)", + "Bash(xxd:*)", + "mcp__serena__list_dir", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && powershell -ExecutionPolicy Bypass -File build-update.ps1 -FromTag v0.305 -ToTag v0.306 -ChangelogEntry \"FIX - ukrywanie form dostawy gdy nie ma dostepnych form platnosci\" 2>&1)", + "Bash(powershell:*)", + "Bash(powershell.exe:*)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -f updates/0.30/ver_0.304.zip updates/0.30/ver_0.304_manifest.json updates/0.30/ver_0.304_sql.txt updates/0.30/ver_0.304_files.txt && powershell -ExecutionPolicy Bypass -File build-update.ps1 -FromTag v0.303 -ToTag v0.304 -ChangelogEntry \"NEW - konfigurowalne limity kwotowe metod platnosci \\(min/max kwota zamowienia\\)\" 2>&1)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -f updates/0.30/ver_0.305.zip updates/0.30/ver_0.305_manifest.json updates/0.30/ver_0.305_sql.txt updates/0.30/ver_0.305_files.txt && powershell -ExecutionPolicy Bypass -File build-update.ps1 -FromTag v0.304 -ToTag v0.305 -ChangelogEntry \"FIX - naprawa kolejnosci atrybutow permutacji, NEW - pasek postepu darmowej dostawy w koszyku\" 2>&1)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -rf temp/temp_305 && powershell -ExecutionPolicy Bypass -File build-update.ps1 -FromTag v0.304 -ToTag v0.305 -ChangelogEntry \"FIX - naprawa kolejnosci atrybutow permutacji, NEW - pasek postepu darmowej dostawy w koszyku\" 2>&1)", + "Bash(cd \"/c/visual studio code/projekty/shopPRO\" && rm -rf temp/temp_305 && sleep 2 && powershell -ExecutionPolicy Bypass -Command \"& { \\\\$env:DOTNET_GCServer = 1; & './build-update.ps1' -FromTag v0.304 -ToTag v0.305 -ChangelogEntry 'FIX - naprawa kolejnosci atrybutow permutacji, NEW - pasek postepu darmowej dostawy w koszyku' }\" 2>&1)", + "Bash(python3:*)", + "Bash(python:*)", + "Bash(grep:*)", + "Bash(grep ^ver:*)" + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e52c598 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode/ftp-kr.sync.cache.json diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..eb7b945 --- /dev/null +++ b/.htaccess @@ -0,0 +1,122 @@ +RewriteEngine On +RewriteBase / +Options +FollowSymlinks +Options -Indexes + +RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$ +RewriteCond %{HTTPS} off +RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$ +RewriteCond %{HTTP_HOST} !^www\. [NC] +RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$ +RewriteCond %{REQUEST_URI} !^/admin(/|$) [NC] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_URI} !/$ +RewriteRule ^(.+)$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1/ [L,R=301] + + +ErrorDocument 404 /404.html + +RewriteCond %{REQUEST_URI} !^(.*)/libraries/(.*) [NC] +RewriteCond %{REQUEST_URI} !^(.*)/css/(.*) [NC] +RewriteRule ^admin/([^/]*)/([^/]*)/(.*)$ admin/index.php?module=$1&action=$2&$3 [L] + + +RewriteRule ^admin/$ admin/index.php [L] +RewriteRule ^wyszukiwarka(|/)$ index.php?search=true&lang=pl [L] +RewriteRule ^wersja-tymczasowa(|/)$ index.php?devel=true&lang=pl [L] +RewriteRule ^pixieset/(.*)$ index.php?module=articles&action=image&hash=$1 [L] +RewriteRule ^pixieset-wszystkie/(.*)$ index.php?module=articles&action=images_download&hash=$1 [L] +RewriteRule ^audyt-seo/wynik(|/)$ index.php?module=auditSEO&action=main_view&%{QUERY_STRING} [L] + +RewriteCond %{REQUEST_URI} ^/auditSEO/(.*) [NC] +RewriteRule ^([^/]*)/([^/]*)/(.*)$ index.php?module=$1&action=$2&$3 [L] + +RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php +RewriteRule ^ /%1 [R=301,L] + +AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript + + +ExpiresActive on +ExpiresDefault "access plus 1 year" +ExpiresByType text/css "access plus 1 year" +ExpiresByType application/json "access plus 0 seconds" +ExpiresByType application/xml "access plus 0 seconds" +ExpiresByType text/xml "access plus 0 seconds" +ExpiresByType image/x-icon "access plus 1 week" +ExpiresByType text/x-component "access plus 1 year" +ExpiresByType text/html "access plus 0 seconds" +ExpiresByType application/javascript "access plus 1 year" +ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" +ExpiresByType text/cache-manifest "access plus 0 seconds" +ExpiresByType audio/ogg "access plus 1 year" +ExpiresByType image/gif "access plus 1 year" +ExpiresByType image/jpeg "access plus 1 year" +ExpiresByType image/webp "access plus 1 year" +ExpiresByType image/png "access plus 1 year" +ExpiresByType video/mp4 "access plus 1 year" +ExpiresByType video/ogg "access plus 1 year" +ExpiresByType video/webm "access plus 1 year" +ExpiresByType application/atom+xml "access plus 1 hour" +ExpiresByType application/rss+xml "access plus 1 hour" +ExpiresByType application/font-woff "access plus 1 year" +ExpiresByType application/vnd.ms-fontobject "access plus 1 year" +ExpiresByType application/x-font-ttf "access plus 1 year" +ExpiresByType font/opentype "access plus 1 year" +ExpiresByType image/svg+xml "access plus 1 year" + + + Order Deny,Allow + Deny from all + + + Order Deny,Allow + Deny from all + + + Order Deny,Allow + Deny from all + +RewriteRule ^pl/$ index.php?a=change_language&id=pl [L] +RewriteRule ^en/$ index.php?a=change_language&id=en [L] + +RewriteRule ^$ index.php?a=page&id=40&lang=pl&%{QUERY_STRING} [L] + +RewriteCond %{REQUEST_URI} ^/home(|/)$ +RewriteRule ^(.*)$ https://www.cmspro.project-dc.pl/ [R=301,L] +RewriteCond %{REQUEST_URI} ^/home/s/1$ +RewriteRule ^(.*)$ https://www.cmspro.project-dc.pl/ [R=301,L] +RewriteCond %{REQUEST_URI} "^/$" +RewriteRule ^$ index.php?a=page&id=40&lang=pl [L] + +RewriteRule ^home(|/)$ index.php?a=page&id=40&lang=pl&%{QUERY_STRING} [L] +RewriteRule ^home/s/1(|/)$ home [R=301,L] +RewriteRule ^home/s/([0-9]+)(|/)$ index.php?a=page&id=40&lang=pl&bs=$1&%{QUERY_STRING} [L] + +RewriteRule ^zdrowie(|/)$ index.php?a=page&id=41&lang=pl&%{QUERY_STRING} [L] +RewriteRule ^zdrowie/s/1(|/)$ zdrowie [R=301,L] +RewriteRule ^zdrowie/s/([0-9]+)(|/)$ index.php?a=page&id=41&lang=pl&bs=$1&%{QUERY_STRING} [L] + +RewriteRule ^inne(|/)$ index.php?a=page&id=50&lang=pl&%{QUERY_STRING} [L] +RewriteRule ^inne/s/1(|/)$ inne [R=301,L] +RewriteRule ^inne/s/([0-9]+)(|/)$ index.php?a=page&id=50&lang=pl&bs=$1&%{QUERY_STRING} [L] + +RewriteRule ^udar-mozgu-kluczowe-znaczenie-wczesnej-diagnostyki-i-interwencji-medycznej-1(|/)$ index.php?article=22&lang=pl&%{QUERY_STRING} [L] + +RewriteRule ^en/home(|/)$ index.php?a=page&id=40&lang=en&%{QUERY_STRING} [L] +RewriteRule ^en/home/s/1(|/)$ en/home [R=301,L] +RewriteRule ^en/home/s/([0-9]+)(|/)$ index.php?a=page&id=40&lang=en&bs=$1&%{QUERY_STRING} [L] + + +RewriteCond %{QUERY_STRING} !="" +RewriteRule tag/tag1(|/) %{REQUEST_URI}? [R=301,L] +RewriteRule ^tag/tag1(|/)$ index.php?tag=1 [L] +RewriteCond %{QUERY_STRING} !="" +RewriteRule tag/tag2(|/) %{REQUEST_URI}? [R=301,L] +RewriteRule ^tag/tag2(|/)$ index.php?tag=2 [L] +RewriteRule ^oferty-pracy(|/)$ index.php?module=globelusAdverts&action=adverts_list&cp=1&%{QUERY_STRING} [L] +RewriteRule ^newsletter/signin$ index.php?module=newsletter&action=signin [L] +RewriteRule ^newsletter/confirm/hash=(.*)$ index.php?module=newsletter&action=confirm&hash=$1 [L] +RewriteRule ^newsletter/unsubscribe/hash=(.*)$ index.php?module=newsletter&action=unsubscribe&hash=$1 [L] diff --git a/.serena/.gitignore b/.serena/.gitignore new file mode 100644 index 0000000..14d86ad --- /dev/null +++ b/.serena/.gitignore @@ -0,0 +1 @@ +/cache diff --git a/.serena/project.yml b/.serena/project.yml new file mode 100644 index 0000000..83717c5 --- /dev/null +++ b/.serena/project.yml @@ -0,0 +1,117 @@ +# the name by which the project can be referenced within Serena +project_name: "cmsPRO" + + +# list of languages for which language servers are started; choose from: +# al bash clojure cpp csharp +# csharp_omnisharp dart elixir elm erlang +# fortran fsharp go groovy haskell +# java julia kotlin lua markdown +# matlab nix pascal perl php +# php_phpactor powershell python python_jedi r +# rego ruby ruby_solargraph rust scala +# swift terraform toml typescript typescript_vts +# vue yaml zig +# (This list may be outdated. For the current list, see values of Language enum here: +# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py +# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) +# Note: +# - For C, use cpp +# - For JavaScript, use typescript +# - For Free Pascal/Lazarus, use pascal +# Special requirements: +# Some languages require additional setup/installations. +# See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers +# When using multiple languages, the first language server that supports a given file will be used for that file. +# The first language is the default language and the respective language server will be used as a fallback. +# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored. +languages: +- typescript + +# the encoding used by text files in the project +# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings +encoding: "utf-8" + +# whether to use project's .gitignore files to ignore files +ignore_all_files_in_gitignore: true + +# list of additional paths to ignore in this project. +# Same syntax as gitignore, so you can use * and **. +# Note: global ignored_paths from serena_config.yml are also applied additively. +ignored_paths: [] + +# whether the project is in read-only mode +# If set to true, all editing tools will be disabled and attempts to use them will result in an error +# Added on 2025-04-18 +read_only: false + +# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details. +# Below is the complete list of tools for convenience. +# To make sure you have the latest list of tools, and to view their descriptions, +# execute `uv run scripts/print_tool_overview.py`. +# +# * `activate_project`: Activates a project by name. +# * `check_onboarding_performed`: Checks whether project onboarding was already performed. +# * `create_text_file`: Creates/overwrites a file in the project directory. +# * `delete_lines`: Deletes a range of lines within a file. +# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. +# * `execute_shell_command`: Executes a shell command. +# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced. +# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). +# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). +# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes. +# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file. +# * `initial_instructions`: Gets the initial instructions for the current project. +# Should only be used in settings where the system prompt cannot be set, +# e.g. in clients you have no control over, like Claude Desktop. +# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. +# * `insert_at_line`: Inserts content at a given line in a file. +# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol. +# * `list_dir`: Lists files and directories in the given directory (optionally with recursion). +# * `list_memories`: Lists memories in Serena's project-specific memory store. +# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building). +# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context). +# * `read_file`: Reads a file within the project directory. +# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. +# * `remove_project`: Removes a project from the Serena configuration. +# * `replace_lines`: Replaces a range of lines within a file with new content. +# * `replace_symbol_body`: Replaces the full definition of a symbol. +# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. +# * `search_for_pattern`: Performs a search for a pattern in the project. +# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. +# * `switch_modes`: Activates modes by providing a list of their names +# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information. +# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task. +# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed. +# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store. +excluded_tools: [] + +# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default) +included_optional_tools: [] + +# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools. +# This cannot be combined with non-empty excluded_tools or included_optional_tools. +fixed_tools: [] + +# list of mode names to that are always to be included in the set of active modes +# The full set of modes to be activated is base_modes + default_modes. +# If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply. +# Otherwise, this setting overrides the global configuration. +# Set this to [] to disable base modes for this project. +# Set this to a list of mode names to always include the respective modes for this project. +base_modes: + +# list of mode names that are to be activated by default. +# The full set of modes to be activated is base_modes + default_modes. +# If the setting is undefined, the default_modes from the global configuration (serena_config.yml) apply. +# Otherwise, this overrides the setting from the global configuration (serena_config.yml). +# This setting can, in turn, be overridden by CLI parameters (--mode). +default_modes: + +# initial prompt for the project. It will always be given to the LLM upon activating the project +# (contrary to the memories, which are loaded on demand). +initial_prompt: "" + +# override of the corresponding setting in serena_config.yml, see the documentation there. +# If null or missing, the value from the global config is used. +symbol_info_budget: diff --git a/.updateignore b/.updateignore new file mode 100644 index 0000000..0fcd466 --- /dev/null +++ b/.updateignore @@ -0,0 +1,56 @@ +# Dokumentacja (tylko wewnetrzna/deweloperska) +*.md +docs/ +CLAUDE.md +AGENTS.md + +# Narzedzia deweloperskie +.claude/ +.gitignore +.git/ +tests/ +phpunit.xml +phpunit.phar +composer.json +composer.lock +vendor/ +test.ps1 +memory/ + +# Infrastruktura aktualizacji (meta, nie runtime) +updates/ +.updateignore +build-update.ps1 +migrations/ + +# Pliki konfiguracyjne klienta (wdrazane osobno) +config.php +.htaccess +admin/.htaccess +libraries/version.ini + +# Narzedzia serwisowe +test.php +_backup.php +_restore.php +restore.php +log.txt + +# Pliki uzytkownika (nie nadpisywac) +upload/ +images/ +templates_user/ +plugins/ + +# Temp / cache / backups +temp/ +backups/ +cache/ +cron/ + +# IDE +.vscode/ +.serena/ + +# Cache testow +.phpunit.result.cache diff --git a/.vscode/ftp-kr.json b/.vscode/ftp-kr.json new file mode 100644 index 0000000..9148c31 --- /dev/null +++ b/.vscode/ftp-kr.json @@ -0,0 +1,17 @@ +{ + "host": "host117523.hostido.net.pl", + "username": "www@cmspro.project-dc.pl", + "password": "aNDCvhA6cnHSQfM24vUE", + "remotePath": "/public_html", + "protocol": "ftp", + "port": 21, + "fileNameEncoding": "utf8", + "autoUpload": true, + "autoDelete": false, + "autoDownload": false, + "ignoreRemoteModification": true, + "ignore": [ + ".git", + "/.vscode" + ] +} \ No newline at end of file diff --git a/.vscode/sftp.json b/.vscode/sftp.json new file mode 100644 index 0000000..3817f97 --- /dev/null +++ b/.vscode/sftp.json @@ -0,0 +1,12 @@ +{ + "name": "host117523.hostido.net.pl", + "host": "host117523.hostido.net.pl", + "protocol": "ftp", + "port": 21, + "username": "www@cmspro.project-dc.pl", + "password": "aNDCvhA6cnHSQfM24vUE", + "remotePath": "/public_html", + "uploadOnSave": false, + "useTempFile": false, + "openSsh": false +} diff --git a/404.html b/404.html new file mode 100644 index 0000000..7e78b8d --- /dev/null +++ b/404.html @@ -0,0 +1,50 @@ + + + + + Błąd 404 + + + +
+ +
+ + diff --git a/PLAN_REFAKTORINGU.md b/PLAN_REFAKTORINGU.md new file mode 100644 index 0000000..cfade52 --- /dev/null +++ b/PLAN_REFAKTORINGU.md @@ -0,0 +1,970 @@ +# PLAN REFAKTORINGU cmsPRO + +## Cel + +Przenieść architekturę z shopPRO do cmsPRO: +- **Domain-Driven Design** z warstwą `\Domain\` (repozytoria z DI) +- **Kontrolery z Dependency Injection** (zamiast statycznych `controls` + `factory`) +- **Nowy system aktualizacji** z manifestami JSON, checksumami SHA256, backupami +- **Shared utilities** w namespace `\Shared\` +- **Testy PHPUnit** +- **Automatyczny build paczek** (`build-update.ps1`) + +--- + +## STAN OBECNY cmsPRO vs DOCELOWY + +### Obecna architektura (legacy) + +``` +autoload/ +├── admin/ +│ ├── class.Site.php ← Router (statyczne metody, global $mdb) +│ ├── controls/ ← 16 kontrolerów (statyczne, global $mdb) +│ ├── factory/ ← 15 klas logiki biznesowej (statyczne, global $mdb) +│ └── view/ ← 17 klas widoków (statyczne) +├── front/ +│ ├── controls/ ← 4 kontrolery +│ ├── factory/ ← 13 klas logiki +│ └── view/ ← 8 klas widoków +├── class.S.php ← Mega-utility (sesja, cache, email, SEO, token, DOM...) +├── class.Tpl.php ← Template engine +├── class.Cache.php ← Cache plikowy (gzdeflate + MD5) +├── class.Html.php ← Komponenty formularzy HTML +├── class.Image.php ← ImageManipulator +├── class.Article.php ← Model artykułu z ArrayAccess +├── class.Scontainer.php ← Kontenery statyczne z ArrayAccess +├── class.Page.php ← Model strony +├── class.Mobile_Detect.php ← Detekcja mobilnych +└── class.geoplugin.php ← GeoIP +``` + +### Architektura docelowa (wzór: shopPRO) + +``` +autoload/ +├── Domain/ ← NOWE: warstwa domenowa +│ ├── Article/ +│ │ └── ArticleRepository.php +│ ├── Banner/ +│ │ └── BannerRepository.php +│ ├── Languages/ +│ │ └── LanguagesRepository.php +│ ├── Layouts/ +│ │ └── LayoutsRepository.php +│ ├── Newsletter/ +│ │ ├── NewsletterRepository.php +│ │ └── NewsletterPreviewRenderer.php +│ ├── Pages/ +│ │ └── PagesRepository.php +│ ├── Scontainers/ +│ │ └── ScontainersRepository.php +│ ├── Settings/ +│ │ └── SettingsRepository.php +│ ├── Update/ +│ │ └── UpdateRepository.php +│ ├── User/ +│ │ └── UserRepository.php +│ ├── Author/ +│ │ └── AuthorRepository.php +│ ├── SeoAdditional/ +│ │ └── SeoAdditionalRepository.php +│ ├── Cache/ +│ │ └── CacheRepository.php +│ ├── Email/ +│ │ └── EmailRepository.php +│ └── Backup/ +│ └── BackupRepository.php +├── Shared/ ← NOWE: wspólne utility +│ ├── Helpers/ +│ │ └── Helpers.php ← Refaktor z class.S.php +│ ├── Tpl/ +│ │ └── Tpl.php ← Refaktor z class.Tpl.php +│ ├── Cache/ +│ │ └── CacheHandler.php ← Refaktor z class.Cache.php +│ ├── Html/ +│ │ └── Html.php ← Refaktor z class.Html.php +│ ├── Image/ +│ │ └── ImageManipulator.php ← Refaktor z class.Image.php +│ └── Email/ +│ └── Email.php ← PHPMailer wrapper +├── admin/ +│ ├── App.php ← NOWY: Router + DI container (zamienia Site.php) +│ ├── Controllers/ ← NOWE: kontrolery z DI +│ │ ├── ArticlesController.php +│ │ ├── ArticlesArchiveController.php +│ │ ├── AuthorsController.php +│ │ ├── BackupsController.php +│ │ ├── BannerController.php +│ │ ├── EmailsController.php +│ │ ├── FilemanagerController.php +│ │ ├── LanguagesController.php +│ │ ├── LayoutsController.php +│ │ ├── NewsletterController.php +│ │ ├── PagesController.php +│ │ ├── ScontainersController.php +│ │ ├── SeoAdditionalController.php +│ │ ├── SettingsController.php +│ │ ├── UpdateController.php +│ │ └── UsersController.php +│ ├── controls/ ← USUNĄĆ (po migracji) +│ ├── factory/ ← USUNĄĆ (po migracji) +│ └── view/ ← USUNĄĆ (po migracji — logic do Controllers) +├── front/ +│ ├── App.php ← NOWY: Router + DI container +│ ├── LayoutEngine.php ← NOWY: refaktor z front\view\Site::show() +│ ├── Controllers/ ← NOWE: kontrolery z DI +│ │ ├── NewsletterController.php +│ │ └── SearchController.php (+ ewentualne inne) +│ ├── Views/ ← NOWE: statyczne klasy renderujące (z front\view\) +│ │ ├── Articles.php +│ │ ├── Banners.php +│ │ ├── Languages.php +│ │ ├── Menu.php +│ │ ├── Newsletter.php +│ │ ├── Scontainers.php +│ │ └── Search.php +│ ├── controls/ ← USUNĄĆ (po migracji) +│ ├── factory/ ← USUNĄĆ (po migracji) +│ └── view/ ← USUNĄĆ (po migracji — do Views/ + LayoutEngine) +└── (stare class.*.php) ← USUNĄĆ (po migracji do Shared/) +``` + +--- + +## FAZY REFAKTORINGU + +Każda faza kończy się działającym systemem. Stary i nowy kod koegzystują aż do pełnej migracji. + +--- + +## FAZA 0: Przygotowanie infrastruktury + +### 0.1 Aktualizacja autoloadera + +**Obecny autoloader** (index.php, admin/index.php) szuka tylko `class.{Name}.php`: +```php +$f = 'autoload/' . implode('/', $q) . '/class.' . $c . '.php'; +``` + +**Docelowy** — musi obsługiwać OBE konwencje (fallback PSR-4): +```php +function __autoload_my_classes($classname) { + $q = explode('\\', $classname); + $c = array_pop($q); + + // 1. Legacy: class.ClassName.php + $f = 'autoload/' . implode('/', $q) . '/class.' . $c . '.php'; + if (file_exists($f)) { require_once($f); return; } + + // 2. PSR-4: ClassName.php + $f = 'autoload/' . implode('/', $q) . '/' . $c . '.php'; + if (file_exists($f)) require_once($f); +} +``` + +**Pliki do zmiany:** +- `index.php` (linia ~3-11) +- `admin/index.php` (linia ~15-22, ścieżka `../autoload/`) +- `ajax.php` (jeśli ma autoloader) +- `admin/ajax.php` +- `api.php` +- `cron.php` + +### 0.2 Utworzenie katalogów + +``` +mkdir autoload/Domain +mkdir autoload/Shared +mkdir autoload/Shared/Helpers +mkdir autoload/Shared/Tpl +mkdir autoload/Shared/Cache +mkdir autoload/Shared/Html +mkdir autoload/Shared/Image +mkdir autoload/Shared/Email +mkdir autoload/admin/Controllers +mkdir autoload/front/Controllers +mkdir autoload/front/Views +mkdir tests +mkdir tests/Unit +mkdir tests/Unit/Domain +mkdir tests/stubs +mkdir migrations +mkdir docs +mkdir backups +``` + +### 0.3 Konfiguracja PHPUnit + +Skopiować z shopPRO: +- `phpunit.xml` +- `phpunit.phar` +- `test.ps1` +- `tests/bootstrap.php` +- `composer.json` (sekcja `require-dev`) + +### 0.4 Git tagging — ustalenie punktu startowego + +```bash +git tag v1.689 # bieżąca wersja cmsPRO +git push origin v1.689 +``` + +Od następnej wersji (1.690) zaczyna się nowy system aktualizacji. + +### 0.5 Utworzenie CLAUDE.md i AGENTS.md + +Skopiować strukturę z shopPRO, dostosować do cmsPRO (brak modułu sklepowego, inne moduły). + +--- + +## FAZA 1: Shared Utilities (przeniesienie klas globalnych) + +Kolejność: Helpers → Tpl → Cache → Html → Image → Email. +Po każdym kroku starą klasę zostawiamy jako wrapper (deleguje do nowej), żeby nic się nie zepsuło. + +### 1.1 `\Shared\Helpers\Helpers` (z `class.S.php`) + +**Plik:** `autoload/Shared/Helpers/Helpers.php` + +Skopiować WSZYSTKIE metody z `\S` do `\Shared\Helpers\Helpers`: +- `get()`, `get_session()`, `set_session()`, `delete_session()` +- `alert()`, `set_message()`, `lang()` +- `send_email()`, `email_check()` +- `seo()`, `noPL()` +- `cache_write()`, `cache_read()`, `cache_file_url()` +- `htacces()` +- `delete_cache()`, `delete_dir()`, `is_empty_dir()` +- `date_diff()`, `months()`, `months_short()` +- `get_token()`, `is_token_valid()` +- DOM manipulation: `suSetHtmlById()`, `suAddHtmlById()`, itd. +- `get_version()`, `get_new_version()` +- `Pre()`, `json_to_array()`, `is_bot()`, `is_mobile()` +- `generate_webp_image()` + +**Stary `class.S.php`** — zamienić na wrapper: +```php +class S { + public static function __callStatic($name, $args) { + return call_user_func_array(['\Shared\Helpers\Helpers', $name], $args); + } + // LUB: jawne delegacje dla każdej metody +} +``` + +**UWAGA:** `\S::` jest używane WSZĘDZIE w cmsPRO (controls, factory, view, templates, index.php). Delegacja przez wrapper pozwala na stopniową migrację referencji. + +### 1.2 `\Shared\Tpl\Tpl` (z `class.Tpl.php`) + +**Plik:** `autoload/Shared/Tpl/Tpl.php` +**Namespace:** `\Shared\Tpl\` + +Stary `class.Tpl.php` → wrapper delegujący do `\Shared\Tpl\Tpl`. + +### 1.3 `\Shared\Cache\CacheHandler` (z `class.Cache.php`) + +**Plik:** `autoload/Shared/Cache/CacheHandler.php` +**Namespace:** `\Shared\Cache\` + +cmsPRO używa cache plikowego (gzdeflate + MD5), NIE Redis. +Zachować tę samą implementację, tylko przenieść do nowego namespace. + +Stary `class.Cache.php` → wrapper. + +### 1.4 `\Shared\Html\Html` (z `class.Html.php`) + +**Plik:** `autoload/Shared/Html/Html.php` + +Stary `class.Html.php` → wrapper. + +### 1.5 `\Shared\Image\ImageManipulator` (z `class.Image.php`) + +**Plik:** `autoload/Shared/Image/ImageManipulator.php` + +Stary `class.Image.php` (klasa `ImageManipulator`) → wrapper lub alias. + +### 1.6 `\Shared\Email\Email` + +**Plik:** `autoload/Shared/Email/Email.php` + +Nowa klasa opakowująca PHPMailer (wzór: shopPRO `Shared\Email\Email`). + +### 1.7 Usunięcie starych klas globalnych + +**PO PEŁNEJ MIGRACJI** wszystkich referencji (to będzie trwać przez kolejne fazy): +- `class.Article.php` → logika do `Domain\Article\ArticleRepository` +- `class.Scontainer.php` → logika do `Domain\Scontainers\ScontainersRepository` +- `class.Page.php` → logika do `Domain\Pages\PagesRepository` + +`class.Mobile_Detect.php` i `class.geoplugin.php` zostawić (biblioteki zewnętrzne). + +--- + +## FAZA 2: Warstwa Domain (repozytoria) + +Dla KAŻDEGO modułu: wyciągnąć logikę z `admin\factory\*` i `front\factory\*` do wspólnego repozytorium w `Domain\`. + +### Wzorzec repozytorium (kopiowany z shopPRO) + +```php +db = $db; + } + + public function find(int $id): ?array + { + return $this->db->get('pp_articles', '*', ['id' => $id]); + } + + // ... reszta metod +} +``` + +### Lista modułów do migracji (16 modułów) + +| # | Moduł | Źródło (factory) | Cel (Domain) | Priorytet | +|---|-------|-------------------|--------------|-----------| +| 1 | **Settings** | `admin\factory\Settings` + `front\factory\Settings` | `Domain\Settings\SettingsRepository` | WYSOKI — używany wszędzie | +| 2 | **Languages** | `admin\factory\Languages` + `front\factory\Languages` | `Domain\Languages\LanguagesRepository` | WYSOKI — używany w bootstrap | +| 3 | **Users** | `admin\factory\Users` | `Domain\User\UserRepository` | WYSOKI — login, 2FA, uprawnienia | +| 4 | **Pages** | `admin\factory\Pages` + `front\factory\Pages` | `Domain\Pages\PagesRepository` | WYSOKI — routing frontu | +| 5 | **Articles** | `admin\factory\Articles` + `front\factory\Articles` + `class.Article.php` | `Domain\Article\ArticleRepository` | WYSOKI — główna funkcjonalność | +| 6 | **Layouts** | `admin\factory\Layouts` + `front\factory\Layouts` | `Domain\Layouts\LayoutsRepository` | WYSOKI — layout engine | +| 7 | **Scontainers** | `admin\factory\Scontainers` + `front\factory\Scontainers` + `class.Scontainer.php` | `Domain\Scontainers\ScontainersRepository` | ŚREDNI | +| 8 | **Banners** | `admin\factory\Banners` + `front\factory\Banners` | `Domain\Banner\BannerRepository` | ŚREDNI | +| 9 | **Newsletter** | `admin\factory\Newsletter` + `front\factory\Newsletter` | `Domain\Newsletter\NewsletterRepository` | ŚREDNI | +| 10 | **Authors** | `admin\factory\Authors` + `front\factory\Authors` | `Domain\Author\AuthorRepository` | NISKI | +| 11 | **Emails** | `admin\factory\Emails` | `Domain\Email\EmailRepository` | NISKI | +| 12 | **Backups** | `admin\factory\Backups` | `Domain\Backup\BackupRepository` | NISKI | +| 13 | **SeoAdditional** | `admin\factory\SeoAdditional` + `front\factory\SeoAdditional` | `Domain\SeoAdditional\SeoAdditionalRepository` | NISKI | +| 14 | **ArticlesArchive** | `admin\factory\ArticlesArchive` | (część ArticleRepository) | NISKI | +| 15 | **Menu** | `front\factory\Menu` | `Domain\Menu\MenuRepository` | ŚREDNI | +| 16 | **Update** | `admin\factory\Update` | `Domain\Update\UpdateRepository` | WYSOKI — nowy system | + +### Proces migracji jednego modułu (przykład: Settings) + +1. **Utworzyć** `autoload/Domain/Settings/SettingsRepository.php` +2. **Przenieść metody** z `admin\factory\Settings` i `front\factory\Settings`: + - `settings_details()` → `allSettings()` + - Zamienić `global $mdb` → `$this->db` +3. **Napisać testy** w `tests/Unit/Domain/Settings/SettingsRepositoryTest.php` +4. **Zaktualizować** wywołujących (controls, view, index.php): + - `\front\factory\Settings::settings_details()` → `$settingsRepo->allSettings()` +5. **Stary factory** — zostawić tymczasowo jako wrapper: + ```php + namespace front\factory; + class Settings { + public static function settings_details() { + global $mdb; + return (new \Domain\Settings\SettingsRepository($mdb))->allSettings(); + } + } + ``` +6. **Po migracji wszystkich wywołujących** — usunąć stary factory. + +### Specjalne przypadki + +**`class.Article.php`** — to model z ArrayAccess, nie zwykły factory: +- Konstruktor ładuje artykuł z bazy + images + files + pages + tags + params +- Szablony frontu używają `$article->field` (obiekt) +- **Strategia:** Przenieść logikę do `ArticleRepository`, zwracać tablice. Szablony frontu zostawić na później (użyć wrappera ArrayAccess tymczasowo). + +**`class.Scontainer.php`** — analogicznie, implementuje ArrayAccess. + +--- + +## FAZA 3: Admin Controllers z DI + +### 3.1 Nowy router: `admin\App` + +**Plik:** `autoload/admin/App.php` + +Wzorowany 1:1 na shopPRO `admin\App`. Kluczowe elementy: + +```php +twofa(); + } + + if (!$user || !$user['admin']) { + $controller = self::createController('Users'); + return $controller->login_form(); + } + + $tpl = new \Shared\Tpl\Tpl; + $tpl->content = self::route(); + return $tpl->render('site/main-layout'); + } + + public static function route() + { + $_SESSION['admin'] = true; + + $moduleName = ''; + $parts = explode('_', (string)\Shared\Helpers\Helpers::get('module')); + foreach ($parts as $part) + $moduleName .= ucfirst($part); + + $action = \Shared\Helpers\Helpers::get('action'); + + // Najpierw nowe kontrolery z DI + $controller = self::createController($moduleName); + if ($controller && method_exists($controller, $action)) + return $controller->$action(); + + // Fallback do starych controls (okres przejściowy) + $class = '\admin\controls\\' . $moduleName; + if (class_exists($class) && method_exists(new $class, $action)) + return call_user_func_array([$class, $action], []); + + \Shared\Helpers\Helpers::alert('Nieprawidłowy adres url.'); + return false; + } + + private static function createController(string $moduleName) + { + $factories = self::getControllerFactories(); + if (!isset($factories[$moduleName])) return null; + $factory = $factories[$moduleName]; + return is_callable($factory) ? $factory() : null; + } + + private static function getControllerFactories(): array + { + if (!empty(self::$newControllers)) + return self::$newControllers; + + self::$newControllers = [ + // Dodawane stopniowo w miarę migracji modułów + ]; + + return self::$newControllers; + } + + public static function update() + { + global $mdb; + $repository = new \Domain\Update\UpdateRepository($mdb); + $repository->runPendingMigrations(); + } +} +``` + +**Przełączenie:** +- W `admin/index.php`: zamienić `\admin\Site::special_actions()` → `\admin\App::special_actions()` +- Zamienić `\admin\view\Page::show()` → `\admin\App::render()` +- Dodać `\admin\App::update()` (migracje SQL) + +Fallback do starych `\admin\controls\*` zapewnia, że system działa ZANIM wszystkie kontrolery zostaną zmigrowane. + +### 3.2 Nowe kontrolery admin (po jednym na moduł) + +**Wzorzec kontrolera** (kopiowany z shopPRO): + +```php +articleRepo = $articleRepo; + $this->langRepo = $langRepo; + } + + public function list() + { + // logika z admin\controls\Articles::view_list() + // + renderowanie szablonu + } + + public function edit() + { + // logika z admin\controls\Articles::article_edit() + } + + public function save() + { + // logika z admin\controls\Articles::article_save() + } +} +``` + +### 3.3 Kolejność migracji kontrolerów admin + +| # | Kontroler | Factory → Repository | Wiring w App | +|---|-----------|---------------------|--------------| +| 1 | `UsersController` | `Users` → `UserRepository` | `'Users' => fn() => new UsersController(new UserRepository($mdb))` | +| 2 | `SettingsController` | `Settings` → `SettingsRepository` | `'Settings' => fn() => ...` | +| 3 | `UpdateController` | `Update` → `UpdateRepository` | `'Update' => fn() => ...` | +| 4 | `LanguagesController` | `Languages` → `LanguagesRepository` | | +| 5 | `PagesController` | `Pages` → `PagesRepository` | | +| 6 | `ArticlesController` | `Articles` → `ArticleRepository` | | +| 7 | `ArticlesArchiveController` | `ArticlesArchive` | | +| 8 | `LayoutsController` | `Layouts` → `LayoutsRepository` | | +| 9 | `ScontainersController` | `Scontainers` → `ScontainersRepository` | | +| 10 | `BannerController` | `Banners` → `BannerRepository` | | +| 11 | `NewsletterController` | `Newsletter` → `NewsletterRepository` | | +| 12 | `AuthorsController` | `Authors` → `AuthorRepository` | | +| 13 | `EmailsController` | `Emails` → `EmailRepository` | | +| 14 | `BackupsController` | `Backups` → `BackupRepository` | | +| 15 | `SeoAdditionalController` | `SeoAdditional` → `SeoAdditionalRepository` | | +| 16 | `FilemanagerController` | (brak factory — sam w sobie) | | + +### 3.4 Mapowanie akcji (stare → nowe nazwy metod) + +Konwencja shopPRO: camelCase zamiast snake_case. + +| Stara akcja (URL) | Nowa metoda | +|--------------------|-------------| +| `view_list` | `list()` | +| `article_edit` | `edit()` | +| `article_save` | `save()` | +| `article_delete` | `delete()` | +| `main_view` | `main_view()` (bez zmian, bo URL tego wymaga) | + +**UWAGA:** URL w admin to `?module=articles&action=view_list`. Router konwertuje `_` na ucfirst, ale akcja jest przekazywana dosłownie. Trzeba zachować dokładne nazwy metod odpowiadające `action` w URL, LUB dodać mapowanie camelCase. + +Rekomendacja: dodać konwersję w routerze (jak shopPRO front\App robi `lcfirst(implode('', array_map('ucfirst', explode('_', $action))))`) LUB zostawić snake_case w nazwach metod kontrolerów. + +--- + +## FAZA 4: Frontend (App + Controllers + Views + LayoutEngine) + +### 4.1 `front\App` — nowy router + +**Plik:** `autoload/front/App.php` + +Wzorowany na shopPRO. Kluczowe: +- `checkUrlParams()` — obsługa `?a=page`, `?a=change_language` +- `route()` — routing do artykułów + kontrolerów DI + fallback do starych controls +- `getControllerFactories()` — fabryki kontrolerów +- `pageTitle()`, `title()` — tytuły stron + +### 4.2 `front\LayoutEngine` — silnik szablonów + +**Plik:** `autoload/front/LayoutEngine.php` + +Refaktor z `front\view\Site::show()`. Odpowiedzialny za: +- Ładowanie layoutu (aktywny dla strony) +- Zastępowanie tagów: `[MENU:id]`, `[KONTENER:id]`, `[AKTUALNOSCI:...]`, `[ZAWARTOSC]`, `[TITLE]`, `[LANG:key]`, itp. +- Kontakt (formularz) +- Dodatkowe kody (statystyki, cookies) + +### 4.3 Frontend Views (statyczne) + +Przenieść `front\view\*` → `front\Views\*` (nowy namespace): + +| Stara klasa | Nowa klasa | +|-------------|------------| +| `\front\view\Articles` | `\front\Views\Articles` | +| `\front\view\Banners` | `\front\Views\Banners` | +| `\front\view\Languages` | `\front\Views\Languages` | +| `\front\view\Menu` | `\front\Views\Menu` | +| `\front\view\Newsletter` | `\front\Views\Newsletter` | +| `\front\view\Scontainers` | `\front\Views\Scontainers` | +| `\front\view\Search` | `\front\Views\Search` | +| `\front\view\Site` | → `\front\LayoutEngine` + `\front\Views\*` | + +**Klasy Views NIE mają DI** — to czyste renderery statyczne (wzór: shopPRO). + +### 4.4 Frontend Controllers + +| Kontroler | Źródło | DI | +|-----------|--------|-----| +| `NewsletterController` | `front\controls\Newsletter` + `front\factory\Newsletter` | `NewsletterRepository` | +| `SearchController` | `front\controls\*` (jeśli istnieje logika) | brak | +| `ArticlesController` (opcjonalnie) | `front\controls\Articles` | `ArticleRepository` | + +### 4.5 Przełączenie entry pointów + +**`index.php`:** +```php +// Stare: +\front\controls\Site::check_url_params(); +$out = \front\view\Site::show(); + +// Nowe: +\front\App::checkUrlParams(); +$out = \front\LayoutEngine::show(); +``` + +**`admin/index.php`:** +```php +// Stare: +\admin\Site::special_actions(); +echo \admin\view\Page::show(); + +// Nowe: +\admin\App::special_actions(); +\admin\App::update(); +echo \admin\App::render(); +``` + +--- + +## FAZA 5: Nowy system aktualizacji + +### KLUCZOWA ZASADA: Pierwsza paczka musi być legacy! + +**Pierwsza aktualizacja (v1.690) MUSI być opublikowana starą metodą** (ZIP + `_sql.txt` + `_files.txt`, BEZ manifestu). To dlatego, że v1.690 właśnie wgrywa nowy `UpdateRepository` z obsługą manifestów JSON na serwery klientów. Klienci mają jeszcze stary kod aktualizacji (`admin\factory\Update::update()`), który rozumie TYLKO legacy format. + +**Sekwencja:** +1. **v1.690** — budujemy **ręcznie starą metodą** (lub `build-update.ps1` z flagą `--legacy-only`). Ta paczka zawiera nowy `UpdateRepository`, nowy `admin\App`, nowy autoloader — całą infrastrukturę. +2. **v1.691+** — od tego momentu budujemy normalnie z manifestem JSON. Klienci już mają nowy `UpdateRepository` (wgrany przez v1.690), który obsługuje oba formaty. + +Innymi słowy: v1.690 to "paczka-most" — dostarczana starym kanałem, ale wgrywająca nowy silnik aktualizacji. + +### 5.1 `Domain\Update\UpdateRepository` — pełna logika aktualizacji + +**Plik:** `autoload/Domain/Update/UpdateRepository.php` + +Skopiować z shopPRO `Domain\Update\UpdateRepository` i dostosować: +- URL serwera: `https://cmspro.project-dc.pl/updates/` (zamiast shoppro) +- Plik wersji: `libraries/version.ini` (jak jest teraz) + +Kluczowe metody: +```php +public function update(): array +private function downloadAndApply(string $ver, string $dir, array $log): array +private function downloadAndApplyWithManifest(string $ver, string $dir, array $manifest, array $log): array +private function downloadAndApplyLegacy(string $ver, string $dir, array $log): array +private function verifyChecksum(string $filePath, string $expectedChecksum, array $log): array +private function createBackup(array $manifest, array $log): array +private function extractZip(string $fileName, array $log): array +public function runPendingMigrations(): void +``` + +**Kompatybilność wsteczna:** Metoda `downloadAndApply()` próbuje najpierw manifest. Jeśli brak → fallback do legacy (ZIP + _sql.txt + _files.txt). Dzięki temu stare paczki (v1.001-v1.689) nadal działają. + +### 5.2 `admin\Controllers\UpdateController` + +```php +namespace admin\Controllers; + +use Domain\Update\UpdateRepository; + +class UpdateController +{ + private $repository; + + public function __construct(UpdateRepository $repository) + { + $this->repository = $repository; + } + + public function main_view(): string { /* widok panelu aktualizacji */ } + public function update(): void { /* POST: wykonaj update */ } + public function updateAll(): void { /* AJAX: pętla aktualizacji */ } + public function checkUpdate(): void { /* AJAX: sprawdź dostępność */ } +} +``` + +### 5.3 Nowy `updates/versions.php` + +Dostosować do nowego formatu (wzór shopPRO): +```php +db = $this->createMock(\medoo::class); + $this->repo = new \Domain\Article\ArticleRepository($this->db); + } + + public function testFindReturnsArticleArray(): void + { + $this->db->method('get') + ->willReturn(['id' => 1, 'status' => 1]); + + $result = $this->repo->find(1); + $this->assertIsArray($result); + $this->assertEquals(1, $result['id']); + } + + public function testFindReturnsNullWhenNotFound(): void + { + $this->db->method('get')->willReturn(null); + $this->assertNull($this->repo->find(999)); + } +} +``` + +--- + +## FAZA 7: Dokumentacja + +Utworzyć w `docs/`: +- `PROJECT_STRUCTURE.md` — architektura, katalogi, namespace'y, routing +- `DATABASE_STRUCTURE.md` — schemat bazy danych (tabele `pp_*`) +- `TESTING.md` — jak uruchamiać testy +- `CHANGELOG.md` — historia zmian +- `UPDATE_INSTRUCTIONS.md` — jak budować paczki aktualizacji + +--- + +## FAZA 8: Porządki (po pełnej migracji) + +### 8.1 Usunięcie starych katalogów + +``` +rm -rf autoload/admin/controls/ +rm -rf autoload/admin/factory/ +rm -rf autoload/admin/view/ +rm -rf autoload/front/controls/ +rm -rf autoload/front/factory/ +rm -rf autoload/front/view/ +rm autoload/class.S.php +rm autoload/class.Tpl.php +rm autoload/class.Cache.php +rm autoload/class.Html.php +rm autoload/class.Image.php +rm autoload/class.Article.php +rm autoload/class.Page.php +rm autoload/class.Scontainer.php +rm autoload/admin/class.Site.php +``` + +### 8.2 Usunięcie wrappera `\S` + +Przeszukać CAŁY kod i zamienić: +- `\S::get()` → `\Shared\Helpers\Helpers::get()` +- `\S::get_session()` → `\Shared\Helpers\Helpers::get_session()` +- `\S::alert()` → `\Shared\Helpers\Helpers::alert()` +- itd. + +### 8.3 Usunięcie wrappera `\Tpl` + +- `\Tpl::view(...)` → `\Shared\Tpl\Tpl::view(...)` +- `new \Tpl` → `new \Shared\Tpl\Tpl` + +--- + +## PODSUMOWANIE — KOLEJNOŚĆ PRAC + +| Faza | Co robimy | Szacunkowa złożoność | +|------|-----------|---------------------| +| **0** | Autoloader, katalogi, PHPUnit, git tag, CLAUDE.md | Mała | +| **1** | Shared utilities (S→Helpers, Tpl, Cache, Html, Image, Email) | Średnia | +| **2** | Domain repositories (16 modułów: Settings, Languages, Users, Pages, Articles...) | **Duża** | +| **3** | Admin Controllers + App router (16 kontrolerów) | **Duża** | +| **4** | Frontend App + LayoutEngine + Views + Controllers | Średnia | +| **5** | Nowy system aktualizacji (UpdateRepository, build-update.ps1, manifesty) | Średnia | +| **6** | Testy PHPUnit | Średnia | +| **7** | Dokumentacja | Mała | +| **8** | Porządki — usunięcie starych klas | Mała | + +### Zasada naczelna + +**Każda faza musi zostawić działający system.** Stary i nowy kod koegzystują dzięki: +- Fallback w routerze (nowy kontroler → stary controls) +- Wrappery w starych klasach (delegujące do nowych) +- Stopniowe przenoszenie referencji + +### Kolejność prac wewnątrz fazy 2+3 (moduł po module) + +Rekomendowana kolejność modułów (od najprostszych do najtrudniejszych): + +1. **Settings** (1 metoda, zero zależności) +2. **Languages** (kilka metod, używany w bootstrap) +3. **Users** (login, 2FA, uprawnienia — kluczowe dla admin) +4. **Update** (nowy system aktualizacji) +5. **Pages** (routing frontu) +6. **Layouts** (layout engine) +7. **Scontainers** (kontenery statyczne) +8. **Banners** (banery) +9. **Authors** (autorzy) +10. **Menu** (menu — tylko front) +11. **Articles** (NAJTRUDNIEJSZY — class.Article.php z ArrayAccess, images, files, params, tags) +12. **Newsletter** (newsletter + preview renderer) +13. **SeoAdditional** (SEO per URL) +14. **Emails** (log kontaktowy) +15. **Backups** (backup bazy) +16. **ArticlesArchive** (archiwum — część ArticleRepository) + +--- + +## CHECKLIST "KONIEC PRACY" (dla cmsPRO) + +Po zakończeniu każdej sesji pracy: +1. Uruchom testy: `./test.ps1` +2. Zaktualizuj docs jeśli potrzeba +3. SQL migracje → `migrations/{version}.sql` +4. `updates/versions.php` — ustawić `$current_ver` +5. Commit + push +6. Git tag: `git tag v1.XXX` + `git push origin v1.XXX` + +--- + +## RÓŻNICE cmsPRO vs shopPRO + +| Aspekt | cmsPRO | shopPRO | +|--------|--------|---------| +| Cache | Plikowy (gzdeflate + MD5) | Redis (CacheHandler + RedisConnection) | +| Moduły sklepowe | BRAK | Product, Category, Order, Basket, Client, Coupon, Promotion, Transport, PaymentMethod, Producer, Attribute, ProductSet, ShopStatus, Integrations, Dashboard | +| Wersjonowanie | v1.689 (4 cyfry) | v0.308 (3 cyfry) | +| URL aktualizacji | cmspro.project-dc.pl | shoppro.project-dc.pl | +| API REST | Minimalny (api.php) | Rozbudowany (ApiRouter + 3 kontrolery) | +| Pixieset | TAK | NIE | +| AuditSEO | TAK | NIE | +| FormEdit System | NIE | TAK (ViewModels + FormValidator + FormFieldRenderer) | +| Remember-me | Legacy JSON cookie (hash hasła!) | HMAC-SHA256 signed payload | + +**UWAGA na bezpieczeństwo:** W `admin/index.php` cmsPRO cookie remember-me przechowuje hash hasła w JSON — to luka! W ramach migracji Users należy to zmienić na HMAC-SHA256 (jak w shopPRO `admin\App::finalize_admin_login()`). diff --git a/_backup.php b/_backup.php new file mode 100644 index 0000000..4afb257 --- /dev/null +++ b/_backup.php @@ -0,0 +1,219 @@ +/dev/null"); + return !empty($check); +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + header('Content-Type: application/json'); + + $action = $_POST['action'] ?? ''; + + if ($action === 'init') { + $filename = 'backup_' . date("Ymd_His"); + $response = ['success' => false]; + + if (canUseShell()) { + if (commandAvailable('tar')) { + $tarName = "$filename.tar"; + shell_exec("tar -cf $tarName ."); + if (file_exists($tarName)) { + $response = [ + 'success' => true, + 'method' => 'shell_tar', + 'file' => $tarName + ]; + echo json_encode($response); + exit; + } + } elseif (commandAvailable('zip')) { + $zipName = "$filename.zip"; + shell_exec("zip -r $zipName . -x '*backup_*.zip' '*.git*' 'node_modules/*' 'vendor/*'"); + if (file_exists($zipName)) { + $response = [ + 'success' => true, + 'method' => 'shell_zip', + 'file' => $zipName + ]; + echo json_encode($response); + exit; + } + } + } + + // Jeśli nie ma shell_exec lub zip/tar — fallback na ZipArchive krok po kroku + $zipName = "$filename.zip"; + $zipPath = __DIR__ . '/' . $zipName; + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator(__DIR__, RecursiveDirectoryIterator::SKIP_DOTS) + ); + + $files = []; + foreach ($iterator as $file) { + $path = $file->getPathname(); + if (strpos($path, $zipName) !== false) continue; + $files[] = $path; + } + + $zip = new ZipArchive(); + if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { + echo json_encode(['success' => false, 'message' => 'Nie można utworzyć ZIP']); + exit; + } + $zip->addEmptyDir('__INIT__'); + $zip->close(); + + file_put_contents(TMP_FILE, json_encode([ + 'method' => 'php_zip', + 'files' => $files, + 'index' => 0, + 'zipfile' => $zipPath, + 'zipname' => $zipName + ])); + + echo json_encode([ + 'success' => true, + 'method' => 'php_zip' + ]); + exit; + } + + if ($action === 'step') { + if (!file_exists(TMP_FILE)) { + echo json_encode(['success' => false, 'message' => 'Brak danych tymczasowych']); + exit; + } + + $data = json_decode(file_get_contents(TMP_FILE), true); + $files = $data['files']; + $index = $data['index']; + $zipfile = $data['zipfile']; + $zipname = $data['zipname']; + + $zip = new ZipArchive(); + if ($zip->open($zipfile) !== true) { + echo json_encode(['success' => false, 'message' => 'Nie można otworzyć ZIP']); + exit; + } + + $end = min($index + FILES_PER_STEP, count($files)); + for ($i = $index; $i < $end; $i++) { + $filePath = $files[$i]; + if (is_file($filePath)) { + $localname = substr($filePath, strlen(__DIR__) + 1); + $zip->addFile($filePath, $localname); + } + } + + $zip->close(); + + $data['index'] = $end; + file_put_contents(TMP_FILE, json_encode($data)); + + $progress = $end / count($files); + + echo json_encode([ + 'success' => true, + 'method' => 'php_zip', + 'progress' => round($progress * 100, 2), + 'done' => $end >= count($files), + 'zipfile' => $zipname + ]); + exit; + } +} +?> + + + + + + Backup dynamiczny + + + + + +

Automatyczny backup plików

+ + + + +
+ + + + + diff --git a/_restore.php b/_restore.php new file mode 100644 index 0000000..b131e89 --- /dev/null +++ b/_restore.php @@ -0,0 +1,186 @@ + false, 'message' => 'Plik ZIP nie istnieje']); + exit; + } + + $zip = new ZipArchive(); + if ($zip->open($zipPath) !== true) { + echo json_encode(['success' => false, 'message' => 'Nie można otworzyć ZIP']); + exit; + } + + $fileList = []; + for ($i = 0; $i < $zip->numFiles; $i++) { + $fileList[] = $zip->getNameIndex($i); + } + + $zip->close(); + + // Zapisz listę plików do rozpakowania + file_put_contents(TMP_UNZIP_FILE, json_encode([ + 'zipfile' => $zipPath, + 'files' => $fileList, + 'index' => 0 + ])); + + echo json_encode(['success' => true]); + exit; + } + + if ($_POST['action'] === 'step') { + if (!file_exists(TMP_UNZIP_FILE)) { + echo json_encode(['success' => false, 'message' => 'Brak danych tymczasowych']); + exit; + } + + $data = json_decode(file_get_contents(TMP_UNZIP_FILE), true); + $zipfile = $data['zipfile']; + $files = $data['files']; + $index = $data['index']; + + if (!file_exists($zipfile)) { + echo json_encode(['success' => false, 'message' => 'ZIP nie istnieje: ' . $zipfile]); + exit; + } + + $zip = new ZipArchive(); + if ($zip->open($zipfile) !== true) { + echo json_encode(['success' => false, 'message' => 'Nie można otworzyć ZIP']); + exit; + } + + $end = min($index + UNZIP_STEP_FILES, count($files)); + + for ($i = $index; $i < $end; $i++) { + $entryName = $files[$i]; + $targetPath = __DIR__ . '/' . $entryName; + + if (substr($entryName, -1) === '/') { + // Katalog + @mkdir($targetPath, 0755, true); + } else { + $dir = dirname($targetPath); + @mkdir($dir, 0755, true); // utwórz katalog, jeśli nie istnieje + copy("zip://$zipfile#$entryName", $targetPath); + } + } + + $zip->close(); + + $data['index'] = $end; + file_put_contents(TMP_UNZIP_FILE, json_encode($data)); + + $progress = $end / count($files); + + echo json_encode([ + 'success' => true, + 'progress' => round($progress * 100, 2), + 'done' => $end >= count($files) + ]); + exit; + } + + echo json_encode(['success' => false, 'message' => 'Nieznana akcja']); + exit; +} +?> + + + + + + Rozpakowywanie ZIP z postępem + + + + + +

Rozpakuj plik ZIP

+ +
+ + + +
+ +
+
0.00%
+
+ +
+ + + + + diff --git a/admin/ajax.php b/admin/ajax.php new file mode 100644 index 0000000..61fff4e --- /dev/null +++ b/admin/ajax.php @@ -0,0 +1,38 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +require_once 'ajax/pages.php'; +require_once 'ajax/articles.php'; +require_once 'ajax/users.php'; +require_once 'ajax/newsletter.php'; +?> \ No newline at end of file diff --git a/admin/ajax/articles.php b/admin/ajax/articles.php new file mode 100644 index 0000000..998191e --- /dev/null +++ b/admin/ajax/articles.php @@ -0,0 +1,54 @@ + 'error', 'msg' => 'Podczas usuwania zdjecia wystąpił błąd. Proszę spróbować ponownie.' ]; + + if ( \admin\factory\Articles::delete_img( \S::get( 'image_id' ) ) ) + $response = [ 'status' => 'ok' ]; + + echo json_encode( $response ); + exit; +} + +if ( $a == 'article_file_delete' ) +{ + $response = [ 'status' => 'error', 'msg' => 'Podczas usuwania załącznika wystąpił błąd. Proszę spróbować ponownie.' ]; + + if ( \admin\factory\Articles::delete_file( \S::get( 'file_id' ) ) ) + $response = [ 'status' => 'ok' ]; + + echo json_encode( $response ); + exit; +} + +if ( $a == 'article_image_alt_change' ) +{ + $response = [ 'status' => 'error', 'msg' => 'Podczas zmiany atrybutu alt zdjęcia wystąpił błąd. Proszę spróbować ponownie.' ]; + + if ( \admin\factory\Articles::image_alt_change( \S::get( 'image_id' ), \S::get( 'image_alt' ) ) ) + $response = [ 'status' => 'ok' ]; + + echo json_encode( $response ); + exit; +} + +if ( $a == 'article_file_name_change' ) +{ + $response = [ 'status' => 'error', 'msg' => 'Podczas zmiany nazwy załącznika wystąpił błąd. Proszę spróbować ponownie.' ]; + + if ( \admin\factory\Articles::file_name_change( \S::get( 'file_id' ), \S::get( 'file_name' ) ) ) + $response = [ 'status' => 'ok' ]; + + echo json_encode( $response ); + exit; +} + +if ( $a == 'google_url_preview_article' ) +{ + if ( \S::get( 'article_id' ) ) + echo $_SERVER['SERVER_NAME'] . '/a-' . \S::get( 'article_id' ) . '-' . \S::seo( \S::get( 'title' ) ); + else + echo $_SERVER['SERVER_NAME'] . '/a-' . ( \S::max_db_value( 'pp_articles', 'id' ) + 1 ) . '-' . \S::seo( \S::get( 'title' ) ); +} diff --git a/admin/ajax/newsletter.php b/admin/ajax/newsletter.php new file mode 100644 index 0000000..c25c097 --- /dev/null +++ b/admin/ajax/newsletter.php @@ -0,0 +1,16 @@ + 'error', 'msg' => 'Podczas zapisywania kolejności wyświetlania artykułów wystąpił błąd. Proszę spróbować ponownie.']; + + if (\admin\factory\Pages::save_articles_order(\S::get('page_id'), \S::get('articles'))) + $response = ['status' => 'ok']; + + echo json_encode($response); + exit; +} + +if ($a == 'save_pages_order') { + $response = ['status' => 'error', 'msg' => 'Podczas zapisywania kolejności stron wystąpił błąd. Proszę spróbować ponownie.']; + + if (\admin\factory\Pages::save_pages_order(\S::get('menu_id'), \S::get('pages'))) + $response = ['status' => 'ok']; + + echo json_encode($response); + exit; +} + +if ($a == 'generate_seo_link') { + $response = ['status' => 'error', 'msg' => 'Podczas generowania pola "seo link" wystąpił błąd. Proszę spróbować ponownie.']; + + if ($seo_link = \admin\factory\Pages::generate_seo_link(\S::get('title'), \S::get('page_id'), \S::get('article_id'), \S::get('lang'), \S::get('pid'))) + $response = ['status' => 'ok', 'seo_link' => $seo_link]; + + echo json_encode($response); + exit; +} + +if ($a == 'cookie_menus') { + $array = unserialize($_COOKIE['cookie_menus']); + + if ($array[\S::get('menu_id')] == 0) + $array[\S::get('menu_id')] = 1; + else + $array[\S::get('menu_id')] = 0; + + $array = serialize($array); + + setcookie('cookie_menus', $array, time() + 3600 * 24 * 365); +} + +if ($a == 'cookie_pages') { + $array = unserialize($_COOKIE['cookie_pages']); + + if ($array[\S::get('page_id')] == 0) + $array[\S::get('page_id')] = 1; + else + $array[\S::get('page_id')] = 0; + + $array = serialize($array); + + setcookie('cookie_pages', $array, time() + 3600 * 24 * 365); +} + +if ( $a == 'google_url_preview' ) +{ + $settings = \front\factory\Settings::settings_details(); + $structure = $settings['links_structure']; + + if ( $structure ) + { + if ( \S::get( 'page_id' ) ) + { + $seo_link = \admin\factory\Pages::google_url_preview(\S::get('page_id'), \S::get('title'), \S::get('lang_id'), \S::get('pid'), 0, \S::get('seo_link')); + echo $seo_link; + } + else + { + $seo_link = \admin\factory\Pages::google_url_preview(0, \S::get('title'), \S::get('lang_id'), \S::get('pid'), \S::max_db_value('pp_pages', 'id') + 1, \S::get('seo_link')); + echo $seo_link; + } + } + else + { + if ( \S::get( 'seo_link' ) ) + echo \S::get( 'seo_link' ); + else + { + if ( \S::get( 'page_id' ) ) + echo $prefix . 's-' . \S::get('page_id') . '-' . \S::seo(\S::get('title')); + else + echo $prefix . 's-' . ( \S::max_db_value('pp_pages', 'id') + 1 ) . '-' . \S::seo(\S::get('title')); + } + } +} diff --git a/admin/ajax/users.php b/admin/ajax/users.php new file mode 100644 index 0000000..7ab9339 --- /dev/null +++ b/admin/ajax/users.php @@ -0,0 +1,9 @@ + + Require all granted + + +# Twardo blokuj cokolwiek, co mogłoby się wykonać + + Require all denied + + +# Nie serwuj plików ukrytych (.env itp.) + + Require all denied + \ No newline at end of file diff --git a/admin/css/ckeditor.css b/admin/css/ckeditor.css new file mode 100644 index 0000000..b137ac9 --- /dev/null +++ b/admin/css/ckeditor.css @@ -0,0 +1,2 @@ +blockquote{padding-left:25px;border-left:5px solid #ccc} +/*# sourceMappingURL=ckeditor.css.map */ \ No newline at end of file diff --git a/admin/css/ckeditor.css.map b/admin/css/ckeditor.css.map new file mode 100644 index 0000000..dc82341 --- /dev/null +++ b/admin/css/ckeditor.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["ckeditor.scss"],"names":[],"mappings":"AACA,WACE,aAAc,KACd,YAAa,IAAA,MAAA"} \ No newline at end of file diff --git a/admin/css/ckeditor.scss b/admin/css/ckeditor.scss new file mode 100644 index 0000000..2bca355 --- /dev/null +++ b/admin/css/ckeditor.scss @@ -0,0 +1,5 @@ +//out: ckeditor.css, compress: true, sourceMap: true +blockquote { + padding-left: 25px; + border-left: 5px solid #ccc; +} diff --git a/admin/css/custom.css b/admin/css/custom.css new file mode 100644 index 0000000..96d835b --- /dev/null +++ b/admin/css/custom.css @@ -0,0 +1,2 @@ +@charset "UTF-8";body.external-page #content .admin-form{max-width:450px}.sidebar-menu>li>a>span:nth-child(2){padding:0}ol.sortable,ol.sortable ol{margin:0 0 0 25px;padding:0;list-style-type:none}ol.sortable{margin:0}ol.sortable,ol.sortable *,ol.sortable :after,ol.sortable :before{box-sizing:content-box}.sortable li{margin:0;padding:0}.sortable li div.content{color:#454545;cursor:move;height:45px;line-height:45px;margin:0;padding:0 10px;border-bottom:1px solid #e1e1e1}.sortable li div.content.text-danger{color:#e9573f!important}.sortable li.sort-branch div{color:#383838}.sort-leaf .disclose{content:"- ";text-indent:-3000px;background-image:url(/libraries/jquery-nested-sortable/skin-vista/icons.gif);background-position:-16px -64px;background-repeat:no-repeat;display:inline-block;height:16px;vertical-align:top;width:16px;margin:16px 5px 0 1px}li.sort-collapsed.sort-hover div{border-color:#999}.disclose{cursor:pointer;width:20px;display:none;text-align:center}.sortable li.sort-collapsed>ol{display:none}.sortable li.sort-branch>div>.disclose{display:block;float:left;margin-right:15px;position:relative;z-index:10}.sortable li.sort-collapsed>div>.disclose>span:before{display:inline-block;font-family:FontAwesome;font-size:10px;content:"\f054";height:25px;width:25px;line-height:25px;border-radius:13px;background:rgba(134,145,178,.1);color:#8691b2;border:1px solid #8691b2;transition:.3s all ease}.sortable li.sort-collapsed>div>.disclose:hover>span:before,.sortable li.sort-expanded>div>.disclose:hover>span:before{background:#3bafda;color:#fff}.sortable li.sort-expanded>div>.disclose>span:before{display:inline-block;font-family:FontAwesome;font-size:10px;content:"\f078";height:25px;width:25px;line-height:25px;border-radius:13px;background:#eee;color:#3bafda;border:1px solid #3bafda}.placeholder{outline:1px dashed #4183c4}.sort-error{background:#fbe3e4;border-color:transparent}.menu_sortable .btn-group{margin-top:7px;display:none}.menu_sortable div:hover .btn-group{display:block}.menu_sortable div:hover{background:#f6f7f9}.resp-vtabs::after{content:"";display:block;clear:both}.resp-tab-content{padding:25px 15px}@media only screen and (max-width:576px){.resp-vtabs .resp-tab-content{padding:25px 5px}}.resp-tab-content .resp-tab-content{padding:0;border:0}@media (max-width:768px){.resp-tab-content .resp-tab-content{border:1px solid #c1c1c1}}.resp-tab-active,.resp-tabs-list li{padding:8px 20px!important}.resp-tab-content .resp-tabs-list{border-bottom:0;margin-bottom:10px;background:rgba(134,145,178,.1)}.resp-tab-content .resp-tabs-list li{border-left:0!important;border-right:0!important;float:right}.resp-tab-content .resp-tabs-list::after{clear:both;content:"";display:block}.resp-tab-content .resp-tab-active{position:relative;top:-1px}.resp-tab-content .form-group{margin:0 0 15px 0}.input-group span.btn-info{border-color:rgba(0,0,0,.05)}#overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1300;background:rgba(0,0,0,.2);display:none;cursor:pointer}#g-row-limit{width:auto;display:inline-block;height:30px;line-height:30px;padding:4px 12px}#files-uploader,#images-uploader{clear:both}#files-uploader,#files-uploader *,#images-uploader,#images-uploader *{box-sizing:content-box!important}#images-list{margin:0;padding:0 5px}#images-list li{background:#fff;text-align:center;display:block;height:165px;margin:5px 5px 10px 5px;vertical-align:middle;float:left;width:calc(25% - 10px);position:relative}#images-list li.sortable-chosen{-webkit-box-shadow:-1px 1px 6px rgba(0,0,0,.75);-moz-box-shadow:-1px 1px 6px rgba(0,0,0,.75);box-shadow:-1px 1px 6px rgba(0,0,0,.75)}#images-list li .article-image{height:100%;width:100%;object-fit:cover}#images-list li .image-alt{padding:5px;height:30px;font-size:13px}#images-list li .article_image_delete{border:0;padding:13px;position:absolute;top:0;right:0}#images-list li .article_image_delete i{font-size:18px}#images-list li .image-alt{position:absolute;bottom:10px;border:0;background:rgba(0,0,0,.2);text-align:center;color:#fff}#images-list li .image-alt::placeholder{color:#fff}#images-list li.pending .article-image-edit,#images-list li:hover .article-image-edit{display:block}.article-image-edit{background:rgba(255,255,255,.8);position:absolute;height:100%;width:150px;cursor:pointer;line-height:168px;display:none}.article-image-edit i{font-size:28px;color:#c00}.article-image-edit img{height:50px;position:relative;top:12px}#files-list{list-style-type:none;margin:0;padding:0}#files-list li{float:left;margin:5px 7px}#files-list li .article_file_delete{border-color:rgba(0,0,0,.05)}#elfinder *{box-sizing:content-box!important}#elfinder{background:#ebebeb}.elfinder-button{background:#fff!important}.elfinder .elfinder-navbar,.elfinder-contextmenu .elfinder-contextmenu-item span,.elfinder-cwd,.std42-dialog .ui-dialog-content{font-size:12px}.elfinder-contextmenu-item{background:#fff;color:#000}.elfinder-cwd-view-icons .elfinder-cwd-filename{-webkit-border-radius:0;border-radius:0}.elfinder-button-menu .ui-state-hover,.elfinder-cwd table td.ui-state-hover,.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover{background:#2c373d}.elfinder-cwd-filename input[type=text]{border:0!important;padding:0!important}#elfinder{height:750px!important;position:relative}.elfinder-cwd table tr:nth-child(2n+1){background:#d3d3d3}.elfinder-cwd table tr{border-top:1px solid #ccc}.elfinder-cwd table tr td{padding:5px 12px!important}.elfinder-workzone{clear:both}#elfinder .ui-dialog{border:1px solid #ccc;position:absolute!important}.navbar-branding .navbar-brand{float:left}.navbar-branding .navbar-version{opacity:.5;font-size:12px;height:60px;line-height:60px;padding:0 15px;color:#666;float:left}.navbar .label{position:relative;top:15px;float:left;height:28px}body.sb-top .navbar-branding{width:250px}.flags{margin:-4px 0 0 20px!important;background:0 0;cursor:move}.flags:hover{border:0!important;background:0 0!important}.flags img{height:10px;margin-right:5px;opacity:.4}.CodeMirror{height:500px!important}.nav>li>a{font-size:12px}#newsletter-preview{border:1px solid #ccc;padding:20px}div.jqi .jqititle{margin-bottom:0}#google-preview{padding:10px}.google-title{color:#1a0dab;font-family:arial,sans-serif;cursor:pointer;font-size:18px;line-height:21.6px;width:600px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.google-url{color:#006621;font-family:arial,sans-serif;font-size:14px;line-height:16px;width:600px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.google-description{color:#545454;font-family:arial,sans-serif;font-size:13px;line-height:18.2px;width:600px;display:block}.sidebar-left-content{background:#114975}.sidebar-menu li.disable_menu{pointer-events:none;opacity:.3}body.sb-top #sidebar_left .sidebar-menu>li>a{color:#fff}body.sb-top.sb-top-sm #sidebar_left .sidebar-menu>li>a>span:nth-child(1){font-size:13px}body.sb-top #sidebar_left .sidebar-menu li>a>span.caret{color:#fff}body.sb-top #sidebar_left .sidebar-menu>li.active>a,body.sb-top #sidebar_left .sidebar-menu>li:hover>a,body.sb-top #sidebar_left .sidebar-menu>li>a.menu-open,body.sb-top #sidebar_left .sidebar-menu>li>a:focus,body.sb-top #sidebar_left .sidebar-menu>li>a:hover{background:#fff;color:#114975}body.sb-top #sidebar_left .sidebar-menu liactive>a>span.caret,body.sb-top #sidebar_left .sidebar-menu>li:hover>a>span.caret,body.sb-top #sidebar_left .sidebar-menu>li>a.menu-open>span.caret,body.sb-top #sidebar_left .sidebar-menu>li>a:focus>span.caret,body.sb-top #sidebar_left .sidebar-menu>li>a:hover>span.caret{color:#114975}.sidebar-menu>li>ul{background:#fff;-webkit-box-shadow:-1px 1px 6px rgba(0,0,0,.2);-moz-box-shadow:-1px 1px 6px rgba(0,0,0,.2);box-shadow:-1px 1px 6px rgba(0,0,0,.2)}.sidebar-menu>li>ul>li>a{color:#114975;border-bottom:1px solid #f3f3f3}body.sb-top #sidebar_left .sidebar-menu>li>ul>li.active>a:after,body.sb-top #sidebar_left .sidebar-menu>li>ul>li:focus>a:after,body.sb-top #sidebar_left .sidebar-menu>li>ul>li:hover>a:after,body.sb-top #sidebar_left .sidebar-menu>li>ul>li>a.menu-open:after{width:5px;left:0}.sidebar-menu>li>ul>li>a:focus,.sidebar-menu>li>ul>li>a:hover{color:#114975}.sidebar-menu>li>ul>li:focus>a:after,.sidebar-menu>li>ul>li:hover>a:after{background:#70ca63}body.sb-top #sidebar_left .sidebar-menu>li>ul{padding-bottom:0}.progress-box{position:absolute;top:0;width:100%;height:100%;z-index:200;background:#fff;padding:0;margin-left:-15px}.progress{margin:15px;height:35px;transform:translateY(-100%);position:relative;top:30%;background-color:#333}.version{position:relative;top:5%}.version h3 p{display:inline-block}.version h3{text-align:center}.form-group.text-right div{padding-right:15px}.remember{font-size:13px!important}#remember{display:inline-block!important;width:15px;height:15px;top:2px;position:relative}.popo{display:inline-block;border:1px solid;border-color:red;border-radius:50%;height:20px;width:20px;text-align:center}.popover-btn{cursor:pointer;position:relative;display:block;color:red;height:20px;width:20px;text-indent:-4px}.mfp-auto-cursor .mfp-content{max-width:1000px}.mfp-auto-cursor .mfp-content .col-lg-9,.mfp-auto-cursor .mfp-content .row{width:100%;float:none;max-width:1000px}.mfp-auto-cursor .mfp-content .g-container{max-width:1000px}.mfp-close,.mfp-close:active{right:-7px;top:-27px;background:#fff!important}.affix{top:0;z-index:100}.affix+.panel-heading{padding-top:70px}.g-container hr{margin:5px 0}.resp-vtabs>.resp-tabs-list li{background:rgba(134,145,178,.1)!important}.resp-vtabs li.resp-tab-active{background:#8691b2!important;color:#fff;border-left:0!important;border:1px solid #8691b2!important}.resp-vtabs>.resp-tabs-container{border:0!important;border-left:1px solid #e5e5e5!important}@media (min-width:1199px){.g-container .panel-body form{max-width:1400px}}@media (max-width:900px){body.sb-top #toggle_sidemenu_t{width:60px}}.site-content{margin-left:0}@media (min-width:1200px){.site-content{margin-left:250px;width:calc(100% - 250px)}}@media (min-width:992px) and (max-width:1199px){.site-content.with-menu{width:calc(100% - 250px);margin-left:250px}}@media (min-width:768px) and (max-width:991px){.site-content.with-menu{width:calc(100% - 250px);margin-left:250px}}@media (min-width:576px) and (max-width:767px){.site-content.with-menu{width:calc(100% - 250px);margin-left:250px}}@media (max-width:575px){.site-content.with-menu{margin-left:0;width:100%}.site-content{margin-left:0;width:100%}}.menu-left{position:fixed;left:0;top:0;height:100%;background-color:#2a3042;z-index:9999;width:250px;padding:0 15px;overflow:scroll;scrollbar-width:none;-ms-overflow-style:none;overflow-y:scroll;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none;overflow-y:scroll;overflow-x:hidden;display:none}@media (min-width:1200px){.menu-left{display:block}}@media (max-width:575px){.menu-left{width:100vw}}.menu-left.visible{display:block}.menu-left::-webkit-scrollbar{display:none;width:0;height:0}.menu-left a:hover{text-decoration:none}.logo{width:100%;color:#fff;background-color:#2a3042;text-align:center;padding:20px 0;font-size:24px;font-weight:400;position:-webkit-sticky;position:sticky;top:0;z-index:1020}.menu-left .logo .logo-cmspro{width:100%;color:#fff;text-align:center;padding:20px 0;font-size:24px;font-weight:400}.menu-left .logo .version-cmspro{font-size:11px;color:#8691b2}.menu-left .logo .update-cmspro{color:#2a3042;font-size:14px;font-weight:400;line-height:27px;padding:7px 15px;background:#fff;display:inline-block;border-radius:30px;transition:.3s all ease;margin-top:10px}.menu-left .logo .update-cmspro:hover{text-decoration:none;background:#8691b2;color:#fff}.menu-left .menu-content .title{text-transform:uppercase;color:#8691b2;font-size:12px;font-weight:700;margin-bottom:10px}.menu-left .menu-content ul li a{color:#8691b2;font-size:13px;font-weight:400;line-height:27px;padding:4px 0;display:block}.menu-left .menu-content ul li a:hover{color:#fff;text-decoration:none}.menu-left .menu-content ul li a:focus{text-decoration:none}.menu-left .menu-content ul{list-style-type:none;padding-inline-start:0}.menu-left .menu-content .preview{width:100%;background:#2a3042;text-align:center;position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}.menu-left .menu-content .preview a{text-transform:uppercase;padding:20px 0;color:#8691b2;font-size:12px;font-weight:700;margin-bottom:10px;display:inline-block;margin-bottom:0}.menu-left .menu-content .preview a:hover{color:#fff;width:100%;height:100%}.menu-left .menu-content ul li a img{margin-right:10px;width:20px;text-align:center}.menu-left .menu-content ul li a:hover img{filter:brightness(200%)}.menu-left .menu-content .preview a img{margin-top:-4px;margin-right:5px;width:20px;text-align:center}.menu-left .menu-content .preview a:hover img{filter:brightness(200%)}.mobile-menu-btn{position:fixed;right:10px;bottom:10px;z-index:9999;height:50px;width:50px;color:#fff;background:#2a3042;line-height:50px;text-align:center;font-size:25px;cursor:pointer;border-radius:50%;display:none}@media (max-width:575px){.mobile-menu-btn.active{color:#2a3042;background:#fff}}@media (max-width:1199px){.mobile-menu-btn{display:block}}@media (max-width:767px){.pull-right-above-sm .btn{margin-top:10px;margin-bottom:10px;margin-left:0}}@media (min-width:768px){.pull-right-above-sm{text-align:right;float:right}}@media (max-width:767px){.pull-right-above-sm #g-columns-list{rigth:auto;left:14px}}@media (max-width:767px){.text-centred-xs{text-align:center!important}}.table-responsive input{min-width:150px}.table-responsive select{min-width:130px}@media (max-width:768px){.resp-tabs-container h2.resp-accordion .fa{margin-right:10px}}@media (max-width:1199px){body.sb-top .navbar-branding{display:block;width:100px}body.sb-top .navbar-branding.with-menu{display:none}}@media (min-width:1200px){body.sb-top .navbar-branding{display:none}}@media (max-width:400px){body.sb-top .navbar-branding{display:none}}.pagination{margin-bottom:0}.pagination li.disabled{opacity:.5;pointer-events:none}.site-content #content_wrapper{margin-left:0}.menu_sortable .content.ui-sortable-handle{position:relative;display:-webkit-box;max-height:55px;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:1}#article-list .content.ui-sortable-handle{position:relative;display:-webkit-box;max-height:55px;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}.g-container{position:relative;overflow:hidden;width:100%}@media (max-width:768px){.resp-vtabs>.resp-tabs-container{padding:0}}@media (max-width:576px){.panel-body{padding:15px 5px}}@media (max-width:768px){#g-results{margin-top:30px}}.panel-info.panel-border{border-color:#8691b2}.sortable li.sort-expanded>div>.disclose>span:before{color:#8691b2;border:1px solid #8691b2;background:rgba(134,145,178,.1);transition:.3s all ease}.sortable li.sort-collapsed>div>.disclose:hover>span:before,.sortable li.sort-expanded>div>.disclose:hover>span:before{background:#8691b2;color:#fff}.btn-danger,.btn-info,.btn-success,.btn-system{color:#fff;padding:.47rem .75rem;font-size:13px;line-height:1.5;font-weight:300;border-radius:.25rem;transition:.15s all ease}.btn-danger#g-columns-list-close,.btn-dark#g-select-columns{padding:9px 12px}.btn .fa{width:14px;height:14px}.btn-dark{border-radius:.25rem}.btn-success{color:#fff;background-color:#1cbb8c}.btn-success:active,.btn-success:focus,.btn-success:hover{background-color:#179a73}.btn-system{background-color:#fcb92c}.btn-system:active,.btn-system:focus,.btn-system:hover{background-color:#fbac06}.btn-danger{background-color:#ff3d60}.btn-danger:active,.btn-danger:focus,.btn-danger:hover{background-color:#ff1741}.btn-info{background-color:#5664d2}.btn-info:active,.btn-info:focus,.btn-info:hover{background-color:#3848ca}.panel-info>.panel-heading>.panel-title{font-size:15px;font-weight:700;text-transform:uppercase;color:#2a3042}#main:before{background:#f3f4f7}a{color:#818eb8}a:focus,a:hover{color:#2a3042;text-decoration:none}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#818eb8;border-color:#818eb8}#g-columns-list ul li{text-align:left}.navbar .nav>li.dropdown .open .dropdown-menu:after,.navbar .nav>li.dropdown.open .dropdown-menu:after{border-bottom-color:#2a3042}.navbar .nav>li.dropdown .open .dropdown-menu,.navbar .nav>li.dropdown.open .dropdown-menu{border-top-color:#2a3042}.panel.panel-border>.panel-heading{background-color:#fff}.panel.panel-border>.panel-heading .btn{height:30px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f6f7f9}div.switch.switch-primary input:checked+label{background-color:#8691b2}.cm-s-material{background-color:#2a3042!important}.icheckbox_minimal-blue.ui-sortable-handle.hover{background:#fff;background:url(/libraries/grid/plugins/icheck/skins/minimal/blue.png) no-repeat;background-position:0 0!important}.table-hover>tbody>tr>td,.table-hover>tbody>tr>th{transition:all .3s ease}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:rgba(134,145,178,.12)!important}.dropdown-context{border-top:3px solid #2a3042!important}.dropdown-context-up:after,.dropdown-context:after{border-bottom:6px solid #2a3042!important}.input-group-addon{color:#2a3042}.g-tip .fa:before{color:#2a3042}.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{border:none;border-bottom:1px solid #eee}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th{border:none}.input-group-addon{background:rgba(134,145,178,.1)}.pagination>li>a{padding:0;width:30px;height:30px;display:flex;justify-content:center;align-items:center;border-radius:50%;margin-right:5px}.pagination>li:first-child>a{border-bottom-left-radius:50%;border-top-left-radius:50%}.pagination>li:last-child>a{border-bottom-right-radius:50%;border-top-right-radius:50%}.form-control{border-radius:.25rem}.input-group-addon:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.resp-tab-active{border:1px solid #8691b2!important;border-top:2px solid #8691b2!important}.resp-tabs-container h2.resp-accordion{background:rgba(134,145,178,.1)!important}.resp-tabs-container h2.resp-accordion.resp-tab-active{background:#8691b2!important;color:#fff}h2.resp-tab-active span.resp-arrow{border-bottom:12px solid #fff}.resp-tabs-container{border:rgba(134,145,178,.1)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:rgba(134,145,178,.1)}.alert{border-radius:.25rem}.panel{border-radius:.25rem}.panel-body{border-radius:.25rem}.tooltipster-base{background-color:#2a3042!important}.tooltipster-punk{border-color:#8691b2!important}.form-control:focus{border-color:#8691b2}@media (max-width:576px){#content{padding:15px 0 40px 0}} +/*# sourceMappingURL=custom.css.map */ \ No newline at end of file diff --git a/admin/css/custom.css.map b/admin/css/custom.css.map new file mode 100644 index 0000000..050d7a8 --- /dev/null +++ b/admin/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["custom.scss","custom.less"],"names":[],"mappings":"iBAC4B,wCAC1B,UAAW,MAG4B,qCACvC,QAAS,EAGT,YACU,eACV,OAAQ,EAAA,EAAA,EAAA,KACR,QAAS,EACT,gBAAiB,KAGjB,YACA,OAAQ,EAGR,YACU,cAEE,mBADA,oBAEZ,WAAY,YAGJ,aACR,OAAQ,EACR,QAAS,EAGK,yBACd,MAAO,QACP,OAAQ,KACR,OAAQ,KACR,YAAa,KACb,OAAQ,EACR,QAAS,EAAA,KACT,cAAe,IAAA,MAAA,QAGO,qCACtB,MAAO,kBAGgB,6BACvB,MAAO,QAGE,qBACT,QAAS,KACT,YAAa,QACb,iBAAkB,4DAClB,oBAAqB,MAAA,MACrB,kBAAmB,UACnB,QAAS,aACT,OAAQ,KACR,eAAgB,IAChB,MAAO,KACP,OAAQ,KAAA,IAAA,EAAA,IAGmB,iCAC3B,aAAc,KAGhB,UACE,OAAQ,QACR,MAAO,KACP,QAAS,KACT,WAAY,OAGgB,+BAC5B,QAAS,KAGsB,uCAC/B,QAAS,MACT,MAAO,KACP,aAAc,KACd,SAAU,SACV,QAAS,GAG0C,sDACnD,QAAS,aACT,YAAa,YACb,UAAW,KACX,QAAS,QACT,OAAQ,KACR,MAAO,KACP,YAAa,KACb,cAAe,KACf,WAAY,qBACZ,MAAO,QACP,OAAQ,IAAA,MAAA,QACR,WAAY,IAAA,IAAA,KAG6C,4DACD,2DACxD,WAAY,QACZ,MAAO,KAG2C,qDAClD,QAAS,aACT,YAAa,YACb,UAAW,KACX,QAAS,QACT,OAAQ,KACR,MAAO,KACP,YAAa,KACb,cAAe,KACf,WAAY,KACZ,MAAO,QACP,OAAQ,IAAA,MAAA,QAGV,aACE,QAAS,IAAA,OAAA,QAGX,YACE,WAAY,QACZ,aAAc,YAGD,0BACb,WAAY,IACZ,QAAS,KAGc,oCACvB,QAAS,MAGQ,yBACjB,WAAY,QAGD,mBACX,QAAS,GACT,QAAS,MACT,MAAO,KAGT,kBACE,QAAS,KAAA,KAGL,yCACQ,8BACV,QAAS,KAAA,KAIK,oCAChB,QAAS,EACT,OAAQ,EAGJ,yBACc,oCAChB,OAAQ,IAAA,MAAA,SAKZ,iBADgB,mBAEd,QAAS,IAAA,eAGO,kCAChB,cAAe,EACf,cAAe,KAEf,WAAY,qBAGoB,qCAChC,YAAa,YACb,aAAc,YACd,MAAO,MAG0B,yCACjC,MAAO,KACP,QAAS,GACT,QAAS,MAGO,mCAChB,SAAU,SACV,IAAK,KAGW,8BAChB,OAAQ,EAAA,EAAA,KAAA,EAGO,2BACf,aAAc,gBAGhB,SACE,SAAU,MACV,IAAK,EACL,KAAM,EACN,MAAO,KACP,OAAQ,KACR,QAAS,KACT,WAAY,eACZ,QAAS,KACT,OAAQ,QAGV,aACE,MAAO,KACP,QAAS,aACT,OAAQ,KACR,YAAa,KACb,QAAS,IAAA,KAIX,gBADA,iBAEE,MAAO,KAKT,gBACgB,kBAHhB,iBACiB,mBAGf,WAAY,sBAGd,aACE,OAAQ,EACR,QAAS,EAAA,IAGE,gBACX,WAAY,KACZ,WAAY,OACZ,QAAS,MACT,OAAQ,MACR,OAAQ,IAAA,IAAA,KAAA,IACR,eAAgB,OAChB,MAAO,KACP,MAAO,iBACP,SAAU,SAGG,gCACb,mBAAqB,KAAI,IAAI,IAAI,gBACjC,gBAAkB,KAAI,IAAI,IAAI,gBAC9B,WAAa,KAAI,IAAI,IAAI,gBAGX,+BACd,OAAQ,KACR,MAAO,KACP,WAAY,MAGE,2BACd,QAAS,IACT,OAAQ,KACR,UAAW,KAGG,sCACd,OAAQ,EACR,QAAS,KACT,SAAU,SACV,IAAK,EACL,MAAO,EAG6B,wCACpC,UAAW,KAGG,2BACd,SAAU,SACV,OAAQ,KACR,OAAQ,EACR,WAAY,eACZ,WAAY,OACZ,MAAO,KAGmB,wCAC1B,MAAO,KAIe,4CADF,0CAEpB,QAAS,MAGX,oBACE,WAAY,qBACZ,SAAU,SACV,OAAQ,KACR,MAAO,MACP,OAAQ,QACR,YAAa,MACb,QAAS,KAGS,sBAClB,UAAW,KACX,MAAO,KAGW,wBAClB,OAAQ,KACR,SAAU,SACV,IAAK,KAGP,YACE,gBAAiB,KACjB,OAAQ,EACR,QAAS,EAGC,eACV,MAAO,KACP,OAAQ,IAAA,IAGK,oCACb,aAAc,gBAGN,YACR,WAAY,sBAGd,UACE,WAAY,QAGd,iBACE,WAAY,eAIJ,2BAEuC,sDAHjD,cAEc,iCAEZ,UAAW,KAGb,2BACE,WAAY,KACZ,MAAO,KAGgB,gDACvB,sBAAuB,EACvB,cAAe,EAOK,sCADA,sCAHE,kFAKtB,WAAY,QAGe,wCAC3B,OAAQ,YACR,QAAS,YAGX,UACE,OAAQ,gBACR,SAAU,SAG2B,uCACrC,WAAY,QAGM,uBAClB,WAAY,IAAA,MAAA,KAGS,0BACrB,QAAS,IAAA,eAGX,mBACE,MAAO,KAGC,qBACR,OAAQ,IAAA,MAAA,KACR,SAAU,mBAGK,+BACf,MAAO,KAGQ,iCACf,QAAS,GACT,UAAW,KACX,OAAQ,KACR,YAAa,KACb,QAAS,EAAA,KACT,MAAO,KACP,MAAO,KAGD,eACN,SAAU,SACV,IAAK,KACL,MAAO,KACP,OAAQ,KAGE,6BACV,MAAO,MAGT,OACE,OAAQ,KAAA,EAAA,EAAA,eACR,WAAY,IACZ,OAAQ,KAGH,aACL,OAAQ,YACR,WAAY,cAGP,WACL,OAAQ,KACR,aAAc,IACd,QAAS,GAGX,YACE,OAAQ,gBAGE,UACV,UAAW,KAGb,oBACE,OAAQ,IAAA,MAAA,KACR,QAAS,KAGH,kBACN,cAAe,EAGjB,gBACE,QAAS,KAGX,cACE,MAAO,QACP,YAAa,KCAK,CDAL,WACb,OAAQ,QACR,UAAW,KACX,YAAa,OACb,MAAO,MACP,QAAS,MACT,SAAU,OACV,cAAe,SACf,YAAa,OAGf,YACE,MAAO,QACP,YAAa,KCAK,CDAL,WACb,UAAW,KACX,YAAa,KACb,MAAO,MACP,QAAS,MACT,SAAU,OACV,cAAe,SACf,YAAa,OAGf,oBACE,MAAO,QACP,YAAa,KCAK,CDAL,WACb,UAAW,KACX,YAAa,OACb,MAAO,MACP,QAAS,MAGX,sBACE,WAAY,QAGE,8BACd,eAAgB,KAChB,QAAS,GAGoC,6CAC7C,MAAO,KAGoE,yEAC3E,UAAW,KAGwC,wDACnD,MAAO,KAG6C,oDACD,mDACL,uDAEC,mDADA,mDAE/C,WAAY,KACZ,MAAO,QAGkD,8DACE,8DACI,kEAEJ,8DADA,8DAE3D,MAAO,QAGY,oBACnB,WAAY,KACZ,mBAAqB,KAAI,IAAI,IAAI,eACjC,gBAAkB,KAAI,IAAI,IAAI,eAC9B,WAAa,KAAI,IAAI,IAAI,eAGI,yBAC7B,MAAO,QACP,cAAe,IAAA,MAAA,QAIiD,gEAED,+DADA,+DAFI,mEAInE,MAAO,IACP,KAAM,EAIyB,+BADA,+BAE/B,MAAO,QAI8B,qCADA,qCAErC,WAAY,QAGiC,8CAC7C,eAAgB,EAGlB,cACE,SAAU,SACV,IAAK,EACL,MAAO,KACP,OAAQ,KACR,QAAS,IACT,WAAY,KACZ,QAAS,EACT,YAAa,MAGf,UACE,OAAQ,KACR,OAAQ,KACR,UAAW,kBACX,SAAU,SACV,IAAK,IACL,iBAAkB,KAGpB,SACE,SAAU,SACV,IAAK,GAGK,cACV,QAAS,aAGF,YACP,WAAY,OAGS,2BACrB,cAAe,KAGjB,UACE,UAAW,eAGb,UACE,QAAS,uBACT,MAAO,KACP,OAAQ,KACR,IAAK,IACL,SAAU,SAGZ,MACE,QAAS,aACT,OAAQ,IAAA,MACR,aAAc,IACd,cAAe,IACf,OAAQ,KACR,MAAO,KACP,WAAY,OAGd,aACE,OAAQ,QACR,SAAU,SACV,QAAS,MACT,MAAO,IACP,OAAQ,KACR,MAAO,KACP,YAAa,KAGE,8BACf,UAAW,OAGiB,wCACA,mCAC5B,MAAO,KACP,MAAO,KACP,UAAW,OAGiB,2CAC5B,UAAW,OAGb,WACW,kBACT,MAAO,KACP,IAAK,MACL,WAAY,eAGd,OACE,IAAK,EACL,QAAS,IAIF,sBACP,YAAa,KAGF,gBACX,OAAQ,IAAA,EAGoB,+BAC5B,WAAY,+BAGA,+BACZ,WAAY,kBACZ,MAAO,KACP,YAAa,YACb,OAAQ,IAAA,MAAA,kBAGI,iCACZ,OAAQ,YACR,YAAa,IAAA,MAAA,kBAGT,0BACqB,8BACvB,UAAW,QAIT,yBACQ,+BACV,MAAO,MAMX,cACE,YAAa,EAGT,0BACJ,cACE,YAAa,MACb,MAAO,oBAIL,gDACS,wBACX,MAAO,mBACP,YAAa,OAIX,+CACS,wBACX,MAAO,mBACP,YAAa,OAIX,+CACS,wBACX,MAAO,mBACP,YAAa,OAIX,yBACS,wBACX,YAAa,EACb,MAAO,KAGT,cACE,YAAa,EACb,MAAO,MAIX,WACE,SAAU,MACV,KAAM,EACN,IAAK,EAEL,OAAQ,KACR,iBAAkB,QAClB,QAAS,KACT,MAAO,MACP,QAAS,EAAA,KACT,SAAU,OACV,gBAAiB,KACjB,mBAAoB,KACpB,WAAY,OACZ,WAAY,OACZ,gBAAiB,KAEjB,mBAAoB,KAEpB,WAAY,OACZ,WAAY,OACZ,QAAS,KAGL,0BACJ,WACE,QAAS,OAIP,yBACJ,WACE,MAAO,OAID,mBACR,QAAS,MAGC,8BACV,QAAS,KAET,MAAO,EACP,OAAQ,EAGG,mBACX,gBAAiB,KAGnB,MACE,MAAO,KACP,MAAO,KACP,iBAAkB,QAClB,WAAY,OACZ,QAAS,KAAA,EACT,UAAW,KACX,YAAa,IACb,SAAU,eACV,SAAU,OACV,IAAK,EACL,QAAS,KAGM,8BACf,MAAO,KACP,MAAO,KAEP,WAAY,OACZ,QAAS,KAAA,EACT,UAAW,KACX,YAAa,IAGE,iCACf,UAAW,KACX,MAAO,QAGQ,gCACf,MAAO,QACP,UAAW,KACX,YAAa,IACb,YAAa,KACb,QAAS,IAAA,KACT,WAAY,KACZ,QAAS,aACT,cAAe,KACf,WAAY,IAAA,IAAA,KACZ,WAAY,KAGkB,sCAC9B,gBAAiB,KACjB,WAAY,QACZ,MAAO,KAGgB,gCACvB,eAAgB,UAChB,MAAO,QACP,UAAW,KACX,YAAa,IACb,cAAe,KAGc,iCAC7B,MAAO,QACP,UAAW,KACX,YAAa,IACb,YAAa,KACb,QAAS,IAAA,EACT,QAAS,MAGsB,uCAC/B,MAAO,KACP,gBAAiB,KAGc,uCAC/B,gBAAiB,KAGM,4BACvB,gBAAiB,KACjB,qBAAsB,EAGC,kCACvB,MAAO,KACP,WAAY,QACZ,WAAY,OACZ,SAAU,eACV,SAAU,OACV,OAAQ,EACR,QAAS,KAGuB,oCAChC,eAAgB,UAChB,QAAS,KAAA,EACT,MAAO,QACP,UAAW,KACX,YAAa,IACb,cAAe,KACf,QAAS,aACT,cAAe,EAGmB,0CAClC,MAAO,KACP,MAAO,KACP,OAAQ,KAGuB,qCAC/B,aAAc,KACd,MAAO,KACP,WAAY,OAGyB,2CACrC,OAAQ,iBAG0B,wCAClC,WAAY,KACZ,aAAc,IACd,MAAO,KACP,WAAY,OAG4B,8CACxC,OAAQ,iBAGV,iBACE,SAAU,MACV,MAAO,KACP,OAAQ,KACR,QAAS,KACT,OAAQ,KACR,MAAO,KACP,MAAO,KACP,WAAY,QACZ,YAAa,KACb,WAAY,OACZ,UAAW,KACX,OAAQ,QACR,cAAe,IACf,QAAS,KAGL,yBACY,wBACd,MAAO,QACP,WAAY,MAMV,0BACJ,iBACE,QAAS,OAIP,yBACiB,0BACnB,WAAY,KACZ,cAAe,KACf,YAAa,GAIX,yBACJ,qBACE,WAAY,MACZ,MAAO,OAIL,yBACiB,qCACnB,MAAO,KACP,KAAM,MAIJ,yBACJ,iBACE,WAAY,kBAIE,wBAChB,UAAW,MAGK,yBAChB,UAAW,MAGP,yBACmC,2CACrC,aAAc,MAIZ,0BACQ,6BACV,QAAS,MACT,MAAO,MAGmB,uCAC1B,QAAS,MAIP,0BACQ,6BACV,QAAS,MAIP,yBACQ,6BACV,QAAS,MAIb,YACE,cAAe,EAGH,wBACZ,QAAS,GACT,eAAgB,KAGJ,+BACZ,YAAa,EAGQ,2CACrB,SAAU,SACV,QAAS,YACT,WAAY,KACZ,SAAU,OACV,cAAe,SACf,mBAAoB,EAGA,0CACpB,SAAU,SACV,QAAS,YACT,WAAY,KACZ,SAAU,OACV,cAAe,SACf,mBAAoB,EACpB,mBAAoB,SAGtB,aACE,SAAU,SACV,SAAU,OACV,MAAO,KAGH,yBACU,iCACZ,QAAS,GAIP,yBACJ,YACE,QAAS,KAAA,KAIP,yBACJ,WACE,WAAY,MAKL,yBACT,aAAc,QAGoC,qDAClD,MAAO,QACP,OAAQ,IAAA,MAAA,QACR,WAAY,qBACZ,WAAY,IAAA,IAAA,KAG6C,4DACD,2DACxD,WAAY,QACZ,MAAO,KAKT,YACA,UAHA,aACA,YAGE,MAAO,KACP,QAAS,OAAA,OACT,UAAW,KACX,YAAa,IACb,YAAa,IACb,cAAe,OAEf,WAAY,KAAA,IAAA,KAGH,iCACF,2BACP,QAAS,IAAA,KAGN,SACH,MAAO,KACP,OAAQ,KAGV,UACE,cAAe,OAGjB,aACE,MAAO,KACP,iBAAkB,QAKP,oBADA,mBADA,mBAGX,iBAAkB,QAGpB,YACE,iBAAkB,QAKR,mBADA,kBADA,kBAGV,iBAAkB,QAGpB,YACE,iBAAkB,QAKR,mBADA,kBADA,kBAGV,iBAAkB,QAGpB,UACE,iBAAkB,QAKV,iBADA,gBADA,gBAGR,iBAAkB,QAGW,wCAC7B,UAAW,KACX,YAAa,IACb,eAAgB,UAChB,MAAO,QAGH,aACJ,WAAY,QAGd,EACE,MAAO,QAIP,QADA,QAEA,MAAO,QACP,gBAAiB,KAGK,sBAIE,4BAFA,4BADF,yBAIK,+BAFA,+BAG3B,iBAAkB,QAClB,aAAc,QAGG,sBACjB,WAAY,KAIkC,oDADD,mDAE7C,oBAAqB,QAIU,8CADD,6CAE9B,iBAAkB,QAGE,mCACpB,iBAAkB,KAElB,wCACE,OAAQ,KAIiC,0CACA,0CAC3C,iBAAkB,QAGsB,8CACxC,iBAAkB,QAGpB,eACE,iBAAkB,kBAGsB,iDACxC,WAAY,KACZ,WAAY,2DACV,UACF,oBAAqB,EAAA,YAGK,yBACA,yBAC1B,WAAY,IAAA,IAAA,KAGoB,+BACA,+BAChC,iBAAkB,gCAGpB,kBACE,WAAY,IAAA,MAAA,kBAIO,2BADH,wBAEhB,cAAe,IAAA,MAAA,kBAGjB,mBACE,MAAO,QAGE,kBACT,MAAO,QAIiC,qCADA,qCAExC,OAAQ,KACR,cAAe,IAAA,MAAA,KAKyB,qCAFA,qCAGA,qCAFA,qCAGxC,OAAQ,KAGV,mBACE,WAAY,qBAMK,iBACjB,QAAS,EACT,MAAO,KACP,OAAQ,KACR,QAAS,KACT,gBAAiB,OACjB,YAAa,OACb,cAAe,IACf,aAAc,IAGe,6BAC7B,0BAA2B,IAC3B,uBAAwB,IAGI,4BAC5B,2BAA4B,IAC5B,wBAAyB,IAG3B,cACE,cAAe,OAGE,+BACjB,uBAAwB,OACxB,0BAA2B,OAG7B,iBACE,OAAQ,IAAA,MAAA,kBAER,WAAY,IAAA,MAAA,kBAGS,uCACrB,WAAY,+BAGwB,uDACpC,WAAY,kBACZ,MAAO,KAGc,mCACrB,cAAe,KAAA,MAAA,KAGjB,qBACE,OAAQ,qBAGI,wBACA,wBACK,iCACjB,iBAAkB,qBAGpB,OACE,cAAe,OAGjB,OACE,cAAe,OAGjB,YACE,cAAe,OAGjB,kBACE,iBAAkB,kBAGpB,kBACE,aAAc,kBAGF,oBACZ,aAAc,QAGV,yBACJ,SACE,QAAS,KAAA,EAAA,KAAA"} \ No newline at end of file diff --git a/admin/css/custom.scss b/admin/css/custom.scss new file mode 100644 index 0000000..e60738f --- /dev/null +++ b/admin/css/custom.scss @@ -0,0 +1,1382 @@ +//out: custom.css, compress: true, sourceMap: true +body.external-page #content .admin-form { + max-width: 450px; +} + +.sidebar-menu > li > a > span:nth-child(2) { + padding: 0; +} + +ol.sortable, +ol.sortable ol { + margin: 0 0 0 25px; + padding: 0; + list-style-type: none; +} + +ol.sortable { + margin: 0; +} + +ol.sortable, +ol.sortable *, +ol.sortable *:before, +ol.sortable *:after { + box-sizing: content-box; +} + +.sortable li { + margin: 0; + padding: 0; +} + +.sortable li div.content { + color: #454545; + cursor: move; + height: 45px; + line-height: 45px; + margin: 0; + padding: 0 10px; + border-bottom: 1px solid #e1e1e1; +} + +.sortable li div.content.text-danger { + color: #e9573f !important; +} + +.sortable li.sort-branch div { + color: #383838; +} + +.sort-leaf .disclose { + content: "- "; + text-indent: -3000px; + background-image: url("/libraries/jquery-nested-sortable/skin-vista/icons.gif"); + background-position: -16px -64px; + background-repeat: no-repeat; + display: inline-block; + height: 16px; + vertical-align: top; + width: 16px; + margin: 16px 5px 0 1px; +} + +li.sort-collapsed.sort-hover div { + border-color: #999999; +} + +.disclose { + cursor: pointer; + width: 20px; + display: none; + text-align: center; +} + +.sortable li.sort-collapsed > ol { + display: none; +} + +.sortable li.sort-branch > div > .disclose { + display: block; + float: left; + margin-right: 15px; + position: relative; + z-index: 10; +} + +.sortable li.sort-collapsed > div > .disclose > span:before { + display: inline-block; + font-family: FontAwesome; + font-size: 10px; + content: "\f054"; + height: 25px; + width: 25px; + line-height: 25px; + border-radius: 13px; + background: rgba(134, 145, 178, 0.1); + color: #8691b2; + border: 1px solid #8691b2; + transition: 0.3s all ease; +} + +.sortable li.sort-collapsed > div > .disclose:hover > span:before, +.sortable li.sort-expanded > div > .disclose:hover > span:before { + background: #3bafda; + color: #fff; +} + +.sortable li.sort-expanded > div > .disclose > span:before { + display: inline-block; + font-family: FontAwesome; + font-size: 10px; + content: "\f078"; + height: 25px; + width: 25px; + line-height: 25px; + border-radius: 13px; + background: #eeeeee; + color: #3bafda; + border: 1px solid #3bafda; +} + +.placeholder { + outline: 1px dashed #4183c4; +} + +.sort-error { + background: #fbe3e4; + border-color: transparent; +} + +.menu_sortable .btn-group { + margin-top: 7px; + display: none; +} + +.menu_sortable div:hover .btn-group { + display: block; +} + +.menu_sortable div:hover { + background: #f6f7f9; +} + +.resp-vtabs::after { + content: ""; + display: block; + clear: both; +} + +.resp-tab-content { + padding: 25px 15px; +} + +@media only screen and (max-width: 576px) { + .resp-vtabs .resp-tab-content { + padding: 25px 5px; + } +} + +.resp-tab-content .resp-tab-content { + padding: 0; + border: 0; +} + +@media (max-width: 768px) { + .resp-tab-content .resp-tab-content { + border: 1px solid #c1c1c1; + } +} + +.resp-tabs-list li, +.resp-tab-active { + padding: 8px 20px !important; +} + +.resp-tab-content .resp-tabs-list { + border-bottom: 0; + margin-bottom: 10px; + /*background: #f1f1f1;*/ + background: rgba(134, 145, 178, 0.1); +} + +.resp-tab-content .resp-tabs-list li { + border-left: 0 !important; + border-right: 0 !important; + float: right; +} + +.resp-tab-content .resp-tabs-list::after { + clear: both; + content: ""; + display: block; +} + +.resp-tab-content .resp-tab-active { + position: relative; + top: -1px; +} + +.resp-tab-content .form-group { + margin: 0 0 15px 0; +} + +.input-group span.btn-info { + border-color: rgba(0, 0, 0, 0.05); +} + +#overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1300; + background: rgba(0, 0, 0, 0.2); + display: none; + cursor: pointer; +} + +#g-row-limit { + width: auto; + display: inline-block; + height: 30px; + line-height: 30px; + padding: 4px 12px; +} + +#images-uploader, +#files-uploader { + clear: both; +} + +#images-uploader, +#images-uploader *, +#files-uploader, +#files-uploader * { + box-sizing: content-box !important; +} + +#images-list { + margin: 0; + padding: 0 5px; +} + +#images-list li { + background: #fff; + text-align: center; + display: block; + height: 165px; + margin: 5px 5px 10px 5px; + vertical-align: middle; + float: left; + width: calc(25% - 10px); + position: relative; +} + +#images-list li.sortable-chosen { + -webkit-box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.75); + -moz-box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.75); + box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.75); +} + +#images-list li .article-image { + height: 100%; + width: 100%; + object-fit: cover; +} + +#images-list li .image-alt { + padding: 5px; + height: 30px; + font-size: 13px; +} + +#images-list li .article_image_delete { + border: 0; + padding: 13px; + position: absolute; + top: 0; + right: 0; +} + +#images-list li .article_image_delete i { + font-size: 18px; +} + +#images-list li .image-alt { + position: absolute; + bottom: 10px; + border: 0; + background: rgba(0, 0, 0, 0.2); + text-align: center; + color: #fff; +} + +#images-list li .image-alt::placeholder { + color: #fff; +} + +#images-list li:hover .article-image-edit, +#images-list li.pending .article-image-edit { + display: block; +} + +.article-image-edit { + background: rgba(255, 255, 255, 0.8); + position: absolute; + height: 100%; + width: 150px; + cursor: pointer; + line-height: 168px; + display: none; +} + +.article-image-edit i { + font-size: 28px; + color: #cc0000; +} + +.article-image-edit img { + height: 50px; + position: relative; + top: 12px; +} + +#files-list { + list-style-type: none; + margin: 0; + padding: 0; +} + +#files-list li { + float: left; + margin: 5px 7px; +} + +#files-list li .article_file_delete { + border-color: rgba(0, 0, 0, 0.05); +} + +#elfinder * { + box-sizing: content-box !important; +} + +#elfinder { + background: #ebebeb; +} + +.elfinder-button { + background: #fff !important; +} + +.elfinder-cwd, +.elfinder .elfinder-navbar, +.std42-dialog .ui-dialog-content, +.elfinder-contextmenu .elfinder-contextmenu-item span { + font-size: 12px; +} + +.elfinder-contextmenu-item { + background: #fff; + color: #000; +} + +.elfinder-cwd-view-icons .elfinder-cwd-filename { + -webkit-border-radius: 0px; + border-radius: 0px; +} + +.elfinder-cwd-view-icons + .elfinder-cwd-file + .elfinder-cwd-filename.ui-state-hover, +.elfinder-cwd table td.ui-state-hover, +.elfinder-button-menu .ui-state-hover { + background: #2c373d; +} + +.elfinder-cwd-filename input[type="text"] { + border: 0px !important; + padding: 0px !important; +} + +#elfinder { + height: 750px !important; + position: relative; +} + +.elfinder-cwd table tr:nth-child(2n + 1) { + background: #d3d3d3; +} + +.elfinder-cwd table tr { + border-top: 1px solid #ccc; +} + +.elfinder-cwd table tr td { + padding: 5px 12px !important; +} + +.elfinder-workzone { + clear: both; +} + +#elfinder .ui-dialog { + border: 1px solid #ccc; + position: absolute !important; +} + +.navbar-branding .navbar-brand { + float: left; +} + +.navbar-branding .navbar-version { + opacity: 0.5; + font-size: 12px; + height: 60px; + line-height: 60px; + padding: 0 15px; + color: #666; + float: left; +} + +.navbar .label { + position: relative; + top: 15px; + float: left; + height: 28px; +} + +body.sb-top .navbar-branding { + width: 250px; +} + +.flags { + margin: -4px 0 0 20px !important; + background: none; + cursor: move; +} + +.flags:hover { + border: 0px !important; + background: none !important; +} + +.flags img { + height: 10px; + margin-right: 5px; + opacity: 0.4; +} + +.CodeMirror { + height: 500px !important; +} + +.nav > li > a { + font-size: 12px; +} + +#newsletter-preview { + border: 1px solid #ccc; + padding: 20px; +} + +div.jqi .jqititle { + margin-bottom: 0; +} + +#google-preview { + padding: 10px; +} + +.google-title { + color: #1a0dab; + font-family: arial, sans-serif; + cursor: pointer; + font-size: 18px; + line-height: 21.6px; + width: 600px; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.google-url { + color: rgb(0, 102, 33); + font-family: arial, sans-serif; + font-size: 14px; + line-height: 16px; + width: 600px; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.google-description { + color: rgb(84, 84, 84); + font-family: arial, sans-serif; + font-size: 13px; + line-height: 18.2px; + width: 600px; + display: block; +} + +.sidebar-left-content { + background: #114975; +} + +.sidebar-menu li.disable_menu { + pointer-events: none; + opacity: 0.3; +} + +body.sb-top #sidebar_left .sidebar-menu > li > a { + color: #fff; +} + +body.sb-top.sb-top-sm #sidebar_left .sidebar-menu > li > a > span:nth-child(1) { + font-size: 13px; +} + +body.sb-top #sidebar_left .sidebar-menu li > a > span.caret { + color: #fff; +} + +body.sb-top #sidebar_left .sidebar-menu > li.active > a, +body.sb-top #sidebar_left .sidebar-menu > li:hover > a, +body.sb-top #sidebar_left .sidebar-menu > li > a.menu-open, +body.sb-top #sidebar_left .sidebar-menu > li > a:hover, +body.sb-top #sidebar_left .sidebar-menu > li > a:focus { + background: #fff; + color: #114975; +} + +body.sb-top #sidebar_left .sidebar-menu liactive > a > span.caret, +body.sb-top #sidebar_left .sidebar-menu > li:hover > a > span.caret, +body.sb-top #sidebar_left .sidebar-menu > li > a.menu-open > span.caret, +body.sb-top #sidebar_left .sidebar-menu > li > a:hover > span.caret, +body.sb-top #sidebar_left .sidebar-menu > li > a:focus > span.caret { + color: #114975; +} + +.sidebar-menu > li > ul { + background: #fff; + -webkit-box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: -1px 1px 6px rgba(0, 0, 0, 0.2); +} + +.sidebar-menu > li > ul > li > a { + color: #114975; + border-bottom: 1px solid #f3f3f3; +} + +body.sb-top #sidebar_left .sidebar-menu > li > ul > li > a.menu-open:after, +body.sb-top #sidebar_left .sidebar-menu > li > ul > li.active > a:after, +body.sb-top #sidebar_left .sidebar-menu > li > ul > li:hover > a:after, +body.sb-top #sidebar_left .sidebar-menu > li > ul > li:focus > a:after { + width: 5px; + left: 0; +} + +.sidebar-menu > li > ul > li > a:hover, +.sidebar-menu > li > ul > li > a:focus { + color: #114975; +} + +.sidebar-menu > li > ul > li:hover > a:after, +.sidebar-menu > li > ul > li:focus > a:after { + background: #70ca63; +} + +body.sb-top #sidebar_left .sidebar-menu > li > ul { + padding-bottom: 0; +} + +.progress-box { + position: absolute; + top: 0px; + width: 100%; + height: 100%; + z-index: 200; + background: #fff; + padding: 0px; + margin-left: -15px; +} + +.progress { + margin: 15px; + height: 35px; + transform: translateY(-100%); + position: relative; + top: 30%; + background-color: #333; +} + +.version { + position: relative; + top: 5%; +} + +.version h3 p { + display: inline-block; +} + +.version h3 { + text-align: center; +} + +.form-group.text-right div { + padding-right: 15px; +} + +.remember { + font-size: 13px !important; +} + +#remember { + display: inline-block !important; + width: 15px; + height: 15px; + top: 2px; + position: relative; +} + +.popo { + display: inline-block; + border: 1px solid; + border-color: red; + border-radius: 50%; + height: 20px; + width: 20px; + text-align: center; +} + +.popover-btn { + cursor: pointer; + position: relative; + display: block; + color: red; + height: 20px; + width: 20px; + text-indent: -4px; +} + +.mfp-auto-cursor .mfp-content { + max-width: 1000px; +} + +.mfp-auto-cursor .mfp-content .col-lg-9, +.mfp-auto-cursor .mfp-content .row { + width: 100%; + float: none; + max-width: 1000px; +} + +.mfp-auto-cursor .mfp-content .g-container { + max-width: 1000px; +} + +.mfp-close, +.mfp-close:active { + right: -7px; + top: -27px; + background: #fff !important; +} + +.affix { + top: 0; + z-index: 100; + /* left:0px;*/ +} + +.affix + .panel-heading { + padding-top: 70px; +} + +.g-container hr { + margin: 5px 0; +} + +.resp-vtabs > .resp-tabs-list li { + background: rgba(134, 145, 178, 0.1) !important; +} + +.resp-vtabs li.resp-tab-active { + background: #8691b2 !important; + color: #fff; + border-left: 0 !important; + border: 1px solid #8691b2 !important; +} + +.resp-vtabs > .resp-tabs-container { + border: 0 !important; + border-left: 1px solid #e5e5e5 !important; +} + +@media (min-width: 1199px) { + .g-container .panel-body form { + max-width: 1400px; + } +} + +@media (max-width: 900px) { + body.sb-top #toggle_sidemenu_t { + width: 60px; + } +} + +/**/ + +.site-content { + margin-left: 0px; +} + +@media (min-width: 1200px) { + .site-content { + margin-left: 250px; + width: calc(100% - 250px); + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .site-content.with-menu { + width: calc(100% - 250px); + margin-left: 250px; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .site-content.with-menu { + width: calc(100% - 250px); + margin-left: 250px; + } +} + +@media (min-width: 576px) and (max-width: 767px) { + .site-content.with-menu { + width: calc(100% - 250px); + margin-left: 250px; + } +} + +@media (max-width: 575px) { + .site-content.with-menu { + margin-left: 0; + width: 100%; + } + + .site-content { + margin-left: 0; + width: 100%; + } +} + +.menu-left { + position: fixed; + left: 0; + top: 0; + + height: 100%; + background-color: #2a3042; + z-index: 9999; + width: 250px; + padding: 0 15px; + overflow: scroll; + scrollbar-width: none; + -ms-overflow-style: none; + overflow-y: scroll; + overflow-x: hidden; + scrollbar-width: none; + /* Firefox */ + -ms-overflow-style: none; + /* IE 10+ */ + overflow-y: scroll; + overflow-x: hidden; + display: none; +} + +@media (min-width: 1200px) { + .menu-left { + display: block; + } +} + +@media (max-width: 575px) { + .menu-left { + width: 100vw; + } +} + +.menu-left.visible { + display: block; +} + +.menu-left::-webkit-scrollbar { + display: none; + /* Chrome Safari */ + width: 0; + height: 0; +} + +.menu-left a:hover { + text-decoration: none; +} + +.logo { + width: 100%; + color: #fff; + background-color: #2a3042; + text-align: center; + padding: 20px 0; + font-size: 24px; + font-weight: 400; + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.menu-left .logo .logo-cmspro { + width: 100%; + color: #fff; + + text-align: center; + padding: 20px 0; + font-size: 24px; + font-weight: 400; +} + +.menu-left .logo .version-cmspro { + font-size: 11px; + color: #8691b2; +} + +.menu-left .logo .update-cmspro { + color: #2a3042; + font-size: 14px; + font-weight: 400; + line-height: 27px; + padding: 7px 15px; + background: #fff; + display: inline-block; + border-radius: 30px; + transition: 0.3s all ease; + margin-top: 10px; +} + +.menu-left .logo .update-cmspro:hover { + text-decoration: none; + background: #8691b2; + color: #fff; +} + +.menu-left .menu-content .title { + text-transform: uppercase; + color: #8691b2; + font-size: 12px; + font-weight: 700; + margin-bottom: 10px; +} + +.menu-left .menu-content ul li a { + color: #8691b2; + font-size: 13px; + font-weight: 400; + line-height: 27px; + padding: 4px 0; + display: block; +} + +.menu-left .menu-content ul li a:hover { + color: #fff; + text-decoration: none; +} + +.menu-left .menu-content ul li a:focus { + text-decoration: none; +} + +.menu-left .menu-content ul { + list-style-type: none; + padding-inline-start: 0; +} + +.menu-left .menu-content .preview { + width: 100%; + background: #2a3042; + text-align: center; + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +.menu-left .menu-content .preview a { + text-transform: uppercase; + padding: 20px 0; + color: #8691b2; + font-size: 12px; + font-weight: 700; + margin-bottom: 10px; + display: inline-block; + margin-bottom: 0; +} + +.menu-left .menu-content .preview a:hover { + color: #fff; + width: 100%; + height: 100%; +} + +.menu-left .menu-content ul li a img { + margin-right: 10px; + width: 20px; + text-align: center; +} + +.menu-left .menu-content ul li a:hover img { + filter: brightness(200%); +} + +.menu-left .menu-content .preview a img { + margin-top: -4px; + margin-right: 5px; + width: 20px; + text-align: center; +} + +.menu-left .menu-content .preview a:hover img { + filter: brightness(200%); +} + +.mobile-menu-btn { + position: fixed; + right: 10px; + bottom: 10px; + z-index: 9999; + height: 50px; + width: 50px; + color: #fff; + background: #2a3042; + line-height: 50px; + text-align: center; + font-size: 25px; + cursor: pointer; + border-radius: 50%; + display: none; +} + +@media (max-width: 575px) { + .mobile-menu-btn.active { + color: #2a3042; + background: #fff; + /* background: #8691b2; + color: #fff;*/ + } +} + +@media (max-width: 1199px) { + .mobile-menu-btn { + display: block; + } +} + +@media (max-width: 767px) { + .pull-right-above-sm .btn { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 0; + } +} + +@media (min-width: 768px) { + .pull-right-above-sm { + text-align: right; + float: right; + } +} + +@media (max-width: 767px) { + .pull-right-above-sm #g-columns-list { + rigth: auto; + left: 14px; + } +} + +@media (max-width: 767px) { + .text-centred-xs { + text-align: center !important; + } +} + +.table-responsive input { + min-width: 150px; +} + +.table-responsive select { + min-width: 130px; +} + +@media (max-width: 768px) { + .resp-tabs-container h2.resp-accordion .fa { + margin-right: 10px; + } +} + +@media (max-width: 1199px) { + body.sb-top .navbar-branding { + display: block; + width: 100px; + } + + body.sb-top .navbar-branding.with-menu { + display: none; + } +} + +@media (min-width: 1200px) { + body.sb-top .navbar-branding { + display: none; + } +} + +@media (max-width: 400px) { + body.sb-top .navbar-branding { + display: none; + } +} + +.pagination { + margin-bottom: 0; +} + +.pagination li.disabled { + opacity: 0.5; + pointer-events: none; +} + +.site-content #content_wrapper { + margin-left: 0; +} + +.menu_sortable .content.ui-sortable-handle { + position: relative; + display: -webkit-box; + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 1; +} + +#article-list .content.ui-sortable-handle { + position: relative; + display: -webkit-box; + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} + +.g-container { + position: relative; + overflow: hidden; + width: 100%; +} + +@media (max-width: 768px) { + .resp-vtabs > .resp-tabs-container { + padding: 0; + } +} + +@media (max-width: 576px) { + .panel-body { + padding: 15px 5px; + } +} + +@media (max-width: 768px) { + #g-results { + margin-top: 30px; + } +} + +/*wygląd*/ +.panel-info.panel-border { + border-color: #8691b2; +} + +.sortable li.sort-expanded > div > .disclose > span:before { + color: #8691b2; + border: 1px solid #8691b2; + background: rgba(134, 145, 178, 0.1); + transition: 0.3s all ease; +} + +.sortable li.sort-collapsed > div > .disclose:hover > span:before, +.sortable li.sort-expanded > div > .disclose:hover > span:before { + background: #8691b2; + color: #fff; +} + +.btn-success, +.btn-system, +.btn-danger, +.btn-info { + color: #fff; + padding: 0.47rem 0.75rem; + font-size: 13px; + line-height: 1.5; + font-weight: 300; + border-radius: 0.25rem; + + transition: 0.15s all ease; +} + +.btn-danger#g-columns-list-close, +.btn-dark#g-select-columns { + padding: 9px 12px; +} + +.btn .fa { + width: 14px; + height: 14px; +} + +.btn-dark { + border-radius: 0.25rem; +} + +.btn-success { + color: #fff; + background-color: #1cbb8c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active { + background-color: #179a73; +} + +.btn-system { + background-color: #fcb92c; +} + +.btn-system:hover, +.btn-system:focus, +.btn-system:active { + background-color: #fbac06; +} + +.btn-danger { + background-color: #ff3d60; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active { + background-color: #ff1741; +} + +.btn-info { + background-color: #5664d2; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active { + background-color: #3848ca; +} + +.panel-info > .panel-heading > .panel-title { + font-size: 15px; + font-weight: 700; + text-transform: uppercase; + color: #2a3042; +} + +#main:before { + background: #f3f4f7; +} + +a { + color: #818eb8; +} + +a:hover, +a:focus { + color: #2a3042; + text-decoration: none; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + background-color: #818eb8; + border-color: #818eb8; +} + +#g-columns-list ul li { + text-align: left; +} + +.navbar .nav > li.dropdown.open .dropdown-menu:after, +.navbar .nav > li.dropdown .open .dropdown-menu:after { + border-bottom-color: #2a3042; +} + +.navbar .nav > li.dropdown.open .dropdown-menu, +.navbar .nav > li.dropdown .open .dropdown-menu { + border-top-color: #2a3042; +} + +.panel.panel-border > .panel-heading { + background-color: #fff; + + .btn { + height: 30px; + } +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f6f7f9; +} + +div.switch.switch-primary input:checked + label { + background-color: #8691b2; +} + +.cm-s-material { + background-color: #2a3042 !important; +} + +.icheckbox_minimal-blue.ui-sortable-handle.hover { + background: #fff; + background: url(/libraries/grid/plugins/icheck/skins/minimal/blue.png) + no-repeat; + background-position: 0 0 !important; +} + +.table-hover > tbody > tr > td, +.table-hover > tbody > tr > th { + transition: all 0.3s ease; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: rgba(134, 145, 178, 0.12) !important; +} + +.dropdown-context { + border-top: 3px solid #2a3042 !important; +} + +.dropdown-context:after, +.dropdown-context-up:after { + border-bottom: 6px solid #2a3042 !important; +} + +.input-group-addon { + color: #2a3042; +} + +.g-tip .fa:before { + color: #2a3042; +} + +.table-responsive > .table > thead > tr > th, +.table-responsive > .table > thead > tr > td { + border: none; + border-bottom: 1px solid #eeeeee; +} + +.table-responsive > .table > tbody > tr > th, +.table-responsive > .table > tfoot > tr > th, +.table-responsive > .table > tbody > tr > td, +.table-responsive > .table > tfoot > tr > td { + border: none; +} + +.input-group-addon { + background: rgba(134, 145, 178, 0.1); +} + +.pagination { +} + +.pagination > li > a { + padding: 0; + width: 30px; + height: 30px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50%; + margin-right: 5px; +} + +.pagination > li:first-child > a { + border-bottom-left-radius: 50%; + border-top-left-radius: 50%; +} + +.pagination > li:last-child > a { + border-bottom-right-radius: 50%; + border-top-right-radius: 50%; +} + +.form-control { + border-radius: 0.25rem; +} + +.input-group-addon:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.resp-tab-active { + border: 1px solid #8691b2 !important; + + border-top: 2px solid #8691b2 !important; +} + +.resp-tabs-container h2.resp-accordion { + background: rgba(134, 145, 178, 0.1) !important; +} + +.resp-tabs-container h2.resp-accordion.resp-tab-active { + background: #8691b2 !important; + color: #fff; +} + +h2.resp-tab-active span.resp-arrow { + border-bottom: 12px solid #fff; +} + +.resp-tabs-container { + border: rgba(134, 145, 178, 0.1); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: rgba(134, 145, 178, 0.1); +} + +.alert { + border-radius: 0.25rem; +} + +.panel { + border-radius: 0.25rem; +} + +.panel-body { + border-radius: 0.25rem; +} + +.tooltipster-base { + background-color: #2a3042 !important; +} + +.tooltipster-punk { + border-color: #8691b2 !important; +} + +.form-control:focus { + border-color: #8691b2; +} + +@media (max-width: 576px) { + #content { + padding: 15px 0px 40px 0px; + } +} diff --git a/admin/css/icons/backup-line.svg b/admin/css/icons/backup-line.svg new file mode 100644 index 0000000..9f9d54f --- /dev/null +++ b/admin/css/icons/backup-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/bx-at.svg b/admin/css/icons/bx-at.svg new file mode 100644 index 0000000..f0235d4 --- /dev/null +++ b/admin/css/icons/bx-at.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/bx-news.svg b/admin/css/icons/bx-news.svg new file mode 100644 index 0000000..efb5b8d --- /dev/null +++ b/admin/css/icons/bx-news.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/container-solid.svg b/admin/css/icons/container-solid.svg new file mode 100644 index 0000000..c852656 --- /dev/null +++ b/admin/css/icons/container-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/double-right-outlined.svg b/admin/css/icons/double-right-outlined.svg new file mode 100644 index 0000000..ebd756b --- /dev/null +++ b/admin/css/icons/double-right-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/email.svg b/admin/css/icons/email.svg new file mode 100644 index 0000000..453130a --- /dev/null +++ b/admin/css/icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/image.svg b/admin/css/icons/image.svg new file mode 100644 index 0000000..2e6fd6d --- /dev/null +++ b/admin/css/icons/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/language.svg b/admin/css/icons/language.svg new file mode 100644 index 0000000..8a1144a --- /dev/null +++ b/admin/css/icons/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/letter-aa.svg b/admin/css/icons/letter-aa.svg new file mode 100644 index 0000000..1d73f6f --- /dev/null +++ b/admin/css/icons/letter-aa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/list-settings-line.svg b/admin/css/icons/list-settings-line.svg new file mode 100644 index 0000000..d4045e2 --- /dev/null +++ b/admin/css/icons/list-settings-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/menu-alt.svg b/admin/css/icons/menu-alt.svg new file mode 100644 index 0000000..37d6eb4 --- /dev/null +++ b/admin/css/icons/menu-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/news-24-regular.svg b/admin/css/icons/news-24-regular.svg new file mode 100644 index 0000000..97bba87 --- /dev/null +++ b/admin/css/icons/news-24-regular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/people-fill.svg b/admin/css/icons/people-fill.svg new file mode 100644 index 0000000..b4eb028 --- /dev/null +++ b/admin/css/icons/people-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/photo-video.svg b/admin/css/icons/photo-video.svg new file mode 100644 index 0000000..793f5f3 --- /dev/null +++ b/admin/css/icons/photo-video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/send.svg b/admin/css/icons/send.svg new file mode 100644 index 0000000..d6215b7 --- /dev/null +++ b/admin/css/icons/send.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/settings-20-filled.svg b/admin/css/icons/settings-20-filled.svg new file mode 100644 index 0000000..0272019 --- /dev/null +++ b/admin/css/icons/settings-20-filled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/template-2.svg b/admin/css/icons/template-2.svg new file mode 100644 index 0000000..00eb0a7 --- /dev/null +++ b/admin/css/icons/template-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/icons/template.svg b/admin/css/icons/template.svg new file mode 100644 index 0000000..15e2704 --- /dev/null +++ b/admin/css/icons/template.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/css/lang-de.jpg b/admin/css/lang-de.jpg new file mode 100644 index 0000000..e821f55 Binary files /dev/null and b/admin/css/lang-de.jpg differ diff --git a/admin/css/lang-en.jpg b/admin/css/lang-en.jpg new file mode 100644 index 0000000..9929fd8 Binary files /dev/null and b/admin/css/lang-en.jpg differ diff --git a/admin/css/lang-fr.jpg b/admin/css/lang-fr.jpg new file mode 100644 index 0000000..fd0c92d Binary files /dev/null and b/admin/css/lang-fr.jpg differ diff --git a/admin/css/lang-it.jpg b/admin/css/lang-it.jpg new file mode 100644 index 0000000..960870e Binary files /dev/null and b/admin/css/lang-it.jpg differ diff --git a/admin/css/lang-pl.jpg b/admin/css/lang-pl.jpg new file mode 100644 index 0000000..85c5140 Binary files /dev/null and b/admin/css/lang-pl.jpg differ diff --git a/admin/css/lang-ru.jpg b/admin/css/lang-ru.jpg new file mode 100644 index 0000000..40d8a66 Binary files /dev/null and b/admin/css/lang-ru.jpg differ diff --git a/admin/css/lang-uk.jpg b/admin/css/lang-uk.jpg new file mode 100644 index 0000000..51dc892 Binary files /dev/null and b/admin/css/lang-uk.jpg differ diff --git a/admin/css/user-icon.png b/admin/css/user-icon.png new file mode 100644 index 0000000..a8af7c7 Binary files /dev/null and b/admin/css/user-icon.png differ diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..a29ddc4 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,86 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +$user = \S::get_session( 'user' , true ); + +\admin\Site::special_actions(); + +$domain = preg_replace( '#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME'] ); +$cookie_name = str_replace( '.', '-', $domain ); + +if ( isset( $_COOKIE[$cookie_name] ) && !isset( $_SESSION['user'] ) ) +{ + $obj = json_decode( $_COOKIE[$cookie_name] ); + $login = $obj -> {'login'}; + $password = $obj -> {'hash'}; + + if ( $mdb -> get( 'pp_users', '*', + [ 'AND' => + [ 'login' => $login, 'status' => 1, 'password' => $password, + 'OR' => [ 'active_to[>=]' => date( 'Y-m-d' ), 'active_to' => null ] + ] + ] ) ) + { + \S::set_session( 'user', \admin\factory\Users::details( $login ) ); + header( 'Location: /admin/articles/view_list/' ); + exit; + } +} +echo \admin\view\Page::show(); +?> \ No newline at end of file diff --git a/admin/ip.conf b/admin/ip.conf new file mode 100644 index 0000000..e69de29 diff --git a/admin/temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be b/admin/temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be new file mode 100644 index 0000000..58adabd Binary files /dev/null and b/admin/temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be differ diff --git a/admin/templates/.htaccess b/admin/templates/.htaccess new file mode 100644 index 0000000..4aba16f --- /dev/null +++ b/admin/templates/.htaccess @@ -0,0 +1,20 @@ +# Wyłącz listowanie +Options -Indexes + +# Domyślnie blokujemy wszystko… +Require all denied + +# …a dopiero potem pozwalamy na pliki statyczne + + Require all granted + + +# Twardo blokuj cokolwiek, co mogłoby się wykonać + + Require all denied + + +# Nie serwuj plików ukrytych (.env itp.) + + Require all denied + \ No newline at end of file diff --git a/admin/templates/articles/article-edit.php b/admin/templates/articles/article-edit.php new file mode 100644 index 0000000..4a3bbeb --- /dev/null +++ b/admin/templates/articles/article-edit.php @@ -0,0 +1,1205 @@ + + + + $this -> user['id'], + 'expires' => time() + 60*20 +]; + +$_SESSION['rfm_akey'] = bin2hex(random_bytes(16)); +$_SESSION['rfm_akey_expires'] = time() + 20*60; +$_SESSION['can_use_rfm'] = true; +$rfmAkeyJS = $_SESSION['rfm_akey']; + +ob_start(); +?> +
+
    +
  • Treść
  • +
  • Ustawienia
  • + +
  • Tagi
  • + +
  • SEO
  • +
  • Wyświetlanie
  • +
  • Galeria
  • +
  • Załączniki
  • + additional_params_lon ) and count( $this -> additional_params_lon ) or is_array( $this -> additional_params_loff ) and count( $this -> additional_params_loff ) ):?> +
  • + Dodatkowe parametry +
  • + +
  • + Inne +
  • +
+
+
+
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • ';?>
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + languages ) ) foreach ( $this -> languages as $lg_tmp ) + { + if ( $lg_tmp['id'] != $lg['id'] ) + $languages[ $lg_tmp['id'] ] = $lg_tmp['name']; + } + ?> + +
+ 'Wyświetlaj treść z wersji', + 'name' => 'copy_from', + 'values' => $languages, + 'value' => $this -> article['languages'][ $lg['id'] ]['copy_from'], + ) + );?> + 'Tytuł', + 'name' => 'title', + 'id' => 'title_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['title'], + 'inline' => true, + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + );?> + 'Zdjęcie tytułowe', + 'name' => 'main_image', + 'id' => 'main_image_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['main_image'], + 'icon_content' => 'przeglądaj', + 'inline' => true, + 'icon_js' => "window.open ( '/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=main_image_" . $lg['id'] . "&akey=" . $rfmAkeyJS . "', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');" + ] ); + ?> + 'Wstęp', + 'name' => 'entry', + 'id' => 'entry_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['entry'], + 'inline' => true + ) + );?> + 'Treść', + 'name' => 'text', + 'id' => 'text_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['text'], + 'inline' => true + ) + );?> + 'Spis treści', + 'name' => 'table_of_contents', + 'id' => 'table_of_contents_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['table_of_contents'], + 'inline' => true + ] );?> + +
+ + +
+
+
+
+
+ authors ) ): + foreach ( $this -> authors as $author ): + $authors[ $author['id'] ] = $author['author']; + endforeach; + endif; + ?> + 'Autor', + 'name' => "id_author", + 'id' => 'id_author', + 'values' => $authors, + 'value' => $this -> article['id_author'] + ] );?> + 'Opublikowany', + 'name' => 'status', + 'checked' => $this -> article['status'] == 1 or !$this -> article['id'] ? true : false + ) + );?> + 'Artykuł priorytetowy', + 'name' => 'priority', + 'checked' => $this -> article['priority'] == 1 ? true : false + ) + );?> + 'Pokaż tytuł', + 'name' => 'show_title', + 'checked' => $this -> article['show_title'] == 1 ? true : false + ) + );?> + 'Pokaż spis treści', + 'name' => 'show_table_of_contents', + 'checked' => $this -> article['show_table_of_contents'] == 1 ? true : false + ] );?> + 'Pokaż datę dodania', + 'name' => 'show_date_add', + 'checked' => $this -> article['show_date_add'] == 1 ? true : false + ) + );?> + 'Data dodania', + 'class' => 'date-time', + 'name' => 'date_add', + 'id' => 'date_add', + 'value' => $this -> article['date_add'] + ] );?> + 'Pokaż datę modyfikacji', + 'name' => 'show_date_modify', + 'checked' => $this -> article['show_date_modify'] == 1 ? true : false + ) + );?> + 'Data modyfikacji', + 'class' => 'date-time', + 'name' => 'date_modify', + 'id' => 'date_modify', + 'value' => $this -> article['date_modify'] + ) + );?> + 'Powtórz wprowadzenie', + 'name' => 'repeat_entry', + 'checked' => $this -> article['repeat_entry'] == 1 ? true : false + ) + );?> + 'Linki do portali społecznościowych', + 'name' => 'social_icons', + 'checked' => $this -> article['social_icons'] == 1 ? true : false + ) + ); ?> + 'Zabezpiecz hasłem', + 'name' => 'password', + 'id' => 'password', + 'value' => $this -> article['password'] + ) + );?> + 'Moduł Pixieset', + 'name' => "pixieset", + 'id' => 'pixieset', + 'values' => [ 0 => 'wyłączony', 1 => 'pobieranie', 2 => 'pobieranie i wybieranie' ], + 'value' => $this -> article['pixieset'] + ] );?> + + 'Data wydarzenia', + 'class' => 'date-range', + 'name' => 'event_date', + 'id' => 'event_date', + 'value' => ( $this -> article['date_start' ] and $this -> article['date_end'] ) ? $this -> article['date_start'] . ' - ' . $this -> article['date_end'] : '', + 'icon_class' => 'date-range-icon', + 'icon_content' => '' + ) + );?> + +
+ +
+
+ +
+ +
+
+
+
+ +
+
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • ';?>
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + +
+ 'Link SEO', + 'name' => 'seo_link', + 'id' => 'seo_link_' . $lg['id'], + 'value' => $this -> article['languages' ][ $lg['id'] ]['seo_link'], + 'icon_content' => 'generuj', + 'icon_js' => 'generate_seo_links( "' . $lg['id'] . '", $( "#title_' . $lg['id'] . '" ).val(), ' . (int)$this -> article['id'] . ' );', + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + );?> + 'Meta title', + 'name' => 'meta_title', + 'id' => 'meta_title_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['meta_title'], + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + );?> + 'Meta description', + 'name' => 'meta_description', + 'id' => 'meta_description_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['meta_description'], + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + );?> + 'Meta keywords', + 'name' => 'meta_keywords', + 'id' => 'meta_keywords_' . $lg['id'], + 'value' => $this -> article['languages'][ $lg['id'] ]['meta_keywords'] + ) + );?> +
+ +
+
+
+
+
+
+
+
+ 'Blokuj indeksację', + 'name' => "noindex", + 'id' => 'noindex_' . $lg['id'], + 'values' => array( + 0 => 'nie', 1 => 'tak' + ), + 'value' => $this -> article['languages'][ $lg['id'] ]['noindex'] == 1 ? 1 : 0 + ) + );?> + 'Blokuj bezpośredni dostęp', + 'name' => "block_direct_access", + 'id' => 'block_direct_access_' . $lg['id'], + 'values' => array( + 0 => 'nie', 1 => 'tak' + ), + 'value' => $this -> article['languages'][ $lg['id'] ]['block_direct_access'] == 1 ? 1 : 0 + ) + );?> +
+ + +
+
+
+
+
+ layouts ) ): foreach ( $this -> layouts as $layout ): + $layouts[ $layout['id'] ] = $layout['name']; + endforeach; endif; + ?> + 'Szablon', + 'name' => 'layout_id', + 'id' => 'layout_id', + 'values' => $layouts, + 'value' => $this -> article['layout_id'] + ) + );?> +
+ +
+ menus ) ) foreach ( $this -> menus as $menu ) + { + ?> + + +
+
+
+
+
+
    + article['images'] ) ): foreach ( $this -> article['images'] as $img ): + ?> +
  • + + + + + +
  • + +
+
You browser doesn't have Flash installed.
+
+
+
    + article['files'] ) ): foreach ( $this -> article['files'] as $file ): + + if ( $file['name'] ) + $name = $file['name']; + else + { + $name = explode( '/', $file['src'] ); + $name = $name[ count( $name ) - 1 ]; + } + ?> +
  • +
    + + + + +
    +
  • + +
+
You browser doesn't have Flash installed.
+
+ additional_params_lon ) and count( $this -> additional_params_lon ) or is_array( $this -> additional_params_loff ) and count( $this -> additional_params_loff ) ):?> +
+ article['params'] ) ) foreach ( $this -> article['params'] as $param ) + $params[ $param['param_id'] . '_' . $param['language_id'] ] = $param['value']; + ?> + additional_params_loff ) and count( $this -> additional_params_loff ) ):?> + additional_params_loff as $param ):?> + + $param['display_name'], + 'class' => 'date', + 'name' => 'ap_' . $param['name'], + 'id' => 'ap_' . $param['name'], + 'value' => $params[ $param['id'] . '_' ] + ) + );?> + + + $param['display_name'], + 'name' => 'ap_' . $param['name'], + 'id' => 'ap_' . $param['name'], + 'checked' => $params[ $param['id'] . '_' ] == 'on' ? true : false + ) + );?> + + + $param['display_name'], + 'name' => 'ap_' . $param['name'], + 'id' => 'ap_' . $param['name'], + 'value' => $params[ $param['id'] . '_' ] + ) + );?> + + + $param['display_name'], + 'name' => 'ap_' . $param['name'], + 'id' => 'ap_' . $param['name'], + 'value' => $params[ $param['id'] . '_' ], + 'inline' => true + ) + );?> + + + + + additional_params_lon ) and count( $this -> additional_params_lon ) ):?> +
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • ';?>
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + +
+ additional_params_lon as $param ):?> + + $param['display_name'], + 'name' => 'ap_' . $param['name'] . '_' . $lg['id'], + 'id' => 'ap_' . $param['name'] . '_' . $lg['id'], + 'value' => $params[ $param['id'] . '_' . $lg['id'] ] + ) + );?> + + + $param['display_name'], + 'name' => 'ap_' . $param['name'] . '_' . $lg['id'], + 'id' => 'ap_' . $param['name'] . '_' . $lg['id'], + 'value' => $params[ $param['id'] . '_' . $lg['id'] ], + 'inline' => true + ) + );?> + + + +
+ + +
+
+ +
+ +
+
Zdjęcia wybrane przez użytkownika (wymagany włączony moduł Pixieset)
+ article['images'] ) ):?> +
    + article['images'] as $image ):?> + +
  • + + +
+ +
+
+
+ id = 'article-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja artykułu'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> article['id'] + ] + ]; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/articles/article_save/', 'back_url' => '/admin/articles/view_list/' ], + 'cancel' => [ 'url' => '/admin/articles/view_list/' ] + ]; +$grid -> external_code = $out; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> + + + + + + + + + + \ No newline at end of file diff --git a/admin/templates/articles/articles-archive-list.php b/admin/templates/articles/articles-archive-list.php new file mode 100644 index 0000000..2cd5df4 --- /dev/null +++ b/admin/templates/articles/articles-archive-list.php @@ -0,0 +1,67 @@ + gdb_opt = $gdb; +$grid -> sql = 'SELECT *' + . 'FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_articles AS pa WHERE status = -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] ' + . 'ORDER BY ' + . '[order_p1] [order_p2]'; +$grid -> sql_count = 'SELECT ' + . 'COUNT(0) FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_articles AS pa WHERE status = -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] '; +$grid -> debug = true; +$grid -> order = [ 'column' => 'date_add', 'type' => 'DESC' ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tytuł', + 'db' => 'id', + 'replace' => [ 'sql' => "SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = [id] AND title != '' ORDER BY o ASC LIMIT 1" ] + ], + [ + 'name' => 'Data dodania', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 140px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_add]" ) );' + ], + [ + 'name' => 'Data modyfikacji', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 140px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_modify]" ) );' + ], + [ + 'name' => 'Akcja', + 'th' => [ 'class' => 'g-center' ], + 'td' => [ 'class' => 'g-center', 'style' => 'width: 50px;' ], + 'content' => 'przywróć' + ], + [ + 'name' => 'Akcja', + 'action' => [ 'type' => 'delete', 'url' => '/admin/articles_archive/article_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center' ], + 'td' => [ 'class' => 'g-center', 'style' => 'width: 50px;' ] + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/articles/articles-browse-list.php b/admin/templates/articles/articles-browse-list.php new file mode 100644 index 0000000..706a7ed --- /dev/null +++ b/admin/templates/articles/articles-browse-list.php @@ -0,0 +1,121 @@ + gdb_opt = $gdb; +$grid -> sql = 'SELECT *' + . 'FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title, ' + . '( SELECT login FROM pp_users AS pu WHERE pu.id = pa.modify_by ) AS user ' + . 'FROM ' + . 'pp_articles AS pa WHERE status != -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] ' + . 'ORDER BY ' + . '[order_p1] [order_p2]'; +$grid -> sql_count = 'SELECT ' + . 'COUNT(0) FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title, ' + . '( SELECT login FROM pp_users AS pu WHERE pu.id = pa.modify_by ) AS user ' + . 'FROM ' + . 'pp_articles AS pa WHERE status != -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] '; +$grid -> debug = true; +$grid -> order = [ 'column' => 'date_add', 'type' => 'DESC' ]; +$grid -> search = [ + [ 'name' => 'Tytuł', 'db' => 'title', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ], + [ 'name' => 'Data dodania', 'db' => 'date_add', 'type' => 'date_range' ], + [ 'name' => 'Data modyfikacji', 'db' => 'date_modify', 'type' => 'date_range' ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tytuł', + 'db' => 'title', + 'sort' => true, + 'php' => 'echo "[title]"; echo "" . \admin\factory\Articles::article_pages( [id] ) . "";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'sort' => true + ], + [ + 'name' => 'Data dodania', + 'db' => 'date_add', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_add]" ) );' + ], + [ + 'name' => 'Data modyfikacji', + 'db' => 'date_modify', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_modify]" ) );' + ], + [ + 'name' => 'Modyfikowany przez', + 'db' => 'user', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + ], + [ + 'name' => 'Akcja', + 'db' => 'id', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 120px;' ], + 'php' => 'echo "wybierz";' + ] + ]; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/articles/articles-list.php b/admin/templates/articles/articles-list.php new file mode 100644 index 0000000..0419a15 --- /dev/null +++ b/admin/templates/articles/articles-list.php @@ -0,0 +1,144 @@ + gdb_opt = $gdb; +$grid -> sql = 'SELECT *' + . 'FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title, ' + . '( SELECT login FROM pp_users AS pu WHERE pu.id = pa.modify_by ) AS user ' + . 'FROM ' + . 'pp_articles AS pa WHERE status != -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] ' + . 'ORDER BY ' + . '[order_p1] [order_p2]'; +$grid -> sql_count = 'SELECT ' + . 'COUNT(0) FROM ( ' + . 'SELECT ' + . 'id, date_add, date_modify, status, ' + . '( SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = pa.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title, ' + . '( SELECT login FROM pp_users AS pu WHERE pu.id = pa.modify_by ) AS user ' + . 'FROM ' + . 'pp_articles AS pa WHERE status != -1 ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] '; +$grid -> debug = true; +if ( !\S::get_session( 'gpp_articlesorder' ) ) + $grid -> order = [ 'column' => 'date_add', 'type' => 'DESC' ]; +$grid -> search = [ + [ 'name' => 'Tytuł', 'db' => 'title', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ], + [ 'name' => 'Data dodania', 'db' => 'date_add', 'type' => 'date_range' ], + [ 'name' => 'Data modyfikacji', 'db' => 'date_modify', 'type' => 'date_range' ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tytuł', + 'db' => 'title', + 'sort' => true, + 'php' => 'echo "[title]"; echo "" . \admin\factory\Articles::article_pages( [id] ) . "";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'sort' => true + ], + [ + 'name' => 'Data dodania', + 'db' => 'date_add', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_add]" ) );', + 'sort' => true + ], + [ + 'name' => 'Data modyfikacji', + 'db' => 'date_modify', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[date_modify]" ) );', + 'sort' => true + ], + [ + 'name' => 'Modyfikowany przez', + 'db' => 'user', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 220px;' ], + ], [ + 'name' => 'Akcja', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 120px;' ], + 'php' => 'echo "duplikuj";' + ], [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/articles/article_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/articles/article_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj artykuł', + 'url' => '/admin/articles/article_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/articles/subpages-list.php b/admin/templates/articles/subpages-list.php new file mode 100644 index 0000000..a5e41c8 --- /dev/null +++ b/admin/templates/articles/subpages-list.php @@ -0,0 +1,16 @@ + pages ) ):?> +
    + pages as $page ):?> +
  1. +
    > + + article_pages ) and in_array( $page['id'], $this -> article_pages ) ):?>checked="checked" /> +
    + article_pages, $page['id'], $this -> step + 1 ); + ?> +
  2. + +
+ \ No newline at end of file diff --git a/admin/templates/authors/author-edit.php b/admin/templates/authors/author-edit.php new file mode 100644 index 0000000..5485e72 --- /dev/null +++ b/admin/templates/authors/author-edit.php @@ -0,0 +1,112 @@ + + + +
+
    +
  • Ustawienia
  • +
  • Zawartość
  • +
+
+
+ 'Autor', + 'name' => 'author', + 'id' => 'author', + 'value' => $this -> author['author'], + 'class' => 'require' + ] );?> + 'Zdjęcie', + 'name' => 'image', + 'id' => 'image', + 'value' => $this -> author['image'], + 'icon_content' => 'przeglądaj', + 'icon_js' => "window.open ( '/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=image&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');" + ] );?> +
+
+
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + +
+ 'Opis', + 'name' => 'description', + 'id' => 'description_' . $lg['id'], + 'value' => $this -> author['languages'][$lg['id']]['description'] + ] );?> + +
+ + +
+
+
+
+
+
+ id = 'author-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja autora'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> author['id'] + ] +]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/authors/save/', 'back_url' => '/admin/authors/view_list/' ], + 'cancel' => [ 'url' => '/admin/authors/view_list/' ] +]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/authors/view-list.php b/admin/templates/authors/view-list.php new file mode 100644 index 0000000..7a18417 --- /dev/null +++ b/admin/templates/authors/view-list.php @@ -0,0 +1,41 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'author', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'author' => 'Autor', 'db' => 'name', 'type' => 'text' ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], [ + 'name' => 'Autor', + 'db' => 'author', + 'sort' => true, + 'php' => 'echo "[author]";' + ], [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/authors/edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/authors/delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj autora', + 'url' => '/admin/authors/edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/backups/backup-list.php b/admin/templates/backups/backup-list.php new file mode 100644 index 0000000..d4f6252 --- /dev/null +++ b/admin/templates/backups/backup-list.php @@ -0,0 +1,65 @@ + gdb_opt = $gdb; +$grid -> src = $this -> backups; +$grid -> debug = true; +$grid -> order = [ 'column' => 'name', 'type' => 'DESC' ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'sort' => true, + 'php' => 'echo "[name]";' + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/backups/backup_delete/name=[name]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Utwórz kopie zapasową', + 'url' => '#', + 'icon' => 'fa-plus-circle', + 'class' => 'confirm btn btn-success btn-sm mr5"' + ], + [ + 'label' => 'Pobierz plik restore.php', + 'url' => '/admin/backups/download_restore_file/', + 'icon' => 'fa-download', + 'class' => 'btn btn-system btn-sm mr5"' + ] + ]; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/banners/banner-edit.php b/admin/templates/banners/banner-edit.php new file mode 100644 index 0000000..4f85ac3 --- /dev/null +++ b/admin/templates/banners/banner-edit.php @@ -0,0 +1,185 @@ + + + + +
+
    +
  • Ustawienia
  • +
  • Zawartość
  • +
+
+
+ 'Nazwa', + 'name' => 'name', + 'id' => 'name', + 'value' => $this -> banner['name'], + 'class' => 'require' + ) ); + ?> + 'Aktywny', + 'name' => 'status', + 'checked' => $this -> banner['status'] == 1 or ! $this -> banner['id'] ? true : false + ) + ); + ?> + 'Data rozpoczęcia', + 'name' => 'date_start', + 'id' => 'date_start', + 'value' => $this -> banner['date_start'], + 'class' => 'date' + ) + ); + ?> + 'Data zakończenia', + 'name' => 'date_end', + 'id' => 'date_end', + 'value' => $this -> banner['date_end'], + 'class' => 'date' + ) ); + ?> + 'Slajder / Strona główna', + 'name' => 'home_page', + 'checked' => $this -> banner['home_page'] == 1 ? true : false + ) + ); + ?> +
+
+
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + +
+ 'Obraz', + 'name' => 'src', + 'id' => 'src_' . $lg['id'], + 'value' => $this -> banner['languages'][ $lg['id'] ]['src'], + 'icon_content' => 'przeglądaj', + 'icon_js' => "window.open ( '/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=src_" . $lg['id'] . "&akey=" . $rfmAkeyJS . "', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');" + ) + ); + ?> + 'Url', + 'name' => 'url', + 'id' => 'url_' . $lg['id'], + 'value' => $this -> banner['languages'][ $lg['id'] ]['url'] + ) + ); + ?> + 'Kod html', + 'name' => 'html', + 'id' => 'html_' . $lg['id'], + 'value' => $this -> banner['languages'][$lg['id']]['html'] + ) + ); + ?> + 'Treść', + 'name' => 'text', + 'id' => 'text_' . $lg['id'], + 'value' => $this -> banner['languages'][$lg['id']]['text'] + ) + ); + ?> + +
+ + +
+
+
+
+
+
+ id = 'banner-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja baneru'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> banner['id'] + ] +]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/banners/banner_save/', 'back_url' => '/admin/banners/view_list/' ], + 'cancel' => [ 'url' => '/admin/banners/view_list/' ] +]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/banners/banners-list.php b/admin/templates/banners/banners-list.php new file mode 100644 index 0000000..dcd7eea --- /dev/null +++ b/admin/templates/banners/banners-list.php @@ -0,0 +1,78 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'name', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Nazwa', 'db' => 'name', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'sort' => true, + 'php' => 'echo "[name]";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Strona główna', + 'db' => 'home_page', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Slajder', + 'db' => 'home_page', + 'replace' => [ 'array' => [ 1 => 'nie', 0 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Data rozpoczęcia', + 'th' => [ 'class' => 'g-center', 'style' => 'width: 140px;' ], + 'td' => [ 'class' => 'g-center' ], + 'php' => 'if ( "[date_start]" ) echo date( "Y-m-d", strtotime( "[date_start]" ) ); else echo "-";' + ], + [ + 'name' => 'Data zakończenia', + 'th' => [ 'class' => 'g-center', 'style' => 'width: 140px;' ], + 'td' => [ 'class' => 'g-center' ], + 'php' => 'if ( "[date_end]" ) echo date( "Y-m-d", strtotime( "[date_end]" ) ); else echo "-";' + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/banners/banner_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/banners/banner_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj baner', + 'url' => '/admin/banners/banner_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/emails/email-details.php b/admin/templates/emails/email-details.php new file mode 100644 index 0000000..b405705 --- /dev/null +++ b/admin/templates/emails/email-details.php @@ -0,0 +1,56 @@ + +
+ +
+

email['email'];?>

+
+
+
+ +
+

email['phone'];?>

+
+
+
+ +
+

email['title'];?>

+
+
+
+ +
+

email['mail']);?>

+
+
+
+ +
+

email[add_date] ) )?>

+
+
+ id = 'email-details'; +$grid -> gdb_opt = $gdb; +$grid -> title = 'Szczegóły Wiadomości'; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ '' => '/admin/emails/view_list/', 'back_url' => '/admin/emails/view_list/'], + 'cancel' => [ 'url' => '/admin/emails/view_list/' ] + ]; +$grid -> form = false; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/emails/emails-list.php b/admin/templates/emails/emails-list.php new file mode 100644 index 0000000..b9a5bc6 --- /dev/null +++ b/admin/templates/emails/emails-list.php @@ -0,0 +1,41 @@ + gdb_opt = $gdb; + +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Data', + 'db' => 'add_date', + 'td' => [ ], + 'th' => ['style' => 'width: 220px;' ], + 'php' => 'echo date( "Y-m-d H:i", strtotime( "[add_date]" ) );', + 'sort' => true + + ], + [ + 'name' => 'Email', + 'db' => 'email', + 'content' => '[email]', + 'sort' => true , + ], + [ + 'name' => 'Temat', + 'db' => 'title', + ], + [ + 'name' => 'Szczegóły', + 'content' => 'Szczegóły', + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; + +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/filemanager/filemanager.php b/admin/templates/filemanager/filemanager.php new file mode 100644 index 0000000..9499871 --- /dev/null +++ b/admin/templates/filemanager/filemanager.php @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/admin/templates/html/button.php b/admin/templates/html/button.php new file mode 100644 index 0000000..4bf0f01 --- /dev/null +++ b/admin/templates/html/button.php @@ -0,0 +1,25 @@ + params['class'] . '" '; + + if ( $this -> params['style'] ) + $out .= 'style="' . $this -> params['style'] . '" '; + + if ( $this -> params['js'] ) + $out .= 'onclick="' . htmlspecialchars( $this -> params['js'] ) . '" '; + + if ( $this -> params['url'] ) + $out .= 'href="' . htmlspecialchars( $this -> params['url'] ) . '" '; + + if ( $this -> params['id'] ) + $out .= 'id="' . $this -> params['id'] . '" '; + + if ( $this -> params['title'] ) + $out .= 'title="' . htmlspecialchars( $this -> params['title'] ) . '" '; +$out .= '>'; + if ( $this -> params['icon'] ) + $out .= ''; + $out .= $this -> params['text']; +$out .= ''; + +echo $out; \ No newline at end of file diff --git a/admin/templates/html/form-text.php b/admin/templates/html/form-text.php new file mode 100644 index 0000000..b950f79 --- /dev/null +++ b/admin/templates/html/form-text.php @@ -0,0 +1,8 @@ +
+ +
+

+ params['text'];?> +

+
+
\ No newline at end of file diff --git a/admin/templates/html/input-icon.php b/admin/templates/html/input-icon.php new file mode 100644 index 0000000..3d642c4 --- /dev/null +++ b/admin/templates/html/input-icon.php @@ -0,0 +1,70 @@ + params['label'] ) +{ + $out .= '
'; + $out .= ''; + $out .= '
'; +} + $out .= '
'; + $out .= ' params['type'] . '" '; + + if ( $this -> params['id'] ) + $out .= 'id="' . $this -> params['id'] . '" '; + + if ( $this -> params['class'] or $this -> params['label'] ) + { + if ( $this -> params['label'] ) + $out .= 'class="' . $this -> params['class'] . ' form-control" '; + else if ( $this -> params['class'] ) + $out .= 'class="' . $this -> params['class'] . '" '; + } + + $out .= 'name="' . $this -> params['name'] . '" '; + $out .= 'value="' . $this -> secureHTML( $this -> params['value'] ) . '" '; + + if ( $this -> params['js'] ) + $out .= 'onchange="' . htmlspecialchars( $this -> params['js'] ) . '" '; + + if ( $this -> params['js_key'] ) + $out .= 'onkeyup="' . htmlspecialchars( $this -> params['js_key'] ) . '" '; + + if ( $this -> params['style'] ) + $out .= 'style="' . $this -> params['style'] . '" '; + + if ( $this -> params['readonly'] ) + $out .= 'readonly="readonly" '; + + if ( $this -> params['autocomplete'] == 'off' ) + $out .= 'autocomplete="off" '; + + $out .= ' />'; + + $out .= ' params['icon_js'] ) + $out .= 'onclick="' . htmlspecialchars( $this -> params['icon_js'] ) . '" '; + + $out .= '>'; + $out .= $this -> params['icon_content']; + $out .= ''; + $out .= '
'; + +if ( $this -> params['label'] ) +{ + $out .= '
'; + $out .= '
'; +} + +echo $out; \ No newline at end of file diff --git a/admin/templates/html/input-switch.php b/admin/templates/html/input-switch.php new file mode 100644 index 0000000..79e4d01 --- /dev/null +++ b/admin/templates/html/input-switch.php @@ -0,0 +1,36 @@ + params['label'] ) +{ + $out .= '
'; + $out .= ''; + $out .= '
'; +} + + $out .= '
'; + $out .= ' params['id'] ) + $out .= 'id="' . $this -> params['id'] . '" '; + else + $out .= 'id="' . $this -> params['name'] . '" '; + $out .= 'name="' . $this -> params['name'] . '" type="checkbox"'; + + if ( $this -> params['checked'] ) + $out .= 'checked="checked" '; + + $out .= '>'; + $out .= ''; + $out .= '
'; + +if ( $this -> params['label'] ) +{ + $out .= '
'; + $out .= '
'; +} + +echo $out; \ No newline at end of file diff --git a/admin/templates/html/input.php b/admin/templates/html/input.php new file mode 100644 index 0000000..8d92787 --- /dev/null +++ b/admin/templates/html/input.php @@ -0,0 +1,63 @@ + params['label'] ) +{ + $out .= '
'; + $out .= ''; + $out .= '
'; +} + + $out .= ' params['type'] . '" '; + + if ( $this -> params['id'] ) + $out .= 'id="' . $this -> params['id'] . '" '; + + if ( $this -> params['class'] or $this -> params['label'] ) + { + if ( $this -> params['label'] ) + $out .= 'class="' . $this -> params['class'] . ' form-control" '; + else if ( $this -> params['class'] ) + $out .= 'class="' . $this -> params['class'] . '" '; + } + + $out .= 'name="' . $this -> params['name'] . '" '; + $out .= 'value="' . $this -> secureHTML( $this -> params['value'] ) . '" '; + + if ( $this -> params['style'] ) + $out .= 'style="' . $this -> params['style'] . '" '; + + if ( $this -> params['js'] ) + $out .= 'onchange="' . htmlspecialchars( $this -> params['js'] ) . '" '; + + if ( $this -> params['js_key'] ) + $out .= 'onkeyup="' . htmlspecialchars( $this -> params['js_key'] ) . '" '; + + if ( $this -> params['readonly'] ) + $out .= 'readonly="readonly" '; + + if ( $this -> params['autocomplete'] == 'off' ) + $out .= 'autocomplete="off" '; + + if ( is_array( $this -> params['params'] ) and count( $this -> params['params'] ) ) foreach ( $this -> params['params'] as $key => $val ) + $out .= $key . '="' . $val . '" '; + + $out .= ' />'; + +if ( $this -> params['label'] ) +{ + $out .= '
'; + $out .= '
'; +} + +echo $out; \ No newline at end of file diff --git a/admin/templates/html/panel.php b/admin/templates/html/panel.php new file mode 100644 index 0000000..3fe09ce --- /dev/null +++ b/admin/templates/html/panel.php @@ -0,0 +1,8 @@ +
+
+ params['title'];?> +
+
+ params['content'];?> +
+
\ No newline at end of file diff --git a/admin/templates/html/select.php b/admin/templates/html/select.php new file mode 100644 index 0000000..c2fb33d --- /dev/null +++ b/admin/templates/html/select.php @@ -0,0 +1,62 @@ + params['label'] ) +{ + $out .= '
'; + $out .= ''; + $out .= '
'; +} + + $out .= ''; + +if ( $this -> params['label'] ) +{ + $out .= '
'; + $out .= '
'; +} + +echo $out; \ No newline at end of file diff --git a/admin/templates/html/textarea.php b/admin/templates/html/textarea.php new file mode 100644 index 0000000..13ccc1f --- /dev/null +++ b/admin/templates/html/textarea.php @@ -0,0 +1,52 @@ + params['label'] ) +{ + $out .= '
'; + $out .= ''; + $out .= '
'; +} + + $out .= ''; + +if ( $this -> params['label'] ) +{ + $out .= '
'; + $out .= '
'; +} + +echo $out; \ No newline at end of file diff --git a/admin/templates/languages/language-edit.php b/admin/templates/languages/language-edit.php new file mode 100644 index 0000000..3e17176 --- /dev/null +++ b/admin/templates/languages/language-edit.php @@ -0,0 +1,98 @@ + 'hidden', + 'name' => 'o', + 'value' => $this -> language['o'] + ) + ); + echo \Html::input( + array( + 'label' => 'Język', + 'type' => 'text', + 'class' => 'require', + 'name' => 'name', + 'value' => $this -> language['name'] + ) + ); + if ( $this -> language['id'] ) + { + echo \Html::input( + array( + 'type' => 'hidden', + 'name' => 'id', + 'value' => $this -> language['id'] + ) + ); + } + else + { + echo \Html::input( + array( + 'label' => 'ID (2 znaki)', + 'class' => 'require', + 'type' => 'text', + 'name' => 'id' + ) + ); + } + echo \Html::input_switch( + array( + 'label' => 'Aktywny', + 'name' => 'status', + 'checked' => $this -> language['status'] == 1 ? true : false + ) + ); + echo \Html::input_switch( + array( + 'label' => 'Domyślny', + 'name' => 'start', + 'checked' => $this -> language['start'] == 1 ? true : false + ) + ); + echo '
'; + echo \Html::input( + array( + 'label' => 'Domena', + 'type' => 'text', + 'name' => 'domain', + 'value' => $this -> language['domain'] + ) + ); + echo \Html::input_switch( + array( + 'label' => 'Domena domyślna', + 'name' => 'main_domain', + 'checked' => $this -> language['main_domain'] == 1 ? true : false + ) + ); +$out = ob_get_clean(); + +$grid = new \gridEdit; +$grid -> id = 'language-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja języka'; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/languages/language_save/', 'back_url' => '/admin/languages/view_list/' ], + 'cancel' => [ 'url' => '/admin/languages/view_list/' ] + ]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/languages/languages-list.php b/admin/templates/languages/languages-list.php new file mode 100644 index 0000000..7e121e1 --- /dev/null +++ b/admin/templates/languages/languages-list.php @@ -0,0 +1,72 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'name', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Język', 'db' => 'name', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ], + [ 'name' => 'Domyślny', 'db' => 'start', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Domyślny', + 'db' => 'start', + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ], + 'php' => 'if ( [start] ) echo "tak"; else echo "nie";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Język', + 'db' => 'name', + 'php' => 'echo "[name]";', + 'sort' => true + ], + [ + 'name' => 'Domena', + 'db' => 'domain', + 'sort' => true + ], + [ + 'name' => 'Domena domyślna', + 'db' => 'main_domain', + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ], + 'php' => 'if ( [main_domain] ) echo "tak"; else echo "nie";' + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/languages/language_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/languages/language_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj język', + 'url' => '/admin/languages/language_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/languages/translation-edit.php b/admin/templates/languages/translation-edit.php new file mode 100644 index 0000000..64895ed --- /dev/null +++ b/admin/templates/languages/translation-edit.php @@ -0,0 +1,60 @@ + + 'text', + 'label' => 'Tekst', + 'name' => 'text', + 'class' => 'require', + 'value' => $this -> translation['text'] + ) +); + +if ( is_array( $this -> languages ) ): foreach ( $this -> languages as $language ): + echo \Html::input( + array( + 'type' => 'text', + 'label' => $language['name'], + 'name' => $language['id'], + 'value' => $this -> translation[$language['id']] + ) ); + endforeach; +endif; +$out = ob_get_clean(); + +$grid = new \gridEdit; +$grid -> id = 'translation-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja tłumaczenia'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> translation['id'] + ] +]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/languages/translation_save/', 'back_url' => '/admin/languages/translation_list/' ], + 'cancel' => [ 'url' => '/admin/languages/translation_list/' ] +]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/languages/translations-list.php b/admin/templates/languages/translations-list.php new file mode 100644 index 0000000..a7e2d6d --- /dev/null +++ b/admin/templates/languages/translations-list.php @@ -0,0 +1,44 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'text', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Tekst', 'db' => 'text', 'type' => 'text' ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tekst', + 'db' => 'text', + 'php' => 'echo "[text]";', + 'sort' => true + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/languages/translation_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/languages/translation_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj tłumaczenie', + 'url' => '/admin/languages/translation_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/layouts/layout-edit.php b/admin/templates/layouts/layout-edit.php new file mode 100644 index 0000000..b6b6d1e --- /dev/null +++ b/admin/templates/layouts/layout-edit.php @@ -0,0 +1,262 @@ + + + + + + + + + + + +
+
    +
  • Ustawienia
  • +
  • HTML
  • +
  • CSS
  • +
  • JS
  • +
  • HTML - mobile
  • +
  • CSS - mobile
  • +
  • JS - mobile
  • +
+
+
+ 'Nazwa', + 'name' => 'name', + 'id' => 'name', + 'value' => $this -> layout['name'] + ) + );?> + 'Szablon domyślny', + 'name' => 'status', + 'checked' => $this -> layout['status'] == 1 ? true : false + ) + );?> +
+ +
+ menus ) ) foreach ( $this -> menus as $menu ) + { + ?> + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ id = 'layout-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja szablonu'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> layout['id'] + ] + ]; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/layouts/layout_save/', 'back_url' => '/admin/layouts/view_list/' ], + 'cancel' => [ 'url' => '/admin/layouts/view_list/' ] + ]; +$grid -> external_code = $out; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> \ No newline at end of file diff --git a/admin/templates/layouts/layouts-list.php b/admin/templates/layouts/layouts-list.php new file mode 100644 index 0000000..2a2b379 --- /dev/null +++ b/admin/templates/layouts/layouts-list.php @@ -0,0 +1,47 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'name', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Nazwa', 'db' => 'name', 'type' => 'text' ], + [ 'name' => 'Szablon domyślny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'php' => 'echo "[name]";', + 'sort' => true + ], + [ + 'name' => 'Szablon domyślny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ] + ], + [ + 'name' => 'Akcja', + 'action' => [ 'type' => 'edit', 'url' => '/admin/layouts/layout_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center' ], + 'td' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ] + ], + [ + 'name' => 'Akcja', + 'action' => [ 'type' => 'delete', 'url' => '/admin/layouts/layout_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center' ], + 'td' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ] + ] + ]; +$grid -> buttons = [ + [ 'label' => 'Dodaj szablon', 'url' => '/admin/layouts/layout_edit/', 'icon' => 'fa-plus-circle', 'class' => 'btn-success' ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/layouts/subpages-list.php b/admin/templates/layouts/subpages-list.php new file mode 100644 index 0000000..b2645fe --- /dev/null +++ b/admin/templates/layouts/subpages-list.php @@ -0,0 +1,16 @@ + pages ) ):?> +
    + pages as $page ):?> +
  1. +
    > + + layout_pages ) and in_array( $page['id'], $this -> layout_pages ) ):?>checked="checked" /> +
    + layout_pages, $page['id'], $this -> step + 1 ); + ?> +
  2. + +
+ \ No newline at end of file diff --git a/admin/templates/newsletter/email-template-edit.php b/admin/templates/newsletter/email-template-edit.php new file mode 100644 index 0000000..522adde --- /dev/null +++ b/admin/templates/newsletter/email-template-edit.php @@ -0,0 +1,63 @@ + + + + 'Nazwa', + 'name' => 'name', + 'id' => 'name', + 'value' => $this -> email_template['name'], + 'inline' => true, + 'readonly' => $this -> email_template['is_admin'] ? true : false + ) + );?> + 'Treść', + 'name' => 'text', + 'id' => 'text', + 'value' => $this ->email_template['text'], + 'inline' => true + ) + );?> + + id = 'email-templates-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja szablonu newslettera'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> email_template['id'] + ] + ]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ + 'url' => '/admin/newsletter/template_save/', + 'back_url' => $this -> email_template['is_admin'] ? '/admin/newsletter/email_templates_admin/' : '/admin/newsletter/email_templates_user/' + ], + 'cancel' => [ + 'url' => $this -> email_template['is_admin'] ? '/admin/newsletter/email_templates_admin/' : '/admin/newsletter/email_templates_user/' + ] + ]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/newsletter/email-templates-admin.php b/admin/templates/newsletter/email-templates-admin.php new file mode 100644 index 0000000..be182b7 --- /dev/null +++ b/admin/templates/newsletter/email-templates-admin.php @@ -0,0 +1,28 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'name', 'type' => 'ASC' ]; +$grid -> where = [ 'is_admin' => 1 ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'php' => 'echo "[name]";', + 'sort' => true + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/newsletter/email_template_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/newsletter/email-templates-user.php b/admin/templates/newsletter/email-templates-user.php new file mode 100644 index 0000000..6275e03 --- /dev/null +++ b/admin/templates/newsletter/email-templates-user.php @@ -0,0 +1,42 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'name', 'type' => 'ASC' ]; +$grid -> where = [ 'is_admin' => 0 ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'php' => 'echo "[name]";', + 'sort' => true + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/newsletter/email_template_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/newsletter/email_template_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj szablon', + 'url' => '/admin/newsletter/email_template_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/newsletter/emails-list.php b/admin/templates/newsletter/emails-list.php new file mode 100644 index 0000000..9f9ab33 --- /dev/null +++ b/admin/templates/newsletter/emails-list.php @@ -0,0 +1,38 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'email', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Email', 'db' => 'email', 'type' => 'text' ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Email', + 'db' => 'email', + 'sort' => true + ], + [ + 'name' => 'Potwierdzony', + 'db' => 'status', + 'sort' => true, + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Importuj emaile', + 'url' => '/admin/newsletter/import/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +$grid -> actions = [ 'delete' => true ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/newsletter/import.php b/admin/templates/newsletter/import.php new file mode 100644 index 0000000..fa3c8a2 --- /dev/null +++ b/admin/templates/newsletter/import.php @@ -0,0 +1,41 @@ + + 'Maile (oddzielone nowym wierszem)', + 'name' => 'emails', + 'id' => 'emails' + ) + );?> + + id = 'emails'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Import adresów mailowych'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> element['id'] + ] + ]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ + 'url' => '/admin/newsletter/emails_import/', + 'back_url' => '/admin/newsletter/emails_list/' + ], + 'cancel' => [ + 'url' => '/admin/newsletter/emails_list/' + ] + ]; +$grid -> persist_edit = false; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> \ No newline at end of file diff --git a/admin/templates/newsletter/prepare.php b/admin/templates/newsletter/prepare.php new file mode 100644 index 0000000..9fd7ae9 --- /dev/null +++ b/admin/templates/newsletter/prepare.php @@ -0,0 +1,140 @@ + +
+ +
+
+ + + Dotyczy wysyłki maili z szablonu. +
+
+
+
+ +
+
+ + + + +
+
+
+
+ +
+ templates ) ): foreach ( $this -> templates as $template ): + $templates[ $template['id'] ] = $template['name']; + endforeach; endif; + ?> + 'Szablon', + 'name' => 'template', + 'id' => 'template', + 'values' => $templates, + 'value' => $this -> templates['id'] + + ));?> +
+ +
+
+
+
+ id = 'newsletter-prepare'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Wysyłka newslettera - przygotowanie'; +$grid -> default_buttons = false; +$grid -> external_code = $out; +$grid -> buttons = [ + [ + 'label' => 'Wyślij newsletter', + 'class' => 'btn-success', + 'icon' => 'fa-send', + 'js' => 'send_newsletter();' + ] + ]; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/newsletter/preview.php b/admin/templates/newsletter/preview.php new file mode 100644 index 0000000..3852d02 --- /dev/null +++ b/admin/templates/newsletter/preview.php @@ -0,0 +1,33 @@ + settings['newsletter_header'] ? $this -> settings['newsletter_header'] : '

--- brak zdefiniowanego nagłówka ---

';?> + template ) ):?> + template['text']?> + + articles ) ):?> + articles as $article ):?> + +
+ + + + +
+ +
+
+
+ + + dates ):?> +
+ --- brak artykułów w danym okresie --- +
+ + + settings['newsletter_footer_2'] ? $this -> settings['newsletter_footer_2'] : '

--- brak zdefiniowanej stopki cz. 2 ---

';?> \ No newline at end of file diff --git a/admin/templates/newsletter/settings.php b/admin/templates/newsletter/settings.php new file mode 100644 index 0000000..65e1d0c --- /dev/null +++ b/admin/templates/newsletter/settings.php @@ -0,0 +1,60 @@ + + + + 'Nagłówek', + 'name' => 'newsletter_header', + 'id' => 'newsletter_header', + 'value' => $this -> settings['newsletter_header'], + 'inline' => true + ) + ); + echo \Html::textarea( + array( + 'label' => 'Stopka cz 1. (dołączana zawsze)', + 'name' => 'newsletter_footer_1', + 'id' => 'newsletter_footer_1', + 'value' => $this -> settings['newsletter_footer_1'], + 'inline' => true + ) + ); + echo \Html::textarea( + array( + 'label' => 'Stopka cz 2. (dołączana tylko w przypadku newslettera)', + 'name' => 'newsletter_footer_2', + 'id' => 'newsletter_footer_2', + 'value' => $this -> settings['newsletter_footer_2'], + 'inline' => true + ) + ); + +$out = ob_get_clean(); + +$grid = new \gridEdit; +$grid -> id = 'settings-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja ustawień'; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/newsletter/settings_save/', 'back_url' => '/admin/newsletter/settings/' ], + ]; +$grid -> external_code = $out; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/pages/menu-edit.php b/admin/templates/pages/menu-edit.php new file mode 100644 index 0000000..dc74f28 --- /dev/null +++ b/admin/templates/pages/menu-edit.php @@ -0,0 +1,42 @@ + gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Zapisz menu'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> menu['id'] + ], + [ + 'name' => 'Nazwa', + 'db' => 'name', + 'type' => 'text', + 'value' => $this -> menu['name'], + 'params' => [ 'class' => 'require' ] + ], + [ + 'name' => 'Aktywne', + 'db' => 'status', + 'type' => 'input_switch', + 'checked' => $this -> menu['status'] ? true : false, + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] + ] + ]; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/pages/menu_save/', 'back_url' => '/admin/pages/view_list/' ], + 'cancel' => [ 'url' => '/admin/pages/view_list/' ] + ]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/pages/page-articles.php b/admin/templates/pages/page-articles.php new file mode 100644 index 0000000..33d6ba2 --- /dev/null +++ b/admin/templates/pages/page-articles.php @@ -0,0 +1,89 @@ + +
    + articles ) ) foreach ( $this -> articles as $article ) + { + ?> +
  1. +
    +
  2. + +
+ gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> default_buttons = false; +$grid -> external_code = $out; +$grid -> title = 'Lista artykułów'; +$grid -> buttons = [ + [ + 'label' => 'Wstecz', + 'url' => '/admin/pages/view_list/', + 'icon' => 'fa-reply', + 'class' => 'btn-dark' + ] + ]; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/pages/page-edit.php b/admin/templates/pages/page-edit.php new file mode 100644 index 0000000..a8e2f0b --- /dev/null +++ b/admin/templates/pages/page-edit.php @@ -0,0 +1,514 @@ + + +
+
    +
  • Treść
  • +
  • Ustawienia
  • +
  • SEO
  • +
+
+
+
+
    + languages)): foreach ($this->languages as $lg): ?> + +
  • '; ?>
  • + + +
+
+ languages)): foreach ($this->languages as $lg): ?> + +
+ 'Nazwa strony', + 'name' => 'title', + 'id' => 'title_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['title'], + 'js_key' => 'google_preview( "' . $lg['id'] . '", "' . \S::get('pid') . '" ); return false;' + ) + ); + ?> +
+ + +
+
+
+
+
+ menus)): foreach ($this->menus as $menu): + $menus[$menu['id']] = $menu['name']; + endforeach; + endif; + ?> + 'Menu', + 'name' => 'menu_id', + 'values' => $menus, + 'value' => $this->page['id'] ? $this->page['menu_id'] : $this->menu_id + ) + ); + ?> + 'Typ strony', + 'name' => 'page_type', + 'id' => 'page_type', + 'values' => \admin\factory\Pages::$_page_types, + 'value' => $this->page['page_type'] + ) + ); + ?> + + 'Sortowanie artykułów', + 'name' => 'sort_type', + 'id' => 'sort_type', + 'values' => \admin\factory\Pages::$_sort_types, + 'value' => $this->page['sort_type'] + ) + ); + ?> + layouts)): foreach ($this->layouts as $layout): + $layouts[$layout['id']] = $layout['name']; + endforeach; + endif; + ?> + 'Szablon', + 'name' => 'layout_id', + 'id' => 'layout_id', + 'values' => $layouts, + 'value' => $this->page['layout_id'] + ) + ); + ?> + 'Liczba artykułów na stronę', + 'name' => 'articles_limit', + 'id' => 'articles_limit', + 'value' => $this->page['articles_limit'] ? $this->page['articles_limit'] : 2 + ) + ); + ?> + 'Pokaż tytuł', + 'name' => 'show_title', + 'checked' => $this->page['show_title'] == 1 or ! $this->page['id'] ? true : false + ) +); +?> + 'Aktywna', + 'name' => 'status', + 'checked' => $this->page['status'] == 1 or ! $this->page['id'] ? true : false + ) + ); + ?> + 'Strona startowa', + 'name' => 'start', + 'checked' => $this->page['start'] == 1 ? true : false + ] + ); + ?> + 'Cache (24h)', + 'name' => 'cache', + 'checked' => $this -> page['cache'] == 1 ? true : false + ] + ); + ?> +
+
+
+
    + languages)): foreach ($this->languages as $lg): ?> + +
  • '; ?>
  • + + +
+
+ languages)): foreach ($this->languages as $lg): ?> + +
+ 'Link SEO', + 'name' => 'seo_link', + 'id' => 'seo_link_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['seo_link'], + 'icon_content' => 'generuj', + 'icon_js' => 'generate_seo_links( "' . $lg['id'] . '", $( "#title_' . $lg['id'] . '" ).val(), ' . (int) $this->page['id'] . ', ' . \S::get('pid') . ' );', + 'js_key' => 'google_preview( "' . $lg['id'] . '", "' . \S::get('pid') . '" ); return false;' + ) + ); + ?> + 'Tytuł strony (h1)', + 'name' => 'site_title', + 'id' => 'site_title_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['site_title'] + ) + ); + ?> + 'Meta title', + 'name' => 'meta_title', + 'id' => 'meta_title_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['meta_title'], + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + ); + ?> + 'Meta description', + 'name' => 'meta_description', + 'id' => 'meta_description_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['meta_description'], + 'js_key' => 'google_preview( "' . $lg['id'] . '" ); return false;' + ) + ); + ?> + 'Meta keywords', + 'name' => 'meta_keywords', + 'id' => 'meta_keywords_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['meta_keywords'] + ) + ); + ?> +
+ +
+
+
+
+
+
+
+
+ 'Blokuj indeksację', + 'name' => "noindex", + 'id' => 'noindex_' . $lg['id'], + 'values' => array( + 0 => 'nie', 1 => 'tak' + ), + 'value' => $this->page['languages'][$lg['id']]['noindex'] == 1 ? 1 : 0 + ) + ); + ?> + 'Blokuj bezpośredni dostęp', + 'name' => "block_direct_access", + 'id' => 'block_direct_access_' . $lg['id'], + 'values' => array( + 0 => 'nie', 1 => 'tak' + ), + 'value' => $this -> page['languages'][ $lg['id'] ]['block_direct_access'] == 1 ? 1 : 0 + ) + );?> + 'Rel canonical', + 'name' => 'canonical', + 'id' => 'canonical_' . $lg['id'], + 'value' => $this->page['languages'][$lg['id']]['canonical'] + ) );?> +
+ + +
+
+
+
+
+
+id = 'page-edit'; +$grid->gdb_opt = $gdb; +$grid->include_plugins = true; +$grid->title = 'Edycja strony'; +$grid->fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this->page['id'] + ], + [ + 'db' => 'parent_id', + 'type' => 'hidden', + 'value' => $this->page['id'] ? $this->page['parent_id'] : $this->parent_id + ] +]; +$grid->actions = [ + 'save' => ['url' => '/admin/pages/page_save/', 'back_url' => '/admin/pages/view_list/'], + 'cancel' => ['url' => '/admin/pages/view_list/'] +]; +$grid->external_code = $out; +$grid->persist_edit = true; +$grid->id_param = 'id'; + +echo $grid->draw(); +?> \ No newline at end of file diff --git a/admin/templates/pages/pages-browse-list.php b/admin/templates/pages/pages-browse-list.php new file mode 100644 index 0000000..d6b325a --- /dev/null +++ b/admin/templates/pages/pages-browse-list.php @@ -0,0 +1,156 @@ + menus ) ) foreach ( $this -> menus as $menu ) + { + ?> + + id = 'pages-list'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Lista stron'; +$grid -> default_buttons = false; +$grid -> external_code = $out; + +echo $grid -> draw(); +?> + + + \ No newline at end of file diff --git a/admin/templates/pages/pages-list.php b/admin/templates/pages/pages-list.php new file mode 100644 index 0000000..475c01e --- /dev/null +++ b/admin/templates/pages/pages-list.php @@ -0,0 +1,204 @@ + menus ) ) foreach ( $this -> menus as $menu ) + { + ?> + + id = 'pages-list'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Lista stron'; +$grid -> default_buttons = false; +$grid -> buttons = [ + [ + 'label' => 'Dodaj menu', + 'url' => '/admin/pages/menu_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +$grid -> external_code = $out; + +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/pages/subpages-browse-list.php b/admin/templates/pages/subpages-browse-list.php new file mode 100644 index 0000000..b67f18b --- /dev/null +++ b/admin/templates/pages/subpages-browse-list.php @@ -0,0 +1,72 @@ +pages)): ?> + +
    + pages as $page): ?> +
  1. +
    + + '; + + if ($page['start']) + echo ''; + + echo mb_substr( $page['title'], 0, 50, 'UTF-8' ); + if ( strlen( $page['title'] ) > 50 ) + echo '...'; + + if (is_array($page['languages'])): + echo '
    '; + foreach ($page['languages'] as $lg) + echo ''; + echo '
    '; + endif; + + $default_language = \front\factory\Languages::default_language(); + if (is_array($page['languages'])): + foreach ($page['languages'] as $lg): + echo ''; + endforeach; + endif; + ?> +
    + step + 1); + ?> +
  2. + +
+ \ No newline at end of file diff --git a/admin/templates/pages/subpages-list.php b/admin/templates/pages/subpages-list.php new file mode 100644 index 0000000..69f6ed2 --- /dev/null +++ b/admin/templates/pages/subpages-list.php @@ -0,0 +1,54 @@ + pages ) ):?> +
    + pages as $page ):?> +
  1. +
    + + ';?> + ';?> + 75 ) echo '...';?> + '; + foreach ( $page['languages'] as $lg ) + echo ''; + echo '
    '; + endif; + ?> + step < 3 ):?> + + + + +
+ step + 1 ); + ?> + + + + \ No newline at end of file diff --git a/admin/templates/scontainers/ckeditor-list.php b/admin/templates/scontainers/ckeditor-list.php new file mode 100644 index 0000000..f57063e --- /dev/null +++ b/admin/templates/scontainers/ckeditor-list.php @@ -0,0 +1,101 @@ + gdb_opt = $gdb; +$grid -> sql = 'SELECT *' + . 'FROM ( ' + . 'SELECT ' + . 'id, status, ' + . '( SELECT title FROM pp_scontainers_langs AS psl, pp_langs AS pl WHERE lang_id = pl.id AND container_id = ps.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_scontainers AS ps ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] ' + . 'ORDER BY ' + . '[order_p1] [order_p2]'; +$grid -> sql_count = 'SELECT ' + . 'COUNT(0) FROM ( ' + . 'SELECT ' + . 'id, status, ' + . '( SELECT title FROM pp_scontainers_langs AS psl, pp_langs AS pl WHERE lang_id = pl.id AND container_id = ps.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_scontainers AS ps ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] '; +$grid -> debug = true; +$grid -> order = [ 'column' => 'title', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Tytuł', 'db' => 'title', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tytuł', + 'db' => 'title', + 'sort' => true + ], + [ + 'name' => 'Kod', + 'php' => 'echo "[KONTENER:[id]]";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Akcja', + 'db' => 'id', + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 120px;' ], + 'php' => 'echo "wybierz";' + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj kontener', + 'url' => '/admin/scontainers/container_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/scontainers/container-edit.php b/admin/templates/scontainers/container-edit.php new file mode 100644 index 0000000..4803715 --- /dev/null +++ b/admin/templates/scontainers/container-edit.php @@ -0,0 +1,171 @@ + + + + + + + + + + + +
+
    +
  • Treść
  • +
  • Ustawienia
  • +
+
+
+
+
    + languages ) ): foreach ( $this -> languages as $lg ):?> + +
  • + + +
+
+ languages ) ): foreach ( $this -> languages as $lg ):?> + +
+ 'Tytuł', + 'name' => 'title', + 'id' => 'title_' . $lg['id'], + 'value' => $this -> container['languages'][ $lg['id'] ]['title'], + 'inline' => true + ) + );?> + 'Treść', + 'name' => 'text', + 'id' => 'text_' . $lg['id'], + 'value' => $this -> container['languages'][ $lg['id'] ]['text'], + 'inline' => true + ) + );?> + 'Kod HTML', + 'name' => 'html', + 'id' => 'html_' . $lg['id'], + 'value' => $this -> container['languages'][ $lg['id'] ]['html'], + 'inline' => true + ) + );?> + +
+ + +
+
+
+
+
+ 'Aktywny', + 'name' => 'status', + 'checked' => $this -> container['status'] == 1 or !$this -> container['id'] ? true : false + ) + ); + ?> + 'Pokaż tytuł', + 'name' => 'show_title', + 'checked' => $this -> container['show_title'] == 1 ? true : false + ) + ); + ?> + 'Tło kontenera', + 'name' => 'src', + 'id' => 'src', + 'value' => $this->container['src'], + 'icon_content' => 'przeglądaj', + 'icon_js' => "window.open ( 'http://" . $_SERVER['SERVER_NAME'] . "/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=src&akey=" . $rfmAkeyJS . "', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');" + ) + ); + ?> +
+
+
+ id = 'container-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja kontenera statycznego'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> container['id'] + ] + ]; +$grid -> actions = [ + 'save' => [ 'url' => '/admin/scontainers/container_save/', 'back_url' => '/admin/scontainers/view_list/' ], + 'cancel' => [ 'url' => '/admin/scontainers/view_list/' ] + ]; +$grid -> external_code = $out; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/scontainers/containers-list.php b/admin/templates/scontainers/containers-list.php new file mode 100644 index 0000000..ef03137 --- /dev/null +++ b/admin/templates/scontainers/containers-list.php @@ -0,0 +1,79 @@ + gdb_opt = $gdb; +$grid -> sql = 'SELECT *' + . 'FROM ( ' + . 'SELECT ' + . 'id, status, ' + . '( SELECT title FROM pp_scontainers_langs AS psl, pp_langs AS pl WHERE lang_id = pl.id AND container_id = ps.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_scontainers AS ps ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] ' + . 'ORDER BY ' + . '[order_p1] [order_p2]'; +$grid -> sql_count = 'SELECT ' + . 'COUNT(0) FROM ( ' + . 'SELECT ' + . 'id, status, ' + . '( SELECT title FROM pp_scontainers_langs AS psl, pp_langs AS pl WHERE lang_id = pl.id AND container_id = ps.id AND title != \'\' ORDER BY o ASC LIMIT 1 ) AS title ' + . 'FROM ' + . 'pp_scontainers AS ps ' + . ') AS q1 ' + . 'WHERE ' + . '1=1 [where] '; +$grid -> debug = true; +$grid -> order = [ 'column' => 'title', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Tytuł', 'db' => 'title', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Tytuł', + 'db' => 'title', + 'php' => 'echo "[title]";', + 'sort' => true + ], + [ + 'name' => 'Kod', + 'php' => 'echo "[KONTENER:[id]]";' + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/scontainers/container_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/scontainers/container_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj kontener', + 'url' => '/admin/scontainers/container_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/seo-additional/element-edit.php b/admin/templates/seo-additional/element-edit.php new file mode 100644 index 0000000..c7c5b35 --- /dev/null +++ b/admin/templates/seo-additional/element-edit.php @@ -0,0 +1,95 @@ + + + + 'Url', + 'class' => 'required', + 'name' => 'url', + 'id' => 'url', + 'value' => $this -> element['url'] + ) + );?> + 'Aktywny', + 'name' => 'status', + 'checked' => $this -> element['status'] == 1 or !$this -> element['id'] ? true : false + ) + );?> + 'Meta title', + 'class' => 'title', + 'name' => 'title', + 'id' => 'title', + 'value' => $this -> element['title'] + ) + );?> + 'Meta keywords', + 'class' => 'keywords', + 'name' => 'keywords', + 'id' => 'keywords', + 'value' => $this -> element['keywords'] + ) + );?> + 'Meta description', + 'class' => 'description', + 'name' => 'description', + 'id' => 'description', + 'value' => $this -> element['description'] + ) + );?> + 'Dodatkowa treść', + 'name' => 'text', + 'id' => 'text', + 'value' => $this ->element['text'] + ) + );?> + + id = 'seo-element-edit'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Edycja elementu SEO'; +$grid -> fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this -> element['id'] + ] + ]; +$grid -> external_code = $out; +$grid -> actions = [ + 'save' => [ + 'url' => '/admin/seo_additional/element_save/', + 'back_url' => '/admin/seo_additional/main_view/' + ], + 'cancel' => [ + 'url' => '/admin/seo_additional/main_view/' + ] + ]; +$grid -> persist_edit = true; +$grid -> id_param = 'id'; + +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/seo-additional/main-view.php b/admin/templates/seo-additional/main-view.php new file mode 100644 index 0000000..b05544c --- /dev/null +++ b/admin/templates/seo-additional/main-view.php @@ -0,0 +1,58 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'url', 'type' => 'ASC' ]; +$grid -> search = [ + [ 'name' => 'Url', 'db' => 'url', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Url', + 'db' => 'url', + 'php' => 'echo "[url]";', + 'sort' => true + ], + [ + 'name' => 'Title', + 'db' => 'title', + 'sort' => true + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'td' => [ 'class' => 'g-center' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'sort' => true + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/seo_additional/element_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/seo_additional/element_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 70px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ + 'label' => 'Dodaj element', + 'url' => '/admin/seo_additional/element_edit/', + 'icon' => 'fa-plus-circle', + 'class' => 'btn-success' + ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/admin/templates/settings/settings.php b/admin/templates/settings/settings.php new file mode 100644 index 0000000..0101cc9 --- /dev/null +++ b/admin/templates/settings/settings.php @@ -0,0 +1,428 @@ + + + + +
+
    +
  • Dane kontaktowe
  • +
  • Poczta
  • +
  • Dodatkowe ustawienia
  • +
  • Kody (m.in. statystyk)
  • +
  • System
  • +
  • Aktualizacje
  • +
+
+
+ 'Nazwa firmy', + 'name' => 'firm_name', + 'id' => 'firm_name', + 'value' => $this -> settings['firm_name'] + ) + ); + ?> + 'Dodatkowe informacje', + 'name' => 'additional_info', + 'id' => 'additional_info', + 'value' => $this -> settings['additional_info'] + ) + ); + ?> + 'Mapa', + 'name' => 'google_maps', + 'checked' => $this -> settings['google_maps'] == 1 ? true : false + ) + ); + ?> + 'Mapa - adres', + 'name' => 'firm_adress', + 'id' => 'firm_adress', + 'value' => $this -> settings['firm_adress'] + ) + ); + ?> + 'Widget "Telefon"', + 'name' => 'widget_phone', + 'checked' => $this -> settings['widget_phone'] == 1 ? true : false + ) + ); + ?> +
+
+ 'Formularz kontaktowy', + 'name' => 'contact_form', + 'checked' => $this -> settings['contact_form'] == 1 ? true : false + ) + ); + ?> + 'Email kontaktowy', + 'name' => 'contact_email', + 'id' => 'contact_email', + 'value' => $this -> settings['contact_email'] + ) + ); + ?> + 'Email - host', + 'name' => 'email_host', + 'id' => 'email_host', + 'value' => $this -> settings['email_host'] + ) + ); + ?> + 'Email - port', + 'name' => 'email_port', + 'id' => 'email_port', + 'value' => $this -> settings['email_port'] + ) + ); + ?> + 'Email - login', + 'name' => 'email_login', + 'id' => 'email_login', + 'value' => $this -> settings['email_login'] + ) + ); + ?> + 'Email - hasło', + 'name' => 'email_password', + 'id' => 'email_password', + 'value' => $this -> settings['email_password'], + 'type' => 'text' + ) + ); + ?> + 'Captcha w formularzu kontaktowym', + 'name' => 'contact_form_captcha', + 'checked' => $this -> settings['contact_form_captcha'] == 1 ? true : false + ] ); + ?> +
+
+
+ +
+ +
+
+
+ +
+
+ settings['visit_counter'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['calendar'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['tags'] ):?>checked="checked"> + +
+
+
+ 'Maksmalna wielkość zdjęcia (px)', + 'name' => 'image_px', + 'id' => 'image_px', + 'value' => $this -> settings['image_px'] + ] ); + ?> +
+
+ 'Klucz Google Search Console', + 'name' => 'google_search_console', + 'id' => 'google_search_console', + 'value' => $this -> settings['google_search_console'] + ) + ); + ?> + 'Facebook link', + 'name' => 'facebook_link', + 'id' => 'facebook_link', + 'value' => $this -> settings['facebook_link'] + ) + ); + ?> + 'Kod statystyk', + 'name' => 'statistic_code', + 'id' => 'statistic_code', + 'value' => $this -> settings['statistic_code'], + 'rows' => 10 + ) + ); + ?> + 'Własne reguły htacess', + 'name' => 'htaccess', + 'id' => 'htaccess', + 'value' => $this -> settings['htaccess'], + 'rows' => 10 + ) + ); + ?> + 'Własne reguły robots.txt', + 'name' => 'robots', + 'id' => 'robots', + 'value' => $this -> settings['robots'], + 'rows' => 10 + ) + ); + ?> +
+
+
+ +
+
+ settings['devel'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['ssl'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['mysql_debug'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['htaccess_cache'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['lazy_loading'] ):?>checked="checked"> + +
+
+
+
+ +
+
+ settings['generate_webp'] ):?>checked="checked"> + +
+
+
+
+ "Struktura linków", + 'name' => "links_structure", + 'values' => [ 0 => 'skrócona', 1 => 'rozwinięta' ], + 'value' => $this -> settings['links_structure'] ? 1 : 0 + ] );?> +
+
+ "Wersja strony", + 'name' => "link_version", + 'values' => [ 0 => 'bez www', 1 => 'z www' ], + 'value' => $this -> settings['link_version'] ? 1 : 0 + ] );?> +
+
+ "Wersja adresów url", + 'name' => "url_version", + 'values' => [ 0 => 'bez / na końcu adresu url', 1 => 'z / na końcu adresu url' ], + 'value' => $this -> settings['url_version'] ? 1 : 0 + ] );?> +
+
+ "Newsletter", + 'name' => "newsletter_cron", + 'values' => [ 0 => 'wysyłka za pomocą cron i strony', 1 => 'wysyłka za pomocą cron' ], + 'value' => $this -> settings['newsletter_cron'] ? 1 : 0 + ] );?> +
+
+
+
+ +
+
+ settings['update'] ):?>checked="checked"> + +
+
+
+ 'Numer licencji', + 'name' => 'update_key', + 'id' => 'update_key', + 'value' => $this -> settings['update_key'] + ) + ); + ?> +
+
+ id = 'settings-edit'; + $grid -> gdb_opt = $gdb; + $grid -> include_plugins = true; + $grid -> title = 'Edycja ustawień'; + $grid -> actions = [ + 'save' => [ + 'url' => '/admin/settings/settings_save/', + 'back_url' => '/admin/settings/view/' + ] + ]; + $grid -> external_code = $out; + echo $grid -> draw(); + ?> + + + + \ No newline at end of file diff --git a/admin/templates/site/main-layout.php b/admin/templates/site/main-layout.php new file mode 100644 index 0000000..4630e65 --- /dev/null +++ b/admin/templates/site/main-layout.php @@ -0,0 +1,331 @@ + + + + + cmsPro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ +
+
+
+ + + +
+
+
+ + content;?> +
+
+
+
+ +
+
+ + + + + + + + diff --git a/admin/templates/site/unlogged-layout.php b/admin/templates/site/unlogged-layout.php new file mode 100644 index 0000000..f79ab1b --- /dev/null +++ b/admin/templates/site/unlogged-layout.php @@ -0,0 +1,93 @@ + + + + + cmsPro + + + + + + + + + + +
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ Logowanie +
+ +
+
+
+ + +
+
+
+ +
+ +
+ +
+
+ + + + +
+
+
+
+ +
+
+ + + + +
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/templates/site/unlogged.php b/admin/templates/site/unlogged.php new file mode 100644 index 0000000..000ebd4 --- /dev/null +++ b/admin/templates/site/unlogged.php @@ -0,0 +1,27 @@ + + + + + cmsPro + + + + + + + + + + +
+
+
+ +
+
+ content;?> +
+
+
+ + \ No newline at end of file diff --git a/admin/templates/update/main-view.php b/admin/templates/update/main-view.php new file mode 100644 index 0000000..577fb15 --- /dev/null +++ b/admin/templates/update/main-view.php @@ -0,0 +1,165 @@ + + 'Twoja wersja systemu', + 'id' => 'ver', + 'text' => $this -> ver + ] );?> + 'Aktualna wersja systemu', + 'text' => $this -> new_ver, + 'id' => 'new_ver' + ] );?> + new_ver; + $ver = $this -> ver; + $valuemax = ( $ver_new - $ver ) * 1000; +?> + +
+ ver < $this -> new_ver ):?> + + + ver < $this -> new_ver ):?> + + +
+ ver < $this -> new_ver ):?> +
* Przed aktualizacją systemu zalecane jest wykonanie pełnej kopii zapasowej.
+
+ + id = 'update-view'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Aktualizacja systemu'; +$grid -> default_buttons = false; +$grid -> external_code = $out; +echo $grid -> draw(); +?> + id = 'changelog'; +$grid -> gdb_opt = $gdb; +$grid -> include_plugins = true; +$grid -> title = 'Changelog'; +$grid -> default_buttons = false; +$grid -> external_code = $out; +echo $grid -> draw(); +?> + \ No newline at end of file diff --git a/admin/templates/users/user-2fa.php b/admin/templates/users/user-2fa.php new file mode 100644 index 0000000..fb7f741 --- /dev/null +++ b/admin/templates/users/user-2fa.php @@ -0,0 +1,49 @@ +
+
+
+ +
+
+
+
+
+ Logowanie +
+ +
+
+
+ + +
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+ + +
+
+
+
\ No newline at end of file diff --git a/admin/templates/users/user-edit.php b/admin/templates/users/user-edit.php new file mode 100644 index 0000000..6120bc2 --- /dev/null +++ b/admin/templates/users/user-edit.php @@ -0,0 +1,344 @@ +privileges; +?> +
+ +
+
+
+
+
+ > + +
+
+ +
+
+
+
+ + > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+
+
+ > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+
+
+ > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+
+
+ > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+
+
+ > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+
+
+ > + +
+
+ +
+
+
+
+
+
+ > + +
+
+ +
+
+ +
+
+
+
+user['id'] ? $password_param = 'optional' : $password_param = 'require'; +$out = ob_get_clean(); + +$grid = new \gridEdit; +$grid->gdb_opt = $gdb; +$grid->include_plugins = true; +$grid->title = 'Zapisz użytkownika'; +$grid->fields = [ + [ + 'db' => 'id', + 'type' => 'hidden', + 'value' => $this->user['id'] + ], [ + 'db' => 'admin', + 'type' => 'hidden', + 'value' => '1' + ], [ + 'name' => 'Login', + 'db' => 'login', + 'type' => 'text', + 'value' => $this->user['login'], + 'params' => ['class' => 'require', 'function' => 'check_login'] + ], [ + 'name' => 'Aktywny', + 'db' => 'status', + 'type' => 'input_switch', + 'checked' => $this->user['status'] ? true : false + ], [ + 'db' => 'twofa_enabled', + 'name' => 'Dwustopniowe uwierzytelnianie (2FA)', + 'type' => 'input_switch', + 'checked' => $this -> user['twofa_enabled'] ? true : false, + ], [ + 'db' => 'twofa_email', + 'name' => 'E-mail do 2FA', + 'type' => 'text', + 'value' => $this -> user['twofa_email'], + ], [ + 'name' => 'Aktywny do', + 'db' => 'active_to', + 'type' => 'text', + 'id' => 'active_to', + 'value' => $this->user['active_to'] == '0000-00-00' ? '' : $this->user['active_to'] + ], + [ + 'name' => 'Hasło', + 'db' => 'password', + 'type' => 'password', + 'params' => ['class' => $password_param, 'min' => 5] + ], + [ + 'name' => 'Hasło - powtórz', + 'db' => 'password_re', + 'type' => 'password', + 'params' => ['class' => $password_param, 'min' => 5, 'equal' => 'password', 'error_txt' => 'Podane hasła są różne'] + ] +]; +$grid->actions = [ + 'save' => ['url' => '/admin/users/user_save/', 'back_url' => '/admin/users/view_list/'], + 'cancel' => ['url' => '/admin/users/view_list/'] +]; +$grid->external_code = $out; +$grid->persist_edit = true; +echo $grid->draw(); +?> + + \ No newline at end of file diff --git a/admin/templates/users/users-list.php b/admin/templates/users/users-list.php new file mode 100644 index 0000000..f1623fd --- /dev/null +++ b/admin/templates/users/users-list.php @@ -0,0 +1,47 @@ + gdb_opt = $gdb; +$grid -> order = [ 'column' => 'login', 'type' => 'ASC' ]; +$grid -> where = [ 'id[!]' => 1 ]; +$grid -> search = [ + [ 'name' => 'Login', 'db' => 'login', 'type' => 'text' ], + [ 'name' => 'Aktywny', 'db' => 'status', 'type' => 'select', 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ] ] + ]; +$grid -> columns_view = [ + [ + 'name' => 'Lp.', + 'th' => [ 'class' => 'g-lp' ], + 'td' => [ 'class' => 'g-center' ], + 'autoincrement' => true + ], + [ + 'name' => 'Aktywny', + 'db' => 'status', + 'replace' => [ 'array' => [ 0 => 'nie', 1 => 'tak' ] ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 150px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Login', + 'db' => 'login', + 'sort' => true + ], + [ + 'name' => 'Edytuj', + 'action' => [ 'type' => 'edit', 'url' => '/admin/users/user_edit/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 50px;' ], + 'td' => [ 'class' => 'g-center' ] + ], + [ + 'name' => 'Usuń', + 'action' => [ 'type' => 'delete', 'url' => '/admin/users/user_delete/id=[id]' ], + 'th' => [ 'class' => 'g-center', 'style' => 'width: 50px;' ], + 'td' => [ 'class' => 'g-center' ] + ] + ]; +$grid -> buttons = [ + [ 'label' => 'Dodaj użytkownika', 'url' => '/admin/users/user_edit/', 'icon' => 'fa-plus-circle', 'class' => 'btn-success' ] + ]; +echo $grid -> draw(); \ No newline at end of file diff --git a/ajax.php b/ajax.php new file mode 100644 index 0000000..78caebb --- /dev/null +++ b/ajax.php @@ -0,0 +1,207 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +if ( !$lang_id = \S::get_session( 'current-lang' ) ) +{ + $lang_id = \front\factory\Languages::default_language(); + \S::set_session( 'current-lang', $lang_id ); +} + +if ( !$lang = \S::get_session( 'lang' ) ) +{ + $lang = \front\factory\Languages::lang_translations(); + \S::set_session( 'lang', $lang ); +} + +\front\controls\Site::check_url_params(); + +if ( !$settings = \S::get_session( 'settings' ) ) +{ + $settings = \front\factory\Settings::settings_details(); + \S::set_session( 'settings', $settings ); +} + +if ( \S::get( 'a' ) == 'calendar' ) +{ + echo \front\view\Site::calendar( \S::get( 'month' ), \S::get( 'year' ), true ); + exit; +} + +if ( \S::get( 'a' ) == 'widget-phone-now' ) +{ + $response = [ 'status' => 'error' ]; + + if ( \S::get( 'phone' ) ) + { + if ( \S::send_email( + $settings['contact_email'], + 'Prośba o oddzwonienie', + '

Nr telefonu: ' . \S::get( 'phone' ) . '

', + $settings['contact_email'] + ) ) + $response = [ 'status' => 'ok' ]; + } + echo json_encode( $response ); + exit; +} + +if ( \S::get( 'a' ) == 'contact_form' ) +{ + $response = [ 'status' => 'error' ]; + + if ( \S::get( 'email' ) ) + { + if ( \S::send_email( + $settings['contact_email'], + \S::get( 'subject' ), + '

Nr telefonu: ' . \S::get( 'phone' ) . '

' + . '

Email: ' . \S::get( 'email' ) . '

' + . '

' . \S::get( 'text' ) . '

', + \S::get( 'email' ) + ) ) + { + $mdb -> insert( 'pp_contact_emails', [ + 'email' => \S::get( 'email' ), + 'phone' => \S::get('phone' ), + 'title' => \S::get( 'subject' ), + 'mail' => \S::get( 'text' ), + 'add_date' => date("Y-m-d, H:i") + ]); + + $response = [ 'status' => 'ok' ]; + } + } + echo json_encode( $response ); + exit; +} +if ( \S::get( 'a' ) == 'cookie_close' ) +{ + setcookie( "cookie_information", "true", mktime( 0, 0, 0, 12, 31, 2115 ) ); + exit; +} + +if ( \S::get( 'a' ) == 'banner_close' ) +{ + \S::set_session( 'banner_close', true ); + exit; +} + +if ( \S::get( 'a' ) == 'contrast' ) +{ + \S::set_session( 'contrast', !\S::get_session( 'contrast' ) ); + exit; +} + +if ( \S::get( 'a' ) == 'article_unlock' ) +{ + \front\controls\Articles::article_unlock( + \S::get( 'password' ), + \S::get( 'article_id' ) + ); + exit; +} + +if ( \S::get( 'a' ) == 'pixieset_gallery_download' ) { + $url = \front\controls\Articles::images_download( \S::get( 'hash' ) ); + echo json_encode( [ 'url' => $url ] ); + exit; +} + +if ( \S::get( 'a' ) == 'pixieset_image_favorite' ) { + $status = \front\controls\Articles::pixieset_image_favorite( \S::get( 'image_id' ), \S::get( 'hash' ) ); + echo json_encode( [ 'status' => $status ] ); + exit; +} + +if ( \S::get( 'a' ) == 'pixieset_save_favorite_images' ) { + $result = \front\controls\Articles::pixieset_save_favorite_images( \S::get( 'hash' ) ); + echo json_encode( [ 'status' => $result ] ); + exit; +} + +if ( \S::get( 'a' ) == 'inline-edit-save' ) +{ + if ( strpos( \S::get( 'element_id' ), 'scontainer' ) !== false ) + { + $scontainer_id = str_replace( [ 'scontainer-', '-content' ], [ '', '' ], \S::get( 'element_id' ) ); + \Scontainer::updateByFrontEditor( $scontainer_id, \S::get( 'element_value' ), \S::get( 'lang_id' ) ); + \S::delete_cache(); + exit; + } + else + { + if ( \S::get( 'alltemplates' ) ) + $layouts = $mdb -> select( 'pp_layouts', 'id' ); + else + $layouts[] = \S::get( 'layout_id' ); + + foreach ( $layouts as $layout_id ) + { + $layout = \front\factory\Layouts::layout_details( $layout_id ); + $html = $layout['html']; + + if ( strpos( $html, '[META_INDEX]' ) !== false ) + { + $meta_index = true; + $html = str_replace( '[META_INDEX]', '', $html ); + } + + if ( strpos( $html, '[CSS]' ) !== false ) + { + $css = true; + $html = str_replace( '[CSS]', '', $html ); + } + + if ( strpos( $html, '[JAVA_SCRIPT]' ) !== false ) + { + $java_script = true; + $html = str_replace( '[JAVA_SCRIPT]', '', $html ); + } + + $html = preg_replace( '/^[ \t]*[\r\n]+/m', '', $html ); + + \S::suSetHtmlById( $html, \S::get( 'element_id' ), \S::get( 'element_value' ) ); + + if ( $meta_index ) + $html = str_replace( '', ' [META_INDEX]' . PHP_EOL . '', $html ); + + if ( $css ) + $html = str_replace( '', ' [CSS]' . PHP_EOL . '', $html ); + + if ( $java_script ) + $html = str_replace( '', ' [JAVA_SCRIPT]' . PHP_EOL . '', $html ); + + $html = str_replace( [ '%5B', '%5D', '%20', '%24' ], [ '[', ']', ' ', '$' ], $html ); + + $mdb -> update( 'pp_layouts', [ 'html' => $html ], [ 'id' => $layout_id ] ); + } + } + + \S::delete_cache(); +} +?> diff --git a/api.php b/api.php new file mode 100644 index 0000000..5fdb974 --- /dev/null +++ b/api.php @@ -0,0 +1,187 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' +]); + +$settings = \front\factory\Settings::settings_details(); + +if ( \S::get('action') == 'add_article' ) +{ + // table pp_articles + $show_title = 1; + $show_table_of_contents = 1; + $show_date_add = 1; + $show_date_modify = 0; + $date_add = date('Y-m-d H:i:s'); + $date_modify = date('Y-m-d H:i:s'); + $modify_by = 0; + $layout_id = null; + $status = 1; + $repeat_entry = 0; + $social_icons = 0; + $date_start = null; + $date_end = null; + $priority = 0; + $password = null; + $pixieset = 0; + $hash = null; + $views = 0; + $id_author = null; + + $mdb->insert( 'pp_articles', [ + 'show_title' => $show_title, + 'show_table_of_contents' => $show_table_of_contents, + 'show_date_add' => $show_date_add, + 'show_date_modify' => $show_date_modify, + 'date_add' => $date_add, + 'date_modify' => $date_modify, + 'modify_by' => $modify_by, + 'layout_id' => $layout_id, + 'status' => $status, + 'repeat_entry' => $repeat_entry, + 'social_icons' => $social_icons, + 'date_start' => $date_start, + 'date_end' => $date_end, + 'priority' => $priority, + 'password' => $password, + 'pixieset' => $pixieset, + 'hash' => $hash, + 'views' => $views, + 'id_author' => $id_author + ]); + + $article_id = $mdb->id(); + if ( !$article_id ) + { + echo 'Error: ' . $mdb->error()[2]; + exit; + } + + $file = $_FILES['main_image']; + if ($file) + { + // Wyciągnięcie rozszerzenia oryginalnego pliku + // Określenie rozszerzenia na podstawie typu MIME (zabezpieczenie przed fałszywymi nazwami plików) + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mimeType = $finfo->file($file['tmp_name']); + + // Mapowanie do rozszerzeń + $allowedTypes = [ + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/webp' => 'webp' + ]; + + if (!isset($allowedTypes[$mimeType])) { + http_response_code(400); + echo json_encode(['error' => 'Nieobsługiwany typ pliku.']); + exit; + } + + $ext = $allowedTypes[$mimeType]; + // Tworzenie ścieżki katalogu docelowego + $baseDir = __DIR__ . '/upload/filemanager/api'; + $targetDir = $baseDir . '/article_' . $article_id; + + // Jeżeli katalog nie istnieje, utwórz go + if (!is_dir($targetDir)) + { + mkdir( $targetDir, 0755, true ); + } + + // Nowa nazwa pliku: article_{id}.{ext} + $targetName = 'article_' . $article_id . '.' . $ext; + $targetPath = $targetDir . '/' . $targetName; + + // Przeniesienie pliku z tmp na docelową ścieżkę + move_uploaded_file($file['tmp_name'], $targetPath); + + // Zwrócenie adresu URL do pliku (względem katalogu webroot) + $publicUrl = '/upload/filemanager/api/article_' . $article_id . '/' . $targetName; + } + else + { + $publicUrl = null; + } + + // table pp_articles_langs + $lang_id = 'pl'; + $title = \S::get('title'); + $main_image = $publicUrl; // to do + $entry = \S::get('entry'); + $text = \S::get('text'); + $table_of_contents = null; + $meta_title = null; + $meta_description = null; + $meta_keywords = null; + $seo_link = \S::seo(\S::get('title')); + $noindex = 0; + $copy_from = null; + $block_direct_access = 0; + + $mdb -> insert( 'pp_articles_langs', [ + 'lang_id' => $lang_id, + 'article_id' => $article_id, + 'title' => $title, + 'main_image' => $main_image, + 'entry' => $entry, + 'text' => '

' . $entry . '

' . $text, + 'table_of_contents' => $table_of_contents, + 'meta_title' => $meta_title, + 'meta_description' => $meta_description, + 'meta_keywords' => $meta_keywords, + 'seo_link' => $seo_link, + 'noindex' => $noindex, + 'copy_from' => $copy_from, + 'block_direct_access' => $block_direct_access + ]); + + $page_id = \S::get( 'page_id' ); + $o = $mdb -> max( 'pp_articles_pages', 'o', [ 'page_id' => $page_id ] ) + 1; + + $mdb -> insert( 'pp_articles_pages', [ + 'page_id' => $page_id, + 'article_id' => $article_id, + 'o' => $o + ]); + + echo '{"status": "ok", "id": ' . $article_id . ', "title": "' . $title . '", "main_image": "' . $main_image . '"}'; +} diff --git a/autoload/admin/class.Site.php b/autoload/admin/class.Site.php new file mode 100644 index 0000000..71527ae --- /dev/null +++ b/autoload/admin/class.Site.php @@ -0,0 +1,216 @@ + (int)$user['id'], + 'login' => $login, + 'remember' => (bool)\S::get('remember'), + 'started' => time(), + ]); + + if (!\admin\factory\Users::send_twofa_code((int)$user['id'])) + { + \S::alert('Nie udało się wysłać kodu 2FA. Spróbuj ponownie.'); + \S::delete_session('twofa_pending'); + header('Location: /admin/'); + exit; + } + + header('Location: /admin/user/twofa/'); + exit; + } + else + { + $user = \admin\factory\Users::details($login); + + self::finalize_admin_login( + $user, + $domain, + $cookie_name, + (bool)\S::get('remember') + ); + + header('Location: /admin/articles/view_list/'); + exit; + } + } + else + { + if ($result == -1) + { + \S::alert('Z powodu 5 nieudanych prób Twoje konto zostało zablokowane.'); + } + else + { + \S::alert('Podane hasło jest nieprawidłowe lub użytkownik nie istnieje.'); + } + header('Location: /admin/'); + exit; + } + } + break; + + case 'user-2fa-verify': + { + $pending = \S::get_session('twofa_pending'); + if (!$pending || empty($pending['uid'])) + { + \S::alert('Sesja 2FA wygasła. Zaloguj się ponownie.'); + header('Location: /admin/'); + exit; + } + + $code = trim((string)\S::get('twofa')); + if (!preg_match('/^\d{6}$/', $code)) + { + \S::alert('Nieprawidłowy format kodu.'); + header('Location: /admin/user/twofa/'); + exit; + } + + $ok = \admin\factory\Users::verify_twofa_code((int)$pending['uid'], $code); + if (!$ok) + { + \S::alert('Błędny lub wygasły kod.'); + header('Location: /admin/user/twofa/'); + exit; + } + + // 2FA OK — finalna sesja + $user = \admin\factory\Users::details($pending['login']); + \S::set_session('user', $user); + \S::delete_session('twofa_pending'); + + // Remember me – BEZPIECZNY podpis HMAC: + if (!empty($pending['remember'])) + { + $payloadArr = ['login' => $user['login'], 'ts' => time()]; + $json = json_encode($payloadArr, JSON_UNESCAPED_SLASHES); + $sig = hash_hmac('sha256', $json, self::APP_SECRET_KEY ); + $payload = base64_encode($json . '.' . $sig); + + setcookie($cookie_name, $payload, [ + 'expires' => time() + (86400 * 14), + 'path' => '/', + 'domain' => $domain, + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax', + ]); + } + + header('Location: /admin/articles/view_list/'); + exit; + } + break; + + case 'user-2fa-resend': + { + $pending = \S::get_session('twofa_pending'); + if (!$pending || empty($pending['uid'])) + { + \S::alert('Sesja 2FA wygasła. Zaloguj się ponownie.'); + header('Location: /admin/'); + exit; + } + + if (!\admin\factory\Users::send_twofa_code((int)$pending['uid'], true)) + { + \S::alert('Kod można wysłać ponownie po krótkiej przerwie.'); + } + else + { + \S::alert('Nowy kod został wysłany.'); + } + header('Location: /admin/user/twofa/'); + exit; + } + break; + + case 'user-logout': + { + setcookie($cookie_name, "", time() - 86400, "/", $domain); + \S::delete_session('twofa_pending'); + session_destroy(); + header('Location: /admin/'); + exit; + } + break; + } + } + + + public static function route() + { + $_SESSION['admin'] = true; + + $class = '\admin\controls\\'; + + $results = explode('_', \S::get('module')); + if (is_array($results)) foreach ($results as $row) + $class .= ucfirst($row); + + $action = \S::get('action'); + + if (class_exists($class) and method_exists(new $class, $action)) + return call_user_func_array(array($class, $action), array()); + else + { + \S::alert('Nieprawidłowy adres url.'); + return false; + } + } + + static public function finalize_admin_login(array $user, string $domain, string $cookie_name, bool $remember = false) { + \S::set_session('user', $user); + \S::delete_session('twofa_pending'); + + if ($remember) + { + $payloadArr = [ + 'login' => $user['login'], + 'ts' => time() + ]; + + $json = json_encode($payloadArr, JSON_UNESCAPED_SLASHES); + $sig = hash_hmac('sha256', $json, self::APP_SECRET_KEY); + $payload = base64_encode($json . '.' . $sig); + + setcookie($cookie_name, $payload, [ + 'expires' => time() + (86400 * 14), + 'path' => '/', + 'domain' => $domain, + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax', + ]); + } + } +} diff --git a/autoload/admin/controls/class.Articles.php b/autoload/admin/controls/class.Articles.php new file mode 100644 index 0000000..860eb24 --- /dev/null +++ b/autoload/admin/controls/class.Articles.php @@ -0,0 +1,163 @@ + 'error', 'msg' => 'Nie masz uprawnień' ] ); + exit; + } + + if ( \admin\factory\Articles::files_order_save( \S::get( 'article_id' ), \S::get( 'order' ) ) ) + echo json_encode( [ 'status' => 'ok', 'msg' => 'Artykuł został zapisany.' ] ); + + exit; + } + + public static function gallery_order_save() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + { + echo json_encode( [ 'status' => 'error', 'msg' => 'Nie masz uprawnień' ] ); + exit; + } + + if ( \admin\factory\Articles::gallery_order_save( \S::get( 'article_id' ), \S::get( 'order' ) ) ) + echo json_encode( [ 'status' => 'ok', 'msg' => 'Artykuł został zapisany.' ] ); + + exit; + } + + static public function article_url_browser() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \Tpl::view( 'articles/articles-browse-list', [ + 'modal' => true + ] ); + } + + public static function browse_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Articles::browse_list(); + } + + public static function article_delete() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + if ( \admin\factory\Articles::articles_set_archive( \S::get( 'id' ) ) ) + \S::alert( 'Artykuł został przeniesiony do archiwum.' ); + + header( 'Location: /admin/articles/view_list/' ); + exit; + } + + public static function article_save() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania artykułu wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( is_array( $values ) ) foreach ( $values as $key => $val ) + { + if ( strpos( $key, 'ap_' ) !== false ) + $params[$key] = $val; + } + $values['params'] = $params; + + if ( $id = \admin\factory\Articles::article_save( + $values['id'], $values['title'], $values['main_image'], $values['entry'], $values['text'], $values['table_of_contents'], $values['status'], $values['show_title'], $values['show_table_of_contents'], $values['show_date_add'], $values['date_add'], + $values['show_date_modify'], $values['date_modify'], $values['seo_link'], $values['meta_title'], $values['meta_description'], $values['meta_keywords'], $values['layout_id'], + $values['pages'], $values['noindex'], $values['repeat_entry'], $values['copy_from'], $values['social_icons'], $values['event_date'], $values['hidden-tags'], $values['block_direct_access'], + $values['priority'], $values['password'], $values['pixieset'], $values['id_author'], $params + ) ) + $response = [ 'status' => 'ok', 'msg' => 'Artykuł został zapisany.', 'id' => $id ]; + + \admin\factory\Articles::insert_missing_hash(); + + echo json_encode( $response ); + exit; + } + + public static function article_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + \admin\factory\Articles::delete_nonassigned_images(); + \admin\factory\Articles::delete_nonassigned_files(); + + return \admin\view\Articles::article_edit( [ + 'article' => \admin\factory\Articles::article_details( \S::get( 'id' ) ), + 'menus' => \admin\factory\Pages::menus_list(), + 'languages' => \admin\factory\Languages::languages_list(), + 'layouts' => \admin\factory\Layouts::layouts_list(), + 'additional_params_lon' => \admin\factory\Articles::additional_params( 1 ), + 'additional_params_loff' => \admin\factory\Articles::additional_params( 0 ), + 'settings' => \admin\factory\Settings::settings_details(), + 'authors' => \admin\factory\Authors::get_simple_list(), + 'user' => $user + ] ); + } + + public static function view_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Brak uprawnień.' ); + + return \admin\view\Articles::articles_list(); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/controls/class.ArticlesArchive.php b/autoload/admin/controls/class.ArticlesArchive.php new file mode 100644 index 0000000..def5ffa --- /dev/null +++ b/autoload/admin/controls/class.ArticlesArchive.php @@ -0,0 +1,44 @@ + 'error', 'msg' => 'Podczas usuwania autora wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( \admin\factory\Authors::delete_author( \S::get( 'id' ) ) ) + \S::alert( 'Autor został usunięty.' ); + + header( 'Location: /admin/authors/view_list/' ); + exit; + } + + // zapis autora + static public function save() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania autora wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $author_id = \admin\factory\Authors::save_author( $values['id'], $values['author'], $values['image'], $values['description'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Autor został zapisany.', 'id' => $author_id ]; + + echo json_encode( $response ); + exit; + } + + // edycja autora + static public function edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \Tpl::view( 'authors/author-edit', [ + 'author' => \admin\factory\Authors::get_single_author( \S::get( 'id' ) ), + 'languages' => \admin\factory\Languages::languages_list() + ] ); + } + + //autorzy artykułów + static public function view_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'article_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \Tpl::view( 'authors/view-list' ); + } +} \ No newline at end of file diff --git a/autoload/admin/controls/class.Backups.php b/autoload/admin/controls/class.Backups.php new file mode 100644 index 0000000..9d7b184 --- /dev/null +++ b/autoload/admin/controls/class.Backups.php @@ -0,0 +1,66 @@ + 'error', 'msg' => 'Podczas zapisywania baneru wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $banner_id = \admin\factory\Banners::banner_save( $values['id'], $values['name'], $values['status'], $values['date_start'], $values['date_end'], + $values['home_page'], $values['src'], $values['url'], $values['html'], $values['text'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Baner został zapisany.', 'id' => $banner_id ]; + + echo json_encode( $response ); + exit; + } + + public static function banner_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'baners_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Banners::banner_edit( + \admin\factory\Banners::banner_details( + \S::get( 'id' ) + ), + \admin\factory\Languages::languages_list() + ); + } + + public static function view_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'baners_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Banners::banners_list(); + } + +} +?> diff --git a/autoload/admin/controls/class.Emails.php b/autoload/admin/controls/class.Emails.php new file mode 100644 index 0000000..1e32d3b --- /dev/null +++ b/autoload/admin/controls/class.Emails.php @@ -0,0 +1,28 @@ + diff --git a/autoload/admin/controls/class.Languages.php b/autoload/admin/controls/class.Languages.php new file mode 100644 index 0000000..4624f42 --- /dev/null +++ b/autoload/admin/controls/class.Languages.php @@ -0,0 +1,126 @@ + 'error', 'msg' => 'Podczas zapisywania języka wystąpił błąd. Proszę spróbować ponownie.' ]; + + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( \admin\factory\Languages::language_save( + $values['id'], $values['name'], $values['status'], $values['start'], $values['o'], $values['domain'], $values['main_domain'] + ) ) + $response = [ 'status' => 'ok', 'msg' => 'Język został zapisany.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function language_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Languages::language_edit( + \admin\factory\Languages::language_details( + \S::get( 'id' ) + ), \admin\factory\Languages::max_order() + ); + } + + public static function view_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Languages::languages_list(); + } + + public static function translation_delete() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + if ( \admin\factory\Languages::translation_delete( \S::get( 'id' ) ) ) + \S::alert( 'Tłumaczenie zostało usunięte.' ); + header( 'Location: /admin/languages/translation_list/' ); + exit; + } + + public static function translation_save() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania tłumaczenia wystąpił błąd. Proszę spróbować ponownie.' ]; + + $values = \S::json_to_array( \S::get( 'values' ) ); + + $languages_list = \admin\factory\Languages::languages_list(); + if ( is_array( $languages_list ) and !empty( $languages_list ) ) foreach ( $languages_list as $language ) + { + \S::delete_session( 'lang-' . $language['id'] ); + $languages[ $language['id'] ] = $values[ $language['id'] ]; + } + + if ( $id = \admin\factory\Languages::translation_save( $values['id'], $values['text'], $languages ) ) + $response = [ 'status' => 'ok', 'msg' => 'Tłumaczenie zostało zapisane.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function translation_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Languages::translation_edit( + \admin\factory\Languages::translation_details( \S::get( 'id' ) ), + \admin\factory\Languages::languages_list() + ); + } + + public static function translation_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'language_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Languages::translations_list(); + } + +} +?> \ No newline at end of file diff --git a/autoload/admin/controls/class.Layouts.php b/autoload/admin/controls/class.Layouts.php new file mode 100644 index 0000000..0f62eab --- /dev/null +++ b/autoload/admin/controls/class.Layouts.php @@ -0,0 +1,59 @@ + 'error', 'msg' => 'Podczas zapisywania szablonu wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $id = \admin\factory\Layouts::layout_save( $values['id'], $values['name'], $values['status'], $values['pages'], $values['html'], $values['css'], $values['js'], $values['m_html'], $values['m_css'], $values['m_js'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Szablon został zapisany.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function layout_edit() + { + global $user; + if( !\admin\factory\Users::check_privileges( 'template_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Layouts::layout_edit( + \admin\factory\Layouts::layout_details( + \S::get( 'id' ) + ), + \admin\factory\Layouts::menus_list() + ); + } + + public static function view_list() + { + global $user; + if( !\admin\factory\Users::check_privileges( 'template_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Layouts::layouts_list(); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/controls/class.Newsletter.php b/autoload/admin/controls/class.Newsletter.php new file mode 100644 index 0000000..6dc8dc8 --- /dev/null +++ b/autoload/admin/controls/class.Newsletter.php @@ -0,0 +1,167 @@ + 'ok', 'msg' => 'Emaile zostały zaimportowane.' ] ); + exit; + } + + public static function import() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \Tpl::view( 'newsletter/import' ); + } + + public static function emails_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::emails_list(); + } + + public static function send() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + if ( \admin\factory\Newsletter::send( \S::get( 'dates' ), \S::get( 'template' ), \S::get( 'only_once' ) ) ) + \S::alert( 'Newsletter został dodany do kolejki wysyłania.' ); + + header( 'Location: /admin/newsletter/prepare/' ); + exit; + } + + public static function prepare() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::prepare( + \admin\factory\Newsletter::templates_list() + ); + } + + public static function settings_save() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $values = \S::json_to_array( \S::get( 'values' ) ); + + \admin\factory\Settings::settings_update( 'newsletter_footer_1', $values['newsletter_footer_1'] ); + \admin\factory\Settings::settings_update( 'newsletter_footer_2', $values['newsletter_footer_2'] ); + \admin\factory\Settings::settings_update( 'newsletter_header', $values['newsletter_header'] ); + + \S::alert( 'Ustawienia zostały zapisane.' ); + + echo json_encode( [ 'status' => 'ok', 'msg' => 'Ustawienia zostały zapisane.' ] ); + exit; + } + + public static function settings() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::settings( + \admin\factory\Settings::settings_details() + ); + } + + public static function email_templates_user() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::email_templates_user(); + } + + public static function email_templates_admin() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::email_templates_admin(); + } + + public static function email_template_delete() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $is_admin = \admin\factory\Newsletter::is_admin_template( \S::get( 'id' ) ); + + if ( !$is_admin and \admin\factory\Newsletter::newsletter_template_delete( \S::get( 'id' ) ) ) + \S::alert( 'Szablon newslettera został usunięty.' ); + + if ( $is_admin ) + header( 'Location: /admin/newsletter/email_templates_admin/' ); + else + header( 'Location: /admin/newsletter/email_templates_user/' ); + exit; + } + + public static function email_template_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Newsletter::email_template_edit( + \admin\factory\Newsletter::email_template_detalis( + \S::get( 'id' ) + ) + ); + } + + public static function template_save() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'newsletter_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $id = \admin\factory\Newsletter::template_save( $values['id'], $values['name'], $values['text'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Zmiany zostały zapisane.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } +} diff --git a/autoload/admin/controls/class.Pages.php b/autoload/admin/controls/class.Pages.php new file mode 100644 index 0000000..423fa1b --- /dev/null +++ b/autoload/admin/controls/class.Pages.php @@ -0,0 +1,155 @@ + \admin\factory\Pages::menus_list(), + 'modal' => true + ] ); + } + + static public function browse_list() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'page_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Pages::browse_list( + \admin\factory\Pages::menus_list() + ); + } + + public static function menu_delete() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + if ( \admin\factory\Pages::menu_delete( \S::get( 'id' ) ) ) + \S::set_message( 'Menu zostało usunięte.' ); + else + \S::alert( 'Podczas usuwania menu wystąpił błąd. Aby usunąć menu nie może ono posiadać przypiętych stron.' ); + header( 'Location: /admin/pages/view_list/' ); + exit; + } + + public static function page_delete() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + if ( \admin\factory\Pages::page_delete( \S::get( 'id' ) ) ) + \S::set_message( 'Strona została usunięta.' ); + else + \S::alert( 'Podczas usuwania strony wystąpił błąd. Aby usunąć stronę nie może ona posiadać przypiętych podstron.' ); + + header( 'Location: /admin/pages/view_list/' ); + exit; + } + + public static function page_articles() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Pages::page_articles( \S::get( 'id' ), + \admin\factory\Pages::page_articles( \S::get( 'id' ) ) ); + } + + public static function page_save() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania strony wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $id = \admin\factory\Pages::page_save( + $values['id'], $values['title'], $values['seo_link'], $values['meta_title'], $values['meta_description'], $values['meta_keywords'], $values['menu_id'], + $values['parent_id'], $values['page_type'], $values['sort_type'], $values['layout_id'], $values['articles_limit'], $values['show_title'], + $values['status'], $values['link'], $values['noindex'], $values['start'], $values['site_title'], $values['block_direct_access'], $values['cache'], $values['canonical'] + ) ) + $response = [ 'status' => 'ok', 'msg' => 'Strona została zapisana.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function page_edit() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Pages::page_edit( + \admin\factory\Pages::page_details( + \S::get( 'id' ) + ), \S::get( 'pid' ), \S::get( 'menu_id' ), + \admin\factory\Pages::menu_lists(), + \admin\factory\Layouts::layouts_list(), + \admin\factory\Languages::languages_list(), + \admin\factory\Settings::settings_details() + ); + } + + public static function menu_save() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + $response = [ 'status' => 'error', 'msg' => 'Podczas zapisywania menu wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( \admin\factory\Pages::menu_save( $values['id'], $values['name'], + $values['status'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Menu zostało zapisane.' ]; + + echo json_encode( $response ); + exit; + } + + public static function menu_edit() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Pages::menu_edit( + \admin\factory\Pages::menu_details( \S::get( 'id' ) ) + ); + } + + public static function view_list() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'page_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Pages::pages_list( + \admin\factory\Pages::menus_list() + ); + } + +} +?> diff --git a/autoload/admin/controls/class.Scontainers.php b/autoload/admin/controls/class.Scontainers.php new file mode 100644 index 0000000..e9dd71f --- /dev/null +++ b/autoload/admin/controls/class.Scontainers.php @@ -0,0 +1,75 @@ + 'error', 'msg' => 'Podczas zapisywania kontenera wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $id = \admin\factory\Scontainers::container_save( $values['id'], $values['title'], $values['text'], $values['status'], $values['show_title'], + $values['src'], $values['html'] + ) ) + $response = [ 'status' => 'ok', 'msg' => 'Kontener został zapisany.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function container_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'scontainers_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Scontainers::container_edit( + \admin\factory\Scontainers::container_details( + \S::get( 'id' ) + ), \admin\factory\Languages::languages_list() + ); + } + + public static function view_list() + { + global $user; + if ( !\admin\factory\Users::check_privileges( 'scontainers_administration', + $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\Scontainers::containers_list(); + } + +} \ No newline at end of file diff --git a/autoload/admin/controls/class.SeoAdditional.php b/autoload/admin/controls/class.SeoAdditional.php new file mode 100644 index 0000000..f1246d5 --- /dev/null +++ b/autoload/admin/controls/class.SeoAdditional.php @@ -0,0 +1,59 @@ + 'error', 'msg' => 'Podczas zapisywania elementu wystąpił błąd. Proszę spróbować ponownie.' ]; + $values = \S::json_to_array( \S::get( 'values' ) ); + + if ( $id = \admin\factory\SeoAdditional::element_save( $values['id'], $values['url'], $values['status'], $values['title'], $values['keywords'], $values['description'], $values['text'] ) ) + $response = [ 'status' => 'ok', 'msg' => 'Zmiany zostały zapisane.', 'id' => $id ]; + + echo json_encode( $response ); + exit; + } + + public static function element_edit() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'seo_administration', $user['id'])) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\SeoAdditional::element_edit( + \admin\factory\SeoAdditional::element_details( + \S::get( 'id' ) + ) + ); + } + + public static function main_view() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'seo_administration', $user['id'] ) ) + return \S::alert( 'Nie masz uprawnień' ); + + return \admin\view\SeoAdditional::main_view(); + } +} diff --git a/autoload/admin/controls/class.Settings.php b/autoload/admin/controls/class.Settings.php new file mode 100644 index 0000000..ba01075 --- /dev/null +++ b/autoload/admin/controls/class.Settings.php @@ -0,0 +1,77 @@ + 'ok', 'msg' => 'Ustawienia zostały zapisane.' ] ); + exit; + } + + public static function view() + { + global $user; + + if ( !\admin\factory\Users::check_privileges( 'settings_administration', $user['id'])) + return \S::alert('Nie masz uprawnień'); + + return \admin\view\Settings::view( + \admin\factory\Settings::settings_details() + ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/controls/class.Update.php b/autoload/admin/controls/class.Update.php new file mode 100644 index 0000000..13fbfbf --- /dev/null +++ b/autoload/admin/controls/class.Update.php @@ -0,0 +1,29 @@ + \Tpl::view( 'users/user-2fa' ) + ] ); + } +} +?> diff --git a/autoload/admin/factory/class.Articles.php b/autoload/admin/factory/class.Articles.php new file mode 100644 index 0000000..da033a1 --- /dev/null +++ b/autoload/admin/factory/class.Articles.php @@ -0,0 +1,714 @@ + insert( 'pp_articles', [ + 'show_title' => $article['show_title'], + 'show_date_add' => $article['show_date_add'], + 'show_date_modify' => $article['show_date_modify'], + 'date_add' => date( 'Y-m-d H:i:s' ), + 'date_modify' => date( 'Y-m-d H:i:s' ), + 'modify_by' => $user['id'], + 'layout_id' => $article['layout_id'], + 'status' => $article['status'], + 'repeat_entry' => $article['repeat_entry'], + 'social_icons' => $article['social_icons'], + 'date_start' => $article['date_start'], + 'date_end' => $article['event_date'], + 'priority' => $article['priority'], + 'password' => $article['password'], + 'pixieset' => $article['pixieset'] + ] ); + + $article_tmp_id = $mdb -> id(); + + if ( $article_tmp_id ) + { + foreach ( $article['languages'] as $key => $val ) + { + $mdb -> insert( 'pp_articles_langs', [ + 'article_id' => $article_tmp_id, + 'lang_id' => $key, + 'title' => 'Kopia: ' . $val['title'], + 'entry' => $val['entry'], + 'text' => $val['text'], + 'meta_title' => null, + 'meta_description' => null, + 'meta_keywords' => null, + 'seo_link' => null, + 'copy_from' => $val['copy_from'], + 'block_direct_access' => $val['block_direct_access'] + ] ); + } + + foreach ( $article['params'] as $param ) + { + $mdb -> insert( 'pp_articles_additional_values', [ + 'param_id' => $param['param_id'], + 'value' => $param['value'], + 'article_id' => $article_tmp_id, + 'language_id' => $param['language_id'] + ] ); + } + + foreach ( $article['pages'] as $page ) + { + $order = self::max_order() + 1; + $mdb -> insert( 'pp_articles_pages', [ + 'article_id' => $article_tmp_id, + 'page_id' => $page, + 'o' => (int)$order + ] ); + } + return true; + } + } + return false; + } + + public static function insert_missing_hash() { + global $mdb; + + if ( $mdb -> count( 'pp_articles', [ 'hash' => null ] ) ) { + $rows = $mdb -> select( 'pp_articles', [ 'id', 'date_add' ], [ 'hash' => null ] ); + if ( is_array( $rows ) ) foreach ( $rows as $row ) { + $mdb -> update( 'pp_articles', [ 'hash' => md5( $row['id'] . $row['date_add'] ) ], [ 'id' => $row['id'] ] ); + } + } + return true; + } + + static public function files_order_save( $article_id, $order ) + { + global $mdb; + + $order = explode( ';', $order ); + if ( is_array( $order ) and !empty( $order ) ) foreach ( $order as $file_id ) + { + $mdb -> update( 'pp_articles_files', [ + 'o' => (int)$i++ + ], [ + 'AND' => [ + 'article_id' => $article_id, + 'id' => $file_id + ] + ] ); + } + } + + public static function gallery_order_save( $article_id, $order ) + { + global $mdb; + + $order = explode( ';', $order ); + if ( is_array( $order ) and !empty( $order ) ) foreach ( $order as $image_id ) + { + $mdb -> update( 'pp_articles_images', [ + 'o' => $i++ + ], [ + 'AND' => [ + 'article_id' => $article_id, + 'id' => $image_id + ] + ] ); + } + } + + public static function additional_params( $language = 0 ) + { + global $mdb; + return $mdb -> select( 'pp_articles_additional_params', '*', [ 'AND' => [ 'status' => 1, 'language' => $language ] ] ); + } + + public static function image_alt_change( $image_id, $image_alt ) + { + global $mdb; + $result = $mdb -> update( 'pp_articles_images', [ + 'alt' => $image_alt + ], [ + 'id' => $image_id + ] ); + \S::delete_cache(); + return $result; + } + + public static function articles_by_date_add( $date_start, $date_end ) + { + global $mdb; + + $results = $mdb -> query( 'SELECT ' + . 'id ' + . 'FROM ' + . 'pp_articles ' + . 'WHERE ' + . 'status = 1 ' + . 'AND ' + . 'date_add BETWEEN \'' . $date_start . '\' AND \'' . $date_end . '\' ' + . 'ORDER BY ' + . 'date_add DESC' ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + $articles[] = \front\factory\Articles::article_details( $row['id'], 'pl' ); + + return $articles; + } + + public static function article_url( $article_id ) + { + global $mdb; + + $results = $mdb -> query( "SELECT seo_link FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = " . (int)$article_id . " AND seo_link != '' ORDER BY o ASC LIMIT 1" ) -> fetchAll(); + if ( !$results[0]['seo_link'] ) + { + $title = self::article_title( $article_id ); + return 'a-' . $article_id . '-' . \S::seo( $title ); + } + else + return $results[0]['seo_link']; + } + + public static function article_pages( $article_id ) + { + global $mdb; + + $results = $mdb -> query( "SELECT page_id FROM pp_articles_pages WHERE article_id = " . (int)$article_id ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + if ( $out == '' ) + $out .= ' - '; + + $out .= \admin\factory\Pages::page_title( $row['page_id'] ); + + if ( end( $results ) != $row ) + $out .= ' / '; + } + + return $out; + } + + public static function article_title( $article_id ) + { + global $mdb; + $results = $mdb -> query( "SELECT title FROM pp_articles_langs AS pal, pp_langs AS pl WHERE lang_id = pl.id AND article_id = " . (int)$article_id . " AND title != '' ORDER BY o ASC LIMIT 1" ) -> fetchAll(); + return $results[0]['title']; + } + + public static function articles_set_archive( $article_id ) + { + global $mdb; + $result = $mdb -> update( 'pp_articles', [ 'status' => -1 ], [ 'id' => (int)$article_id ] ); + \S::htacces(); + \S::delete_cache(); + return $result; + } + + public static function file_name_change( $file_id, $file_name ) + { + global $mdb; + $mdb -> update( 'pp_articles_files', [ 'name' => $file_name ], [ 'id' => (int)$file_id ] ); + return true; + } + + public static function delete_file( $file_id ) + { + global $mdb; + $mdb -> update( 'pp_articles_files', [ 'to_delete' => 1 ], [ 'id' => (int)$file_id ] ); + return true; + } + public static function delete_img( $image_id ) + { + global $mdb; + $mdb -> update( 'pp_articles_images', [ 'to_delete' => 1 ], [ 'id' => (int)$image_id ] ); + return true; + } + + public static function article_details( $article_id ) + { + global $mdb; + + if ( $article = $mdb -> get( 'pp_articles', '*', [ 'id' => (int)$article_id ] ) ) + { + $results = $mdb -> select( 'pp_articles_langs', '*', [ 'article_id' => (int)$article_id ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $article['languages'][ $row['lang_id'] ] = $row; + + $article['images'] = $mdb -> select( 'pp_articles_images', '*', [ 'article_id' => (int)$article_id, 'ORDER' => [ 'o' => 'ASC', 'id' => 'ASC' ] ] ); + $article['files'] = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => (int)$article_id, 'ORDER' => [ 'o' => 'ASC', 'id' => 'ASC' ] ] ); + $article['pages'] = $mdb -> select( 'pp_articles_pages', 'page_id', [ 'article_id' => (int)$article_id ] ); + $article['tags'] = $mdb -> select( 'pp_tags', [ '[><]pp_articles_tags' => [ 'id' => 'tag_id' ] ], 'name', [ 'article_id' => (int)$article_id ] ); + $article['params'] = $mdb -> select( 'pp_articles_additional_values', [ 'param_id', 'value', 'language_id' ], [ 'article_id' => (int)$article_id ] ); + } + + return $article; + } + + public static function max_order() + { + global $mdb; + return $mdb -> max( 'pp_articles_pages', 'o' ); + } + + public static function article_save( + $article_id, $title, $main_image, $entry, $text, $table_of_contents, $status, $show_title, $show_table_of_contents, $show_date_add, $date_add, $show_date_modify, $date_modify, $seo_link, $meta_title, $meta_description, + $meta_keywords, $layout_id, $pages, $noindex, $repeat_entry, $copy_from, $social_icons, $event_date, $tags, $block_direct_access, $priority, + $password, $pixieset, $id_author, $params ) + { + + global $mdb, $user; + + $event_date = explode( ' - ', $event_date ); + + if ( !$article_id ) + { + $mdb -> insert( 'pp_articles', [ + 'show_title' => $show_title == 'on' ? 1 : 0, + 'show_table_of_contents' => $show_table_of_contents == 'on' ? 1 : 0, + 'show_date_add' => $show_date_add == 'on' ? 1 : 0, + 'show_date_modify' => $show_date_modify == 'on' ? 1 : 0, + 'date_add' => date( 'Y-m-d H:i:s' ), + 'date_modify' => date( 'Y-m-d H:i:s' ), + 'modify_by' => $user['id'], + 'layout_id' => $layout_id ? (int)$layout_id : null, + 'status' => $status == 'on' ? 1 : 0, + 'repeat_entry' => $repeat_entry == 'on' ? 1 : 0, + 'social_icons' => $social_icons == 'on' ? 1 : 0, + 'date_start' => $event_date[0] ? $event_date[0] : null, + 'date_end' => $event_date[1] ? $event_date[1] : null, + 'priority' => $priority == 'on' ? 1 : 0, + 'password' => $password ? $password : null, + 'pixieset' => $pixieset, + 'id_author' => $id_author ? $id_author : null + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + $i = 0; + + /* tłumaczenia */ + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_langs', [ + 'article_id' => (int)$id, + 'lang_id' => $row['id'], + 'title' => $title[ $i ] != '' ? $title[ $i ] : null, + 'main_image' => $main_image[$i] != '' ? $main_image[$i] : null, + 'entry' => $entry[ $i ] != '' ? $entry[ $i ] : null, + 'text' => $text[ $i ] != '' ? $text[ $i ] : null, + 'table_of_contents' => $table_of_contents[$i] != '' ? $table_of_contents[$i] : null, + 'meta_title' => $meta_title[ $i ] != '' ? $meta_title[ $i ] : null, + 'meta_description' => $meta_description[ $i ] != '' ? $meta_description[ $i ] : null, + 'meta_keywords' => $meta_keywords[ $i ] != '' ? $meta_keywords[ $i ] : null, + 'seo_link' => \S::seo( $seo_link[ $i ] ) != '' ? \S::seo( $seo_link[ $i ] ) : null, + 'noindex' => $noindex[ $i ], + 'copy_from' => $copy_from[ $i ] != '' ? $copy_from[ $i ] : null, + 'block_direct_access' => $block_direct_access[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_langs', [ + 'article_id' => (int)$id, + 'lang_id' => $row['id'], + 'title' => $title != '' ? $title : null, + 'main_image' => $main_image != '' ? $main_image : null, + 'entry' => $entry != '' ? $entry : null, + 'text' => $text != '' ? $text : null, + 'table_of_contents' => $table_of_contents != '' ? $table_of_contents : null, + 'meta_title' => $meta_title != '' ? $meta_title : null, + 'meta_description' => $meta_description != '' ? $meta_description : null, + 'meta_keywords' => $meta_keywords != '' ? $meta_keywords : null, + 'seo_link' => \S::seo( $seo_link ) != '' ? \S::seo( $seo_link ) : null, + 'noindex' => $noindex, + 'copy_from' => $copy_from != '' ? $copy_from : null, + 'block_direct_access' => $block_direct_access + ] ); + } + + /* parametry bez wersji językowych */ + $results = $mdb -> select( 'pp_articles_additional_params', '*', [ 'AND' => [ 'status' => 1, 'language' => 0 ] ] ); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_additional_values', [ + 'param_id' => $row['id'], + 'value' => $params[ 'ap_' . $row['name'] ], + 'article_id' => (int)$id, + 'language_id' => null + ] ); + } + + /* strony */ + if ( is_array( $pages ) ) foreach ( $pages as $page ) + { + $order = self::max_order() + 1; + + $mdb -> insert( 'pp_articles_pages', [ + 'article_id' => (int)$id, + 'page_id' => (int)$page, + 'o' => (int)$order + ] ); + } + else if ( $pages ) + { + $order = self::max_order() + 1; + + $mdb -> insert( 'pp_articles_pages', [ + 'article_id' => (int)$id, + 'page_id' => (int)$pages, + 'o' => (int)$order + ] ); + } + + /* pliki */ + $results = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $dir = '/upload/article_files/article_' . $id; + + $new_file_name = str_replace( '/upload/article_files/tmp', $dir, $row['src'] ); + + if ( file_exists( '..' . $row['src'] ) ) + { + if ( !is_dir( '../' . $dir ) and $created !== true ) + { + if ( mkdir( '../' . $dir, 0755, true ) ) + $created = true; + } + rename( '..' . $row['src'], '..' . $new_file_name ); + } + + $mdb -> update( 'pp_articles_files', [ 'src' => $new_file_name, 'article_id' => $id ], [ 'id' => $row['id'] ] ); + } + + $created = false; + + /* zdjęcia */ + $results = $mdb -> select( 'pp_articles_images', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $dir = '/upload/article_images/article_' . $id; + + $new_file_name = str_replace( '/upload/article_images/tmp', $dir, $row['src'] ); + + if ( file_exists( '../' . $new_file_name ) ) + { + $ext = strrpos( $new_file_name, '.' ); + $fileName_a = substr( $new_file_name, 0, $ext ); + $fileName_b = substr( $new_file_name, $ext ); + + $count = 1; + + while ( file_exists( '../' . $fileName_a . '_' . $count . $fileName_b ) ) + $count++; + + $new_file_name = $fileName_a . '_' . $count . $fileName_b; + } + + if ( file_exists( '..' . $row['src'] ) ) + { + if ( !is_dir( '../' . $dir ) and $created !== true ) + { + if ( mkdir( '../' . $dir, 0755, true ) ) + $created = true; + } + rename( '..' . $row['src'], '..' . $new_file_name ); + } + + $mdb -> update( 'pp_articles_images', [ 'src' => $new_file_name, 'article_id' => (int)$id ], [ 'id' => $row['id'] ] ); + } + + /* tagi */ + $tags = explode( ',', $tags ); + if ( is_array( $tags ) ) foreach ( $tags as $tag ) + { + if ( trim( $tag ) != '' ) + { + $tag_id = $mdb -> get( 'pp_tags', 'id', [ 'name' => $tag ] ); + if ( !$tag_id ) + { + $mdb -> insert( 'pp_tags', [ 'name' => $tag ] ); + $tag_id = $mdb -> id(); + } + + $mdb -> insert( 'pp_articles_tags', [ 'article_id' => (int)$id, 'tag_id' => (int)$tag_id ] ); + } + } + + \S::htacces(); + \S::delete_cache(); + + return $id; + } + } + else + { + $mdb -> update( 'pp_articles', [ + 'show_title' => $show_title == 'on' ? 1 : 0, + 'show_table_of_contents' => $show_table_of_contents == 'on' ? 1 : 0, + 'show_date_add' => $show_date_add == 'on' ? 1 : 0, + 'date_add' => $date_add, + 'show_date_modify' => $show_date_modify == 'on' ? 1 : 0, + 'date_modify' => $date_modify ? $date_modify : date( 'Y-m-d H:i:s' ), + 'modify_by' => $user['id'], + 'layout_id' => $layout_id ? (int)$layout_id : null, + 'status' => $status == 'on' ? 1 : 0, + 'repeat_entry' => $repeat_entry == 'on' ? 1 : 0, + 'social_icons' => $social_icons == 'on' ? 1 : 0, + 'date_start' => $event_date[0] ? $event_date[0] : null, + 'date_end' => $event_date[1] ? $event_date[1] : null, + 'priority' => $priority == 'on' ? 1 : 0, + 'password' => $password ? $password : null, + 'pixieset' => $pixieset, + 'id_author' => $id_author ? $id_author : null + ], [ + 'id' => (int)$article_id + ] ); + + if ( $date_add ) + $mdb -> update( 'pp_articles', [ 'date_add' => $date_add ], [ 'id' => (int)$article_id ] ); + + $i = 0; + + /* tłumaczenia */ + $mdb -> delete( 'pp_articles_langs', [ 'article_id' => (int)$article_id ] ); + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_langs', [ + 'article_id' => (int)$article_id, + 'lang_id' => $row['id'], + 'title' => $title[ $i ] != '' ? $title[ $i ] : null, + 'main_image' => $main_image[$i] != '' ? $main_image[$i] : null, + 'entry' => $entry[ $i ] != '' ? $entry[ $i ] : null, + 'text' => $text[ $i ] != '' ? $text[ $i ] : null, + 'table_of_contents' => $table_of_contents[$i] != '' ? $table_of_contents[$i] : null, + 'meta_title' => $meta_title[ $i ] != '' ? $meta_title[ $i ] : null, + 'meta_description' => $meta_description[ $i ] != '' ? $meta_description[ $i ] : null, + 'meta_keywords' => $meta_keywords[ $i ] != '' ? $meta_keywords[ $i ] : null, + 'seo_link' => \S::seo( $seo_link[ $i ] ) != '' ? \S::seo( $seo_link[ $i ] ) : null, + 'noindex' => $noindex[ $i ], + 'copy_from' => $copy_from[ $i ] != '' ? $copy_from[ $i ] : null, + 'block_direct_access' => $block_direct_access[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_langs', [ + 'article_id' => (int)$article_id, + 'lang_id' => $row['id'], + 'title' => $title != '' ? $title : null, + 'main_image' => $main_image != '' ? $main_image : null, + 'entry' => $entry != '' ? $entry : null, + 'text' => $text != '' ? $text : null, + 'table_of_contents' => $table_of_contents != '' ? $table_of_contents : null, + 'meta_title' => $meta_title != '' ? $meta_title : null, + 'meta_description' => $meta_description != '' ? $meta_description : null, + 'meta_keywords' => $meta_keywords != '' ? $meta_keywords : null, + 'seo_link' => \S::seo( $seo_link ) != '' ? \S::seo( $seo_link ) : null, + 'noindex' => $noindex, + 'copy_from' => $copy_from != '' ? $copy_from : null, + 'block_direct_access' => $block_direct_access + ] ); + } + + /* dodatkowe parametry */ + $mdb -> delete( 'pp_articles_additional_values', [ 'article_id' => (int)$article_id ] ); + + /* parametry bez wersji językowych */ + $results = $mdb -> select( 'pp_articles_additional_params', '*', [ 'AND' => [ 'status' => 1, 'language' => 0 ] ] ); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_articles_additional_values', [ + 'param_id' => $row['id'], + 'value' => $params[ 'ap_' . $row['name'] ], + 'article_id' => (int)$article_id, + 'language_id' => null + ] ); + } + + /* parametry z wersjami językowymi */ + $results = $mdb -> select( 'pp_articles_additional_params', '*', [ 'AND' => [ 'status' => 1, 'language' => 1 ] ] ); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $results2 = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results2 ) ) foreach ( $results2 as $row2 ) + { + $mdb -> insert( 'pp_articles_additional_values', [ + 'param_id' => $row['id'], + 'value' => $params[ 'ap_' . $row['name'] . '_' . $row2['id'] ], + 'article_id' => (int)$article_id, + 'language_id' => $row2['id'] + ] ); + } + } + + /* strony */ + $not_in = [ 0 ]; + + if ( is_array( $pages ) ) foreach ( $pages as $page ) + $not_in[] = $page; + else if ( $pages ) + $not_in[] = $pages; + + $mdb -> delete( 'pp_articles_pages', [ 'AND' => [ 'article_id' => (int)$article_id, 'page_id[!]' => $not_in ] ] ); + + $pages_tmp = $mdb -> select( 'pp_articles_pages', 'page_id', [ 'article_id' => (int)$article_id ] ); + + if ( !is_array( $pages ) ) + $pages = [ $pages ]; + + $pages = array_diff( $pages, $pages_tmp ); + + if ( is_array( $pages ) ) foreach ( $pages as $page ) + { + $order = self::max_order() + 1; + + $mdb -> insert( 'pp_articles_pages', [ + 'article_id' => (int)$article_id, + 'page_id' => (int)$page, + 'o' => (int)$order + ] ); + } + + /* pliki */ + $results = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $dir = '/upload/article_files/article_' . $article_id; + + $new_file_name = str_replace( '/upload/article_files/tmp', $dir, $row['src'] ); + + if ( file_exists( '..' . $row['src'] ) ) + { + if ( !is_dir( '../' . $dir ) and $created !== true ) + { + if ( mkdir( '../' . $dir, 0755, true ) ) + $created = true; + } + rename( '..' . $row['src'], '..' . $new_file_name ); + } + + $mdb -> update( 'pp_articles_files', [ 'src' => $new_file_name, 'article_id' => (int)$article_id ], [ 'id' => $row['id'] ] ); + } + + $created = false; + + /* zdjęcia */ + $results = $mdb -> select( 'pp_articles_images', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $dir = '/upload/article_images/article_' . $article_id; + + $new_file_name = str_replace( '/upload/article_images/tmp', $dir, $row['src'] ); + + if ( file_exists( '../' . $new_file_name ) ) + { + $ext = strrpos( $new_file_name, '.' ); + $fileName_a = substr( $new_file_name, 0, $ext ); + $fileName_b = substr( $new_file_name, $ext ); + + $count = 1; + + while ( file_exists( '../' . $fileName_a . '_' . $count . $fileName_b ) ) + $count++; + + $new_file_name = $fileName_a . '_' . $count . $fileName_b; + } + + if ( file_exists( '..' . $row['src'] ) ) + { + if ( !is_dir( '../' . $dir ) and $created !== true ) + { + if ( mkdir( '../' . $dir, 0755, true ) ) + $created = true; + } + rename( '..' . $row['src'], '..' . $new_file_name ); + } + + $mdb -> update( 'pp_articles_images', [ 'src' => $new_file_name, 'article_id' => (int)$article_id ], [ 'id' => $row['id'] ] ); + } + + $results = $mdb -> select( 'pp_articles_images', '*', [ 'AND' => [ 'article_id' => (int)$article_id, 'to_delete' => 1 ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( file_exists( '../' . $row['src'] ) ) + unlink( '../' . $row['src'] ); + } + + $mdb -> delete( 'pp_articles_images', [ 'AND' => [ 'article_id' => (int)$article_id, 'to_delete' => 1 ] ] ); + + $results = $mdb -> select( 'pp_articles_files', '*', [ 'AND' => [ 'article_id' => (int)$article_id, 'to_delete' => 1 ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( file_exists( '../' . $row['src'] ) ) + unlink( '../' . $row['src'] ); + } + + $mdb -> delete( 'pp_articles_files', [ 'AND' => [ 'article_id' => (int)$article_id, 'to_delete' => 1 ] ] ); + + /* tagi */ + $mdb -> delete( 'pp_articles_tags', [ 'article_id' => (int)$article_id ] ); + + $tags = explode( ',', $tags ); + if ( is_array( $tags ) ) foreach ( $tags as $tag ) + { + if ( trim( $tag ) != '' ) + { + $tag_id = $mdb -> get( 'pp_tags', 'id', [ 'name' => $tag ] ); + if ( !$tag_id ) + { + $mdb -> insert( 'pp_tags', [ 'name' => $tag ] ); + $tag_id = $mdb -> id(); + } + + $mdb -> insert( 'pp_articles_tags', [ 'article_id' => (int)$article_id, 'tag_id' => (int)$tag_id ] ); + } + } + + \S::htacces(); + \S::delete_cache(); + return $article_id; + } + } + + public static function delete_nonassigned_files() + { + global $mdb; + + $results = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( file_exists( '../' . $row['src'] ) ) + unlink( '../' . $row['src'] ); + } + + $mdb -> delete( 'pp_articles_files', [ 'article_id' => null ] ); + } + + public static function delete_nonassigned_images() + { + global $mdb; + + $results = $mdb -> select( 'pp_articles_images', '*', [ 'article_id' => null ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( file_exists( '../' . $row['src'] ) ) + unlink( '../' . $row['src'] ); + } + + $mdb -> delete( 'pp_articles_images', [ 'article_id' => null ] ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/factory/class.ArticlesArchive.php b/autoload/admin/factory/class.ArticlesArchive.php new file mode 100644 index 0000000..c43dbf2 --- /dev/null +++ b/autoload/admin/factory/class.ArticlesArchive.php @@ -0,0 +1,29 @@ + update( 'pp_articles', [ 'status' => 0 ], [ 'id' => (int)$article_id ] ); + + } + + public static function article_delete( $article_id ) + { + global $mdb; + $mdb -> delete( 'pp_articles_pages', [ 'article_id' => (int)$article_id ] ); + $mdb -> delete( 'pp_articles_langs', [ 'article_id' => (int)$article_id ] ); + $mdb -> delete( 'pp_articles_images', [ 'article_id' => (int)$article_id ] ); + $mdb -> delete( 'pp_articles_files', [ 'article_id' => (int)$article_id ] ); + $mdb -> delete( 'pp_articles_tags', [ 'article_id' => (int)$article_id ] ); + $mdb -> delete( 'pp_articles', [ 'id' => (int)$article_id ] ); + + \S::delete_dir( '../upload/article_images/article_' . (int)$article_id . '/' ); + \S::delete_dir( '../upload/article_files/article_' . (int)$article_id . '/' ); + + return true; + + } +} diff --git a/autoload/admin/factory/class.Authors.php b/autoload/admin/factory/class.Authors.php new file mode 100644 index 0000000..5c05c7a --- /dev/null +++ b/autoload/admin/factory/class.Authors.php @@ -0,0 +1,117 @@ + select( 'pp_authors', '*', [ 'ORDER' => [ 'author' => 'ASC' ] ] ); + } + + // usunięcie autora + static public function delete_author( $id_author ) + { + global $mdb; + + $result = $mdb -> delete( 'pp_authors', [ 'id' => (int)$id_author ] ); + \S::delete_cache(); + + return $result; + } + + // zapis autora + static public function save_author( $id_author, $author, $image, $description ) + { + global $mdb; + + if ( !$id_author ) + { + $mdb -> insert( 'pp_authors', [ + 'author' => $author, + 'image' => $image + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_authors_langs', [ + 'id_author' => (int)$id, + 'id_lang' => $row['id'], + 'description' => $description[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_authors_langs', [ + 'id_author' => (int)$id, + 'id_lang' => $row['id'], + 'description' => $description + ] ); + } + + \S::delete_cache(); + + return $id; + } + } + else + { + $mdb -> update( 'pp_authors', [ + 'author' => $author, + 'image' => $image + ], [ + 'id' => (int)$id_author + ] ); + + $mdb -> delete( 'pp_authors_langs', [ 'id_author' => (int)$id_author ] ); + + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_authors_langs', [ + 'id_author' => (int)$id_author, + 'id_lang' => $row['id'], + 'description' => $description[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_authors_langs', [ + 'id_author' => (int)$id_author, + 'id_lang' => $row['id'], + 'description' => $description + ] ); + } + + \S::delete_cache(); + + return $id_author; + } + return false; + } + + // szczególy autora + static public function get_single_author( $id_author ) + { + global $mdb; + + $author = $mdb -> get( 'pp_authors', '*', [ 'id' => (int)$id_author ] ); + + $results = $mdb -> select( 'pp_authors_langs', '*', [ 'id_author' => (int)$id_author ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $author['languages'][$row['id_lang']] = $row; + + return $author; + } +} \ No newline at end of file diff --git a/autoload/admin/factory/class.Backups.php b/autoload/admin/factory/class.Backups.php new file mode 100644 index 0000000..ccf6154 --- /dev/null +++ b/autoload/admin/factory/class.Backups.php @@ -0,0 +1,77 @@ + save( '../backups/' . $backupfile . '.sql' ); + + $zipTo = '../backups/' . $backupfile . '.zip'; + $zip = new \ZipArchive(); + $zip -> open( $zipTo, \ZipArchive::CREATE ); + $folder = '../'; + $iter = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator( $folder, \RecursiveDirectoryIterator::SKIP_DOTS ), + \RecursiveIteratorIterator::SELF_FIRST, + \RecursiveIteratorIterator::CATCH_GET_CHILD + ); + + foreach ( $iter as $file ) + { + if ( !strstr( $file, '../backups' ) and !strstr( $file, ' ../temp' ) and !strstr( $file, '../updates' ) ) + { + if ( is_dir( $file ) ) + { + $zip -> addEmptyDir( str_replace( $folder, '', $file . '/' ) ); + } + else if ( is_file( $file ) ) + { + $zip -> addFromString( str_replace( $folder, '', $file ), + file_get_contents( $file ) ); + } + } + } + $zip -> close(); + return true; + } + + public static function backup_delete( $file ) + { + if ( file_exists( '../backups/' . $file ) ) + unlink( '../backups/' . $file ); + return true; + } +} \ No newline at end of file diff --git a/autoload/admin/factory/class.Banners.php b/autoload/admin/factory/class.Banners.php new file mode 100644 index 0000000..ebab27b --- /dev/null +++ b/autoload/admin/factory/class.Banners.php @@ -0,0 +1,129 @@ + delete( 'pp_banners', [ 'id' => (int) $banner_id ] ); + \S::delete_cache(); + + return $result; + } + + public static function banner_save( $banner_id, $name, $status, $date_start, $date_end, $home_page, $src, $url, $html, $text ) + { + global $mdb; + + if ( !$banner_id ) + { + $mdb -> insert( 'pp_banners', [ + 'name' => $name, + 'status' => $status == 'on' ? 1 : 0, + 'date_start' => $date_start != '' ? $date_start : null, + 'date_end' => $date_end != '' ? $date_end : null, + 'home_page' => $home_page == 'on' ? 1 : 0 + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_banners_langs', [ + 'id_banner' => (int)$id, + 'id_lang' => $row['id'], + 'src' => $src[ $i ], + 'url' => $url[ $i ], + 'html' => $html[ $i ], + 'text' => $text[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_banners_langs', [ + 'id_banner' => (int)$id, + 'id_lang' => $row['id'], + 'src' => $src, + 'url' => $url, + 'html' => $html, + 'text' => $text + ] ); + } + + \S::delete_cache(); + + return $id; + } + } + else + { + $mdb -> update( 'pp_banners', + [ + 'name' => $name, + 'status' => $status == 'on' ? 1 : 0, + 'date_start' => $date_start != '' ? $date_start : null, + 'date_end' => $date_end != '' ? $date_end : null, + 'home_page' => $home_page == 'on' ? 1 : 0 + ], [ + 'id' => (int) $banner_id + ] ); + + $mdb -> delete( 'pp_banners_langs', [ 'id_banner' => (int)$banner_id ] ); + + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_banners_langs', [ + 'id_banner' => (int)$banner_id, + 'id_lang' => $row['id'], + 'src' => $src[ $i ], + 'url' => $url[ $i ], + 'html' => $html[ $i ], + 'text' => $text[ $i ] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_banners_langs', [ + 'id_banner' => (int)$banner_id, + 'id_lang' => $row['id'], + 'src' => $src, + 'url' => $url, + 'html' => $html, + 'text' => $text + ] ); + } + + \S::delete_cache(); + return $banner_id; + } + return false; + } + + public static function banner_details( $id_banner ) + { + global $mdb; + + $banner = $mdb -> get( 'pp_banners', '*', [ 'id' => (int)$id_banner ] ); + + $results = $mdb -> select( 'pp_banners_langs', '*', [ 'id_banner' => (int)$id_banner ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $banner['languages'][$row['id_lang']] = $row; + + return $banner; + } + +} +?> diff --git a/autoload/admin/factory/class.Emails.php b/autoload/admin/factory/class.Emails.php new file mode 100644 index 0000000..cf77301 --- /dev/null +++ b/autoload/admin/factory/class.Emails.php @@ -0,0 +1,11 @@ + get( 'pp_contact_emails', '*', [ 'id' => (int)$email_id ] ); + } +} diff --git a/autoload/admin/factory/class.Languages.php b/autoload/admin/factory/class.Languages.php new file mode 100644 index 0000000..403fcbd --- /dev/null +++ b/autoload/admin/factory/class.Languages.php @@ -0,0 +1,181 @@ + query( 'SELECT domain FROM pp_langs WHERE status = 1 AND domain IS NOT NULL GROUP BY domain' ) -> fetchAll( \PDO::FETCH_ASSOC ); + } + + public static function default_domain() + { + global $mdb; + $results = $mdb -> query( 'SELECT domain FROM pp_langs WHERE status = 1 AND domain IS NOT NULL AND main_domain = 1' ) -> fetchAll(); + return $default_domain = $results[0][0]; + } + + public static function translation_delete( $translation_id ) + { + global $mdb; + return $mdb -> delete( 'pp_langs_translations', [ 'id' => $translation_id ] ); + } + + public static function translation_save( $translation_id, $text, $languages ) + { + global $mdb; + + if ( $translation_id ) + { + $mdb -> update( 'pp_langs_translations', [ 'text' => $text ], [ 'id' => $translation_id ] ); + if ( is_array( $languages ) and !empty( $languages ) ): foreach ( $languages as $key => $val ): + $mdb -> update( 'pp_langs_translations', [ $key => $val ], [ 'id' => $translation_id ] ); + endforeach; endif; + \S::htacces(); + \S::delete_cache(); + return $translation_id; + } + else + { + $mdb -> insert( 'pp_langs_translations', [ 'text' => $text ] ); + if ( $translation_id = $mdb -> id() ) + { + if ( is_array( $languages ) and !empty( $languages ) ): foreach ( $languages as $key => $val ): + $mdb -> update( 'pp_langs_translations', [ $key => $val ], [ 'id' => $translation_id ] ); + endforeach; endif; + } + \S::htacces(); + \S::delete_cache(); + return $translation_id; + } + } + + public static function translation_details( $translation_id ) + { + global $mdb; + return $mdb -> get( 'pp_langs_translations', '*', [ 'id' => $translation_id ] ); + } + + public static function language_delete( $language_id ) + { + global $mdb; + + if ( $mdb -> count( 'pp_langs' ) > 1 ) + { + if ( $mdb -> query( 'ALTER TABLE pp_langs_translations DROP ' . $language_id ) + and + $mdb -> delete( 'pp_langs', [ 'id' => $language_id ] ) + ) + return true; + } + return false; + } + + public static function max_order() + { + global $mdb; + return $mdb -> max( 'pp_langs', 'o' ); + } + + public static function language_save( $language_id, $name, $status, $start, $o, $domain, $main_domain ) + { + global $mdb; + + if ( $start == 'on' and $status == 'on' and !\S::get_domain( $domain ) ) + $mdb -> update( 'pp_langs', [ + 'start' => 0 + ], [ + 'id[!]' => $language_id + ] ); + + if ( $start == 'on' and $status == 'on' and \S::get_domain( $domain ) ) + $mdb -> update( 'pp_langs', [ + 'start' => 0 + ], [ + 'AND' => [ 'id[!]' => $language_id, 'domain' => \S::get_domain( $domain ) ] + ] ); + + if ( $main_domain == 'on' and $domain and $status == 'on' ) + $mdb -> update( 'pp_langs', [ + 'main_domain' => 0 + ], [ + ' id[!]' => $language_id + ] ); + + if ( $mdb -> count( 'pp_langs', [ 'id' => $language_id ] ) ) + { + $mdb -> update( 'pp_langs', [ + 'status' => $status == 'on' ? 1 : 0, + 'start' => $start == 'on' ? 1 : 0, + 'name' => $name, + 'o' => $o, + 'domain' => \S::get_domain( $domain ) ? \S::get_domain( $domain ) : null, + 'main_domain' => $main_domain == 'on' and \S::get_domain( $domain ) ? 1 : 0, + ], [ + 'id' => $language_id + ] ); + } + else + { + if ( $mdb -> query( 'ALTER TABLE pp_langs_translations ADD ' . strtolower( $language_id ) . ' TEXT NULL DEFAULT NULL' ) ) + { + $mdb -> insert( 'pp_langs', [ + 'id' => strtolower( $language_id ), + 'name' => $name, + 'status' => $status == 'on' ? 1 : 0, + 'start' => $start == 'on' ? 1 : 0, + 'o' => $o, + 'domain' => \S::get_domain( $domain ) ? \S::get_domain( $domain ) : null, + 'main_domain' => $main_domain == 'on' && \S::get_domain( $domain ) ? 1 : 0, + ] ); + } + } + + if ( !$mdb -> count( 'pp_langs', [ 'AND' => [ 'status' => 1, 'domain[!]' => null ] ] ) ) + { + if ( !$mdb -> count( 'pp_langs', [ 'AND' => [ 'status' => 1, 'start' => 1, 'domain' => null ] ] ) ) + { + if ( $id_tmp = $mdb -> get( 'pp_langs', 'id', [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ) ) + $mdb -> update( 'pp_langs', [ 'start' => 1 ], [ 'id' => $id_tmp ] ); + } + } + + $domains = $mdb -> select( 'pp_langs', 'domain', [ 'domain[!]' => null, 'GROUP' => 'domain'] ); + if ( is_array( $domains ) and !empty( $domains ) ) + { + $mdb -> update( 'pp_langs', [ 'start' => 0 ], [ 'domain' => null ] ); + foreach ( $domains as $domain ) + { + if ( !$mdb -> count( 'pp_langs', [ 'AND' => [ 'status' => 1, 'start' => 1, 'domain' => $domain ] ] ) ) + { + if ( $id_tmp = $mdb -> get( 'pp_langs', 'id', [ 'AND' => [ 'status' => 1, 'domain' => $domain ], 'ORDER' => [ 'o' => 'ASC' ] ] ) ) + $mdb -> update( 'pp_langs', [ 'start' => 1 ], [ 'id' => $id_tmp ] ); + } + } + } + + if ( !$mdb -> count( 'pp_langs', [ 'AND' => [ 'status' => 1, 'main_domain' => 1 ] ] ) ) + { + if ( $id_tmp = $mdb -> get( 'pp_langs', 'id', [ 'AND' => [ 'status' => 1, 'domain[!]' => null ], 'ORDER' => [ 'o' => 'ASC' ] ] ) ) + $mdb -> update( 'pp_langs', [ 'main_domain' => 1 ], [ 'id' => $id_tmp ] ); + } + + \S::htacces(); + \S::delete_cache(); + return $language_id; + } + + public static function language_details( $language_id ) + { + global $mdb; + return $mdb -> get( 'pp_langs', '*', [ 'id' => $language_id ] ); + } + + public static function languages_list() + { + global $mdb; + return $mdb -> select( 'pp_langs', '*', [ 'ORDER' => [ 'o' => 'ASC' ] ] ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/factory/class.Layouts.php b/autoload/admin/factory/class.Layouts.php new file mode 100644 index 0000000..626fcdc --- /dev/null +++ b/autoload/admin/factory/class.Layouts.php @@ -0,0 +1,141 @@ + count( 'pp_layouts' ) > 1 ) + return $mdb -> delete( 'pp_layouts', [ 'id' => (int)$layout_id ] ); + return false; + } + + public static function layout_details( $layout_id ) + { + global $mdb; + $layout = $mdb -> get( 'pp_layouts', '*', [ 'id' => (int)$layout_id ] ); + + $layout['pages'] = $mdb -> select( 'pp_layouts_pages', 'page_id', [ 'layout_id' => (int)$layout_id ] ); + + return $layout; + + } + + public static function layout_save( $layout_id, $name, $status, $pages, $html, $css, $js, $m_html, $m_css, $m_js ) + { + global $mdb; + if ( !$layout_id ) + { + if ( $status == 'on' ) + $mdb -> update( 'pp_layouts', [ 'status' => 0 ] ); + + $mdb -> insert( 'pp_layouts', [ + 'name' => $name, + 'html' => $html, + 'css' => $css, + 'js' => $js, + 'm_html' => $m_html, + 'm_css' => $m_css, + 'm_js' => $m_js, + 'status' => $status == 'on' ? 1 : 0 + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + if ( is_array( $pages ) ) foreach ( $pages as $page ) + { + $mdb -> delete( 'pp_layouts_pages', [ 'page_id' => (int)$page ] ); + + $mdb -> insert( 'pp_layouts_pages', [ + 'layout_id' => (int)$id, + 'page_id' => (int)$page + ] ); + } + else if ( $pages ) + { + $mdb -> delete( 'pp_layouts_pages', [ 'page_id' => (int)$pages ] ); + + $mdb -> insert( 'pp_layouts_pages', [ + 'layout_id' => (int)$id, + 'page_id' => (int)$pages + ] ); + } + + \S::delete_cache(); + + return $id; + } + } + else + { + if ( $status == 'on' ) + $mdb -> update( 'pp_layouts', [ 'status' => 0 ] ); + + $mdb -> update( 'pp_layouts', [ + 'name' => $name, + 'html' => $html, + 'css' => $css, + 'js' => $js, + 'm_html' => $m_html, + 'm_css' => $m_css, + 'm_js' => $m_js, + 'status' => $status == 'on' ? 1 : 0 + ], [ + 'id' => $layout_id + ] ); + + $mdb -> delete( 'pp_layouts_pages', [ 'layout_id' => (int)$layout_id ] ); + + if ( is_array( $pages ) ) foreach ( $pages as $page ) + { + $mdb -> delete( 'pp_layouts_pages', [ 'page_id' => (int)$page ] ); + + $mdb -> insert( 'pp_layouts_pages', [ + 'layout_id' => (int)$layout_id, + 'page_id' => (int)$page + ] ); + } + else if ( $pages ) + { + $mdb -> delete( 'pp_layouts_pages', [ 'page_id' => (int)$pages ] ); + + $mdb -> insert( 'pp_layouts_pages', [ + 'layout_id' => (int)$layout_id, + 'page_id' => (int)$pages + ] ); + } + + \S::delete_cache(); + + return $layout_id; + } + return false; + + } + + public static function menus_list() + { + global $mdb; + $results = $mdb -> select( 'pp_menus', 'id', [ 'ORDER' => [ 'name' => 'ASC' ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $menu = \admin\factory\Pages::menu_details( $row ); + $menu['pages'] = \admin\factory\Pages::menu_pages( $row ); + + $menus[] = $menu; + } + return $menus; + + } + + public static function layouts_list() + { + global $mdb; + return $mdb -> select( 'pp_layouts', '*', [ 'ORDER' => [ 'name' => 'ASC' ] ] ); + } + +} +?> \ No newline at end of file diff --git a/autoload/admin/factory/class.Newsletter.php b/autoload/admin/factory/class.Newsletter.php new file mode 100644 index 0000000..0706148 --- /dev/null +++ b/autoload/admin/factory/class.Newsletter.php @@ -0,0 +1,105 @@ + count( 'pp_newsletter', [ 'email' => trim( $email ) ] ) ) + $mdb -> insert( 'pp_newsletter', [ + 'email' => trim( $email ), + 'hash' => md5( $email . time() ), + 'status' => 1 + ] ); + } + return true; + } + + public static function is_admin_template( $template_id ) + { + global $mdb; + return $mdb -> get( 'pp_newsletter_templates', 'is_admin', [ 'id' => (int)$template_id ] ); + } + + public static function newsletter_template_delete( $template_id ) + { + global $mdb; + return $mdb -> delete( 'pp_newsletter_templates', [ 'id' => (int)$template_id ] ); + } + + public static function send( $dates, $template, $only_once ) + { + global $mdb; + + $results = $mdb -> select( 'pp_newsletter', 'email', [ 'status' => 1 ] ); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + if ( $template and $only_once ) + { + if ( !$mdb -> count( 'pp_newsletter_send', [ 'AND' => [ 'id_template' => $template, 'email' => $row ] ] ) ) + $mdb -> insert( 'pp_newsletter_send', [ + 'email' => $row, + 'dates' => $dates, + 'id_template' => $template ? $template : null, + 'only_once' => ( $only_once == 'on' and $template ) ? 1 : 0 + ] ); + } + else + $mdb -> insert( 'pp_newsletter_send', [ + 'email' => $row, + 'dates' => $dates, + 'id_template' => $template ? $template : null, + 'only_once' => ( $only_once == 'on' and $template ) ? 1 : 0 + ] ); + } + return true; + } + + public static function email_template_detalis ($id_template) + { + global $mdb; + + $result = $mdb -> get ('pp_newsletter_templates', '*', [ 'id' => (int)$id_template ] ); + return $result; + } + + public static function template_save($id, $name, $text) + { + global $mdb; + if ( !$id ) + { + if ( $mdb -> insert( 'pp_newsletter_templates', [ + 'name' => $name, + 'text' => $text + ] ) ) + { + \S::delete_cache(); + return $mdb -> id(); + } + } + else + { + $mdb -> update( 'pp_newsletter_templates', [ + 'name' => $name, + 'text' => $text + + ], [ + 'id' => (int)$id + ] ); + + \S::delete_cache(); + return $id; + } + } + + public static function templates_list() + { + global $mdb; + return $mdb -> select( 'pp_newsletter_templates', '*', [ 'is_admin' => 0, 'ORDER' => [ 'name' => 'ASC' ] ] ); + } +} diff --git a/autoload/admin/factory/class.Pages.php b/autoload/admin/factory/class.Pages.php new file mode 100644 index 0000000..3f5c7b8 --- /dev/null +++ b/autoload/admin/factory/class.Pages.php @@ -0,0 +1,509 @@ + 'pełne artykuły', 1 => 'wprowadzenia', 2 => 'miniaturki', 3 => 'link', 4 => 'kontakt' ]; + public static $_sort_types = [ + 0 => 'data dodania - najstarsze na początku', + 1 => 'data dodania - najnowsze na początku', + 2 => 'data modyfikacji - rosnąco', + 3 => 'data mofyfikacji - malejąco', + 4 => 'ręczne', + 5 => 'alfabetycznie - A - Z', + 6 => 'alfabetycznie - Z - A' + ]; + + public static function save_articles_order( $page_id, $articles ) + { + global $mdb; + if ( is_array( $articles ) ) + { + $mdb -> update( 'pp_articles_pages', [ 'o' => 0 ], + [ 'page_id' => (int) $page_id ] ); + + for ( $i = 0; $i < count( $articles ); $i++ ) + { + if ( $articles[$i]['item_id'] ) + { + $x++; + $mdb -> update( 'pp_articles_pages', [ 'o' => $x ], + [ 'AND' => [ 'page_id' => (int) $page_id, 'article_id' => $articles[$i]['item_id'] ] ] ); + } + } + } + return true; + } + + public static function page_articles( $page_id ) + { + global $mdb; + $results = $mdb -> query( 'SELECT ' + . 'article_id, o, status ' + . 'FROM ' + . 'pp_articles_pages AS ap ' + . 'INNER JOIN pp_articles AS a ON a.id = ap.article_id ' + . 'WHERE ' + . 'page_id = ' . (int) $page_id . ' AND status != -1 ' + . 'ORDER BY ' + . 'o ASC' ) -> fetchAll(); + if ( is_array( $results ) ) + foreach ( $results as $row ) + { + $row['title'] = \admin\factory\Articles::article_title( $row['article_id'] ); + $articles[] = $row; + } + return $articles; + } + + public static function menus_list() + { + global $mdb; + return $mdb -> select( 'pp_menus', '*', [ 'ORDER' => [ 'name' => 'ASC' ] ] ); + } + + public static function save_pages_order( $menu_id, $pages ) + { + global $mdb; + if ( is_array( $pages ) ) + { + $mdb -> update( 'pp_pages', [ 'o' => 0 ], [ 'menu_id' => (int) $menu_id ] ); + + for ( $i = 0; $i < count( $pages ); $i++ ) + { + if ( $pages[$i]['item_id'] ) + { + $pages[$i]['parent_id'] ? $parent_id = $pages[$i]['parent_id'] : $parent_id = 0; + + if ( $pages[$i]['item_id'] && $pages[$i]['depth'] > 1 ) + { + if ( $pages[$i]['depth'] == 2 ) + $parent_id = null; + + $x++; + + $mdb -> update( 'pp_pages', [ 'o' => $x, 'parent_id' => $parent_id ], + [ 'id' => (int) $pages[$i]['item_id'] ] ); + } + } + } + } + + \S::delete_cache(); + + return true; + } + + public static function page_delete( $page_id ) + { + global $mdb; + if ( $mdb -> count( 'pp_pages', [ 'parent_id' => (int) $page_id ] ) ) + return false; + + if ( $mdb -> delete( 'pp_pages', [ 'id' => (int) $page_id ] ) ) + { + \S::delete_cache(); + \S::htacces(); + return true; + } + return false; + } + + public static function max_order() + { + global $mdb; + return $mdb -> max( 'pp_pages', 'o' ); + } + + public static function page_save( + $page_id, $title, $seo_link, $meta_title, $meta_description, $meta_keywords, $menu_id, $parent_id, $page_type, $sort_type, $layout_id, $articles_limit, $show_title, $status, $link, $noindex, $start, + $site_title, $block_direct_access, $cache, $canonical + ) + { + global $mdb; + + if ( !$parent_id ) + $parent_id = null; + + if ( !$page_id ) + { + $order = self::max_order() + 1; + + $mdb -> insert( 'pp_pages', [ + 'menu_id' => (int) $menu_id, + 'page_type' => $page_type, + 'sort_type' => $sort_type, + 'articles_limit' => $articles_limit, + 'show_title' => $show_title == 'on' ? 1 : 0, + 'status' => $status == 'on' ? 1 : 0, + 'o' => (int) $order, + 'parent_id' => $parent_id, + 'start' => $start == 'on' ? 1 : 0, + 'cache' => $cache == 'on' ? 1 : 0 + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + if ( $start ) + $mdb -> update( 'pp_pages', [ 'start' => 0 ], [ 'id[!]' => (int)$id ] ); + + if ( $layout_id ) + $mdb -> insert( 'pp_layouts_pages', [ 'page_id' => (int) $id, 'layout_id' => (int)$layout_id ] ); + + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_pages_langs', [ + 'page_id' => (int) $id, + 'lang_id' => $row['id'], + 'title' => $title[$i] != '' ? $title[$i] : null, + 'meta_description' => $meta_description[$i] != '' ? $meta_description[$i] : null, + 'meta_keywords' => $meta_keywords[$i] != '' ? $meta_keywords[$i] : null, + 'meta_title' => $meta_title[$i] != '' ? $meta_title[$i] : null, + 'seo_link' => \S::seo( $seo_link[$i] ) != '' ? \S::seo( $seo_link[$i] ) : null, + 'noindex' => $noindex[$i], + 'site_title' => $site_title[$i] != '' ? $site_title[$i] : null, + 'link' => $link[$i] != '' ? $link[$i] : null, + 'block_direct_access' => $block_direct_access[$i], + 'canonical' => $canonical[$i] != '' ? $canonical[$i] : null + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) + { + foreach ( $results as $row ) + { + $mdb -> insert( 'pp_pages_langs', [ + 'page_id' => (int) $id, + 'lang_id' => $row['id'], + 'title' => $title != '' ? $title : null, + 'meta_description' => $meta_description != '' ? $meta_description : null, + 'meta_keywords' => $meta_keywords != '' ? $meta_keywords : null, + 'meta_title' => $meta_title != '' ? $meta_title : null, + 'seo_link' => \S::seo( $seo_link ) != '' ? \S::seo( $seo_link ) : null, + 'noindex' => $noindex, + 'site_title' => $site_title != '' ? $site_title : null, + 'link' => $link != '' ? $link : null, + 'block_direct_access' => $block_direct_access, + 'canonical' => $canonical != '' ? $canonical : null + ] ); + } + } + + \S::htacces(); + \S::delete_cache(); + + return $id; + } + } + else + { + $mdb -> update( 'pp_pages', + [ + 'menu_id' => (int) $menu_id, + 'page_type' => $page_type, + 'sort_type' => $sort_type, + 'articles_limit' => $articles_limit, + 'show_title' => $show_title == 'on' ? 1 : 0, + 'status' => $status == 'on' ? 1 : 0, + 'parent_id' => $parent_id, + 'start' => $start == 'on' ? 1 : 0, + 'cache' => $cache == 'on' ? 1 : 0 + ], [ + 'id' => (int) $page_id + ] ); + + if ( $layout_id ) + { + $mdb -> delete( 'pp_layouts_pages', [ 'page_id' => (int) $page_id ] ); + $mdb -> insert( 'pp_layouts_pages', + [ 'layout_id' => (int) $layout_id, 'page_id' => (int) $page_id ] ); + } + + if ( $start ) + $mdb -> update( 'pp_pages', [ 'start' => 0 ], + [ 'id[!]' => (int) $page_id ] ); + + $i = 0; + + $mdb -> delete( 'pp_pages_langs', [ 'page_id' => (int) $page_id ] ); + + $results = $mdb -> select( 'pp_langs', [ 'id' ], + [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) + foreach ( $results as $row ) + { + $mdb -> insert( 'pp_pages_langs', + [ + 'page_id' => (int) $page_id, + 'lang_id' => $row['id'], + 'title' => $title[$i] != '' ? $title[$i] : null, + 'meta_description' => $meta_description[$i] != '' ? $meta_description[$i] : null, + 'meta_keywords' => $meta_keywords[$i] != '' ? $meta_keywords[$i] : null, + 'meta_title' => $meta_title[$i] != '' ? $meta_title[$i] : null, + 'seo_link' => \S::seo( $seo_link[$i] ) != '' ? \S::seo( $seo_link[$i] ) : null, + 'noindex' => $noindex[$i], + 'site_title' => $site_title[$i] != '' ? $site_title[$i] : null, + 'link' => $link[$i] != '' ? $link[$i] : null, + 'block_direct_access' => $block_direct_access[$i], + 'canonical' => $canonical[$i] != '' ? $canonical[$i] : null + ] ); + + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) + foreach ( $results as $row ) + { + $mdb -> insert( 'pp_pages_langs', + [ + 'page_id' => (int) $page_id, + 'lang_id' => $row['id'], + 'title' => $title != '' ? $title : null, + 'meta_description' => $meta_description != '' ? $meta_description : null, + 'meta_keywords' => $meta_keywords != '' ? $meta_keywords : null, + 'meta_title' => $meta_title != '' ? $meta_title : null, + 'seo_link' => \S::seo( $seo_link ) != '' ? \S::seo( $seo_link ) : null, + 'noindex' => $noindex, + 'site_title' => $site_title != '' ? $site_title : null, + 'link' => $link != '' ? $link : null, + 'block_direct_access' => $block_direct_access, + 'canonical' => $canonical != '' ? $canonical : null + ] ); + } + + self::update_supages_menu_id( $page_id, $menu_id ); + + \S::htacces(); + \S::delete_cache(); + + return $page_id; + } + return false; + } + + public static function update_supages_menu_id( $parent_id, $menu_id ) + { + global $mdb; + + $mdb -> update( 'pp_pages', [ 'menu_id' => (int) $menu_id ], + [ 'parent_id' => $parent_id ] ); + + $results = $mdb -> select( 'pp_pages', [ 'id' ], [ 'parent_id' => $parent_id ] ); + if ( is_array( $results ) ) + foreach ( $results as $row ) + self::update_supages_menu_id( $row['id'], $menu_id ); + } + + public static function generate_seo_link( $title, $page_id, $article_id, + $lang, $pid ) + { + global $mdb; + + $seo_link = \S::seo( $title ); + + + while ( !$seo_link_check ) + { + if ( $mdb -> count( 'pp_pages_langs', + [ 'AND' => [ 'seo_link' => $seo_link, 'page_id[!]' => (int) $page_id ] ] ) ) + $seo_link = $seo_link . '-' . ( ++$i ); + else + $seo_link_check = true; + } + + $seo_link_check = false; + + while ( !$seo_link_check ) + { + if ( $mdb -> count( 'pp_articles_langs', + [ 'AND' => [ 'seo_link' => $seo_link, 'article_id[!]' => (int) $article_id ] ] ) ) + $seo_link = $seo_link . '-' . ( ++$i ); + else + $seo_link_check = true; + } + return $seo_link; + } + + public static function google_url_preview( $page_id, $title, $lang, $pid, $id, $seo_link, $language_link = '' ) + { + global $mdb; + + $prefix = $language_link; + $status = true; + $id_page = $page_id; + + do + { + if ( $page_id ) + { + $parent = \admin\factory\Pages::page_details( $page_id ); + $parent_id = $parent['parent_id']; + } + else + $parent_id = $pid; + + if ( $parent_id ) + { + $results = $mdb -> query( "SELECT title, seo_link, page_id FROM pp_pages_langs AS ppl, pp_langs AS pl WHERE lang_id = pl.id AND page_id = " . (int) $parent_id . " AND ppl.lang_id = '" . $lang . "' " ) -> fetchAll(); + if ( $results[0]['seo_link'] ) + $seo = $results[0]['seo_link'] . '/' . $seo; + else + $seo = 's-' . $results[0]['page_id'] . '-' . \S::seo( $results[0]['title'] ) . '/' . $seo; + $page_id = $results[0]['page_id']; + } + else + $status = false; + } + while ( $status ); + + if ( $id ) + { + if ( !$seo_link ) + $seo = $seo . 's-' . $id . '-' . \S::seo( $title ); + else + $seo = $seo . $seo_link; + } + else + { + if ( !$seo_link ) + $seo = $seo . 's-' . $id_page . '-' . \S::seo( $title ); + else + $seo = $seo . $seo_link; + } + + if ( $prefix ) + $seo = $prefix . $seo; + + return $seo; + } + + public static function menu_delete( $menu_id ) + { + global $mdb; + + if ( $mdb -> count( 'pp_pages', [ 'menu_id' => (int) $menu_id ] ) ) + return false; + + return $mdb -> delete( 'pp_menus', [ 'id' => (int) $menu_id ] ); + } + + public static function menu_details( $menu_id ) + { + global $mdb; + return $mdb -> get( 'pp_menus', '*', [ 'id' => (int) $menu_id ] ); + } + + public static function menu_save( $menu_id, $name, $status ) + { + global $mdb; + + $status == 'on' ? $status = 1 : $status = 0; + + if ( !$menu_id ) + { + return $mdb -> insert( 'pp_menus', + [ + 'name' => $name, + 'status' => $status + ] ); + } + else + { + $mdb -> update( 'pp_menus', + [ + 'name' => $name, + 'status' => $status + ], [ + 'id' => (int) $menu_id + ] ); + + return true; + } + return false; + } + + public static function menu_lists() + { + global $mdb; + return $mdb -> select( 'pp_menus', '*', [ 'ORDER' => [ 'id' => 'ASC' ] ] ); + } + + public static function page_details( $page_id ) + { + global $mdb; + + $page = $mdb -> get( 'pp_pages', '*', [ 'id' => (int) $page_id ] ); + + $results = $mdb -> select( 'pp_pages_langs', '*', + [ 'page_id' => (int) $page_id ] ); + if ( is_array( $results ) ) + foreach ( $results as $row ) + $page['languages'][$row['lang_id']] = $row; + + $page['layout_id'] = $mdb -> get( 'pp_layouts_pages', 'layout_id', + [ 'page_id' => (int) $page_id ] ); + + return $page; + } + + public static function page_url( $page_id ) + { + global $mdb; + + $results = $mdb -> query( "SELECT seo_link, title lang_id FROM pp_pages_langs AS ppl, pp_langs AS pl WHERE lang_id = pl.id AND page_id = " . (int) $page_id . " AND seo_link != '' ORDER BY o ASC LIMIT 1" ) -> fetchAll(); + + if ( !$results[0]['seo_link'] ) + { + $title = self::page_title( $article_id ); + return 's-' . $page_id . '-' . \S::seo( $title ); + } + else + return $results[0]['seo_link']; + } + + public static function page_title( $page_id ) + { + global $mdb; + + $result = $mdb -> select( 'pp_pages_langs', + [ '[><]pp_langs' => [ 'lang_id' => 'id' ] ], 'title', + [ 'AND' => [ 'page_id' => (int) $page_id, 'title[!]' => '' ], 'ORDER' => [ 'o' => 'ASC' ], 'LIMIT' => 1 ] ); + return $result[0]; + } + + public static function page_languages( $page_id ) + { + global $mdb; + return $mdb -> select( 'pp_pages_langs', '*', + [ 'AND' => [ 'page_id' => (int) $page_id, 'title[!]' => null ] ] ); + } + + public static function menu_pages( $menu_id, $parent_id = null ) + { + global $mdb; + + $results = $mdb -> select( 'pp_pages', + [ 'id', 'menu_id', 'status', 'parent_id', 'start' ], + [ 'AND' => [ 'menu_id' => $menu_id, 'parent_id' => $parent_id ], 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) ) + foreach ( $results as $row ) + { + $row['title'] = self::page_title( $row['id'] ); + $row['languages'] = self::page_languages( $row['id'] ); + $row['subpages'] = self::menu_pages( $menu_id, $row['id'] ); + + $pages[] = $row; + } + + return $pages; + } + +} + +?> \ No newline at end of file diff --git a/autoload/admin/factory/class.Scontainers.php b/autoload/admin/factory/class.Scontainers.php new file mode 100644 index 0000000..9d355a7 --- /dev/null +++ b/autoload/admin/factory/class.Scontainers.php @@ -0,0 +1,121 @@ + delete( 'pp_scontainers', [ 'id' => (int) $container_id ] ); + } + + public static function container_save( $container_id, $title, $text, $status, $show_title, $src, $html ) + { + global $mdb; + + if ( !$container_id ) + { + $mdb -> insert( 'pp_scontainers', + [ + 'status' => $status == 'on' ? 1 : 0, + 'show_title' => $show_title == 'on' ? 1 : 0, + 'src' => $src + ] ); + + $id = $mdb -> id(); + + if ( $id ) + { + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_scontainers_langs', + [ + 'container_id' => (int) $id, + 'lang_id' => $row['id'], + 'title' => $title[$i], + 'text' => $text[$i], + 'html' => $html[$i] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_scontainers_langs', [ + 'container_id' => (int) $id, + 'lang_id' => $row['id'], + 'title' => $title, + 'text' => $text, + 'html' => $html + ] ); + } + + \S::delete_cache(); + + return $id; + } + } + else + { + $mdb -> update( 'pp_scontainers', + [ + 'status' => $status == 'on' ? 1 : 0, + 'show_title' => $show_title == 'on' ? 1 : 0, + 'src' => $src + ], + [ + 'id' => (int) $container_id + ] ); + + $mdb -> delete( 'pp_scontainers_langs', + [ 'container_id' => (int) $container_id ] ); + + $i = 0; + + $results = $mdb -> select( 'pp_langs', [ 'id' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) and count( $results ) > 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_scontainers_langs', + [ + 'container_id' => (int) $container_id, + 'lang_id' => $row['id'], + 'title' => $title[$i], + 'text' => $text[$i], + 'html' => $html[$i] + ] ); + $i++; + } + else if ( is_array( $results ) and count( $results ) == 1 ) foreach ( $results as $row ) + { + $mdb -> insert( 'pp_scontainers_langs', + [ + 'container_id' => (int) $container_id, + 'lang_id' => $row['id'], + 'title' => $title, + 'text' => $text, + 'html' => $html + ] ); + } + + \S::delete_cache(); + + return $container_id; + } + } + + public static function container_details( $container_id ) + { + global $mdb; + + $container = $mdb -> get( 'pp_scontainers', '*', [ 'id' => (int) $container_id ] ); + + $results = $mdb -> select( 'pp_scontainers_langs', '*', [ 'container_id' => (int) $container_id ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $container['languages'][$row['lang_id']] = $row; + + return $container; + } +} \ No newline at end of file diff --git a/autoload/admin/factory/class.SeoAdditional.php b/autoload/admin/factory/class.SeoAdditional.php new file mode 100644 index 0000000..db3ef58 --- /dev/null +++ b/autoload/admin/factory/class.SeoAdditional.php @@ -0,0 +1,55 @@ + delete( 'pp_seo_additional', [ 'id' => (int)$element_id ] ); + } + + public static function element_save( $id, $url, $status, $title, $keywords, $description, $text ) + { + global $mdb; + + if ( !$id ) + { + if ( $mdb -> insert( 'pp_seo_additional', [ + 'url' => $url, + 'status' => $status == 'on' ? 1 : 0, + 'title' => $title, + 'keywords' => $keywords, + 'description' => $description, + 'text' => $text + ] ) ) + { + \S::delete_cache(); + return $mdb -> id(); + } + } + else + { + $mdb -> update( 'pp_seo_additional', [ + 'url' => $url, + 'status' => $status == 'on' ? 1 : 0, + 'title' => $title, + 'keywords' => $keywords, + 'description' => $description, + 'text' => $text + + ], [ + 'id' => (int)$id + ] ); + + \S::delete_cache(); + return $id; + } + } + + public static function element_details( $element_id ) + { + global $mdb; + $result = $mdb -> get ( 'pp_seo_additional', '*', [ 'id' => (int)$element_id ] ); + return $result; + } +} diff --git a/autoload/admin/factory/class.Settings.php b/autoload/admin/factory/class.Settings.php new file mode 100644 index 0000000..15f608a --- /dev/null +++ b/autoload/admin/factory/class.Settings.php @@ -0,0 +1,147 @@ + count( 'pp_settings', [ 'param' => $param ] ) ) + return $mdb -> update( 'pp_settings', [ 'value' => $value ], [ 'param' => $param ] ); + else + return $mdb -> insert( 'pp_settings', [ 'param' => $param, 'value' => $value ] ); + } + + public static function settings_save( + $firm_name, $firm_adress, $additional_info, $contact_form, $contact_email, $email_host, $email_port, $email_login, $email_password, $google_maps, + $facebook_link, $statistic_code, $htaccess, $robots, $newsletter_header, $newsletter_footer_1, $newsletter_footer_2, $google_map_key, $google_search_console, $update, $devel, + $news_limit, $visit_counter, $calendar, $tags, $ssl, $mysql_debug, $htaccess_cache, $visits, $links_structure, $link_version, $widget_phone, $update_key ) + { + global $mdb; + + $mdb -> query( 'TRUNCATE pp_settings' ); + + $mdb -> insert( 'pp_settings', [ + [ + 'param' => 'firm_name', + 'value' => $firm_name, + ], [ + 'param' => 'firm_adress', + 'value' => $firm_adress + ], [ + 'param' => 'additional_info', + 'value' => $additional_info + ], [ + 'param' => 'contact_form', + 'value' => $contact_form + ], [ + 'param' => 'contact_email', + 'value' => $contact_email + ], [ + 'param' => 'email_host', + 'value' => $email_host + ], [ + 'param' => 'email_port', + 'value' => $email_port + ], [ + 'param' => 'email_login', + 'value' => $email_login + ], [ + 'param' => 'email_password', + 'value' => $email_password + ], [ + 'param' => 'google_maps', + 'value' => $google_maps == 'on' ? 1 : 0 + ], [ + "param" => 'facebook_link', + 'value' => $facebook_link + ], [ + 'param' => 'statistic_code', + 'value' => $statistic_code + ], [ + 'param' => 'htaccess', + 'value' => $htaccess + ], [ + 'param' => 'robots', + 'value' => $robots + ], [ + 'param' => 'newsletter_header', + 'value' => $newsletter_header + ], [ + 'param' => 'newsletter_footer_1', + 'value' => $newsletter_footer_1 + ], [ + 'param' => 'newsletter_footer_2', + 'value' => $newsletter_footer_2 + ], [ + 'param' => 'google_map_key', + 'value' => $google_map_key + ], [ + 'param' => 'google_search_console', + 'value' => $google_search_console + ], [ + 'param' => 'update', + 'value' => $update == 'on' ? 1 : 0 + ], [ + 'param' => 'devel', + 'value' => $devel == 'on' ? 1 : 0 + ], [ + 'param' => 'news_limit', + 'value' => $news_limit + ], [ + 'param' => 'visit_counter', + 'value' => $visit_counter == 'on' ? 1 : 0 + ], [ + 'param' => 'calendar', + 'value' => $calendar == 'on' ? 1 : 0 + ], [ + 'param' => 'tags', + 'value' => $tags == 'on' ? 1 : 0 + ], [ + 'param' => 'ssl', + 'value' => $ssl == 'on' ? 1 : 0 + ], [ + 'param' => 'mysql_debug', + 'value' => $mysql_debug == 'on' ? 1 : 0 + ], [ + 'param' => 'htaccess_cache', + 'value' => $htaccess_cache == 'on' ? 1 : 0 + ], [ + 'param' => 'visits', + 'value' => $visits + ], [ + 'param' => 'links_structure', + 'value' => $links_structure + ], [ + 'param' => 'link_version', + 'value' => $link_version + ], [ + 'param' => 'widget_phone', + 'value' => $widget_phone == 'on' ? 1 : 0 + ], [ + 'param' => 'update_key', + 'value' => $update_key + ] + ] + ); + + \S::set_message( 'Ustawienia zostały zapisane' ); + \S::delete_cache(); + \S::htacces(); + + return true; + } + + public static function settings_details() + { + global $mdb; + + $results = $mdb -> select( 'pp_settings', '*', [ 'ORDER' => [ 'id' => 'ASC' ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $settings[$row['param']] = $row['value']; + + return $settings; + } + +} +?> \ No newline at end of file diff --git a/autoload/admin/factory/class.Update.php b/autoload/admin/factory/class.Update.php new file mode 100644 index 0000000..6ecd966 --- /dev/null +++ b/autoload/admin/factory/class.Update.php @@ -0,0 +1,156 @@ + (float)\S::get_version() ) + { + if ( strlen( $ver ) == 5 ) + $dir = substr( $ver, 0, strlen( $ver ) - 2 ) . 0; + else + $dir = substr( $ver, 0, strlen( $ver ) - 1 ) . 0; + + $baseUrl = 'http://www.cmspro.project-dc.pl/updates/' . $dir; + + /* pobranie paczki ZIP */ + $file = file_get_contents( $baseUrl . '/ver_' . $ver . '.zip' ); + + $dlHandler = fopen( 'update.zip' , 'w' ); + if ( !fwrite( $dlHandler, $file ) ) + return false; + fclose( $dlHandler ); + + if ( !file_exists( 'update.zip' ) ) + return false; + + /* pobranie manifestu JSON (nowy system) lub fallback na legacy _sql.txt / _files.txt */ + $manifest = null; + $manifestJson = @file_get_contents( $baseUrl . '/ver_' . $ver . '_manifest.json' ); + if ( $manifestJson ) + { + if ( substr( $manifestJson, 0, 3 ) === "\xEF\xBB\xBF" ) + $manifestJson = substr( $manifestJson, 3 ); + $manifest = @json_decode( $manifestJson, true ); + } + + if ( is_array( $manifest ) ) + { + /* weryfikacja checksum SHA256 */ + if ( !empty( $manifest['checksum_zip'] ) ) + { + $expectedHash = str_replace( 'sha256:', '', $manifest['checksum_zip'] ); + $actualHash = hash_file( 'sha256', 'update.zip' ); + if ( $expectedHash !== $actualHash ) + { + unlink( 'update.zip' ); + return false; + } + } + + /* aktualizacja bazy danych z manifestu */ + if ( !empty( $manifest['sql'] ) && is_array( $manifest['sql'] ) ) + { + foreach ( $manifest['sql'] as $query ) + { + $query = trim( $query ); + if ( $query ) + $mdb -> query( $query ); + } + } + + /* usuwanie plikow z manifestu */ + if ( !empty( $manifest['files']['deleted'] ) && is_array( $manifest['files']['deleted'] ) ) + { + foreach ( $manifest['files']['deleted'] as $filePath ) + { + $fullPath = '../' . $filePath; + if ( file_exists( $fullPath ) ) + unlink( $fullPath ); + } + } + + /* usuwanie katalogow z manifestu */ + if ( !empty( $manifest['directories_deleted'] ) && is_array( $manifest['directories_deleted'] ) ) + { + foreach ( $manifest['directories_deleted'] as $dirPath ) + { + $fullPath = '../' . $dirPath; + if ( is_dir( $fullPath ) ) + \S::delete_dir( $fullPath ); + } + } + } + else + { + /* legacy: aktualizacja bazy danych z _sql.txt */ + $sql = @file_get_contents( $baseUrl . '/ver_' . $ver . '_sql.txt' ); + if ( $sql ) + { + $sql = explode( PHP_EOL, $sql ); + if ( is_array( $sql ) ) foreach ( $sql as $query ) + { + $query = trim( $query ); + if ( $query ) + $mdb -> query( $query ); + } + } + + /* legacy: usuwanie zbednych plikow z _files.txt */ + $lines = @file_get_contents( $baseUrl . '/ver_' . $ver . '_files.txt' ); + if ( $lines ) + { + $lines = explode( PHP_EOL, $lines ); + if ( is_array( $lines ) ) foreach ( $lines as $line ) + { + if ( strpos( $line, 'F: ' ) !== false ) + { + $delFile = substr( $line, 3, strlen( $line ) ); + if ( file_exists( $delFile ) ) + unlink( $delFile ); + } + + if ( strpos( $line, 'D: ' ) !== false ) + { + $delDir = substr( $line, 3, strlen( $line ) ); + if ( is_dir( $delDir ) ) + \S::delete_dir( $delDir ); + } + } + } + } + + /* wgrywanie nowych plikow */ + $file_name = 'update.zip'; + + $path = pathinfo( realpath( $file_name ), PATHINFO_DIRNAME ); + $path = substr( $path, 0, strlen( $path ) - 5 ); + $zip = new \ZipArchive; + $res = $zip -> open( $file_name ); + if ( $res === TRUE ) + { + $zip -> extractTo( $path ); + $zip -> close(); + unlink( $file_name ); + } + + $updateThis = fopen( '../libraries/version.ini', 'w' ); + fwrite( $updateThis, $ver ); + fclose( $updateThis ); + + return true; + } + } + } +} diff --git a/autoload/admin/factory/class.Users.php b/autoload/admin/factory/class.Users.php new file mode 100644 index 0000000..8e5f105 --- /dev/null +++ b/autoload/admin/factory/class.Users.php @@ -0,0 +1,306 @@ +delete('pp_users', ['id' => (int)$user_id]); + } + + public static function user_details($user_id) + { + global $mdb; + return $mdb->get('pp_users', '*', ['id' => (int)$user_id]); + } + + public static function user_privileges($user_id) + { + global $mdb; + return $mdb->select('pp_users_privileges', '*', ['id_user' => (int)$user_id]); + } + + public static function user_save($user_id, $login, $status, $active_to, $password, $password_re, $admin, $privileges, $twofa_enabled = 0, $twofa_email = '' ) + { + global $mdb, $lang; + + $mdb->delete('pp_users_privileges', ['id_user' => (int) $user_id]); + + if (!$user_id) + { + if (strlen($password) < 5) + return $response = ['status' => 'error', 'msg' => 'Podane hasło jest zbyt krótkie.']; + + if ($password != $password_re) + return $response = ['status' => 'error', 'msg' => 'Podane hasła są różne']; + + if ($mdb->insert( + 'pp_users', + [ + 'login' => $login, + 'status' => $status == 'on' ? 1 : 0, + 'active_to' => $active_to == '' ? NULL : $active_to, + 'admin' => $admin, + 'password' => md5($password), + 'twofa_enabled' => $twofa_enabled == 'on' ? 1 : 0, + 'twofa_email' => $twofa_email + ] + )) + $id_user = $mdb->get('pp_users', 'id', ['ORDER' => ['id' => 'DESC']]); + + if (is_array($privileges)) + { + foreach ($privileges as $pri) + { + $mdb->insert( + 'pp_users_privileges', + [ + 'name' => $pri, + 'id_user' => $id_user + ] + ); + } + } + else + { + $mdb->insert( + 'pp_users_privileges', + [ + 'name' => $privileges, + 'id_user' => $id_user + ] + ); + } + + return $response = ['status' => 'ok', 'msg' => 'Użytkownik został zapisany.']; + } + else + { + + if ($password and strlen($password) < 5) + return $response = ['status' => 'error', 'msg' => 'Podane hasło jest zbyt krótkie.']; + + if ($password and $password != $password_re) + return $response = ['status' => 'error', 'msg' => 'Podane hasła są różne']; + + if ($password) + $mdb->update('pp_users', [ + 'password' => md5($password) + ], [ + 'id' => (int) $user_id + ]); + + $mdb->update('pp_users', [ + 'login' => $login, + 'admin' => $admin, + 'status' => $status == 'on' ? 1 : 0, + 'active_to' => $active_to == '' ? NULL : $active_to, + 'error_logged_count' => 0, + 'twofa_enabled' => $twofa_enabled == 'on' ? 1 : 0, + 'twofa_email' => $twofa_email + ], [ + 'id' => (int) $user_id + ]); + + if (is_array($privileges)) + { + foreach ($privileges as $pri) + { + $mdb->insert('pp_users_privileges', [ + 'name' => $pri, + 'id_user' => $user_id + ]); + } + } + else + { + $mdb->insert('pp_users_privileges', [ + 'name' => $privileges, + 'id_user' => $user_id + ]); + } + return $response = ['status' => 'ok', 'msg' => 'Uzytkownik został zapisany.']; + } + \S::delete_cache(); + } + + public static function check_login($login, $user_id) + { + global $mdb; + + if ($mdb->get('pp_users', 'login', ['AND' => ['login' => $login, 'id[!]' => (int)$user_id]])) + return $response = ['status' => 'error', 'msg' => 'Podany login jest już zajęty.']; + + return $response = ['status' => 'ok']; + } + + public static function logon($login, $password) + { + global $mdb; + + if (!$mdb->get('pp_users', '*', ['login' => $login])) + return 0; + + if (!$mdb->get('pp_users', '*', ['AND' => ['login' => $login, 'status' => 1, 'error_logged_count[<]' => 5]])) + return -1; + + if ($mdb->get('pp_users', '*', [ + 'AND' => [ + 'login' => $login, + 'status' => 1, + 'password' => md5($password), + 'OR' => ['active_to[>=]' => date('Y-m-d'), 'active_to' => null] + ] + ])) + { + $mdb->update('pp_users', ['last_logged' => date('Y-m-d H:i:s'), 'error_logged_count' => 0], ['login' => $login]); + return 1; + } + else + { + $mdb->update('pp_users', ['last_error_logged' => date('Y-m-d H:i:s'), 'error_logged_count[+]' => 1], ['login' => $login]); + if ($mdb->get('pp_users', 'error_logged_count', ['login' => $login]) >= 5) + { + $mdb->update('pp_users', ['status' => 0], ['login' => $login]); + return -1; + } + } + return 0; + } + + public static function details($login) + { + global $mdb; + return $mdb->get('pp_users', '*', ['login' => $login]); + } + + public static function check_privileges($name, $user_id) + { + global $mdb; + + if ($user_id == 1) + return true; + else + { + if (!$privilages = \Cache::fetch("check_privileges:$user_id:$name-tmp")) + { + $privilages = $mdb->count('pp_users_privileges', ['AND' => ['name' => $name, 'id_user' => (int)$user_id]]); + \Cache::store("check_privileges:$user_id:$name", $privilages); + } + return $privilages; + } + } + + static public function get_by_id(int $userId): ?array + { + + global $mdb; + return $mdb->get('pp_users', '*', ['id' => $userId]) ?: null; + } + + static public function send_twofa_code(int $userId, bool $resend = false): bool + { + + $user = self::get_by_id($userId); + if (!$user) + return false; + + if ((int)$user['twofa_enabled'] !== 1) + { + return false; + } + + $to = $user['twofa_email'] ?: $user['login']; + if (!filter_var($to, FILTER_VALIDATE_EMAIL)) + { + return false; + } + + if ($resend && !empty($user['twofa_sent_at'])) + { + $last = strtotime($user['twofa_sent_at']); + if ($last && (time() - $last) < 30) + { + return false; + } + } + + $code = random_int(100000, 999999); + $hash = password_hash((string)$code, PASSWORD_DEFAULT); + + self::update_by_id($userId, [ + 'twofa_code_hash' => $hash, + 'twofa_expires_at' => date('Y-m-d H:i:s', time() + 10 * 60), // 10 minut + 'twofa_sent_at' => date('Y-m-d H:i:s'), + 'twofa_failed_attempts' => 0, + ]); + + $subject = 'Twój kod logowania 2FA'; + $body = "Twój kod logowania do panelu administratora: {$code}. Kod jest ważny przez 10 minut. Jeśli to nie Ty inicjowałeś logowanie – zignoruj tę wiadomość i poinformuj administratora."; + + $sent = \S::send_email($to, $subject, $body); + + if (!$sent) { + $headers = "MIME-Version: 1.0\r\n"; + $headers .= "Content-type: text/plain; charset=UTF-8\r\n"; + $headers .= "From: no-reply@" . ($_SERVER['HTTP_HOST'] ?? 'localhost') . "\r\n"; + $encodedSubject = mb_encode_mimeheader($subject, 'UTF-8'); + + $sent = mail($to, $encodedSubject, $body, $headers); + } + + return $sent; + } + + static public function update_by_id(int $userId, array $data): bool + { + global $mdb; + return (bool)$mdb->update('pp_users', $data, ['id' => $userId]); + } + + static public function verify_twofa_code(int $userId, string $code): bool + { + $user = self::get_by_id( $userId ); + if (!$user) return false; + + if ((int)$user['twofa_failed_attempts'] >= 5) + { + return false; // zbyt wiele prób + } + + // sprawdź ważność + if (empty($user['twofa_expires_at']) || time() > strtotime($user['twofa_expires_at'])) + { + // wyczyść po wygaśnięciu + self::update_by_id($userId, [ + 'twofa_code_hash' => null, + 'twofa_expires_at' => null, + ]); + return false; + } + + $ok = (!empty($user['twofa_code_hash']) && password_verify($code, $user['twofa_code_hash'])); + if ($ok) + { + // sukces: czyścimy wszystko + self::update_by_id($userId, [ + 'twofa_code_hash' => null, + 'twofa_expires_at' => null, + 'twofa_sent_at' => null, + 'twofa_failed_attempts' => 0, + 'last_logged' => date('Y-m-d H:i:s'), + ]); + return true; + } + + // zła próba — inkrementacja + self::update_by_id($userId, [ + 'twofa_failed_attempts' => (int)$user['twofa_failed_attempts'] + 1, + 'last_error_logged' => date('Y-m-d H:i:s'), + ]); + return false; + } +} diff --git a/autoload/admin/view/class.Articles.php b/autoload/admin/view/class.Articles.php new file mode 100644 index 0000000..127ad9f --- /dev/null +++ b/autoload/admin/view/class.Articles.php @@ -0,0 +1,37 @@ + render( 'articles/articles-browse-list' ); + } + + public static function subpages_list( $pages, $article_pages, $parent_id = 0, $step = 1 ) + { + $tpl = new \Tpl(); + $tpl -> pages = $pages; + $tpl -> parent_id = $parent_id; + $tpl -> step = $step; + $tpl -> article_pages = $article_pages; + return $tpl -> render( 'articles/subpages-list' ); + } + + public static function articles_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'articles/articles-list' ); + } + + public static function article_edit( $values ) + { + $tpl = new \Tpl; + if ( is_array( $values ) ) foreach ( $values as $key => $val ) + $tpl -> $key = $val; + return $tpl -> render( 'articles/article-edit' ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/view/class.ArticlesArchive.php b/autoload/admin/view/class.ArticlesArchive.php new file mode 100644 index 0000000..766aa2b --- /dev/null +++ b/autoload/admin/view/class.ArticlesArchive.php @@ -0,0 +1,11 @@ + render( 'articles/articles-archive-list' ); + } +} diff --git a/autoload/admin/view/class.Backups.php b/autoload/admin/view/class.Backups.php new file mode 100644 index 0000000..7f602a0 --- /dev/null +++ b/autoload/admin/view/class.Backups.php @@ -0,0 +1,12 @@ + backups = $backups; + return $tpl -> render ('backups/backup-list'); + } +} diff --git a/autoload/admin/view/class.Banners.php b/autoload/admin/view/class.Banners.php new file mode 100644 index 0000000..ff1ee58 --- /dev/null +++ b/autoload/admin/view/class.Banners.php @@ -0,0 +1,20 @@ + render( 'banners/banners-list' ); + } + + public static function banner_edit( $banner, $languages ) + { + $tpl = new \Tpl; + $tpl -> banner = $banner; + $tpl -> languages = $languages; + return $tpl -> render( 'banners/banner-edit' ); + } +} +?> diff --git a/autoload/admin/view/class.Emails.php b/autoload/admin/view/class.Emails.php new file mode 100644 index 0000000..b91cf56 --- /dev/null +++ b/autoload/admin/view/class.Emails.php @@ -0,0 +1,17 @@ + render( 'emails/emails-list' ); + } + public static function email_details( $email ) + { + $tpl = new \Tpl; + $tpl -> email = $email; + return $tpl -> render( 'emails/email-details' ); + } +} diff --git a/autoload/admin/view/class.FileManager.php b/autoload/admin/view/class.FileManager.php new file mode 100644 index 0000000..15a45de --- /dev/null +++ b/autoload/admin/view/class.FileManager.php @@ -0,0 +1,12 @@ + render( 'filemanager/filemanager' ); + } +} +?> diff --git a/autoload/admin/view/class.Languages.php b/autoload/admin/view/class.Languages.php new file mode 100644 index 0000000..96a2bd5 --- /dev/null +++ b/autoload/admin/view/class.Languages.php @@ -0,0 +1,32 @@ + languages = $languages; + $tpl -> translation = $translation; + return $tpl -> render( 'languages/translation-edit' ); + } + public static function language_edit( $language, $order ) + { + $tpl = new \Tpl; + $tpl -> language = $language; + $tpl -> order = $order; + return $tpl -> render( 'languages/language-edit' ); + } + public static function translations_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'languages/translations-list' ); + } + public static function languages_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'languages/languages-list' ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/view/class.Layouts.php b/autoload/admin/view/class.Layouts.php new file mode 100644 index 0000000..cd47888 --- /dev/null +++ b/autoload/admin/view/class.Layouts.php @@ -0,0 +1,29 @@ + pages = $pages; + $tpl -> step = $step; + $tpl -> layout_pages = $layout_pages; + return $tpl -> render( 'layouts/subpages-list' ); + } + + public static function layout_edit( $layout, $menus ) + { + $tpl = new \Tpl; + $tpl -> layout = $layout; + $tpl -> menus = $menus; + return $tpl -> render( 'layouts/layout-edit' ); + } + + public static function layouts_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'layouts/layouts-list' ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/view/class.Newsletter.php b/autoload/admin/view/class.Newsletter.php new file mode 100644 index 0000000..f40fb74 --- /dev/null +++ b/autoload/admin/view/class.Newsletter.php @@ -0,0 +1,55 @@ + render( 'newsletter/emails-list' ); + } + + public static function preview( $articles, $settings, $template, $dates = '' ) + { + $tpl = new \Tpl; + $tpl -> articles = $articles; + $tpl -> settings = $settings; + $tpl -> template = $template; + $tpl -> dates = $dates; + return $tpl -> render( 'newsletter/preview' ); + } + + public static function prepare( $templates ) + { + $tpl = new \Tpl; + $tpl -> templates = $templates; + return $tpl -> render( 'newsletter/prepare' ); + } + + public static function settings( $settings ) + { + $tpl = new \Tpl; + $tpl -> settings = $settings; + return $tpl -> render( 'newsletter/settings' ); + } + + public static function email_templates_user() + { + $tpl = new \Tpl; + return $tpl -> render( 'newsletter/email-templates-user' ); + } + + public static function email_templates_admin() + { + $tpl = new \Tpl; + return $tpl -> render( 'newsletter/email-templates-admin' ); + } + + public static function email_template_edit($template) + { + $tpl = new \Tpl; + $tpl -> email_template = $template; + return $tpl -> render( 'newsletter/email-template-edit' ); + } +} + \ No newline at end of file diff --git a/autoload/admin/view/class.Page.php b/autoload/admin/view/class.Page.php new file mode 100644 index 0000000..c96583a --- /dev/null +++ b/autoload/admin/view/class.Page.php @@ -0,0 +1,22 @@ + content = \admin\Site::route(); + return $tpl -> render( 'site/main-layout' ); + } +} +?> diff --git a/autoload/admin/view/class.PagePanel.php b/autoload/admin/view/class.PagePanel.php new file mode 100644 index 0000000..2fc13ab --- /dev/null +++ b/autoload/admin/view/class.PagePanel.php @@ -0,0 +1,21 @@ + _add = $add; + $tpl -> _save = $save; + $tpl -> _cancel = $cancel; + $tpl -> _id_form = $form; + $tpl -> _title = $title; + $tpl -> _back = $back; + $tpl -> _update = $update; + $tpl -> _save_ajax = $save_ajax; + $tpl -> _delete_ajax = $delete_ajax; + return $tpl -> render( 'other/page-panel' ); + } +} +?> diff --git a/autoload/admin/view/class.Pages.php b/autoload/admin/view/class.Pages.php new file mode 100644 index 0000000..f6c521e --- /dev/null +++ b/autoload/admin/view/class.Pages.php @@ -0,0 +1,68 @@ + pages = $pages; + $tpl -> parent_id = $parent_id; + $tpl -> step = $step; + return $tpl -> render( 'pages/subpages-browse-list' ); + } + + static public function browse_list( $menus, $modal = false ) + { + return \Tpl::view( 'pages/pages-browse-list', [ + 'menus' => $menus, + 'modal' => $modal + ] ); + } + + public static function page_articles( $page_id, $articles ) + { + $tpl = new \Tpl; + $tpl -> page_id = $page_id; + $tpl -> articles = $articles; + return $tpl -> render( 'pages/page-articles' ); + } + + public static function page_edit( $page, $parent_id, $menu_id, $menus, $layouts, $languages, $settings ) + { + $tpl = new \Tpl; + $tpl -> menu_id = $menu_id; + $tpl -> parent_id = $parent_id; + $tpl -> menus = $menus; + $tpl -> page = $page; + $tpl -> layouts = $layouts; + $tpl -> languages = $languages; + $tpl -> settings = $settings; + return $tpl -> render( 'pages/page-edit' ); + + } + + public static function menu_edit( $menu ) + { + $tpl = new \Tpl; + $tpl -> menu = $menu; + return $tpl -> render( 'pages/menu-edit' ); + } + + public static function pages_list( $menus ) + { + $tpl = new \Tpl; + $tpl -> menus = $menus; + return $tpl -> render( 'pages/pages-list' ); + } + + public static function subpages_list( $pages, $parent_id = null, $step = 1 ) + { + $tpl = new \Tpl(); + $tpl -> pages = $pages; + $tpl -> parent_id = $parent_id; + $tpl -> step = $step; + return $tpl -> render( 'pages/subpages-list' ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/view/class.Scontainers.php b/autoload/admin/view/class.Scontainers.php new file mode 100644 index 0000000..8496c54 --- /dev/null +++ b/autoload/admin/view/class.Scontainers.php @@ -0,0 +1,20 @@ + container = $container; + $tpl -> languages = $languages; + return $tpl -> render( 'scontainers/container-edit' ); + } + + public static function containers_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'scontainers/containers-list' ); + } +} diff --git a/autoload/admin/view/class.SeoAdditional.php b/autoload/admin/view/class.SeoAdditional.php new file mode 100644 index 0000000..4d15e03 --- /dev/null +++ b/autoload/admin/view/class.SeoAdditional.php @@ -0,0 +1,17 @@ + element = $element; + return $tpl -> render( 'seo-additional/element-edit' ); + } + + public static function main_view() + { + $tpl = new \Tpl; + return $tpl -> render( 'seo-additional/main-view' ); + } +} diff --git a/autoload/admin/view/class.Settings.php b/autoload/admin/view/class.Settings.php new file mode 100644 index 0000000..8ee7e4b --- /dev/null +++ b/autoload/admin/view/class.Settings.php @@ -0,0 +1,13 @@ + settings = $settings; + return $tpl -> render( 'settings/settings' ); + } +} +?> \ No newline at end of file diff --git a/autoload/admin/view/class.Update.php b/autoload/admin/view/class.Update.php new file mode 100644 index 0000000..a2e0f7f --- /dev/null +++ b/autoload/admin/view/class.Update.php @@ -0,0 +1,13 @@ + ver = \S::get_version(); + $tpl -> new_ver = \S::get_new_version(); + return $tpl -> render( 'update/main-view' ); + } +} diff --git a/autoload/admin/view/class.Users.php b/autoload/admin/view/class.Users.php new file mode 100644 index 0000000..fa16e51 --- /dev/null +++ b/autoload/admin/view/class.Users.php @@ -0,0 +1,26 @@ + render( 'site/unlogged-layout' ); + } + + public static function users_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'users/users-list' ); + } + + public static function user_edit( $user, $privileges ) + { + $tpl = new \Tpl; + $tpl -> user = $user; + $tpl -> privileges = $privileges; + return $tpl -> render( 'users/user-edit' ); + } +} +?> diff --git a/autoload/class.Article.php b/autoload/class.Article.php new file mode 100644 index 0000000..76eca61 --- /dev/null +++ b/autoload/class.Article.php @@ -0,0 +1,196 @@ + get( 'pp_articles', '*', [ 'id' => (int)$article_id ] ); + if ( \S::is_array_fix( $result ) ) foreach ( $result as $key => $val ) + $this -> $key = $val; + + $results = $mdb -> select( 'pp_articles_langs', '*', [ 'AND' => [ 'article_id' => (int)$article_id, 'lang_id' => $lang_id ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( $row['copy_from'] ) + { + $results2 = $mdb -> select( 'pp_articles_langs', '*', [ 'AND' => [ 'article_id' => (int)$article_id, 'lang_id' => $row['copy_from'] ] ] ); + if ( is_array( $results2 ) ) foreach ( $results2 as $row2 ) + $this -> language = $row2; + } + else + $this -> language = $row; + + preg_match_all( \front\view\Site::container_pattern, $this -> language['entry'], $container_list ); + if ( is_array( $container_list[0] ) ) foreach( $container_list[0] as $container_list_tmp ) + { + $container_list_tmp = explode( ':', $container_list_tmp ); + $this -> language['entry'] = str_replace( '[KONTENER:' . $container_list_tmp[1] . ']', \front\view\Scontainers::scontainer( $container_list_tmp[1] ), $this -> language['entry'] ); + } + + preg_match_all( \front\view\Site::container_pattern, $this -> language['text'], $container_list ); + if ( is_array( $container_list[0] ) ) foreach( $container_list[0] as $container_list_tmp ) + { + $container_list_tmp = explode( ':', $container_list_tmp ); + $this -> language['text'] = str_replace( '[KONTENER:' . $container_list_tmp[1] . ']', \front\view\Scontainers::scontainer( $container_list_tmp[1] ), $this -> language['text'] ); + } + } + + $this -> images = $mdb -> select( 'pp_articles_images', '*', [ 'article_id' => (int)$article_id, 'ORDER' => [ 'o' => 'ASC', 'id' => 'ASC' ] ] ); + $this -> files = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => (int)$article_id ] ); + $this -> pages = $mdb -> select( 'pp_articles_pages', 'page_id', [ 'article_id' => (int)$article_id ] ); + $this -> tags = $mdb -> select( 'pp_tags', [ '[><]pp_articles_tags' => [ 'id' => 'tag_id' ] ], 'name', [ 'article_id' => (int)$article_id ] ); + $results = $mdb -> select( 'pp_articles_additional_params', [ '[><]pp_articles_additional_values' => [ 'id' => 'param_id' ] ], [ 'name', 'value', 'language_id' ], [ 'article_id' => (int)$article_id ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + if ( !$row['language_id'] ) + $params[ $row['name'] ] = $row['value']; + else + $params[ $row['name'] ][$row['language_id']] = $row['value']; + } + $this -> params = $params; + } + + public function updateView() + { + global $mdb; + $mdb -> update( 'pp_articles', [ 'views[+]' => 1 ], [ 'id' => $this -> id ] ); + } + + static public function newsList( $articles ) + { + return \Tpl::view( 'articles/news-list', [ + 'articles' => $articles + ] ); + } + + // pobierz najczęściej wyświtlane artykuły + static public function getTopNews( $page_id, $limit = 6, $lang_id ) + { + global $mdb; + + if ( !$articles_id = \Cache::fetch( "getTopNews:$page_id:$limit:$lang_id" ) ) + { + $articles_id = $mdb -> query( 'SELECT * FROM ( ' + . 'SELECT ' + . 'a.id, date_add, views, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN title ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'title ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS title ' + . 'FROM ' + . 'pp_articles_pages AS ap ' + . 'INNER JOIN pp_articles AS a ON a.id = ap.article_id ' + . 'INNER JOIN pp_articles_langs AS al ON al.article_id = ap.article_id ' + . 'WHERE ' + . 'status = 1 AND page_id = ' . (int)$page_id . ' AND lang_id = \'' . $lang_id . '\' ' + . ') AS q1 ' + . 'WHERE ' + . 'q1.title IS NOT NULL ' + . 'ORDER BY ' + . 'q1.views DESC ' + . 'LIMIT ' + . '0, ' . (int)$limit ) -> fetchAll( \PDO::FETCH_ASSOC ); + \Cache::store( "getTopNews:$page_id:$limit:$lang_id", $articles_id ); + } + + if ( \S::is_array_fix( $articles_id ) ) foreach ( $articles_id as $article_tmp ) + { + if ( !$article = \Cache::fetch( 'article:' . $article_tmp['id'] . ':' . $lang_id ) ) + { + $article = new \Article( $article_tmp['id'], $lang_id ); + \Cache::store( 'article:' . $article_tmp['id'] . ':' . $lang_id, $article ); + } + $articles[] = $article; + } + + return $articles; + } + + static public function getNews( $page_id, $limit = 6, $lang_id ) + { + global $mdb; + + if ( !$articles_id = \Cache::fetch( "getNews:$page_id:$limit:$lang_id" ) ) + { + $articles_id = $mdb -> query( 'SELECT * FROM ( ' + . 'SELECT ' + . 'a.id, date_add, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN title ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'title ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS title ' + . 'FROM ' + . 'pp_articles_pages AS ap ' + . 'INNER JOIN pp_articles AS a ON a.id = ap.article_id ' + . 'INNER JOIN pp_articles_langs AS al ON al.article_id = ap.article_id ' + . 'WHERE ' + . 'status = 1 AND page_id = ' . (int)$page_id . ' AND lang_id = \'' . $lang_id . '\' ' + . ') AS q1 ' + . 'WHERE ' + . 'q1.title IS NOT NULL ' + . 'ORDER BY ' + . 'q1.date_add DESC ' + . 'LIMIT ' + . '0, ' . (int)$limit ) -> fetchAll( \PDO::FETCH_ASSOC ); + \Cache::store( "getNews:$page_id:$limit:$lang_id", $articles_id ); + } + + if ( \S::is_array_fix( $articles_id ) ) foreach ( $articles_id as $article_tmp ) + { + if ( !$article = \Cache::fetch( 'article:' . $article_tmp['id'] . ':' . $lang_id ) ) + { + $article = new \Article( $article_tmp['id'], $lang_id ); + \Cache::store( 'article:' . $article_tmp['id'] . ':' . $lang_id, $article ); + } + $articles[] = $article; + } + + return $articles; + } + + public function __get( $variable ) + { + if ( array_key_exists( $variable, $this -> data ) ) + return $this -> $variable; + } + + public function __set( $variable, $value ) + { + $this -> $variable = $value; + } + + public function offsetExists( $offset ) + { + return isset( $this -> $offset ); + } + + public function offsetGet( $offset ) + { + return $this -> $offset; + } + + public function offsetSet( $offset, $value ) + { + $this -> $offset = $value; + } + + public function offsetUnset( $offset ) + { + unset( $this -> $offset ); + } +} \ No newline at end of file diff --git a/autoload/class.Cache.php b/autoload/class.Cache.php new file mode 100644 index 0000000..d268fcb --- /dev/null +++ b/autoload/class.Cache.php @@ -0,0 +1,46 @@ + $data[0] ) + { + if ( file_exists( $filename ) ) + unlink( $filename ); + return false; + } + + return $data[1]; + } +} +?> \ No newline at end of file diff --git a/autoload/class.Cron.php b/autoload/class.Cron.php new file mode 100644 index 0000000..b219dee --- /dev/null +++ b/autoload/class.Cron.php @@ -0,0 +1,514 @@ + query( "SELECT id, url FROM projects WHERE automatic_update = 1 AND DATE_ADD( last_update, INTERVAL 1 WEEK ) <= '" . date( 'Y-m-d H:i:s' ) . "'" ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $mdb -> delete( 'project_links_internal', [ 'AND' => [ 'project_id' => $row['id'], 'parent_id[!]' => null ] ] ); + $mdb -> delete( 'project_links_external', [ 'project_id' => $row['id'] ] ); + $mdb -> update( 'project_links_internal', [ 'visited' => 0 ], [ 'project_id' => $row['id'] ] ); + + $mdb -> update( 'projects', [ 'last_update' => date( 'Y-m-d H:i:s' ) ], [ 'id' => $row['id'] ] ); + + return [ 'status' => 'ok', 'msg' => 'Ponawiam sprawdzanie strony ' . $row['url'] . '' ]; + } + return [ 'status' => 'empty' ]; + } + + public static function get_site_main_links() + { + global $mdb; + + $results = $mdb -> query( 'SELECT id, url FROM projects WHERE id NOT IN ( SELECT project_id FROM project_links_internal GROUP BY project_id ) AND enabled = 1 LIMIT 1' ) -> fetchAll(); + if ( is_array( $results ) and !empty ( $results ) ) foreach ( $results as $row ) + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, $row['url'] ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + + if ( !curl_errno( $ch ) ) + { + $mdb -> insert( 'project_links_internal', [ + 'project_id' => $row['id'], + 'url' => $row['url'], + 'parent_id' => null + ] ); + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + foreach ( $doc -> getElementsByTagName( 'a' ) as $link ) + { + $url = $link -> getAttribute( 'href' ); + + if ( \S::is_url_internal( $row['url'], $url ) ) + { + if ( strpos( $url, '#' ) !== false ) + $url = rtrim( substr( $url, 0, strpos( $url, '#' ) ), '?,#' ); + + $url = \S::modify_internal_link( $row['url'], $url ); + + if ( !filter_var( $url, FILTER_VALIDATE_URL ) === false and !$mdb -> count( 'project_links_internal', [ 'AND' => [ 'project_id' => $row['id'], 'url' => $url ] ] ) ) + { + $mdb -> insert( 'project_links_internal', [ + 'project_id' => $row['id'], + 'url' => $url + ] ); + } + } + } + return [ 'status' => 'ok', 'msg' => 'Pobieram linki dla strony ' . $row['url'] . '' ]; + } + else + return [ 'status' => 'ok', 'msg' => 'Błąd podczas pobierania strony ' . $row['url'] . '' ]; + } + return [ 'status' => 'empty' ]; + } + + public static function get_site_other_links() + { + global $mdb; + + $results = $mdb -> query( 'SELECT ' + . 'pli.id, project_id, pli.url, p.url AS project_url ' + . 'FROM ' + . 'project_links_internal AS pli ' + . 'INNER JOIN projects AS p ON p.id = pli.project_id ' + . 'WHERE ' + . 'visited = 0 AND enabled = 1 ' + . 'LIMIT 1' ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $url = parse_url( $row['url'] ); + + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_COOKIEFILE, 'temp/cookie.txt' ); + curl_setopt( $ch, CURLOPT_COOKIEJAR, 'temp/cookie.txt' ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + + curl_setopt( $ch, CURLOPT_URL, 'http://' . $url['host'] ); + $response = curl_exec( $ch ); + + curl_setopt( $ch, CURLOPT_URL, $row['url'] ); + $response = curl_exec( $ch ); + $content_type = curl_getinfo( $ch, CURLINFO_CONTENT_TYPE ); + $code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); + curl_close ( $ch ); + + if ( !curl_errno( $ch ) and ( $code == 200 or $code == 301 ) and strpos( $content_type, 'text/html' ) !== false ) + { + self::get_site_meta_title( $row['id'], $response ); + self::get_site_meta_keywords( $row['id'], $response ); + self::get_site_meta_description( $row['id'], $response ); + self::get_site_meta_robots( $row['id'], $response ); + self::get_site_meta_googlebot( $row['id'], $response ); + self::get_site_code_lenght( $row['id'], $response ); + self::get_site_text_lenght( $row['id'], $response ); + self::get_site_canonical( $row['id'], $response ); + self::get_table_exists( $row['id'], $response ); + self::get_iframe_exists( $row['id'], $response ); + self::get_h1_exists( $row['id'], $response ); + self::get_images_without_alt( $row['id'], $response ); + + /* pobranie linków ze strony */ + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + + foreach ( $doc -> getElementsByTagName( 'a' ) as $link ) + { + $url = $link -> getAttribute( 'href' ); + + /* linki wewnętrzne na danej postronie */ + if ( \S::is_url_internal( $row['project_url'], $url ) ) + { + if ( strpos( $url, '#' ) !== false ) + $url = rtrim( substr( $url, 0, strpos( $url, '#' ) ), '?,#' ); + + $url = \S::modify_internal_link( $row['project_url'], $url, $row['url'] ); + $info = pathinfo( $url ); + + if ( !filter_var( $url, FILTER_VALIDATE_URL ) === false and !in_array( strtolower( $info['extension'] ), \S::not_html_format() ) and !$mdb -> count( 'project_links_internal', [ + 'AND' => [ + 'project_id' => $row['project_id'], + 'url' => $url + ] + ] ) ) + { + $mdb -> insert( 'project_links_internal', [ + 'project_id' => $row['project_id'], + 'url' => $url, + 'visited' => 0, + 'parent_id' => $row['id'], + 'response' => $response + ] ); + } + } + /* linki zewnętrzne na danej podstronie */ + else + { + $link -> getAttribute( 'rel' ) == 'nofollow' ? $nofollow = 1 : $nofollow = 0; + + $mdb -> insert( 'project_links_external', [ + 'project_id' => $row['project_id'], + 'link_id' => $row['id'], + 'url' => $link -> getAttribute( 'href' ), + 'nofollow' => $nofollow, + 'title' => $link -> getAttribute( 'title' ) + ] ); + } + } + + $mdb -> update( 'project_links_internal', [ + 'visited' => 1, + 'content_type' => $content_type, + 'response_code' => $code, + 'response' => $response + ], [ + 'id' => $row['id'] + ] ); + + return [ 'status' => 'ok', 'msg' => 'Pobieram informacje dla strony ' . $row['url'] . '' ]; + } + else if ( $code == 404 or strpos( $content_type, 'text/html' ) === false ) + { + $mdb -> update( 'project_links_internal', [ + 'visited' => 1, + 'deleted' => 1, + 'content_type' => $content_type, + 'response_code' => $code + ], [ + 'id' => $row['id'] + ] ); + + return [ 'status' => 'ok', 'msg' => 'Pobieram informacje dla strony ' . $row['url'] . '' ]; + } + else if ( $code !== 200 and strpos( $content_type, 'text/html' ) !== false ) + { + $mdb -> update( 'project_links_internal', [ + 'visited' => 1, + 'content_type' => $content_type, + 'response_code' => $code, + 'response' => $response + ], [ + 'id' => $row['id'] + ] ); + + return [ 'status' => 'ok', 'msg' => 'Pobieram informacje dla strony ' . $row['url'] . '' ]; + } + else + return [ 'status' => 'ok', 'msg' => 'Błąd podczas pobierania strony ' . $row['url'] . '' ]; + } + return [ 'status' => 'empty' ]; + } + + static public function get_images_without_alt( $url_id, $response ) + { + global $mdb; + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + $images = $doc -> getElementsByTagName("img"); + + $have_images_without_alt = 0; + foreach ( $images as $img ) + { + if ( !$img -> getAttribute( 'alt' ) ) + $have_images_without_alt = 1; + } + + $mdb -> update( 'project_links_internal', [ 'have_images_without_alt' => $have_images_without_alt ], [ 'id' => $url_id ] ); + } + + static public function get_table_exists( $url_id, $response ) + { + global $mdb; + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + $count = $doc -> getElementsByTagName("table"); + + $mdb -> update( 'project_links_internal', [ 'have_table' => $count -> length ? 1 : 0 ], [ 'id' => $url_id ] ); + } + + static public function get_iframe_exists( $url_id, $response ) + { + global $mdb; + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + $count = $doc -> getElementsByTagName("iframe"); + + $mdb -> update( 'project_links_internal', [ 'have_iframe' => $count -> length ? 1 : 0 ], [ 'id' => $url_id ] ); + } + + static public function get_h1_exists( $url_id, $response ) + { + global $mdb; + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + $count = $doc -> getElementsByTagName("h1"); + $mdb -> update( 'project_links_internal', [ 'have_h1' => $count -> length ? 1 : 0 ], [ 'id' => $url_id ] ); + } + + public static function get_site_meta_title( $url_id, $response ) + { + global $mdb; + + $title = ''; + + preg_match('/([^>]*)<\/title>/si', $response, $match ); + + if ( isset( $match ) && is_array( $match ) && count( $match ) > 0 ) + $title = (string)strip_tags( $match[1] ); + + if ( !$title ) + { + preg_match_all('/<[\s]*meta[\s]*name="og:?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $title = (string)$metaTags['title']['value']; + } + } + + $mdb -> update( 'project_links_internal', [ 'title' => $title ], [ 'id' => $url_id ] ); + } + + public static function get_site_canonical( $url_id, $response ) + { + global $mdb; + + $doc = new DOMDocument; + $doc -> loadHTML( $response ); + foreach ( $doc -> getElementsByTagName( 'link' ) as $link ) + { + $rel = $link -> getAttribute( 'rel' ); + + if ( $rel == 'canonical' ) + { + $canonical = $link -> getAttribute( 'href' ); + } + } + + $mdb -> update( 'project_links_internal', [ 'canonical' => $canonical ], [ 'id' => $url_id ] ); + } + + public static function get_site_meta_keywords( $url_id, $response ) + { + global $mdb; + + $meta_keywords = ''; + + preg_match_all( '/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match ); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_keywords = (string)$metaTags['keywords']['value']; + } + + if ( !$meta_keywords ) + { + preg_match_all( '/<[\s]*meta[\s]*property="og:?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match ); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_keywords = (string)$metaTags['keywords']['value']; + } + } + + $mdb -> update( 'project_links_internal', [ 'meta_keywords' => $meta_keywords ], [ 'id' => $url_id ] ); + } + + public static function get_site_meta_description( $url_id, $response ) + { + global $mdb; + + $meta_description = ''; + + preg_match_all('/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_description = (string)$metaTags['description']['value']; + } + + if ( !$meta_description ) + { + preg_match_all( '/<[\s]*meta[\s]*property="og:?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match ); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_description = (string)$metaTags['description']['value']; + } + } + + $mdb -> update( 'project_links_internal', [ 'meta_description' => $meta_description ], [ 'id' => $url_id ] ); + } + + public static function get_site_meta_robots( $url_id, $response ) + { + global $mdb; + + $meta_robots = ''; + + preg_match_all('/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_robots = (string)$metaTags['robots']['value']; + } + + $mdb -> update( 'project_links_internal', [ 'meta_robots' => $meta_robots ], [ 'id' => $url_id ] ); + } + + public static function get_site_meta_googlebot( $url_id, $response ) + { + global $mdb; + + $meta_googlebot = ''; + + preg_match_all('/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $response, $match); + + if ( isset ( $match ) && is_array( $match ) && count( $match ) == 3 ) + { + $originals = $match[0]; + $names = $match[1]; + $values = $match[2]; + + if ( count( $originals ) == count( $names ) && count( $names ) == count( $values ) ) + { + $metaTags = array(); + for ( $i = 0, $limiti = count( $names ); $i < $limiti; $i++ ) + { + $metaTags[ $names[$i] ] = array( + 'html' => htmlentities( $originals[$i] ), + 'value' => $values[$i] + ); + } + } + $meta_googlebot = (string)$metaTags['googlebot']['value']; + } + + $mdb -> update( 'project_links_internal', [ 'meta_googlebot' => $meta_googlebot ], [ 'id' => $url_id ] ); + } + + public static function get_site_code_lenght( $url_id, $response ) + { + global $mdb; + $mdb -> update( 'project_links_internal', [ 'code_lenght' => strlen( $response ) ], [ 'id' => $url_id ] ); + } + + public static function get_site_text_lenght( $url_id, $response ) + { + global $mdb; + $mdb -> update( 'project_links_internal', [ 'text_lenght' => strlen( \S::strip_html_tags( $response ) ) ], [ 'id' => $url_id ] ); + } +} diff --git a/autoload/class.Html.php b/autoload/class.Html.php new file mode 100644 index 0000000..d2500c9 --- /dev/null +++ b/autoload/class.Html.php @@ -0,0 +1,91 @@ +<?php +class Html +{ + public static function form_text( array $params = array() ) + { + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/form-text' ); + } + + public static function input_switch( array $params = array() ) + { + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/input-switch' ); + } + + public static function select( array $params = array() ) + { + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/select' ); + } + + public static function textarea( array $params = array() ) + { + $defaults = array( + 'rows' => 4, + ); + + $params = array_merge( $defaults, $params ); + + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/textarea' ); + } + + public static function input_icon( array $params = array() ) + { + $defaults = array( + 'type' => 'text', + ); + + $params = array_merge( $defaults, $params ); + + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/input-icon' ); + } + + public static function input( array $params = array() ) + { + $defaults = array( + 'type' => 'text', + ); + + $params = array_merge( $defaults, $params ); + + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/input' ); + } + + public static function button( array $params = array() ) + { + $defaults = array( + 'class' => 'btn-sm btn-info', + ); + + $params = array_merge( $defaults, $params ); + + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/button' ); + } + + public static function panel( array $params = array() ) + { + $defaults = array( + 'title' => 'panel-title', + 'class' => 'panel-primary', + 'content' => 'panel-content' + ); + + $params = array_merge( $defaults, $params ); + + $tpl = new \Tpl; + $tpl -> params = $params; + return $tpl -> render( 'html/panel' ); + } +} diff --git a/autoload/class.Image.php b/autoload/class.Image.php new file mode 100644 index 0000000..0322890 --- /dev/null +++ b/autoload/class.Image.php @@ -0,0 +1,312 @@ +<?php +class ImageManipulator +{ + /** + * @var int + */ + protected $width; + + /** + * @var int + */ + protected $height; + + /** + * @var resource + */ + protected $image; + protected $img_src; + + /** + * Image manipulator constructor + * + * @param string $file OPTIONAL Path to image file or image data as string + * @return void + */ + public function __construct($file = null) + { + if (null !== $file) { + if (is_file($file)) { + $this -> img_src = $file; + $this->setImageFile($file); + } else { + echo 'a'; exit; + $this->setImageString($file); + } + } + } + + /** + * Set image resource from file + * + * @param string $file Path to image file + * @return ImageManipulator for a fluent interface + * @throws InvalidArgumentException + */ + public function setImageFile($file) + { + if (!(is_readable($file) && is_file($file))) { + throw new InvalidArgumentException("Image file $file is not readable"); + } + + if (is_resource($this->image)) { + imagedestroy($this->image); + } + + list ($this->width, $this->height, $type) = getimagesize($file); + + switch ($type) { + case IMAGETYPE_GIF : + $this->image = imagecreatefromgif($file); + break; + case IMAGETYPE_JPEG : + $this->image = imagecreatefromjpeg($file); + break; + case IMAGETYPE_PNG : + $this->image = imagecreatefrompng($file); + break; + default : + throw new InvalidArgumentException("Image type $type not supported"); + } + + return $this; + } + + /** + * Set image resource from string data + * + * @param string $data + * @return ImageManipulator for a fluent interface + * @throws RuntimeException + */ + public function setImageString($data) + { + if (is_resource($this->image)) { + imagedestroy($this->image); + } + + if (!$this->image = imagecreatefromstring($data)) { + throw new RuntimeException('Cannot create image from data string'); + } + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + return $this; + } + + /** + * Resamples the current image + * + * @param int $width New width + * @param int $height New height + * @param bool $constrainProportions Constrain current image proportions when resizing + * @return ImageManipulator for a fluent interface + * @throws RuntimeException + */ + public function resample( $width, $height, $constrainProportions = true ) + { + if (!is_resource($this->image)) { + throw new RuntimeException('No image set'); + } + if ($constrainProportions) { + if ($this->height >= $this->width) { + $width = round($height / $this->height * $this->width); + } else { + $height = round($width / $this->width * $this->height); + } + } + + $temp = imagecreatetruecolor($width, $height); + + imagecopyresampled($temp, $this->image, 0, 0, 0, 0, $width, $height, $this->width, $this->height); + + if ( function_exists('exif_read_data') ) + { + $exif = exif_read_data( $this -> img_src ); + if ( $exif && isset($exif['Orientation']) ) + { + $orientation = $exif['Orientation']; + if ( $orientation != 1 ) + { + $deg = 0; + switch ($orientation) + { + case 3: + $deg = 180; + break; + case 6: + $deg = 270; + break; + case 8: + $deg = 90; + break; + } + + if ( $deg ) + $temp = imagerotate( $temp, $deg, 0 ); + } + } + } + return $this->_replace($temp); + } + + /** + * Enlarge canvas + * + * @param int $width Canvas width + * @param int $height Canvas height + * @param array $rgb RGB colour values + * @param int $xpos X-Position of image in new canvas, null for centre + * @param int $ypos Y-Position of image in new canvas, null for centre + * @return ImageManipulator for a fluent interface + * @throws RuntimeException + */ + public function enlargeCanvas($width, $height, array $rgb = array(), $xpos = null, $ypos = null) + { + if (!is_resource($this->image)) { + throw new RuntimeException('No image set'); + } + + $width = max($width, $this->width); + $height = max($height, $this->height); + + $temp = imagecreatetruecolor($width, $height); + if (count($rgb) == 3) { + $bg = imagecolorallocate($temp, $rgb[0], $rgb[1], $rgb[2]); + imagefill($temp, 0, 0, $bg); + } + + if (null === $xpos) { + $xpos = round(($width - $this->width) / 2); + } + if (null === $ypos) { + $ypos = round(($height - $this->height) / 2); + } + + imagecopy($temp, $this->image, (int) $xpos, (int) $ypos, 0, 0, $this->width, $this->height); + return $this->_replace($temp); + } + + /** + * Crop image + * + * @param int|array $x1 Top left x-coordinate of crop box or array of coordinates + * @param int $y1 Top left y-coordinate of crop box + * @param int $x2 Bottom right x-coordinate of crop box + * @param int $y2 Bottom right y-coordinate of crop box + * @return ImageManipulator for a fluent interface + * @throws RuntimeException + */ + public function crop($x1, $y1 = 0, $x2 = 0, $y2 = 0) + { + if (!is_resource($this->image)) { + throw new RuntimeException('No image set'); + } + if (is_array($x1) && 4 == count($x1)) { + list($x1, $y1, $x2, $y2) = $x1; + } + + $x1 = max($x1, 0); + $y1 = max($y1, 0); + + $x2 = min($x2, $this->width); + $y2 = min($y2, $this->height); + + $width = $x2 - $x1; + $height = $y2 - $y1; + + $temp = imagecreatetruecolor($width, $height); + imagecopy($temp, $this->image, 0, 0, $x1, $y1, $width, $height); + + return $this->_replace($temp); + } + + /** + * Replace current image resource with a new one + * + * @param resource $res New image resource + * @return ImageManipulator for a fluent interface + * @throws UnexpectedValueException + */ + protected function _replace($res) + { + if (!is_resource($res)) { + throw new UnexpectedValueException('Invalid resource'); + } + if (is_resource($this->image)) { + imagedestroy($this->image); + } + $this->image = $res; + $this->width = imagesx($res); + $this->height = imagesy($res); + return $this; + } + + /** + * Save current image to file + * + * @param string $fileName + * @return void + * @throws RuntimeException + */ + public function save($fileName, $type = IMAGETYPE_JPEG) + { + $dir = dirname($fileName); + if (!is_dir($dir)) { + if (!mkdir($dir, 0755, true)) { + throw new RuntimeException('Error creating directory ' . $dir); + } + } + + try { + switch ($type) { + case IMAGETYPE_GIF : + if (!imagegif($this->image, $fileName)) { + throw new RuntimeException; + } + break; + case IMAGETYPE_PNG : + if (!imagepng($this->image, $fileName)) { + throw new RuntimeException; + } + break; + case IMAGETYPE_JPEG : + default : + if (!imagejpeg($this->image, $fileName, 95)) { + throw new RuntimeException; + } + } + } catch (Exception $ex) { + throw new RuntimeException('Error saving image file to ' . $fileName); + } + } + + /** + * Returns the GD image resource + * + * @return resource + */ + public function getResource() + { + return $this->image; + } + + /** + * Get current image resource width + * + * @return int + */ + public function getWidth() + { + return $this->width; + } + + /** + * Get current image height + * + * @return int + */ + public function getHeight() + { + return $this->height; + } +} \ No newline at end of file diff --git a/autoload/class.Mobile_Detect.php b/autoload/class.Mobile_Detect.php new file mode 100644 index 0000000..50d57f0 --- /dev/null +++ b/autoload/class.Mobile_Detect.php @@ -0,0 +1,1431 @@ +<?php +/** + * Mobile Detect Library + * ===================== + * + * Motto: "Every business should have a mobile detection script to detect mobile readers" + * + * Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets). + * It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment. + * + * @author Current authors: Serban Ghita <serbanghita@gmail.com> + * Nick Ilyin <nick.ilyin@gmail.com> + * + * Original author: Victor Stanciu <vic.stanciu@gmail.com> + * + * @license Code and contributions have 'MIT License' + * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt + * + * @link Homepage: http://mobiledetect.net + * GitHub Repo: https://github.com/serbanghita/Mobile-Detect + * Google Code: http://code.google.com/p/php-mobile-detect/ + * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md + * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples + * + * @version 2.8.16 + */ + +class Mobile_Detect +{ + /** + * Mobile detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_MOBILE = 'mobile'; + + /** + * Extended detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_EXTENDED = 'extended'; + + /** + * A frequently used regular expression to extract version #s. + * + * @deprecated since version 2.6.9 + */ + const VER = '([\w._\+]+)'; + + /** + * Top-level device. + */ + const MOBILE_GRADE_A = 'A'; + + /** + * Mid-level device. + */ + const MOBILE_GRADE_B = 'B'; + + /** + * Low-level device. + */ + const MOBILE_GRADE_C = 'C'; + + /** + * Stores the version number of the current release. + */ + const VERSION = '2.8.16'; + + /** + * A type for the version() method indicating a string return value. + */ + const VERSION_TYPE_STRING = 'text'; + + /** + * A type for the version() method indicating a float return value. + */ + const VERSION_TYPE_FLOAT = 'float'; + + /** + * A cache for resolved matches + * @var array + */ + protected $cache = array(); + + /** + * The User-Agent HTTP header is stored in here. + * @var string + */ + protected $userAgent = null; + + /** + * HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE. + * @var array + */ + protected $httpHeaders = array(); + + /** + * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer. + * @var array + */ + protected $cloudfrontHeaders = array(); + + /** + * The matching Regex. + * This is good for debug. + * @var string + */ + protected $matchingRegex = null; + + /** + * The matches extracted from the regex expression. + * This is good for debug. + * @var string + */ + protected $matchesArray = null; + + /** + * The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED. + * + * @deprecated since version 2.6.9 + * + * @var string + */ + protected $detectionType = self::DETECTION_TYPE_MOBILE; + + /** + * HTTP headers that trigger the 'isMobile' detection + * to be true. + * + * @var array + */ + protected static $mobileHeaders = array( + + 'HTTP_ACCEPT' => array('matches' => array( + // Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/ + 'application/x-obml2d', + // BlackBerry devices. + 'application/vnd.rim.html', + 'text/vnd.wap.wml', + 'application/vnd.wap.xhtml+xml' + )), + 'HTTP_X_WAP_PROFILE' => null, + 'HTTP_X_WAP_CLIENTID' => null, + 'HTTP_WAP_CONNECTION' => null, + 'HTTP_PROFILE' => null, + // Reported by Opera on Nokia devices (eg. C3). + 'HTTP_X_OPERAMINI_PHONE_UA' => null, + 'HTTP_X_NOKIA_GATEWAY_ID' => null, + 'HTTP_X_ORANGE_ID' => null, + 'HTTP_X_VODAFONE_3GPDPCONTEXT' => null, + 'HTTP_X_HUAWEI_USERID' => null, + // Reported by Windows Smartphones. + 'HTTP_UA_OS' => null, + // Reported by Verizon, Vodafone proxy system. + 'HTTP_X_MOBILE_GATEWAY' => null, + // Seen this on HTC Sensation. SensationXE_Beats_Z715e. + 'HTTP_X_ATT_DEVICEID' => null, + // Seen this on a HTC. + 'HTTP_UA_CPU' => array('matches' => array('ARM')), + ); + + /** + * List of mobile devices (phones). + * + * @var array + */ + protected static $phoneDevices = array( + 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes + 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+', + 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m', + 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6', + // @todo: Is 'Dell Streak' a tablet or a phone? ;) + 'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b', + 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b', + 'Samsung' => 'Samsung|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205', + 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)', + 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533', + 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile', + // http://www.micromaxinfo.com/mobiles/smartphones + // Added because the codes might conflict with Acer Tablets. + 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b', + // @todo Complete the regex. + 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; + 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;) + // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH) + // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android. + 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790', + // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones. + 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250', + // http://fr.wikomobile.com + 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM', + 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', + // Added simvalley mobile just for fun. They have some interesting devices. + // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html + 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b', + // Wolfgang - a brand that is sold by Aldi supermarkets. + // http://www.wolfgangmobile.com/ + 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q', + 'Alcatel' => 'Alcatel', + 'Nintendo' => 'Nintendo 3DS', + // http://en.wikipedia.org/wiki/Amoi + 'Amoi' => 'Amoi', + // http://en.wikipedia.org/wiki/INQ + 'INQ' => 'INQ', + // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039 + 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser', + ); + + /** + * List of tablet devices. + * + * @var array + */ + protected static $tabletDevices = array( + 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic. + 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)|^.*Android.*Nexus(?:(?!Mobile).)*$', + 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T360', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. + // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html + 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI)\b', + // Only the Surface tablets with Windows RT are considered mobile. + // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx + 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)', + // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT + 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10', + // Watch out for PadFone, see #132. + // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/ + 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K017 |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C', + 'BlackBerryTablet' => 'PlayBook|RIM Tablet', + 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410', + 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617', + 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2', + // http://www.acer.ro/ac/ro/RO/content/drivers + // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) + // http://us.acer.com/ac/en/US/content/group/tablets + // http://www.acer.de/ac/de/DE/content/models/tablets/ + // Can conflict with Micromax and Motorola phones codes. + 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b', + // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ + // http://us.toshiba.com/tablets/tablet-finder + // http://www.toshiba.co.jp/regza/tablet/ + 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO', + // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html + // http://www.lg.com/us/tablets + 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b', + 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b', + // Prestigio Tablets http://www.prestigio.com/support + 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD', + // http://support.lenovo.com/en_GB/downloads/default.page?# + 'LenovoTablet' => 'Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)', + // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets + 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7', + // http://www.yarvik.com/en/matrix/tablets/ + 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b', + 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', + 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2', + // http://www.intenso.de/kategorie_en.php?kategorie=33 + // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate + 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004', + // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/ + 'IRUTablet' => 'M702pro', + 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b', + // http://www.e-boda.ro/tablete-pc.html + 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)', + // http://www.allview.ro/produse/droseries/lista-tablete-pc/ + 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', + // http://wiki.archosfans.com/index.php?title=Main_Page + 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b', + // http://www.ainol.com/plugin.php?identifier=ainol&module=product + 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', + // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER + // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser + // http://www.sony.jp/support/tablet/ + 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612', + // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8 + 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b', + // db + http://www.cube-tablet.com/buy-products.html + 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT', + // http://www.cobyusa.com/?p=pcat&pcat_id=3001 + 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', + // http://www.match.net.cn/products.asp + 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733', + // http://www.msi.com/support + // @todo Research the Windows Tablets. + 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b', + // @todo http://www.kyoceramobile.com/support/drivers/ + // 'KyoceraTablet' => null, + // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/ + // 'IntextTablet' => null, + // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) + // http://www.imp3.net/14/show.php?itemid=20454 + 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)', + // http://www.rock-chips.com/index.php?do=prod&pid=2 + 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A', + // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/ + 'FlyTablet' => 'IQ310|Fly Vision', + // http://www.bqreaders.com/gb/tablets-prices-sale.html + 'bqTablet' => '(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris E10)|Maxwell.*Lite|Maxwell.*Plus', + // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 + // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) + 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim', + // Nec or Medias Tab + 'NecTablet' => '\bN-06D|\bN-08D', + // Pantech Tablets: http://www.pantechusa.com/phones/ + 'PantechTablet' => 'Pantech.*P4100', + // Broncho Tablets: http://www.broncho.cn/ (hard to find) + 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)', + // http://versusuk.com/support.html + 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b', + // http://www.zync.in/index.php/our-products/tablet-phablets + 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900', + // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ + 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA', + // https://www.nabitablet.com/ + 'NabiTablet' => 'Android.*\bNabi', + 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build', + // French Danew Tablets http://www.danew.com/produits-tablette.php + 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b', + // Texet Tablets and Readers http://www.texet.ru/tablet/ + 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE', + // Avoid detecting 'PLAYSTATION 3' as mobile. + 'PlaystationTablet' => 'Playstation.*(Portable|Vita)', + // http://www.trekstor.de/surftabs.html + 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab', + // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets + 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b', + // http://www.advandigital.com/index.php?link=content-product&jns=JP001 + // because of the short codenames we have to include whitespaces to reduce the possible conflicts. + 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ', + // http://www.danytech.com/category/tablet-pc + 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1', + // http://www.galapad.net/product.html + 'GalapadTablet' => 'Android.*\bG1\b', + // http://www.micromaxinfo.com/tablet/funbook + 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', + // http://www.karbonnmobiles.com/products_tablet.php + 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b', + // http://www.myallfine.com/Products.asp + 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide', + // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= + 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b', + // http://www.yonesnav.com/products/products.php + 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026', + // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 + // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html) + 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503', + // http://www.gloryunion.cn/products.asp + // http://www.allwinnertech.com/en/apply/mobile.html + // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB) + // @todo: Softwiner tablets? + // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions. + 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G + // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118 + 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10', + // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ + // @todo: add more tests. + 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)', + // http://hclmetablet.com/India/index.php + 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync', + // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html + 'DPSTablet' => 'DPS Dream 9|DPS Dual 7', + // http://www.visture.com/index.asp + 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10', + // http://www.mijncresta.nl/tablet + 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989', + // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309 + 'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b', + // Concorde tab + 'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan', + // GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/ + 'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042', + // Modecom Tablets - http://www.modecom.eu/tablets/portal/ + 'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003', + // Vonino Tablets - http://www.vonino.eu/tablets + 'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b', + // ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0 + 'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1', + // Storex Tablets - http://storex.fr/espace_client/support.html + // @note: no need to add all the tablet codes since they are guided by the first regex. + 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab', + // Generic Vodafone tablets. + 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7', + // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb + // Aka: http://www.essentielb.fr/ + 'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2', + // Ross & Moor - http://ross-moor.ru/ + 'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711', + // i-mobile http://product.i-mobilephone.com/Mobile_Device + 'iMobileTablet' => 'i-mobile i-note', + // http://www.tolino.de/de/vergleichen/ + 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine', + // AudioSonic - a Kmart brand + // http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1 + 'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b', + // AMPE Tablets - http://www.ampe.com.my/product-category/tablets/ + // @todo: add them gradually to avoid conflicts. + 'AMPETablet' => 'Android.* A78 ', + // Skk Mobile - http://skkmobile.com.ph/product_tablets.php + 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)', + // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1 + 'TecnoTablet' => 'TECNO P9', + // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3 + 'JXDTablet' => 'Android.*\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b', + // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/ + 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)', + // http://www.intracon.eu/tablet + 'FX2Tablet' => 'FX2 PAD7|FX2 PAD10', + // http://www.xoro.de/produkte/ + // @note: Might be the same brand with 'Simply tablets' + 'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151', + // http://www1.viewsonic.com/products/computing/tablets/ + 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a', + // http://www.odys.de/web/internet-tablet_en.html + 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10', + // http://www.captiva-power.de/products.html#tablets-en + 'CaptivaTablet' => 'CAPTIVA PAD', + // IconBIT - http://www.iconbit.com/products/tablets/ + 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S', + // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63 + 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi', + // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price + 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+', + 'JaytechTablet' => 'TPC-PA762', + 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010', + // http://www.digma.ru/support/download/ + // @todo: Ebooks also (if requested) + 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b', + // http://www.evolioshop.com/ro/tablete-pc.html + // http://www.evolio.ro/support/downloads_static.html?cat=2 + // @todo: Research some more + 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b', + // @todo http://www.lavamobiles.com/tablets-data-cards + 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b', + // https://www.celkonmobiles.com/?_a=categoryphones&sid=2 + 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b', + // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab + 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b', + // http://www.mi.com/en + 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b', + // http://www.nbru.cn/index.html + 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One', + // http://navroad.com/products/produkty/tablety/ + 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI', + // http://leader-online.com/new_site/product-category/tablets/ + // http://www.leader-online.net.au/List/Tablet + 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100', + // http://www.datawind.com/ubislate/ + 'UbislateTablet' => 'UbiSlate[\s]?7C', + // http://www.pocketbook-int.com/ru/support + 'PocketBookTablet' => 'Pocketbook', + // http://www.tesco.com/direct/hudl/ + 'Hudl' => 'Hudl HT7S3', + // http://www.telstra.com.au/home-phone/thub-2/ + 'TelstraTablet' => 'T-Hub2', + 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bJolla\b|\bTP750\b' + ); + + /** + * List of mobile Operating Systems. + * + * @var array + */ + protected static $operatingSystems = array( + 'AndroidOS' => 'Android', + 'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os', + 'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino', + 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', + // @reference: http://en.wikipedia.org/wiki/Windows_Mobile + 'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;', + // @reference: http://en.wikipedia.org/wiki/Windows_Phone + // http://wifeng.cn/?r=blog&a=view&id=106 + // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx + // http://msdn.microsoft.com/library/ms537503.aspx + 'WindowsPhoneOS' => 'Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;', + 'iOS' => '\biPhone.*Mobile|\biPod|\biPad', + // http://en.wikipedia.org/wiki/MeeGo + // @todo: research MeeGo in UAs + 'MeeGoOS' => 'MeeGo', + // http://en.wikipedia.org/wiki/Maemo + // @todo: research Maemo in UAs + 'MaemoOS' => 'Maemo', + 'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135 + 'webOS' => 'webOS|hpwOS', + 'badaOS' => '\bBada\b', + 'BREWOS' => 'BREW', + ); + + /** + * List of mobile User Agents. + * + * @var array + */ + protected static $browsers = array( + // @reference: https://developers.google.com/chrome/mobile/docs/user-agent + 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?', + 'Dolfin' => '\bDolfin\b', + 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+', + 'Skyfire' => 'Skyfire', + 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ + 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile', + 'Bolt' => 'bolt', + 'TeaShark' => 'teashark', + 'Blazer' => 'Blazer', + // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3 + 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', + // http://en.wikipedia.org/wiki/Midori_(web_browser) + //'Midori' => 'midori', + 'Tizen' => 'Tizen', + 'UCBrowser' => 'UC.*Browser|UCWEB', + 'baiduboxapp' => 'baiduboxapp', + 'baidubrowser' => 'baidubrowser', + // https://github.com/serbanghita/Mobile-Detect/issues/7 + 'DiigoBrowser' => 'DiigoBrowser', + // http://www.puffinbrowser.com/index.php + 'Puffin' => 'Puffin', + // http://mercury-browser.com/index.html + 'Mercury' => '\bMercury\b', + // http://en.wikipedia.org/wiki/Obigo_Browser + 'ObigoBrowser' => 'Obigo', + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NF-Browser', + // @reference: http://en.wikipedia.org/wiki/Minimo + // http://en.wikipedia.org/wiki/Vision_Mobile_Browser + 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', + ); + + /** + * Utilities. + * + * @var array + */ + protected static $utilities = array( + // Experimental. When a mobile device wants to switch to 'Desktop Mode'. + // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/ + // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 + // https://developers.facebook.com/docs/sharing/best-practices + 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom', + 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2', + 'DesktopMode' => 'WPDesktop', + 'TV' => 'SonyDTV|HbbTV', // experimental + 'WebKit' => '(webkit)[ /]([\w.]+)', + // @todo: Include JXD consoles. + 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b', + 'Watch' => 'SM-V700', + ); + + /** + * All possible HTTP headers that represent the + * User-Agent string. + * + * @var array + */ + protected static $uaHttpHeaders = array( + // The default User-Agent string. + 'HTTP_USER_AGENT', + // Header can occur on devices using Opera Mini. + 'HTTP_X_OPERAMINI_PHONE_UA', + // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/ + 'HTTP_X_DEVICE_USER_AGENT', + 'HTTP_X_ORIGINAL_USER_AGENT', + 'HTTP_X_SKYFIRE_PHONE', + 'HTTP_X_BOLT_PHONE_UA', + 'HTTP_DEVICE_STOCK_UA', + 'HTTP_X_UCBROWSER_DEVICE_UA' + ); + + /** + * The individual segments that could exist in a User-Agent string. VER refers to the regular + * expression defined in the constant self::VER. + * + * @var array + */ + protected static $properties = array( + + // Build + 'Mobile' => 'Mobile/[VER]', + 'Build' => 'Build/[VER]', + 'Version' => 'Version/[VER]', + 'VendorID' => 'VendorID/[VER]', + + // Devices + 'iPad' => 'iPad.*CPU[a-z ]+[VER]', + 'iPhone' => 'iPhone.*CPU[a-z ]+[VER]', + 'iPod' => 'iPod.*CPU[a-z ]+[VER]', + //'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'), + 'Kindle' => 'Kindle/[VER]', + + // Browser + 'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'), + 'Coast' => array('Coast/[VER]'), + 'Dolfin' => 'Dolfin/[VER]', + // @reference: https://developer.mozilla.org/en-US/docs/User_Agent_Strings_Reference + 'Firefox' => 'Firefox/[VER]', + 'Fennec' => 'Fennec/[VER]', + // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx + // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx + 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'), + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NetFront/[VER]', + 'NokiaBrowser' => 'NokiaBrowser/[VER]', + 'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ), + 'Opera Mini' => 'Opera Mini/[VER]', + 'Opera Mobi' => 'Version/[VER]', + 'UC Browser' => 'UC Browser[VER]', + 'MQQBrowser' => 'MQQBrowser/[VER]', + 'MicroMessenger' => 'MicroMessenger/[VER]', + 'baiduboxapp' => 'baiduboxapp/[VER]', + 'baidubrowser' => 'baidubrowser/[VER]', + 'Iron' => 'Iron/[VER]', + // @note: Safari 7534.48.3 is actually Version 5.1. + // @note: On BlackBerry the Version is overwriten by the OS. + 'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ), + 'Skyfire' => 'Skyfire/[VER]', + 'Tizen' => 'Tizen/[VER]', + 'Webkit' => 'webkit[ /][VER]', + + // Engine + 'Gecko' => 'Gecko/[VER]', + 'Trident' => 'Trident/[VER]', + 'Presto' => 'Presto/[VER]', + + // OS + 'iOS' => ' \bi?OS\b [VER][ ;]{1}', + 'Android' => 'Android [VER]', + 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), + 'BREW' => 'BREW [VER]', + 'Java' => 'Java/[VER]', + // @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx + // @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases + 'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'), + 'Windows Phone' => 'Windows Phone [VER]', + 'Windows CE' => 'Windows CE/[VER]', + // http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd + 'Windows NT' => 'Windows NT [VER]', + 'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'), + 'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'), + ); + + /** + * Construct an instance of this class. + * + * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored. + * If left empty, will use the global _SERVER['HTTP_*'] vars instead. + * @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT + * from the $headers array instead. + */ + public function __construct( + array $headers = null, + $userAgent = null + ) { + $this->setHttpHeaders($headers); + $this->setUserAgent($userAgent); + } + + /** + * Get the current script version. + * This is useful for the demo.php file, + * so people can check on what version they are testing + * for mobile devices. + * + * @return string The version number in semantic version format. + */ + public static function getScriptVersion() + { + return self::VERSION; + } + + /** + * Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers. + * + * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract + * the headers. The default null is left for backwards compatibilty. + */ + public function setHttpHeaders($httpHeaders = null) + { + // use global _SERVER if $httpHeaders aren't defined + if (!is_array($httpHeaders) || !count($httpHeaders)) { + $httpHeaders = $_SERVER; + } + + // clear existing headers + $this->httpHeaders = array(); + + // Only save HTTP headers. In PHP land, that means only _SERVER vars that + // start with HTTP_. + foreach ($httpHeaders as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $this->httpHeaders[$key] = $value; + } + } + + // In case we're dealing with CloudFront, we need to know. + $this->setCfHeaders($httpHeaders); + } + + /** + * Retrieves the HTTP headers. + * + * @return array + */ + public function getHttpHeaders() + { + return $this->httpHeaders; + } + + /** + * Retrieves a particular header. If it doesn't exist, no exception/error is caused. + * Simply null is returned. + * + * @param string $header The name of the header to retrieve. Can be HTTP compliant such as + * "User-Agent" or "X-Device-User-Agent" or can be php-esque with the + * all-caps, HTTP_ prefixed, underscore seperated awesomeness. + * + * @return string|null The value of the header. + */ + public function getHttpHeader($header) + { + // are we using PHP-flavored headers? + if (strpos($header, '_') === false) { + $header = str_replace('-', '_', $header); + $header = strtoupper($header); + } + + // test the alternate, too + $altHeader = 'HTTP_' . $header; + + //Test both the regular and the HTTP_ prefix + if (isset($this->httpHeaders[$header])) { + return $this->httpHeaders[$header]; + } elseif (isset($this->httpHeaders[$altHeader])) { + return $this->httpHeaders[$altHeader]; + } + + return null; + } + + public function getMobileHeaders() + { + return self::$mobileHeaders; + } + + /** + * Get all possible HTTP headers that + * can contain the User-Agent string. + * + * @return array List of HTTP headers. + */ + public function getUaHttpHeaders() + { + return self::$uaHttpHeaders; + } + + + /** + * Set CloudFront headers + * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device + * + * @param array $cfHeaders List of HTTP headers + * + * @return boolean If there were CloudFront headers to be set + */ + public function setCfHeaders($cfHeaders = null) { + // use global _SERVER if $cfHeaders aren't defined + if (!is_array($cfHeaders) || !count($cfHeaders)) { + $cfHeaders = $_SERVER; + } + + // clear existing headers + $this->cloudfrontHeaders = array(); + + // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that + // start with cloudfront-. + $response = false; + foreach ($cfHeaders as $key => $value) { + if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') { + $this->cloudfrontHeaders[strtoupper($key)] = $value; + $response = true; + } + } + + return $response; + } + + /** + * Retrieves the cloudfront headers. + * + * @return array + */ + public function getCfHeaders() + { + return $this->cloudfrontHeaders; + } + + /** + * Set the User-Agent to be used. + * + * @param string $userAgent The user agent string to set. + * + * @return string|null + */ + public function setUserAgent($userAgent = null) + { + // Invalidate cache due to #375 + $this->cache = array(); + + if (false === empty($userAgent)) { + return $this->userAgent = $userAgent; + } else { + $this->userAgent = null; + foreach ($this->getUaHttpHeaders() as $altHeader) { + if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban) + $this->userAgent .= $this->httpHeaders[$altHeader] . " "; + } + } + + if (!empty($this->userAgent)) { + return $this->userAgent = trim($this->userAgent); + } + } + + if (count($this->getCfHeaders()) > 0) { + return $this->userAgent = 'Amazon CloudFront'; + } + return $this->userAgent = null; + } + + /** + * Retrieve the User-Agent. + * + * @return string|null The user agent if it's set. + */ + public function getUserAgent() + { + return $this->userAgent; + } + + /** + * Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or + * self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set. + * + * @deprecated since version 2.6.9 + * + * @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default + * parameter is null which will default to self::DETECTION_TYPE_MOBILE. + */ + public function setDetectionType($type = null) + { + if ($type === null) { + $type = self::DETECTION_TYPE_MOBILE; + } + + if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) { + return; + } + + $this->detectionType = $type; + } + + public function getMatchingRegex() + { + return $this->matchingRegex; + } + + public function getMatchesArray() + { + return $this->matchesArray; + } + + /** + * Retrieve the list of known phone devices. + * + * @return array List of phone devices. + */ + public static function getPhoneDevices() + { + return self::$phoneDevices; + } + + /** + * Retrieve the list of known tablet devices. + * + * @return array List of tablet devices. + */ + public static function getTabletDevices() + { + return self::$tabletDevices; + } + + /** + * Alias for getBrowsers() method. + * + * @return array List of user agents. + */ + public static function getUserAgents() + { + return self::getBrowsers(); + } + + /** + * Retrieve the list of known browsers. Specifically, the user agents. + * + * @return array List of browsers / user agents. + */ + public static function getBrowsers() + { + return self::$browsers; + } + + /** + * Retrieve the list of known utilities. + * + * @return array List of utilities. + */ + public static function getUtilities() + { + return self::$utilities; + } + + /** + * Method gets the mobile detection rules. This method is used for the magic methods $detect->is*(). + * + * @deprecated since version 2.6.9 + * + * @return array All the rules (but not extended). + */ + public static function getMobileDetectionRules() + { + static $rules; + + if (!$rules) { + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers + ); + } + + return $rules; + + } + + /** + * Method gets the mobile detection rules + utilities. + * The reason this is separate is because utilities rules + * don't necessary imply mobile. This method is used inside + * the new $detect->is('stuff') method. + * + * @deprecated since version 2.6.9 + * + * @return array All the rules + extended. + */ + public function getMobileDetectionRulesExtended() + { + static $rules; + + if (!$rules) { + // Merge all rules together. + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers, + self::$utilities + ); + } + + return $rules; + } + + /** + * Retrieve the current set of rules. + * + * @deprecated since version 2.6.9 + * + * @return array + */ + public function getRules() + { + if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) { + return self::getMobileDetectionRulesExtended(); + } else { + return self::getMobileDetectionRules(); + } + } + + /** + * Retrieve the list of mobile operating systems. + * + * @return array The list of mobile operating systems. + */ + public static function getOperatingSystems() + { + return self::$operatingSystems; + } + + /** + * Check the HTTP headers for signs of mobile. + * This is the fastest mobile check possible; it's used + * inside isMobile() method. + * + * @return bool + */ + public function checkHttpHeadersForMobile() + { + + foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) { + if (isset($this->httpHeaders[$mobileHeader])) { + if (is_array($matchType['matches'])) { + foreach ($matchType['matches'] as $_match) { + if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) { + return true; + } + } + + return false; + } else { + return true; + } + } + } + + return false; + + } + + /** + * Magic overloading method. + * + * @method boolean is[...]() + * @param string $name + * @param array $arguments + * @return mixed + * @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is' + */ + public function __call($name, $arguments) + { + // make sure the name starts with 'is', otherwise + if (substr($name, 0, 2) !== 'is') { + throw new BadMethodCallException("No such method exists: $name"); + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + $key = substr($name, 2); + + return $this->matchUAAgainstKey($key); + } + + /** + * Find a detection rule that matches the current User-agent. + * + * @param null $userAgent deprecated + * @return boolean + */ + protected function matchDetectionRulesAgainstUA($userAgent = null) + { + // Begin general search. + foreach ($this->getRules() as $_regex) { + if (empty($_regex)) { + continue; + } + + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * Search for a certain key in the rules array. + * If the key is found the try to match the corresponding + * regex against the User-Agent. + * + * @param string $key + * + * @return boolean + */ + protected function matchUAAgainstKey($key) + { + // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc. + $key = strtolower($key); + if (false === isset($this->cache[$key])) { + + // change the keys to lower case + $_rules = array_change_key_case($this->getRules()); + + if (false === empty($_rules[$key])) { + $this->cache[$key] = $this->match($_rules[$key]); + } + + if (false === isset($this->cache[$key])) { + $this->cache[$key] = false; + } + } + + return $this->cache[$key]; + } + + /** + * Check if the device is mobile. + * Returns true if any type of mobile device detected, including special ones + * @param null $userAgent deprecated + * @param null $httpHeaders deprecated + * @return bool + */ + public function isMobile($userAgent = null, $httpHeaders = null) + { + + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + if ($this->checkHttpHeadersForMobile()) { + return true; + } else { + return $this->matchDetectionRulesAgainstUA(); + } + + } + + /** + * Check if the device is a tablet. + * Return true if any type of tablet device is detected. + * + * @param string $userAgent deprecated + * @param array $httpHeaders deprecated + * @return bool + */ + public function isTablet($userAgent = null, $httpHeaders = null) + { + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + foreach (self::$tabletDevices as $_regex) { + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * This method checks for a certain property in the + * userAgent. + * @todo: The httpHeaders part is not yet used. + * + * @param string $key + * @param string $userAgent deprecated + * @param string $httpHeaders deprecated + * @return bool|int|null + */ + public function is($key, $userAgent = null, $httpHeaders = null) + { + // Set the UA and HTTP headers only if needed (eg. batch mode). + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + $this->setDetectionType(self::DETECTION_TYPE_EXTENDED); + + return $this->matchUAAgainstKey($key); + } + + /** + * Some detection rules are relative (not standard), + * because of the diversity of devices, vendors and + * their conventions in representing the User-Agent or + * the HTTP headers. + * + * This method will be used to check custom regexes against + * the User-Agent string. + * + * @param $regex + * @param string $userAgent + * @return bool + * + * @todo: search in the HTTP headers too. + */ + public function match($regex, $userAgent = null) + { + $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); + // If positive match is found, store the results for debug. + if ($match) { + $this->matchingRegex = $regex; + $this->matchesArray = $matches; + } + + return $match; + } + + /** + * Get the properties array. + * + * @return array + */ + public static function getProperties() + { + return self::$properties; + } + + /** + * Prepare the version number. + * + * @todo Remove the error supression from str_replace() call. + * + * @param string $ver The string version, like "2.6.21.2152"; + * + * @return float + */ + public function prepareVersionNo($ver) + { + $ver = str_replace(array('_', ' ', '/'), '.', $ver); + $arrVer = explode('.', $ver, 2); + + if (isset($arrVer[1])) { + $arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions. + } + + return (float) implode('.', $arrVer); + } + + /** + * Check the version of the given property in the User-Agent. + * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) + * + * @param string $propertyName The name of the property. See self::getProperties() array + * keys for all possible properties. + * @param string $type Either self::VERSION_TYPE_STRING to get a string value or + * self::VERSION_TYPE_FLOAT indicating a float value. This parameter + * is optional and defaults to self::VERSION_TYPE_STRING. Passing an + * invalid parameter will default to the this type as well. + * + * @return string|float The version of the property we are trying to extract. + */ + public function version($propertyName, $type = self::VERSION_TYPE_STRING) + { + if (empty($propertyName)) { + return false; + } + + // set the $type to the default if we don't recognize the type + if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) { + $type = self::VERSION_TYPE_STRING; + } + + $properties = self::getProperties(); + + // Check if the property exists in the properties array. + if (true === isset($properties[$propertyName])) { + + // Prepare the pattern to be matched. + // Make sure we always deal with an array (string is converted). + $properties[$propertyName] = (array) $properties[$propertyName]; + + foreach ($properties[$propertyName] as $propertyMatchString) { + + $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString); + + // Identify and extract the version. + preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match); + + if (false === empty($match[1])) { + $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]); + + return $version; + } + + } + + } + + return false; + } + + /** + * Retrieve the mobile grading, using self::MOBILE_GRADE_* constants. + * + * @return string One of the self::MOBILE_GRADE_* constants. + */ + public function mobileGrade() + { + $isMobile = $this->isMobile(); + + if ( + // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 || + + // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5) + // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM + // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices + // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7 + ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) || + + // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8) + $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 || + + // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10) + $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 || + // Blackberry Playbook (1.0-2.0) - Tested on PlayBook + $this->match('Playbook.*Tablet') || + + // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0) + ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) || + // Palm WebOS 3.0 - Tested on HP TouchPad + $this->match('hp.*TouchPad') || + + // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices + ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) || + + // Chrome for Android - Tested on Android 4.0, 4.1 device + ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) || + + // Skyfire 4.1 - Tested on Android 2.3 device + ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Opera Mobile 11.5-12: Tested on Android 2.3 + ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) || + + // Meego 1.2 - Tested on Nokia 950 and N9 + $this->is('MeeGoOS') || + + // Tizen (pre-release) - Tested on early hardware + $this->is('Tizen') || + + // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser + // @todo: more tests here! + $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 || + + // UC Browser - Tested on Android 2.3 device + ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Kindle 3 and Fire - Tested on the built-in WebKit browser for each + ( $this->match('Kindle Fire') || + $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) || + + // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet + $this->is('AndroidOS') && $this->is('NookTablet') || + + // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7 + $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile || + + // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7 + $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile || + + // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7 + $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile || + + // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7 + $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile || + + // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7 + $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile + ){ + return self::MOBILE_GRADE_A; + } + + if ( + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 || + + // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770 + $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 || + + //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3 + ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 && + ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) || + + // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1) + $this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') || + + // @todo: report this (tested on Nokia N71) + $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS') + ){ + return self::MOBILE_GRADE_B; + } + + if ( + // Blackberry 4.x - Tested on the Curve 8330 + $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 || + // Windows Mobile - Tested on the HTC Leo (WinMo 5.2) + $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 || + + // Tested on original iPhone (3.1), iPhone 3 (3.2) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 || + + // Internet Explorer 7 and older - Tested on Windows XP + $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile + ){ + return self::MOBILE_GRADE_C; + } + + // All older smartphone platforms and featurephones - Any device that doesn't support media queries + // will receive the basic, C grade experience. + return self::MOBILE_GRADE_C; + } +} diff --git a/autoload/class.Page.php b/autoload/class.Page.php new file mode 100644 index 0000000..37731bc --- /dev/null +++ b/autoload/class.Page.php @@ -0,0 +1,9 @@ +<?php +class Page +{ + // pobierz rodzaj sortowania + static public function getPageSort( $page_id ) + { + + } +} \ No newline at end of file diff --git a/autoload/class.S.php b/autoload/class.S.php new file mode 100644 index 0000000..1a875d8 --- /dev/null +++ b/autoload/class.S.php @@ -0,0 +1,1282 @@ +<?php +class S +{ + static public function generate_webp_image($file, $compression_quality = 85) + { + if ( strpos( $file, 'thumb/' ) !== false ) + { + $file_tmp = explode( '/', $file ); + + $width = $file_tmp[1]; + if ( empty( $width ) and $width !== '0' ) + $width = 500; + + $height = $file_tmp[2]; + if ( empty( $height ) and $height !== '0' ) + $height = 500; + + for ( $i = 0; $i <= 2; $i++ ) + unset( $file_tmp[$i] ); + + $img_src = implode( '/', $file_tmp ); + + $crop_w = $_GET['c_w']; + $crop_h = $_GET['c_h']; + + $img_md5 = md5( $img_src . $height . $width . $crop_h . $crop_w ); + $file = 'thumbs/' . $img_md5[0] . '/' . $img_md5[1] . '/' . $img_md5[2] . '/' . $img_md5; + } + + if (!file_exists($file)) + return false; + + $output_file = 'cache/' . $file . '.webp'; + if (file_exists($output_file)) + return $output_file; + + $file_type = mime_content_type( $file ); + + if (function_exists('imagewebp')) + { + switch ($file_type) + { + case 'image/jpeg': + $image = imagecreatefromjpeg($file); + break; + + case 'image/png': + $image = imagecreatefrompng($file); + imagepalettetotruecolor($image); + imagealphablending($image, true); + imagesavealpha($image, true); + break; + + case 'image/gif': + $image = imagecreatefromgif($file); + break; + + default: + return false; + } + + $dir = dirname($output_file); + if (!is_dir($dir)) + mkdir($dir, 0755, true); + + $result = imagewebp($image, $output_file, $compression_quality); + if (false === $result) + return false; + + imagedestroy($image); + + return $output_file; + } + elseif (class_exists('Imagick')) + { + $dir = dirname($output_file); + if (!is_dir($dir)) + mkdir($dir, 0755, true); + + $image = new \Imagick(); + $image->readImage($file); + + if ($file_type === 'png') + { + $image->setImageFormat('webp'); + $image->setImageCompressionQuality($compression_quality); + $image->setOption('webp:lossless', 'true'); + } + + $image->writeImage($output_file); + return $output_file; + } + + return false; + } + + static public function is_array_fix($value) + { + if (is_array($value) and count($value)) + return true; + return false; + } + + public static function suAppendHtmlById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, false); + } + + public static function suInsertHtmlById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, true); + } + + public static function suAddHtmlBeforeById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, true, true); + } + + public static function suAddHtmlAfterById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, false, true); + } + + public static function suSetHtmlById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, true, true); + } + + public static function suReplaceHtmlElementById(&$s, $sId, $sHtml, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, $sHtml, false, false); + } + + public static function suRemoveHtmlElementById(&$s, $sId, &$oDoc = null) + { + return \S::suSetHtmlElementById($oDoc, $s, $sId, null, false, false); + } + + public static function suSetHtmlElementById(&$oDoc, &$s, $sId, $sHtml, $bAppend = false, $bInsert = false, $bAddToOuter = false) + { + if (\S::suIsValidString($s) && \S::suIsValidString($sId)) + { + $bCreate = true; + if (is_object($oDoc)) + { + if (!($oDoc instanceof DOMDocument)) + { + return false; + } + $bCreate = false; + } + + if ($bCreate) + { + $oDoc = new DOMDocument(); + } + + libxml_use_internal_errors(true); + $oDoc->loadHTML($s, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + libxml_use_internal_errors(false); + $oNode = $oDoc->getElementById($sId); + + if (is_object($oNode)) + { + $bReplaceOuter = (!$bAppend && !$bInsert); + + $sId = uniqid('SHEBI-'); + $aId = array("<!-- $sId -->", "<!--$sId-->"); + + if ($bReplaceOuter) + { + if (\S::suIsValidString($sHtml)) + { + $oNode->parentNode->replaceChild($oDoc->createComment($sId), $oNode); + $s = $oDoc->saveHtml(); + $s = str_replace($aId, $sHtml, $oDoc->saveHtml()); + } + else + { + $oNode->parentNode->removeChild($oNode); + $s = $oDoc->saveHtml(); + } + return true; + } + + $bReplaceInner = ($bAppend && $bInsert); + $sThis = null; + + if (!$bReplaceInner) + { + $sThis = $oDoc->saveHTML($oNode); + $sThis = ($bInsert ? $sHtml : '') . ($bAddToOuter ? $sThis : (substr($sThis, strpos($sThis, '>') + 1, - (strlen($oNode->nodeName) + 3)))) . ($bAppend ? $sHtml : ''); + } + + if (!$bReplaceInner && $bAddToOuter) + { + $oNode->parentNode->replaceChild($oDoc->createComment($sId), $oNode); + $sId = &$aId; + } + else + { + $oNode->nodeValue = $sId; + } + + $s = str_replace($sId, $bReplaceInner ? $sHtml : $sThis, $oDoc->saveHtml()); + return true; + } + } + return false; + } + + public static function suIsValidString(&$s, &$iLen = null, $minLen = null, $maxLen = null) + { + if (!is_string($s) || !isset($s{ + 0})) + { + return false; + } + + if ($iLen !== null) + { + $iLen = strlen($s); + } + + return (($minLen === null ? true : ($minLen > 0 && isset($s{ + $minLen - 1}))) && + $maxLen === null ? true : ($maxLen >= $minLen && !isset($s{ + $maxLen}))); + } + + public static function log_db_error($db_tmp, $debug) + { + global $settings; + + if ($settings['mysql_debug']) + { + $out .= date('Y-m-d H:i:s') . PHP_EOL; + $out .= $db_tmp->error()[2] . PHP_EOL; + $out .= $db_tmp->last() . PHP_EOL; + $out .= $debug[0]['file'] . ' | ' . $debug[0]['line'] . PHP_EOL; + $out .= '--------------------------------------------------------------------------------------------' . PHP_EOL; + + if (!is_dir('logs')) + mkdir('logs', 0755, true); + + $content = file_get_contents('logs/' . date('Y-m-d') . '.txt'); + $content = $out . $content; + file_put_contents('logs/' . date('Y-m-d') . '.txt', $content); + die('Blad bazy danych.'); + } + } + + public static function lang($text) + { + global $lang; + return $lang[$text] ? $lang[$text] : 'LANG-' . $text; + } + + public static function cache_read($path) + { + $f = fopen($path, 'r'); + $buffer = ''; + while (!feof($f)) + { + $buffer .= fread($f, 2048); + } + fclose($f); + return $buffer; + } + + public static function cache_write($cache_url, $cache_file, $html) + { + $dir = md5($cache_url); + $dir = 'cache/' . $dir[0] . '/' . $dir[1] . '/'; + + if (!is_dir($dir)) + mkdir($dir, 0755, true); + + $f = fopen($cache_file, 'w'); + fwrite($f, $html, strlen($html)); + fclose($f); + return true; + } + + public static function cache_file_url($cache_url) + { + $cache = md5($cache_url); + return 'cache/' . $cache{ + 1} . '/' . $cache{ + 2} . '/' . $cache; + } + + public static function date_diff($data1, $data2, $rodz = '60') + { + $data1 = date('Y-m-d H:i:s', strtotime($data1)); + $data2 = date('Y-m-d H:i:s', strtotime($data2)); + + $d1_t = explode(' ', $data1); + $d1_tt = explode('-', $d1_t[0]); + $rok1 = $d1_tt[0]; + $mc1 = $d1_tt[1]; + $d1 = $d1_tt[2]; + $d1_tt = explode(':', $d1_t[1]); + $g1 = $d1_tt[0]; + $m1 = $d1_tt[1]; + $s1 = $d1_tt[2]; + + $d2_t = explode(' ', $data2); + $d2_tt = explode('-', $d2_t[0]); + $rok2 = $d2_tt[0]; + $mc2 = $d2_tt[1]; + $d2 = $d2_tt[2]; + $d2_tt = explode(':', $d2_t[1]); + $g2 = $d2_tt[0]; + $m2 = $d2_tt[1]; + $s2 = $d2_tt[2]; + + $lt = mktime($g2, $m2, $s2, $mc2, $d2, $rok2); + $st = mktime($g1, $m1, $s1, $mc1, $d1, $rok1); + + return round(($lt - $st) / $rodz); + } + + public static function is_token_valid($token) + { + if (!empty($_SESSION['tokens'][$token])) + { + unset($_SESSION['tokens'][$token]); + return true; + } + return false; + } + + public static function get_token() + { + $token = sha1(mt_rand()); + if (!isset($_SESSION['tokens'])) + $_SESSION['tokens'] = [$token => 1]; + else + $_SESSION['tokens'][$token] = 1; + return $token; + } + + public static function get_domain($url) + { + $parseUrl = parse_url(trim($url)); + return trim($parseUrl[host] ? str_replace('www.', '', $parseUrl[host]) : str_replace('www.', '', array_shift(explode('/', $parseUrl[path], 2)))); + } + + public static function get_domain_url($url) + { + global $settings; + + $settings['link_version'] ? $www = 'www.' : $www = ''; + $settings['ssl'] == true ? $domain_prefix = 'https' : $domain_prefix = 'http'; + return $domain_prefix . '://' . $www . \S::get_domain($url); + } + + public static function max_db_value($table, $column) + { + global $mdb; + $results = $mdb->query('SELECT MAX(' . $column . ') FROM ' . $table)->fetchAll(); + return $results[0][0]; + } + + public static function shuffle_assoc($list) + { + if (!is_array($list)) + return $list; + + $keys = array_keys($list); + shuffle($keys); + $random = array(); + foreach ($keys as $key) + $random[$key] = $list[$key]; + return $random; + } + + public static function escape($value) + { + $return = ''; + for ($i = 0; $i < strlen($value); ++$i) + { + $char = $value[$i]; + $ord = ord($char); + if ($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126) + $return .= $char; + else + $return .= '\\x' . dechex($ord); + } + return $return; + } + + public static function is_bot() + { + $bots = ["Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler", "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory"]; + $agent = strtolower($_SERVER['HTTP_USER_AGENT']); + foreach ($bots as $bot) + if (stripos($agent, $bot) !== false) + return true; + return false; + } + + public static function months() + { + return array(1 => 'Styczeń', 2 => 'Luty', 3 => 'Marzec', 4 => 'Kwiecień', 5 => 'Maj', 6 => 'Czerwiec', 7 => 'Lipiec', 8 => 'Sierpień', 9 => 'Wrzesień', 10 => 'Październik', 11 => 'Listopad', 12 => 'Grudzień'); + } + + public static function months_short() + { + return [1 => 'sty', 2 => 'lut', 3 => 'mar', 4 => 'kwi', 5 => 'maj', 6 => 'cze', 7 => 'lip', 8 => 'sie', 9 => 'wrz', 10 => 'paź', 11 => 'lis', 12 => 'gru']; + } + + public static function chmod_r($path, $chmod = 0755) + { + $dir = new DirectoryIterator($path); + foreach ($dir as $item) + { + chmod($item->getPathname(), $chmod); + if ($item->isDir() && !$item->isDot()) + self::chmod_r($item->getPathname()); + } + } + + public static function rrmdir($dir) + { + if (is_dir($dir)) + { + $files = scandir($dir); + foreach ($files as $file) + if ($file != "." && $file != "..") + \S::rrmdir("$dir/$file"); + rmdir($dir); + } + else if (file_exists($dir)) + unlink($dir); + } + + public static function rcopy($src, $dst) + { + if (is_dir($src)) + { + mkdir($dst, 0755); + $files = scandir($src); + foreach ($files as $file) + if ($file != "." && $file != "..") + \S::rcopy("$src/$file", "$dst/$file"); + } + else if (file_exists($src)) + copy($src, $dst); + + \S::rrmdir($src); + } + + public static function is_mobile() + { + $detect = new \Mobile_Detect; + return $detect->isMobile(); + } + + public static function get_new_version() + { + global $settings; + + if ($version = \S::get_session('new-version')) + return $version; + + $versions = file_get_contents('http://www.cmspro.project-dc.pl/updates/versions.php?key=' . $settings['update_key']); + $versions = explode(PHP_EOL, $versions); + $version = str_replace(',', '.', max($versions)); + + \S::set_session('new-version', $version); + + return $version; + } + + public static function get_version() + { + return str_replace(',', '.', @file_get_contents('../libraries/version.ini')); + } + + public static function pre($data, $type = '') + { + $data = str_replace('Array + (', '', $data); + $data = str_replace(')', '', $data); + + echo '<pre'; + if ($type == 'error') + echo ' style="color: #cc0000;" '; + else if ($type == 'info') + echo ' style="color: #2c539e;" '; + else + echo ' style="color: #8fc400;" '; + echo '>' . print_r($data, true) . '</pre>'; + } + + public static function json_to_array($json) + { + $values_tmp = json_decode($json, true); + + if (is_array($values_tmp)) + foreach ($values_tmp as $val) + { + if (isset($values[$val['name']])) + { + if (is_array($values[$val['name']])) + $values[$val['name']][] = $val['value']; + else + $values[$val['name']] = array($values[$val['name']], $val['value']); + } + else + $values[$val['name']] = $val['value']; + } + return $values; + } + + public static function set_session($var, $val) + { + $_SESSION[$var] = $val; + } + + public static function get_session($var) + { + return $_SESSION[$var]; + } + + public static function delete_session($var) + { + unset($_SESSION[$var]); + } + + public static function get($var, $strip_tags = false) + { + if (isset($_POST[$var])) + { + if (is_string($_POST[$var])) + { + if ($strip_tags) + return trim(strip_tags($_POST[$var])); + else + return trim($_POST[$var]); + } + else + return $_POST[$var]; + } + else + { + if (isset($_GET[$var])) + { + if (is_string($_GET[$var])) + { + if ($strip_tags) + return trim(strip_tags($_GET[$var])); + else + return trim($_GET[$var]); + } + else + return $_GET[$var]; + } + } + } + + public static function set_message($text) + { + self::set_session('message', $text); + } + + public static function alert($text, $class = 'alert-success') + { + self::set_session('alert', $text); + self::set_session('alert-class', $class); + } + + static public function get_language_domain($lang_id) + { + global $mdb; + + $settings = \front\factory\Settings::settings_details(); + $default_domain = \admin\factory\Languages::default_domain(); + $settings['link_version'] ? $www = 'www.' : $www = ''; + + $domain = $mdb->get('pp_langs', 'domain', ['id' => $lang_id]); + if (!$domain) + { + if ($default_domain) + return $www . $default_domain; + else + return $www . preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME']); + } + else + { + return $www . $domain; + } + } + + public static function htacces($dir = '../') + { + global $mdb; + + $settings = \front\factory\Settings::settings_details(); + $default_domain = \admin\factory\Languages::default_domain(); + $available_domains = \admin\factory\Languages::available_domains(); + + $settings['link_version'] ? $www = 'www.' : $www = ''; + + $settings['ssl'] == true ? $domain_prefix = 'https' : $domain_prefix = 'http'; + + $default_domain ? $url = $default_domain : $url = preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME']); + + $robots = 'User-agent: *' . PHP_EOL; + $robots .= 'Allow: /' . PHP_EOL; + + unlink('../sitemap.xml'); + if (is_array($available_domains) and !empty($available_domains)) + { + foreach ($available_domains as $domain) + { + $site_map[$domain['domain']] = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL; + $site_map[$domain['domain']] .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL; + $site_map[$domain['domain']] .= '<url>' . PHP_EOL; + $site_map[$domain['domain']] .= '<loc>' . $domain_prefix . '://' . $www . $domain['domain'] . '</loc>' . PHP_EOL; + $site_map[$domain['domain']] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL; + $site_map[$domain['domain']] .= '<changefreq>daily</changefreq>' . PHP_EOL; + $site_map[$domain['domain']] .= '<priority>1</priority>' . PHP_EOL; + $site_map[$domain['domain']] .= '</url>' . PHP_EOL; + } + } + else + { + $site_map[$url] = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL; + $site_map[$url] .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL; + $site_map[$url] .= '<url>' . PHP_EOL; + $site_map[$url] .= '<loc>' . $domain_prefix . '://' . $www . $url . '</loc>' . PHP_EOL; + $site_map[$url] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL; + $site_map[$url] .= '<changefreq>daily</changefreq>' . PHP_EOL; + $site_map[$url] .= '<priority>1</priority>' . PHP_EOL; + $site_map[$url] .= '</url>' . PHP_EOL; + } + + $htaccess_data = file_get_contents($dir . 'libraries/htaccess.conf'); + + /* cache */ + if ($settings['htaccess_cache']) + { + $htaccess_data = str_replace( + '{HTACCESS_CACHE}', + '<IfModule mod_deflate.c>' . PHP_EOL + . 'AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript' . PHP_EOL + . '</IfModule>' . PHP_EOL + . '<IfModule mod_expires.c>' . PHP_EOL + . 'ExpiresActive on' . PHP_EOL + . 'ExpiresDefault "access plus 1 year"' . PHP_EOL + . 'ExpiresByType text/css "access plus 1 year"' . PHP_EOL + . 'ExpiresByType application/json "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType application/xml "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType text/xml "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType image/x-icon "access plus 1 week"' . PHP_EOL + . 'ExpiresByType text/x-component "access plus 1 year"' . PHP_EOL + . 'ExpiresByType text/html "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType application/javascript "access plus 1 year"' . PHP_EOL + . 'ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType text/cache-manifest "access plus 0 seconds"' . PHP_EOL + . 'ExpiresByType audio/ogg "access plus 1 year"' . PHP_EOL + . 'ExpiresByType image/gif "access plus 1 year"' . PHP_EOL + . 'ExpiresByType image/jpeg "access plus 1 year"' . PHP_EOL + . 'ExpiresByType image/webp "access plus 1 year"' . PHP_EOL + . 'ExpiresByType image/png "access plus 1 year"' . PHP_EOL + . 'ExpiresByType video/mp4 "access plus 1 year"' . PHP_EOL + . 'ExpiresByType video/ogg "access plus 1 year"' . PHP_EOL + . 'ExpiresByType video/webm "access plus 1 year"' . PHP_EOL + . 'ExpiresByType application/atom+xml "access plus 1 hour"' . PHP_EOL + . 'ExpiresByType application/rss+xml "access plus 1 hour"' . PHP_EOL + . 'ExpiresByType application/font-woff "access plus 1 year"' . PHP_EOL + . 'ExpiresByType application/vnd.ms-fontobject "access plus 1 year"' . PHP_EOL + . 'ExpiresByType application/x-font-ttf "access plus 1 year"' . PHP_EOL + . 'ExpiresByType font/opentype "access plus 1 year"' . PHP_EOL + . 'ExpiresByType image/svg+xml "access plus 1 year"' . PHP_EOL + . '</IfModule>', + $htaccess_data + ); + } + else + { + $htaccess_data = str_replace( + '{HTACCESS_CACHE}', + '<IfModule mod_headers.c>' . PHP_EOL + . 'Header set Cache-Control "no-cache, no-store, must-revalidate"' . PHP_EOL + . 'Header set Pragma "no-cache"' . PHP_EOL + . 'Header set Expires 0' . PHP_EOL + . '</IfModule>', + $htaccess_data + ); + } + + /* języki w domenie głównej */ + $results = $mdb->select('pp_langs', ['id'], ['AND' => ['status' => 1, 'domain' => null], 'ORDER' => ['o' => 'ASC']]); + if (is_array($results)) foreach ($results as $row) + { + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $row['id'] . '/$ index.php?a=change_language&id=' . $row['id'] . ' [L]'; + } + + $htaccess_data .= PHP_EOL; + + $results = $mdb->select('pp_langs', ['id', 'start', 'domain', 'main_domain'], ['status' => 1, 'ORDER' => ['o' => 'ASC']]); + if (is_array($results)) foreach ($results as $row) + { + $row['domain'] ? $url_tmp = $row['domain'] : $url_tmp = $url; + + !$row['start'] ? $language_link = $row['id'] . '/' : $language_link = ''; + + $results2 = $mdb->select( + 'pp_pages_langs', + ['[><]pp_pages' => ['page_id' => 'id']], + ['seo_link', 'title', 'page_id', 'noindex', 'start', 'page_type'], + ['AND' => ['status' => 1, 'lang_id' => $row['id'], 'block_direct_access' => 0], 'ORDER' => ['start' => 'DESC', 'o' => 'ASC']] + ); + if (is_array($results2)) foreach ($results2 as $row2) + { + if ($row2['title']) + { + /* sitemap.xml */ + if ($row2['page_type'] != 3 and !$row2['noindex']) + { + $site_map[$url_tmp] .= '<url>' . PHP_EOL; + + if ($row2['seo_link']) + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . \S::seo($row2['seo_link']); + + $site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '</loc>' . PHP_EOL; + } + else + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']); + + $site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $seo . '</loc>' . PHP_EOL; + } + + $site_map[$url_tmp] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL; + $site_map[$url_tmp] .= '<changefreq>daily</changefreq>' . PHP_EOL; + + $row['start'] ? $priority = 1 : $priority = 0.8; + + $site_map[$url_tmp] .= '<priority>' . $priority . '</priority>' . PHP_EOL; + $site_map[$url_tmp] .= '</url>' . PHP_EOL; + } + + /* robotx.txt */ + if ($row2['noindex'] and $row2['page_type'] != 3) + { + $robots .= 'User-agent: GoogleBot' . PHP_EOL; + + if ($row2['seo_link']) + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . \S::seo($row2['seo_link']); + + $robots .= 'Disallow: /' . $seo . '$' . PHP_EOL; + $robots .= 'Disallow: /' . $seo . '/s/*' . PHP_EOL; + } + else + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']); + + $robots .= 'Disallow: /' . $seo . '$' . PHP_EOL; + $robots .= 'Disallow: /' . $seo . '/s/*$' . PHP_EOL; + } + } + + /* htaccess */ + if ($row2['page_type'] != 3) + { + if ( $row['start'] and $row2['start'] ) + { + $htaccess_data .= PHP_EOL . 'RewriteRule ^$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]' . PHP_EOL; + + if ( $row2['seo_link'] ) + { + $htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/' . \S::seo( $row2['seo_link'] ) . '(|/)$'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]'; + + $htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/' . \S::seo($row2['seo_link']) . '/s/1$'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]'; + } + else + { + $htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/s-' . $row2['page_id'] . '-' . \S::seo($row2['title']) . '$'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]'; + + $htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} ^/s-' . $row2['page_id'] . '-' . \S::seo($row2['title']) . '-s-1$'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^(.*)$ ' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . ' [R=301,L]'; + } + + $htaccess_data .= PHP_EOL . 'RewriteCond %{REQUEST_URI} "^/$"'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . ' [L]'; + + $htaccess_data .= PHP_EOL; + } + + if ($row2['seo_link']) + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row[id], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . \S::seo($row2['seo_link']); + + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/1(|/)$ ' . $seo . ' [R=301,L]'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1&%{QUERY_STRING} [L]'; + } + else + { + if ($settings['links_structure']) + $seo = \admin\factory\Pages::google_url_preview($row2['page_id'], $row2['title'], $row['id'], 0, 0, $row2['seo_link'], $language_link); + else + $seo = $language_link . 's-' . $row2['page_id'] . '-' . \S::seo($row2['title']); + + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/1(|/)$ ' . $seo . ' [R=301,L]'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $seo . '/s/([0-9]+)(|/)$ index.php?a=page&id=' . $row2['page_id'] . '&lang=' . $row['id'] . '&bs=$1&%{QUERY_STRING} [L]'; + } + $htaccess_data .= PHP_EOL; + } + } + } + + $results2 = $mdb->select( + 'pp_articles_langs', + ['[><]pp_articles' => ['article_id' => 'id']], + ['seo_link', 'title', 'article_id', 'noindex', 'copy_from', 'block_direct_access'], + ['AND' => ['status' => 1, 'lang_id' => $row['id']]] + ); + if (is_array($results2)) foreach ($results2 as $row2) + { + $domain = \S::get_language_domain($row['id']); + + if ($row2['copy_from'] != null) + { + $results_tmp = $mdb->get( + 'pp_articles_langs', + [ + 'seo_link', + 'title' + ], + [ + 'AND' => [ + 'article_id' => $row2['article_id'], + 'lang_id' => $row2['copy_from'] + ] + ] + ); + $row2['seo_link'] = $results_tmp['seo_link']; + $row2['title'] = $results_tmp['title']; + } + + /* sitemap */ + if (!$row2['block_direct_access'] and $row2['title']) + { + $site_map[$url_tmp] .= '<url>' . PHP_EOL; + if ($row2['seo_link']) + $site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . \S::seo($row2['seo_link']) . '</loc>' . PHP_EOL; + else + $site_map[$url_tmp] .= '<loc>' . $domain_prefix . '://' . $www . $url_tmp . '/' . $language_link . 'a-' . $row2['article_id'] . '-' . self::seo($row2['title']) . '</loc>' . PHP_EOL; + $site_map[$url_tmp] .= '<lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL; + $site_map[$url_tmp] .= '<changefreq>daily</changefreq>' . PHP_EOL; + $site_map[$url_tmp] .= '<priority>0.6</priority>' . PHP_EOL; + $site_map[$url_tmp] .= '</url>' . PHP_EOL; + } + + /* robots.txt */ + if ($row2['noindex']) + { + $robots .= 'User-agent: GoogleBot' . PHP_EOL; + if ($row2['seo_link']) + $robots .= 'Disallow: /' . $row2['seo_link'] . '$' . PHP_EOL; + else + $robots .= 'Disallow: /a-' . $row2['article_id'] . '-' . self::seo($row2['title']) . '$' . PHP_EOL; + } + + if (!$row2['block_direct_access']) + { + if ($row2['seo_link']) + { + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . \S::seo($row2['seo_link']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]'; + } + else if ($row2['title'] != null) + { + $htaccess_data .= PHP_EOL . 'RewriteRule ^' . $language_link . 'a-' . $row2['article_id'] . '-' . \S::seo($row2['title']) . '(|/)$ index.php?article=' . $row2['article_id'] . '&lang=' . $row['id'] . '&%{QUERY_STRING} [L]'; + } + $htaccess_data .= PHP_EOL; + } + } + } + + $results = $mdb->query('SELECT ' + . 'name, tag_id ' + . 'FROM ' + . 'pp_tags AS pt ' + . 'INNER JOIN ' + . 'pp_articles_tags AS pat ON pat.tag_id = pt.id ' + . 'GROUP BY ' + . 'tag_id')->fetchAll(); + if (is_array($results) and !empty($results)) foreach ($results as $row) + { + $htaccess_data .= PHP_EOL . 'RewriteCond %{QUERY_STRING} !=""'; + $htaccess_data .= PHP_EOL . 'RewriteRule tag/' . \S::seo( $row['name'] ) . '(|/) %{REQUEST_URI}? [R=301,L]'; + $htaccess_data .= PHP_EOL . 'RewriteRule ^tag/' . \S::seo( $row['name'] ) . '(|/)$ index.php?tag=' . $row['tag_id'] . ' [L]'; + } + + $results = $mdb->get('pp_settings', 'value', ['param' => 'htaccess']); + if ($results) + $htaccess_data .= PHP_EOL . $results; + + if (file_exists('../libraries/htaccess.ini')) + $htaccess_data .= PHP_EOL . file_get_contents('../libraries/htaccess.ini'); + + $results = $mdb->get('pp_settings', 'value', ['param' => 'robots']); + if ($results) + $robots .= PHP_EOL . $results; + + if (is_array($available_domains) and !empty($available_domains)) + { + foreach ($available_domains as $domain) + $site_map[$domain['domain']] .= '</urlset>'; + } + else + $site_map[$url] .= '</urlset>'; + + $redirect = 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL; + if ( $settings['ssl'] ) + { + $redirect .= 'RewriteCond %{HTTPS} off' . PHP_EOL + . 'RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]'; + } + else + { + $redirect .= 'RewriteCond %{HTTPS} on' . PHP_EOL + . 'RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]'; + } + + $redirect .= 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL; + if ( $settings['link_version'] ) + { + $redirect .= 'RewriteCond %{HTTP_HOST} !^www\. [NC]' . PHP_EOL + . 'RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]' . PHP_EOL; + } + else + { + $redirect .= 'RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]' . PHP_EOL + . 'RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [L,R=301]' . PHP_EOL; + } + + $redirect .= 'RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)$'. PHP_EOL; + if ( $settings['url_version'] ) + { + $redirect .= 'RewriteCond %{REQUEST_URI} !^/admin(?:/.*)?$ [NC]' . PHP_EOL + . 'RewriteRule ^(.+)/$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1 [L,R=301]' . PHP_EOL; + } + else + { + $redirect .= 'RewriteCond %{REQUEST_URI} !^/admin(/|$) [NC]' . PHP_EOL + . 'RewriteCond %{REQUEST_FILENAME} !-f' . PHP_EOL + . 'RewriteCond %{REQUEST_FILENAME} !-d' . PHP_EOL + . 'RewriteCond %{REQUEST_URI} !/$' . PHP_EOL + . 'RewriteRule ^(.+)$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1/ [L,R=301]' . PHP_EOL; + } + + $htaccess_data = str_replace( '{REDIRECT}', $redirect, $htaccess_data ); + + $additional_classes = file_get_contents('../libraries/additional-classes.ini'); + $additional_classes = explode(PHP_EOL, $additional_classes); + $additional_classes = array_filter($additional_classes); + if (is_array($additional_classes) and !empty($additional_classes)) + { + foreach ($additional_classes as $class) + { + $classes .= 'RewriteCond %{REQUEST_URI} ^/' . trim($class) . '/(.*) [NC]' . PHP_EOL; + $classes .= 'RewriteRule ^([^/]*)/([^/]*)(|/([^/]*))$ index.php?module=$1&action=$2&$4 [L]' . PHP_EOL; + } + } + $htaccess_data = str_replace('{ADDITIONAL_CLASSES}', $classes, $htaccess_data); + + /* pozostałe linki */ + $htaccess_data .= PHP_EOL; + $htaccess_data .= 'RewriteRule ^newsletter/signin$ index.php?module=newsletter&action=signin [L]' . PHP_EOL; + $htaccess_data .= 'RewriteRule ^newsletter/confirm/hash=(.*)$ index.php?module=newsletter&action=confirm&hash=$1 [L]' . PHP_EOL; + $htaccess_data .= 'RewriteRule ^newsletter/unsubscribe/hash=(.*)$ index.php?module=newsletter&action=unsubscribe&hash=$1 [L]' . PHP_EOL; + + /* pixieset */ + $results = $mdb->select('pp_articles', 'id', ['pixieset' => 1]); + if (is_array($results) and count($results)) + { + $pixieset = 'RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?' . $url_tmp . ' [NC]' . PHP_EOL; + $pixieset .= 'RewriteCond %{REQUEST_URI} ^('; + foreach ($results as $row) + { + $pixieset .= '/upload/article_images/article_' . $row . '/'; + if ($row != end($results)) + $pixieset .= '|'; + } + $pixieset .= ') [NC]' . PHP_EOL . 'RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]' . PHP_EOL; + + $htaccess_data = str_replace('{PIXIESET]', $pixieset, $htaccess_data); + } + else + { + $htaccess_data = str_replace('{PIXIESET]', '', $htaccess_data); + } + + $fp = fopen($dir . '.htaccess', 'w'); + fwrite($fp, $htaccess_data); + fclose($fp); + + $class = '\admin\factory\Sitemap'; + $action = 'sitemap'; + + if (class_exists($class) and method_exists(new $class, $action)) + $site_map = call_user_func_array(array($class, $action), array($site_map, $available_domains, $domain_prefix, $www, $url)); + + if (is_array($available_domains) and !empty($available_domains)) + { + foreach ($available_domains as $domain) + { + $fp = fopen($dir . 'sitemap_' . \S::seo($domain['domain']) . '.xml', 'w'); + fwrite($fp, $site_map[$domain['domain']]); + fclose($fp); + } + } + else + { + $fp = fopen($dir . 'sitemap.xml', 'w'); + fwrite($fp, $site_map[$url]); + fclose($fp); + } + + $fp = fopen($dir . 'robots.txt', 'w'); + fwrite($fp, $robots); + fclose($fp); + } + + public static function seo( $val, $delete_rhombs = false ) + { + $array_rep1 = array('*', '_', ' ', '+', '"', "'", '?', '-', ',', '!', '~', '<', '>', '@', '#', '$', '%', '^', '&', '*' . '(', ')' . '-', '=', '\\', '|', '[', ']', ':', '(', ')'); + $array_rep2 = array('-', '-', '-', '-', '', '', '', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-'); + $val = self::noPl($val); + $val = str_replace($array_rep1, $array_rep2, $val); + if ($delete_rhombs) + $val = str_replace('/', '', $val); + + $val = strtolower($val); + $val = preg_replace('/(-){2,}/', '-', $val); + $val = ltrim($val, '-'); + $val = rtrim($val, '-'); + return $val; + } + + public static function noPL($string) + { + $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128)=> 'A', chr(195).chr(129) => 'A', + chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A', + chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A', + chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E', + chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E', + chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I', + chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I', + chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N', + chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O', + chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O', + chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U', + chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U', + chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y', + chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a', + chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a', + chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a', + chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c', + chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e', + chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e', + chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i', + chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i', + chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o', + chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o', + chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o', + chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u', + chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u', + chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y', + chr(195) . chr(191) => 'y', + // Decompositions for Latin Extended-A + chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a', + chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a', + chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a', + chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c', + chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c', + chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c', + chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c', + chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd', + chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd', + chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e', + chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e', + chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e', + chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e', + chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e', + chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g', + chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g', + chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g', + chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g', + chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h', + chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h', + chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i', + chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i', + chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i', + chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i', + chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i', + chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij', + chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j', + chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k', + chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L', + chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L', + chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L', + chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L', + chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L', + chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N', + chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N', + chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N', + chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N', + chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N', + chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o', + chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o', + chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o', + chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe', + chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r', + chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r', + chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r', + chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's', + chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's', + chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's', + chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's', + chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't', + chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't', + chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't', + chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u', + chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u', + chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u', + chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u', + chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u', + chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u', + chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w', + chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y', + chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z', + chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z', + chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z', + chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's' + ); + + $string = strtr($string, $chars); + + $table = array( + "А" => "a", "Б" => "b", "В" => "v", "Г" => "g", "Д" => "d", + "Е" => "e", "Ё" => "yo", "Ж" => "zh", "З" => "z", "И" => "i", + "Й" => "j", "К" => "k", "Л" => "l", "М" => "m", "Н" => "n", + "О" => "o", "П" => "p", "Р" => "r", "С" => "s", "Т" => "t", + "У" => "u", "Ф" => "f", "Х" => "kh", "Ц" => "ts", "Ч" => "ch", + "Ш" => "sh", "Щ" => "sch", "Ъ" => "", "Ы" => "y", "Ь" => "", + "Э" => "e", "Ю" => "yu", "Я" => "ya", "а" => "a", "б" => "b", + "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ё" => "yo", + "ж" => "zh", "з" => "z", "и" => "i", "й" => "j", "к" => "k", + "л" => "l", "м" => "m", "н" => "n", "о" => "o", "п" => "p", + "р" => "r", "с" => "s", "т" => "t", "у" => "u", "ф" => "f", + "х" => "kh", "ц" => "ts", "ч" => "ch", "ш" => "sh", "щ" => "sch", + "ъ" => "", "ы" => "y", "ь" => "", "э" => "e", "ю" => "yu", + "я" => "ya", " " => "-", "." => "", "," => "", + ":" => "", ";" => "", "—" => "", "–" => "-" + ); + + $string = strtr($string, $table); + + return $string; + } + + public static function delete_cache() + { + \S::delete_dir('../cache/'); + \S::delete_dir('../temp/'); + \S::delete_dir('temp/'); + } + + public static function delete_dir($dir) + { + if (is_file($dir)) + return @unlink($dir); + + else if (is_dir($dir)) + { + $scan = glob(rtrim($dir, '/') . '/*'); + + if (is_array($scan)) + foreach ($scan as $index => $path) + self::delete_dir($path); + + if (is_dir($dir) && self::is_empty_dir($dir) and $dir != '../temp/') + return @rmdir($dir); + } + } + + public static function is_empty_dir($dir) + { + return (($files = @scandir($dir)) && count($files) <= 2); + } + public static function email_check($email) + { + return filter_var($email, FILTER_VALIDATE_EMAIL); + } + public static function send_email( $email, $subject, $text, $replay = '', $file = '' ) + { + global $settings; + + if ( file_exists('libraries/phpmailer/class.phpmailer.php') ) require_once 'libraries/phpmailer/class.phpmailer.php'; + if ( file_exists('libraries/phpmailer/class.smtp.php') ) require_once 'libraries/phpmailer/class.smtp.php'; + if ( file_exists('../libraries/phpmailer/class.phpmailer.php') ) require_once '../libraries/phpmailer/class.phpmailer.php'; + if ( file_exists('../libraries/phpmailer/class.smtp.php') ) require_once '../libraries/phpmailer/class.smtp.php'; + if ( $email and $subject ) + { + $mail = new PHPMailer(); + $mail->IsSMTP(); + $mail->SMTPAuth = true; + $mail->Host = $settings['email_host']; + $mail->Port = $settings['email_port']; + $mail->Username = $settings['email_login']; + $mail->Password = $settings['email_password']; + $mail->CharSet = "UTF-8"; + $mail->SMTPOptions = array( + 'ssl' => array( + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ) + ); + + if (self::email_check($replay)) + { + $mail->AddReplyTo($replay, $replay); + $mail->SetFrom($settings['contact_email'], $settings['contact_email']); + } + else + { + $mail->AddReplyTo($settings['contact_email'], $settings['firm_name']); + $mail->SetFrom($settings['contact_email'], $settings['firm_name']); + } + + $mail->AddAddress($email, ''); + $mail->Subject = $subject; + $mail->Body = $text; + if (is_array($file)) + { + foreach ($file as $file_tmp) + { + if (file_exists($file_tmp)) + $mail->AddAttachment($file_tmp); + } + } + else + { + if (file_exists($file)) + $mail->AddAttachment($file); + } + $mail->IsHTML(true); + return $mail -> Send(); + } + return true; + } +} diff --git a/autoload/class.Scontainer.php b/autoload/class.Scontainer.php new file mode 100644 index 0000000..b867571 --- /dev/null +++ b/autoload/class.Scontainer.php @@ -0,0 +1,45 @@ +<?php +class Scontainer implements \ArrayAccess +{ + + static public function updateByFrontEditor( $scontainer_id, $content, $lang_id ) + { + global $mdb; + return $mdb -> update( 'pp_scontainers_langs', [ + 'text' => $content + ], [ + 'AND' => [ 'container_id' => $scontainer_id, 'lang_id' => $lang_id ] + ] ); + } + + public function __get( $variable ) + { + if ( array_key_exists( $variable, $this -> data ) ) + return $this -> $variable; + } + + public function __set( $variable, $value ) + { + $this -> $variable = $value; + } + + public function offsetExists( $offset ) + { + return isset( $this -> $offset ); + } + + public function offsetGet( $offset ) + { + return $this -> $offset; + } + + public function offsetSet( $offset, $value ) + { + $this -> $offset = $value; + } + + public function offsetUnset( $offset ) + { + unset( $this -> $offset ); + } +} \ No newline at end of file diff --git a/autoload/class.Tpl.php b/autoload/class.Tpl.php new file mode 100644 index 0000000..1227612 --- /dev/null +++ b/autoload/class.Tpl.php @@ -0,0 +1,73 @@ +<?php +class Tpl +{ + protected $dir = 'templates/'; + protected $vars = array(); + + function __construct( $dir = null ) + { + if ( $dir !== null ) + $this -> dir = $dir; + } + + public static function view( $file, $values = '' ) + { + $tpl = new \Tpl; + if ( is_array( $values ) ) foreach ( $values as $key => $val ) + $tpl -> $key = $val; + return $tpl -> render( $file ); + } + + public function secureHTML( $val ) + { + $out = stripslashes( $val ); + $out = str_replace( "'", "'", $out ); + $out = str_replace( '"', """, $out ); + $out = str_replace( "<", "<", $out ); + $out = str_replace( ">", ">", $out ); + return $out; + } + + public function render( $file ) + { + if ( file_exists( 'templates_user/' . $file . '.php' ) ) + { + ob_start(); + include 'templates_user/' . $file . '.php'; + $out = ob_get_contents(); + ob_end_clean(); + + return $out; + } + else if ( file_exists( 'templates/' . $file . '.php' ) ) + { + ob_start(); + include 'templates/' . $file . '.php'; + $out = ob_get_contents(); + ob_end_clean(); + + return $out; + } + else if ( file_exists( $file . '.php' ) ) + { + ob_start(); + include $file . '.php'; + $out = ob_get_contents(); + ob_end_clean(); + + return $out; + } + else + return '<div class="alert alert-danger" role="alert">Nie znaleziono pliku widoku: <b>' . $this -> dir . $file . '.php</b>'; + } + + public function __set( $name, $value ) + { + $this -> vars[ $name ] = $value; + } + + public function __get( $name ) + { + return $this -> vars[ $name ]; + } +} diff --git a/autoload/class.geoplugin.php b/autoload/class.geoplugin.php new file mode 100644 index 0000000..05391bd --- /dev/null +++ b/autoload/class.geoplugin.php @@ -0,0 +1,154 @@ +<?php +/* +This PHP class is free software: you can redistribute it and/or modify +the code under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +However, the license header, copyright and author credits +must not be modified in any form and always be displayed. + +This class is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +@author geoPlugin (gp_support@geoplugin.com) +@copyright Copyright geoPlugin (gp_support@geoplugin.com) +$version 1.01 + + +This PHP class uses the PHP Webservice of http://www.geoplugin.com/ to geolocate IP addresses + +Geographical location of the IP address (visitor) and locate currency (symbol, code and exchange rate) are returned. + +See http://www.geoplugin.com/webservices/php for more specific details of this free service + +*/ + +class geoPlugin { + + //the geoPlugin server + var $host = 'http://www.geoplugin.net/php.gp?ip={IP}&base_currency={CURRENCY}'; + + //the default base currency + var $currency = 'USD'; + + //initiate the geoPlugin vars + var $ip = null; + var $city = null; + var $region = null; + var $areaCode = null; + var $dmaCode = null; + var $countryCode = null; + var $countryName = null; + var $continentCode = null; + var $latitude = null; + var $longitude = null; + var $currencyCode = null; + var $currencySymbol = null; + var $currencyConverter = null; + + function geoPlugin() { + + } + + function locate($ip = null) { + + global $_SERVER; + + if ( is_null( $ip ) ) { + $ip = $_SERVER['REMOTE_ADDR']; + } + + $host = str_replace( '{IP}', $ip, $this->host ); + $host = str_replace( '{CURRENCY}', $this->currency, $host ); + + $data = array(); + + $response = $this->fetch($host); + + $data = unserialize($response); + + //set the geoPlugin vars + $this->ip = $ip; + $this->city = $data['geoplugin_city']; + $this->region = $data['geoplugin_region']; + $this->areaCode = $data['geoplugin_areaCode']; + $this->dmaCode = $data['geoplugin_dmaCode']; + $this->countryCode = $data['geoplugin_countryCode']; + $this->countryName = $data['geoplugin_countryName']; + $this->continentCode = $data['geoplugin_continentCode']; + $this->latitude = $data['geoplugin_latitude']; + $this->longitude = $data['geoplugin_longitude']; + $this->currencyCode = $data['geoplugin_currencyCode']; + $this->currencySymbol = $data['geoplugin_currencySymbol']; + $this->currencyConverter = $data['geoplugin_currencyConverter']; + + } + + function fetch($host) { + + if ( function_exists('curl_init') ) { + + //use cURL to fetch data + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $host); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0'); + $response = curl_exec($ch); + curl_close ($ch); + + } else if ( ini_get('allow_url_fopen') ) { + + //fall back to fopen() + $response = file_get_contents($host, 'r'); + + } else { + + trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR); + return; + + } + + return $response; + } + + function convert($amount, $float=2, $symbol=true) { + + //easily convert amounts to geolocated currency. + if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) { + trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE); + return $amount; + } + if ( !is_numeric($amount) ) { + trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING); + return $amount; + } + if ( $symbol === true ) { + return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float ); + } else { + return round( ($amount * $this->currencyConverter), $float ); + } + } + + function nearby($radius=10, $limit=null) { + + if ( !is_numeric($this->latitude) || !is_numeric($this->longitude) ) { + trigger_error ('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE); + return array( array() ); + } + + $host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}"; + + if ( is_numeric($limit) ) + $host .= "&limit={$limit}"; + + return unserialize( $this->fetch($host) ); + + } + + +} + +?> diff --git a/autoload/controls/class.Projects.php b/autoload/controls/class.Projects.php new file mode 100644 index 0000000..08e5ce6 --- /dev/null +++ b/autoload/controls/class.Projects.php @@ -0,0 +1,206 @@ +<?php +namespace controls; + +class Projects +{ + public static function clear_project() + { + if ( \factory\Projects::clear_project( \S::get( 'id' ) ) ) + \S::alert( 'Linki zostały usunięte z projektu.' ); + header( 'Location: /projects/view_list/' ); + exit; + } + + public static function refresh() + { + if ( \factory\Projects::refresh( \S::get( 'id' ) ) ) + \S::alert( 'Projekt został wysłany do ponownego sprawdzenia.' ); + header( 'Location: /projects/view_list/' ); + exit; + } + + public static function delete() + { + if ( \factory\Projects::delete_project( \S::get( 'gdelete' ) ) ) + echo json_encode( array( 'status' => 'ok', 'msg' => 'Projekt został usunięty.' ) ); + else + echo json_encode( array( 'status' => 'ok', 'msg' => 'Podczas usuwania projektu wystąpił błąd. Proszę spróbować ponownie.' ) ); + exit; + } + + public static function hide_url() + { + if ( \factory\Projects::hide_url( \S::get( 'id' ) ) ) + \S::alert( 'Linki zostały ukryte.' ); + header( 'Location: /projects/details/&id=' . \S::get( 'project_id' ) ); + exit; + } + + public static function view_list() + { + return \view\Projects::view_list(); + } + + public static function links_external() + { + if ( $_GET['bs'] != '' ) + { + \S::set_session( 'project-bs', $_GET['bs'] ); + header( 'Location: /projects/links_external/&id=' . \S::get( 'id' ) ); + exit; + } + + return \view\Projects::links_external( \S::get( 'id' ), \S::get_session( 'project-bs' ) ); + } + + public static function details() + { + if ( $_GET['mke'] != '' ) + { + \S::set_session( 'project-filtr-mke', $_GET['mke'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['mde'] != '' ) + { + \S::set_session( 'project-filtr-mde', $_GET['mde'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['mte'] != '' ) + { + \S::set_session( 'project-filtr-mte', $_GET['mte'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['irb'] != '' ) + { + \S::set_session( 'project-filtr-irb', $_GET['irb'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['grb'] != '' ) + { + \S::set_session( 'project-filtr-grb', $_GET['grb'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['wor'] != '' ) + { + \S::set_session( 'project-filtr-wor', $_GET['wor'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['wir'] != '' ) + { + \S::set_session( 'project-filtr-wir', $_GET['wir'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['hid'] != '' ) + { + \S::set_session( 'project-filtr-hid', $_GET['hid'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['edf'] != '' ) + { + \S::set_session( 'project-filtr-edf', $_GET['edf'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( \S::get( 'filtr_edfrops' ) != '' ) + { + \S::set_session( 'project-filtr-edfrops', $_GET['filtr_edfrops'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_POST['url'] != '' ) + { + \S::set_session( 'project-filtr-url', $_POST['url'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['bs'] != '' ) + { + \S::set_session( 'project-bs', $_GET['bs'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['f404'] != '' ) + { + \S::set_session( 'project-filtr-f404', $_GET['f404'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['filtr_tables'] != '' ) + { + \S::set_session( 'project-filtr-tables', $_GET['filtr_tables'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['filtr_iframe'] != '' ) + { + \S::set_session( 'project-filtr-iframe', $_GET['filtr_iframe'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['filtr_h1'] != '' ) + { + \S::set_session( 'project-filtr-h1', $_GET['filtr_h1'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['filtr_images_alt'] != '' ) + { + \S::set_session( 'project-filtr-images-alt', $_GET['filtr_images_alt'] ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + if ( $_GET['furl'] == 'clear' ) + { + \S::delete_session( 'project-filtr-url' ); + header( 'Location: /projects/details/&id=' . \S::get( 'id' ) ); + exit; + } + + + return \view\Projects::details( + \S::get( 'id' ), + \S::get_session( 'project-bs' ), + \S::get_session( 'project-filtr-mke' ), + \S::get_session( 'project-filtr-mde' ), + \S::get_session( 'project-filtr-mte' ), + \S::get_session( 'project-filtr-irb' ), + \S::get_session( 'project-filtr-grb' ), + \S::get_session( 'project-filtr-url' ), + \S::get_session( 'project-filtr-wor' ), + \S::get_session( 'project-filtr-wir' ), + \S::get_session( 'project-filtr-hid' ), + \S::get_session( 'project-filtr-edf' ), + \S::get_session( 'project-filtr-edfrops' ), + \S::get_session( 'project-filtr-f404' ), + \S::get_session( 'project-filtr-tables' ), + \S::get_session( 'project-filtr-iframe' ), + \S::get_session( 'project-filtr-h1' ), + \S::get_session( 'project-filtr-images-alt' ) + ); + } +} diff --git a/autoload/factory/class.Projects.php b/autoload/factory/class.Projects.php new file mode 100644 index 0000000..6e1afe5 --- /dev/null +++ b/autoload/factory/class.Projects.php @@ -0,0 +1,281 @@ +<?php +namespace factory; + +class Projects +{ + public static $limit = 25; + + public static function clear_project( $project_id ) + { + global $mdb; + + $mdb -> delete( 'project_links_external', [ 'project_id' => $project_id ] ); + $mdb -> delete( 'project_links_internal', [ 'project_id' => $project_id ] ); + return $mdb -> update( 'project_links_internal', [ 'visited' => 0 ], [ 'project_id' => $project_id ] ); + } + + public static function refresh( $project_id ) + { + global $mdb; + + $mdb -> delete( 'project_links_internal', [ 'AND' => [ 'project_id' => $project_id, 'parent_id[!]' => null ] ] ); + $mdb -> delete( 'project_links_external', [ 'project_id' => $project_id ] ); + $mdb -> update( 'project_links_internal', [ 'visited' => 0 ], [ 'project_id' => $project_id ] ); + + return true; + } + + public static function count_links_external( $project_id ) + { + global $mdb; + return $mdb -> query( 'SELECT ' + . 'COUNT( DISTINCT(url) ) AS c ' + . 'FROM ' + . 'project_links_external ' + . 'WHERE ' + . 'project_id = ' . $project_id ) -> fetchAll(); + } + + public static function project_details( $project_id ) + { + global $mdb; + return $mdb -> get( 'projects', '*', [ 'id' => $project_id ] ); + } + + public static function links_external( $bs, $project_id ) + { + global $mdb; + + $results = $mdb -> query( 'SELECT ' + . 'DISTINCT(url) AS url ' + . 'FROM ' + . 'project_links_external ' + . 'WHERE ' + . 'project_id = ' . $project_id . ' ' + . "ORDER BY " + . "url ASC " + . "LIMIT " . ( $bs - 1 ) * self::$limit . "," . self::$limit ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $urls = ''; + + $results2 = $mdb -> query( 'SELECT ' + . 'pli.url AS url ' + . 'FROM ' + . 'project_links_external AS ple ' + . 'INNER JOIN project_links_internal AS pli ON pli.id = ple.link_id ' + . 'WHERE ' + . 'ple.url = \'' . $row['url'] . '\'' ) -> fetchAll(); + if ( is_array( $results2 ) and !empty( $results2 ) ) foreach ( $results2 as $row2 ) + $urls[] = $row2['url']; + + $row['urls'] = $urls; + + $links[] = $row; + } + return $links; + } + + public static function delete_project( $project_id ) + { + global $mdb; + + $mdb -> delete( 'project_links_internal', [ 'project_id' => $project_id ] ); + $mdb -> delete( 'project_links_external', [ 'project_id' => $project_id ] ); + $mdb -> delete( 'projects', [ 'id' => $project_id ] ); + return true; + } + + public static function hide_url( $links ) + { + global $mdb; + + $links = explode( ',', $links ); + + if ( is_array( $links ) ) foreach ( $links as $link ) + $mdb -> update( 'project_links_internal', [ 'hide' => 1 ], [ 'id' => $link ] ); + + return true; + } + + public static function links_visited( $project_id ) + { + global $mdb; + return $mdb -> count( 'project_links_internal', [ 'AND' => [ 'project_id' => $project_id, 'deleted' => 0, 'visited' => 1 ] ] ); + } + + public static function count_links_internal_all( $project_id ) + { + global $mdb; + return $mdb -> count( 'project_links_internal', [ 'AND' => [ 'project_id' => $project_id, 'deleted' => 0 ] ] ); + } + + public static function count_links_internal( + $project_id, $filtr_mke, $filtr_mde, $filtr_mte, $filtr_irb, $filtr_grb, $filtr_url, $filtr_wor, $filtr_wir, $filtr_hid, $filtr_edf, $filtr_edfrops, $filtr_404, $filtr_tables, $filtr_iframe, $filtr_h1, + $filtr_images_alt + ) + { + global $mdb; + + if ( $filtr_mke ) + $sql .= " AND ( meta_keywords = ''"; + + if ( $filtr_mde ) + $sql ? $sql .= " OR meta_description = ''" : $sql .= " AND ( meta_description = ''"; + + if ( $filtr_mte ) + $sql ? $sql .= " OR title = ''" : $sql .= " AND ( title = ''"; + + if ( $filtr_irb ) + $sql ? $sql .= " OR meta_robots LIKE '%noindex%'" : $sql .= " AND ( meta_robots LIKE '%noindex%'"; + + if ( $filtr_grb ) + $sql ? $sql .= " OR meta_robots LIKE '%noindex%' OR meta_googlebot LIKE '%noindex%'" : $sql .= " AND ( ( meta_robots LIKE '%noindex%' OR meta_googlebot LIKE '%noindex%' )"; + + if ( $filtr_url ) + $sql ? $sql .= " OR pli.url LIKE '%" . addslashes( $filtr_url ) . "%'" : $sql .= " AND ( pli.url LIKE '%" . addslashes( $filtr_url ) . "%'"; + + if ( $filtr_wor ) + $sql ? $sql .= " OR response_code = '200'" : $sql .= " AND ( response_code = '200'"; + + if ( $filtr_wir ) + $sql ? $sql .= " OR response_code != '200'" : $sql .= " AND ( response_code != '200'"; + + if ( $filtr_404 ) + $sql ? $sql .= " OR response_code = '404'" : $sql .= " AND ( response_code = '404'"; + + $filtr_hid ? $hidden = '( hide = 1 OR hide = 0 )' : $hidden = 'hide = 0'; + + if ( $filtr_edf ) + $sql2 = ' AND id IN ( SELECT DISTINCT( link_id ) FROM project_links_external WHERE project_id = ' . $project_id . ' AND nofollow = 0 ) '; + + if ( $filtr_edfrops ) + $sql2 = ' AND id IN ( SELECT DISTINCT( link_id ) FROM project_links_external WHERE project_id = ' . $project_id . ' AND title NOT LIKE \'%(Link prowadzi do nowej strony)%\' ) '; + + if ( $filtr_tables ) + $sql ? $sql .= " OR have_table = 1" : $sql .= " AND ( have_table = '1'"; + + if ( $filtr_iframe ) + $sql ? $sql .= " OR have_iframe = 1" : $sql .= " AND ( have_iframe = '1'"; + + if ( $filtr_h1 ) + $sql ? $sql .= " OR have_h1 = 0" : $sql .= " AND ( have_h1 = '0'"; + + if ( $filtr_images_alt ) + $sql ? $sql .= " OR have_images_without_alt = 1" : $sql .= " AND ( have_images_without_alt = 1"; + + if ( $sql ) + $sql .= " )"; + + return $mdb -> query( "SELECT " + . "COUNT(pli.id) AS c " + . "FROM " + . "project_links_internal AS pli " + . "WHERE " + . "pli.project_id = " . $project_id . $sql . " AND " . $hidden . " AND deleted = 0 " . $sql2 ) -> fetchAll(); + } + + public static function links_internal_list( + $bs, $project_id, $filtr_mke, $filtr_mde, $filtr_mte, $filtr_irb, $filtr_grb, $filtr_url, $filtr_wor, $filtr_wir, $filtr_hid, $filtr_edf, $filtr_edfrops, $filtr_404, $filtr_tables, $filtr_iframe, $filtr_h1, + $filtr_images_alt ) + { + global $mdb; + + if ( $filtr_mke ) + $sql .= " AND ( meta_keywords = ''"; + + if ( $filtr_mde ) + $sql ? $sql .= " OR meta_description = ''" : $sql .= " AND ( meta_description = ''"; + + if ( $filtr_mte ) + $sql ? $sql .= " OR pli.title = ''" : $sql .= " AND ( pli.title = ''"; + + if ( $filtr_irb ) + $sql ? $sql .= " OR meta_robots LIKE '%noindex%'" : $sql .= " AND ( meta_robots LIKE '%noindex%'"; + + if ( $filtr_grb ) + $sql ? $sql .= " OR meta_robots LIKE '%noindex%' OR meta_googlebot LIKE '%noindex%'" : $sql .= " AND ( ( meta_robots LIKE '%noindex%' OR meta_googlebot LIKE '%noindex%' )"; + + if ( $filtr_url ) + $sql ? $sql .= " OR pli.url LIKE '%" . addslashes( $filtr_url ) . "%'" : $sql .= " AND ( pli.url LIKE '%" . addslashes( $filtr_url ) . "%'"; + + if ( $filtr_wor ) + $sql ? $sql .= " OR response_code = '200'" : $sql .= " AND ( response_code = '200'"; + + if ( $filtr_wir ) + $sql ? $sql .= " OR response_code != '200'" : $sql .= " AND ( response_code != '200'"; + + if ( $filtr_404 ) + $sql ? $sql .= " OR response_code = '404'" : $sql .= " AND ( response_code = '404'"; + + if ( $filtr_tables ) + $sql ? $sql .= " OR have_table = 1" : $sql .= " AND ( have_table = 1"; + + if ( $filtr_iframe ) + $sql ? $sql .= " OR have_iframe = 1" : $sql .= " AND ( have_iframe = 1"; + + if ( $filtr_h1 ) + $sql ? $sql .= " OR have_h1 = 0" : $sql .= " AND ( have_h1 = 0"; + + if ( $filtr_images_alt ) + $sql ? $sql .= " OR have_images_without_alt = 1" : $sql .= " AND ( have_images_without_alt = 1"; + + $filtr_hid ? $hidden = '( hide = 1 OR hide = 0 )' : $hidden = 'hide = 0'; + + if ( $filtr_edf ) + { + $join = 'INNER JOIN '; + $sql ? $sql .= " AND nofollow = 0" : $sql .= " AND ( nofollow = 0"; + } + else + $join = 'LEFT JOIN '; + + if ( $filtr_edfrops ) + { + $join = 'INNER JOIN '; + $sql ? $sql .= " AND ple.title NOT LIKE '%(Link prowadzi do nowej strony)%'" : $sql .= " AND ( ple.title NOT LIKE '%(Link prowadzi do nowej strony)%'"; + // $sql = ' AND id IN ( SELECT DISTINCT( link_id ) FROM project_links_external WHERE project_id = ' . $project_id . ' AND title NOT LIKE \'%(Link prowadzi do nowej strony)%\' ) '; + } + else + $join = 'LEFT JOIN '; + + if ( $sql ) + $sql .= " )"; + // echo "SELECT " + // . "pli.id, pli.url, pli.title, ple.title as etitle, meta_keywords, meta_description, meta_robots, meta_googlebot, code_lenght, text_lenght, response_code, parent_id, canonical " + // . "FROM " + // . "project_links_internal AS pli " + // . $join . " project_links_external AS ple ON pli.id = ple.link_id " + // . "WHERE " + // . "pli.project_id = " . $project_id . $sql . " AND " . $hidden . " AND deleted = 0 " + // . "GROUP BY " + // . "pli.id " + // . "ORDER BY " + // . "url ASC " + // . "LIMIT " . ( $bs - 1 ) * self::$limit . "," . self::$limit; exit; + $results = $mdb -> query( "SELECT " + . "pli.id, pli.url, pli.title, ple.title as etitle, meta_keywords, meta_description, meta_robots, meta_googlebot, code_lenght, text_lenght, response_code, parent_id, canonical " + . "FROM " + . "project_links_internal AS pli " + . $join . " project_links_external AS ple ON pli.id = ple.link_id " + . "WHERE " + . "pli.project_id = " . $project_id . $sql . " AND " . $hidden . " AND deleted = 0 " + . "GROUP BY " + . "pli.id " + . "ORDER BY " + . "url ASC " + . "LIMIT " . ( $bs - 1 ) * self::$limit . "," . self::$limit ) -> fetchAll(); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $row['external_links'] = self::links_external_list( $row['id'] ); + $links[] = $row; + } + return $links; + } + + public static function links_external_list( $link_id ) + { + global $mdb; + return $mdb -> select( 'project_links_external', [ 'url', 'nofollow', 'title' ], [ 'link_id' => $link_id ] ); + } +} diff --git a/autoload/front/controls/class.Articles.php b/autoload/front/controls/class.Articles.php new file mode 100644 index 0000000..c8b0c3c --- /dev/null +++ b/autoload/front/controls/class.Articles.php @@ -0,0 +1,76 @@ +<?php +namespace front\controls; +class Articles +{ + public static function pixieset_save_favorite_images( $hash ) + { + return \front\factory\Articles::pixieset_save_favorite_images( $hash ); + } + + public static function pixieset_image_favorite( $image_id, $hash ) + { + return \front\factory\Articles::pixieset_image_favorite( $image_id, $hash ); + } + + public static function images_download( $hash ) + { + global $mdb; + + $results = $mdb -> query( 'SELECT * FROM (' + . 'SELECT id, MD5( CONCAT( id, date_add ) ) AS hash FROM pp_articles ) AS q1' + . ' WHERE hash = \'' . $hash . '\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); + if ( is_array( $results ) and count( $results ) ) foreach ( $results as $row ) + { + $zip = new \ZipArchive; + $tmp_file = 'temp/' . $hash . '.zip'; + + if ( file_exists( $tmp_file ) ) + return $tmp_file; + + if ( $zip -> open( $tmp_file, \ZipArchive::CREATE ) ) + { + $results2 = $mdb -> select( 'pp_articles_images', 'src', [ 'article_id' => $row['id'] ] ); + if ( is_array( $results2 ) and count( $results2 ) ) foreach ( $results2 as $row2 ) + { + $file = substr( $row2, 1, strlen( $row2 ) ); + $zip -> addFile( $file, basename( $file ) ); + } + + $zip -> close(); + + return $tmp_file; + } + } + } + + public static function image() + { + global $mdb; + + $results = $mdb -> query( 'SELECT * FROM (' + . 'SELECT id, src, MD5( CONCAT( id, src ) ) AS hash FROM pp_articles_images ) AS q1' + . ' WHERE hash = \'' . \S::get( 'hash' ) . '\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); + if ( is_array( $results ) and count( $results ) ) + { + $file = substr( $results[0]['src'], 1, strlen( $results[0]['src'] ) ); + + header('Content-Description: File Transfer'); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="' . basename( $file ) . '"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + header('Content-Length: ' . filesize( $file ) ); + flush(); + readfile($file); + exit; + } + exit; + } + + public static function article_unlock( $password, $article_id ) + { + if ( $password == \front\factory\Articles::article_password( $article_id ) ) + \S::set_session( 'article-' . $article_id . '-' . $password, true ); + } +} diff --git a/autoload/front/controls/class.AuditSEO.php b/autoload/front/controls/class.AuditSEO.php new file mode 100644 index 0000000..3893091 --- /dev/null +++ b/autoload/front/controls/class.AuditSEO.php @@ -0,0 +1,63 @@ +<?php +namespace front\controls; +class AuditSEO +{ + public static function semstorm() + { + echo json_encode( \front\factory\AuditSEO::semstorm( \S::get( 'url' ) ) ); + exit; + } + + public static function data08() + { + echo json_encode( \front\factory\AuditSEO::data08( \S::get( 'url' ) ) ); + exit; + } + + public static function data07() + { + echo json_encode( \front\factory\AuditSEO::data07( \S::get( 'url' ) ) ); + exit; + } + + public static function data06() + { + echo json_encode( \front\factory\AuditSEO::data06( \S::get( 'url' ) ) ); + exit; + } + + public static function data05() + { + echo json_encode( \front\factory\AuditSEO::data05( \S::get( 'url' ) ) ); + exit; + } + + public static function data04() + { + echo json_encode( \front\factory\AuditSEO::data04( \S::get( 'url' ) ) ); + exit; + } + + public static function data03() + { + echo json_encode( \front\factory\AuditSEO::data03( \S::get( 'url' ) ) ); + exit; + } + + public static function data02() + { + echo json_encode( \front\factory\AuditSEO::data02( \S::get( 'url' ) ) ); + exit; + } + + public static function data01() + { + echo json_encode( \front\factory\AuditSEO::data01( \S::get( 'url' ) ) ); + exit; + } + + public static function main_view() + { + return \Tpl::view( 'audit-seo/main-view' ); + } +} diff --git a/autoload/front/controls/class.Newsletter.php b/autoload/front/controls/class.Newsletter.php new file mode 100644 index 0000000..4ebb7f7 --- /dev/null +++ b/autoload/front/controls/class.Newsletter.php @@ -0,0 +1,38 @@ +<?php +namespace front\controls; + +class Newsletter +{ + public static function signin() + { + $result = [ 'status' => 'bad' ]; + + if ( \front\factory\Newsletter::newsletter_signin( \S::get( 'email' ) ) ) + $result = [ 'status' => 'ok' ]; + + echo json_encode( $result ); + exit; + } + + public static function confirm() + { + global $lang; + + if ( \front\factory\Newsletter::newsletter_confirm( \S::get( 'hash' ) ) ) + \S::alert( $lang['email-zostal-dodany-do-listy-newsletter'] ); + + header( 'Location: /' ); + exit; + } + + public static function unsubscribe() + { + global $lang; + + if ( \front\factory\Newsletter::newsletter_unsubscribe( \S::get( 'hash' ) ) ) + \S::alert( $lang['email-zostal-usuniety-z-listy-newsletter'] ); + + header( 'Location: /' ); + exit; + } +} \ No newline at end of file diff --git a/autoload/front/controls/class.Site.php b/autoload/front/controls/class.Site.php new file mode 100644 index 0000000..f971187 --- /dev/null +++ b/autoload/front/controls/class.Site.php @@ -0,0 +1,122 @@ +<?php +namespace front\controls; + +class Site +{ + public static function route() + { + global $page, $lang_id; + + if ( \S::get( 'search' ) ) + { + if ( $_POST['search_txt'] ) + { + \S::set_session( 'search_txt', \S::get( 'search_txt' ) ); + header( "Location: " . $_SERVER['REQUEST_URI'] ); + exit; + } + return \front\view\Search::search_results( + \front\factory\Search::search_results( \S::get_session( 'search_txt' ), $lang_id ) + ); + } + + if ( \S::get( 'tag' ) ) + return \front\view\Articles::articles_list( + \front\factory\Articles::articles_by_tags( \S::get( 'tag' ), $lang_id ) + ); + + if ( \S::get( 'article' ) ) + { + $article = new \Article( \S::get( 'article' ), $lang_id ); + if ( !\S::get_session( 'article-view-' . $article -> id ) ) + { + $article -> updateView(); + \S::set_session( 'article-view-' . $article -> id, true ); + } + + if ( $article['password'] and !\S::get_session( 'article-' . $article['id'] . '-' . $article['password'] ) ) + return \front\view\Articles::password_view( [ 'article' => $article ] ); + else + return \front\view\Articles::article( [ 'article' => $article ] ); + } + + if ( $page['page_type'] !== null ) + { + switch ( $page['page_type'] ) + { + /* pełne artykuły */ + case 0: + return \front\view\Articles::full_articles_list( $page, $lang_id, \S::get( 'bs' ) ); + break; + + /* wprowadzenia */ + case 1: + return \front\view\Articles::entry_articles_list( $page, $lang_id, \S::get( 'bs' ) ); + break; + + /* miniaturki */ + case 2: + return \front\view\Articles::miniature_articles_list( $page, $lang_id, \S::get( 'bs' ) ); + break; + + /* strona kontaktu */ + case 4: + $out = \front\view\Articles::full_articles_list( $page, $lang_id, \S::get( 'bs' ) ); + $out .= \front\view\Site::contact(); + return $out; + break; + } + } + + if ( !\S::get( 'module' ) || !\S::get( 'action' ) ) + return false; + + $class = '\front\controls\\' . ucfirst( \S::get( 'module' ) ); + $action = \S::get( 'action' ); + + if ( class_exists( $class ) and method_exists( new $class, $action ) ) + return call_user_func_array( array( $class, $action ), array() ); + } + + public static function check_url_params() + { + global $lang, $config; + + $a = \S::get( 'a' ); + + switch ( $a ) + { + case 'page': + $page = \front\factory\Pages::page_details( \S::get( 'id' ) ); + \S::set_session( 'page', $page ); + break; + + case 'change_language': + \S::set_session( 'current-lang', \S::get( 'id' ) ); + header( 'Location: /' ); + exit; + break; + + case 'newsletter-sign': + if ( \front\factory\Newsletter::newsletter_signin( \S::get( 'email' ) ) ) + \S::alert( 'Dziękujemy za zapisanie się do newslettera.' ); + header( 'Location: ' . $_SERVER['REQUEST_URI'] ); + exit; + break; + + case 'newsletter-signout': + if ( \front\factory\Newsletter::newsletter_signout( \S::get( 'email' ) ) ) + \S::alert( 'Twój adres email został usunięty z naszej bazy.' ); + header( 'Location: ' . $_SERVER['REQUEST_URI'] ); + exit; + break; + } + + if ( \S::get( 'lang' ) ) + \S::set_session( 'current-lang', \S::get( 'lang' ) ); + + if ( file_exists( 'modules/actions.php' ) ) + include 'modules/actions.php'; + } +} +?> diff --git a/autoload/front/factory/class.Articles.php b/autoload/front/factory/class.Articles.php new file mode 100644 index 0000000..0d78935 --- /dev/null +++ b/autoload/front/factory/class.Articles.php @@ -0,0 +1,479 @@ +<?php + +namespace front\factory; + +class Articles +{ + static public function generateTableOfContents($content) + { + $result = ''; + $prevLevel = 0; + $stack = []; + + // Tylko h1–h3 + preg_match_all('/<(h[1-3])([^>]*)>(.*?)<\/\1>/i', $content, $matches, PREG_SET_ORDER); + + if (empty($matches)) + { + return ''; + } + + foreach ($matches as $match) + { + $level = (int)substr($match[1], 1); + $text = trim($match[3]); + + // Pobierz lub wygeneruj ID + preg_match('/\sid=["\']?([^"\']+)["\']?/', $match[2], $idMatch); + $id = isset($idMatch[1]) + ? $idMatch[1] + : strtolower(preg_replace('/[^a-z0-9]+/u', '-', html_entity_decode(strip_tags($text), ENT_QUOTES, 'UTF-8'))); + + if ($prevLevel === 0) + { + $prevLevel = $level; + $stack[] = $level; + } + + if ($level > $prevLevel) + { + for ($i = $prevLevel; $i < $level; $i++) + { + $result .= '<ol>'; + $stack[] = $i + 1; + } + } + elseif ($level < $prevLevel) + { + for ($i = $prevLevel; $i > $level; $i--) + { + $result .= '</li></ol>'; + array_pop($stack); + } + $result .= '</li>'; + } + else + { + $result .= '</li>'; + } + + $result .= '<li><a href="#' . htmlspecialchars($id) . '">' . $text . '</a>'; + $prevLevel = $level; + } + + // Zamknij pozostałe listy + while (!empty($stack)) + { + $result .= '</li></ol>'; + array_pop($stack); + } + + return '<ol>' . $result . '</ol>'; + } + + // funkcja wywoływana dla każdego dopasowania do wyrażenia regularnego + static public function processHeaders($matches) + { + $level = $matches[1]; + $attrs = $matches[2]; + $content = $matches[3]; + $id_attr = 'id='; + $id_attr_pos = strpos($attrs, $id_attr); + if ($id_attr_pos === false) + { // jeśli nie ma atrybutu id + $id = \S::seo($content); + $attrs .= sprintf(' id="%s"', $id); + } + + $html = sprintf('<h%d%s>%s</h%d>', $level, $attrs, $content, $level); + return $html; + } + + static public function generateHeadersIds($text) + { + $pattern = '/<h([1-6])(.*?)>(.*?)<\/h\1>/si'; + + $text = preg_replace_callback($pattern, array(__CLASS__, 'processHeaders'), $text); + + return $text; + } + + public static function pixieset_save_favorite_images($hash) + { + global $mdb, $settings; + + \S::delete_dir('temp/'); + + $rows = $mdb->select('pp_articles', ['id'], ['hash' => $hash]); + if (is_array($rows)) foreach ($rows as $row) + { + $article = \front\factory\Articles::article_details($row['id'], 'pl'); + + $text = '<p>Witaj,<br />'; + $text .= 'Użytkownik zatwierdził listę wybranych przez siebie zdjęć.<br />'; + $text .= 'Poniżej znajdziesz nazwy wybranych zdjęć.</p>'; + $text .= '<ul>'; + if (is_array($article['images'])) foreach ($article['images'] as $image) + if ($image['favorite']) + $text .= '<li>' . basename($image['src']) . '</li>'; + $text .= '</ul>'; + + \S::send_email($settings['contact_email'], 'Powiadomienie ze strony: ' . $_SERVER['SERVER_NAME'], $text); + return true; + } + return false; + } + + public static function pixieset_image_favorite($image_id, $hash) + { + global $mdb; + + $rows = $mdb->select('pp_articles', ['id'], ['hash' => $hash]); + if (is_array($rows)) foreach ($rows as $row) + { + $status = $mdb->get('pp_articles_images', 'favorite', ['AND' => ['article_id' => $row['id'], 'id' => $image_id]]); + $mdb->update('pp_articles_images', ['favorite' => !$status], ['AND' => ['article_id' => $row['id'], 'id' => $image_id]]); + + \S::delete_dir('temp/'); + return !$status; + } + } + + public static function article_password($article_id) + { + global $mdb; + return $mdb->get('pp_articles', 'password', ['id' => $article_id]); + } + + public static function articles_by_tags($tag_id, $lang_id) + { + global $mdb; + + if (!$articles = \Cache::fetch("articles_by_tags:$tag_id:$lang_id")) + { + $results = $mdb->query('SELECT ' + . 'pa.id ' + . 'FROM ' + . 'pp_articles AS pa ' + . 'INNER JOIN pp_articles_tags AS pat ON pat.article_id = pa.id ' + . 'WHERE ' + . 'status = 1 ' + . 'AND ' + . 'tag_id = ' . (int)$tag_id)->fetchAll(); + if (is_array($results) and !empty($results)) foreach ($results as $row) + $articles[] = \front\factory\Articles::article_details($row['id'], $lang_id); + + \Cache::store("articles_by_tags:$tag_id:$lang_id", $articles); + } + + return $articles; + } + + public static function tag_details($tag_id) + { + global $mdb; + + if (!$tag = \Cache::fetch("tag_details:$tag_id")) + { + $tag = $mdb->get('pp_tags', '*', ['id' => (int)$tag_id]); + + \Cache::store("tag_details:$tag_id", $tag); + } + return $tag; + } + + public static function tags() + { + global $mdb; + + if (!$tags = \Cache::fetch('tags')) + { + $tags = $mdb->query( + 'SELECT ' + . 'name, COUNT( tag_id ) AS c ' + . 'FROM ' + . 'pp_tags AS pt ' + . 'INNER JOIN pp_articles_tags ON pt.id = tag_id ' + . 'GROUP BY ' + . 'tag_id ' + . 'ORDER BY ' + . 'c DESC ' + . 'LIMIT 20' + )->fetchAll(); + + \Cache::store('tags', $tags); + } + return $tags; + } + + public static function articles_by_date($month, $year, $lang_id) + { + global $mdb; + + if (!$articles = \Cache::fetch("articles_by_date:$month:$year:$lang_id")) + { + $results = $mdb->query('SELECT ' + . 'id ' + . 'FROM ' + . 'pp_articles ' + . 'WHERE ' + . 'status = 1 ' + . 'AND ' + . '( ' + . '( date_start BETWEEN \'' . date('Y-m-d', strtotime('01-' . $month . '-' . $year)) . '\' AND \'' . date('Y-m-t', strtotime('01-' . $month . '-' . $year)) . '\' ) ' + . 'OR ' + . '( date_end BETWEEN \'' . date('Y-m-d', strtotime('01-' . $month . '-' . $year)) . '\' AND \'' . date('Y-m-t', strtotime('01-' . $month . '-' . $year)) . '\' ) ' + . 'OR ' + . '( date_start <= \'' . date('Y-m-t', strtotime('01-' . $month . '-' . $year)) . '\' AND date_end >= \'' . date('Y-m-t', strtotime('01-' . $month . '-' . $year)) . '\' ) ' + . ')')->fetchAll(); + if (is_array($results) and !empty($results)) foreach ($results as $row) + $articles[] = \front\factory\Articles::article_details($row['id'], $lang_id); + + \Cache::store("articles_by_date:$month:$year:$lang_id", $articles); + } + + return $articles; + } + + public static function news($page_id, $limit = 6, $lang_id) + { + $sort = \front\factory\Pages::page_sort($page_id); + + $articles_id = \front\factory\Articles::artciles_id((int)$page_id, $lang_id, $limit, $sort, 0); + if (is_array($articles_id) and !empty($articles_id)) foreach ($articles_id as $article_id) + $articles[] = \front\factory\Articles::article_details($article_id, $lang_id); + + return $articles; + } + + public static function get_image($article, $skip_entry = false) + { + if ($article['language']['main_image']) + { + if (file_exists(substr($article['language']['main_image'], 1, strlen($article['language']['main_image'])))) + return $article['language']['main_image']; + } + + if (!$skip_entry) + { + $dom = new \DOMDocument(); + $dom->loadHTML(mb_convert_encoding($article['language']['entry'], 'HTML-ENTITIES', "UTF-8")); + $images = $dom->getElementsByTagName('img'); + foreach ($images as $img) + { + $src = $img->getAttribute('src'); + if (file_exists(substr($src, 1, strlen($src)))) + return $src; + } + } + + $dom = new \DOMDocument(); + $dom->loadHTML(mb_convert_encoding($article['language']['text'], 'HTML-ENTITIES', "UTF-8")); + $images = $dom->getElementsByTagName('img'); + foreach ($images as $img) + { + $src = $img->getAttribute('src'); + if (file_exists(substr($src, 1, strlen($src)))) + return $src; + } + + if ($article['images']) + return $article['images'][0]['src']; + + return false; + } + + public static function article_noindex($article_id) + { + global $mdb, $lang; + + if (!$noindex = \Cache::fetch("article_noindex:$article_id:" . $lang[0])) + { + $noindex = $mdb->get('pp_articles_langs', 'noindex', ['AND' => ['article_id' => (int)$article_id, 'lang_id' => $lang[0]]]); + + \Cache::store("article_noindex:$article_id:" . $lang[0], $noindex); + } + return $noindex; + } + + public static function page_articles($page, $lang_id, $bs) + { + $count = \front\factory\Articles::page_articles_count($page['id'], $lang_id); + $ls = ceil($count / $page['articles_limit']); + + if ($bs < 1) + $bs = 1; + else if ($bs > $ls) + $bs = $ls; + + $from = $page['articles_limit'] * ($bs - 1); + + if ($from < 0) + $from = 0; + + $results['articles'] = \front\factory\Articles::artciles_id((int)$page['id'], $lang_id, (int)$page['articles_limit'], $page['sort_type'], $from); + $results['ls'] = $ls; + + return $results; + } + + public static function article_details($article_id, $lang_id) + { + global $mdb; + + if (!$article = \Cache::fetch("article_details:$lang_id:$article_id")) + { + $article = $mdb->get('pp_articles', '*', ['id' => (int)$article_id]); + + $results = $mdb->select('pp_articles_langs', '*', ['AND' => ['article_id' => (int)$article_id, 'lang_id' => $lang_id]]); + if (is_array($results)) foreach ($results as $row) + { + if ($row['copy_from']) + { + $results2 = $mdb->select('pp_articles_langs', '*', ['AND' => ['article_id' => (int)$article_id, 'lang_id' => $row['copy_from']]]); + if (is_array($results2)) foreach ($results2 as $row2) + $article['language'] = $row2; + } + else + $article['language'] = $row; + + preg_match_all(\front\view\Site::container_pattern, $article['language']['entry'], $container_list); + if (is_array($container_list[0])) foreach ($container_list[0] as $container_list_tmp) + { + $container_list_tmp = explode(':', $container_list_tmp); + $article['language']['entry'] = str_replace('[KONTENER:' . $container_list_tmp[1] . ']', \front\view\Scontainers::scontainer($container_list_tmp[1]), $article['language']['entry']); + } + + preg_match_all(\front\view\Site::container_pattern, $article['language']['text'], $container_list); + if (is_array($container_list[0])) foreach ($container_list[0] as $container_list_tmp) + { + $container_list_tmp = explode(':', $container_list_tmp); + $article['language']['text'] = str_replace('[KONTENER:' . $container_list_tmp[1] . ']', \front\view\Scontainers::scontainer($container_list_tmp[1]), $article['language']['text']); + } + } + + $article['images'] = $mdb->select('pp_articles_images', '*', ['article_id' => (int)$article_id, 'ORDER' => ['o' => 'ASC', 'id' => 'ASC'] ] ); + // załączniki + $article['files'] = $mdb -> select( 'pp_articles_files', '*', [ 'article_id' => (int)$article_id, 'ORDER' => [ 'o' => 'ASC', 'id' => 'ASC'] ] ); + $article['pages'] = $mdb->select('pp_articles_pages', 'page_id', ['article_id' => (int)$article_id]); + $article['tags'] = $mdb->select('pp_tags', ['[><]pp_articles_tags' => ['id' => 'tag_id']], 'name', ['article_id' => (int)$article_id]); + $results = $mdb->select('pp_articles_additional_params', ['[><]pp_articles_additional_values' => ['id' => 'param_id']], ['name', 'value', 'language_id'], ['article_id' => (int)$article_id]); + if (is_array($results)) foreach ($results as $row) + { + if (!$row['language_id']) + $params[$row['name']] = $row['value']; + else + $params[$row['name']][$row['language_id']] = $row['value']; + } + $article['params'] = $params; + + \Cache::store("article_details:$lang_id:$article_id", $article); + } + + return $article; + } + + public static function artciles_id($page_id, $lang_id, $articles_limit, $sort_type, $from) + { + global $mdb; + + switch ($sort_type) + { + case 0: + $order = 'priority DESC, date_add ASC'; + break; + case 1: + $order = 'priority DESC, date_add DESC'; + break; + case 2: + $order = 'priority DESC, date_modify ASC'; + break; + case 3: + $order = 'priority DESC, date_modify DESC'; + break; + case 4: + $order = 'priority DESC, o ASC'; + break; + case 5: + $order = 'priority DESC, title ASC'; + break; + case 6: + $order = 'priority DESC, title DESC'; + break; + default: + $order = 'priority DESC, id ASC'; + break; + } + + if (!$output = \Cache::fetch("artciles_id:$page_id:$lang_id:$order:$from:$articles_limit")) + { + $results = $mdb->query('SELECT * FROM ( ' + . 'SELECT ' + . 'a.id, date_modify, date_add, o, priority, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN title ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'title ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS title ' + . 'FROM ' + . 'pp_articles_pages AS ap ' + . 'INNER JOIN pp_articles AS a ON a.id = ap.article_id ' + . 'INNER JOIN pp_articles_langs AS al ON al.article_id = ap.article_id ' + . 'WHERE ' + . 'status = 1 AND page_id = ' . (int)$page_id . ' AND lang_id = \'' . $lang_id . '\' ' + . ') AS q1 ' + . 'WHERE ' + . 'q1.title IS NOT NULL ' + . 'ORDER BY ' + . 'q1.' . $order . ' ' + . 'LIMIT ' + . (int)$from . ',' . (int)$articles_limit)->fetchAll(); + if (is_array($results) and !empty($results)) foreach ($results as $row) + $output[] = $row['id']; + + \Cache::store("artciles_id:$page_id:$lang_id:$order:$from:$articles_limit", $output); + } + return $output; + } + + public static function page_articles_count($page_id, $lang_id) + { + global $mdb; + + if (!$output = \Cache::fetch("page_articles_count:$page_id:$lang_id")) + { + $results = $mdb->query('SELECT COUNT(0) FROM ( ' + . 'SELECT ' + . 'a.id, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN title ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'title ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS title ' + . 'FROM ' + . 'pp_articles_pages AS ap ' + . 'INNER JOIN pp_articles AS a ON a.id = ap.article_id ' + . 'INNER JOIN pp_articles_langs AS al ON al.article_id = ap.article_id ' + . 'WHERE ' + . 'status = 1 AND page_id = ' . (int)$page_id . ' AND lang_id = \'' . $lang_id . '\' ' + . ') AS q1 ' + . 'WHERE ' + . 'q1.title IS NOT NULL')->fetchAll(); + $output = $results[0][0]; + \Cache::store("page_articles_count:$page_id:$lang_id", $output); + } + return $output; + } +} diff --git a/autoload/front/factory/class.AuditSEO.php b/autoload/front/factory/class.AuditSEO.php new file mode 100644 index 0000000..7faa805 --- /dev/null +++ b/autoload/front/factory/class.AuditSEO.php @@ -0,0 +1,765 @@ +<?php +namespace front\factory; +class AuditSEO +{ + public static $good_img = '<img src="/templates/audit-seo/good.svg" class="status">'; + public static $bad_img = '<img src="/templates/audit-seo/bad.svg" class="status">'; + + public static function robots_allowed( $robots_txt, $useragent ) + { + $agents = array( preg_quote( '*' ) ); + if ( $useragent) $agents[] = preg_quote( $useragent ); + $agents = implode( '|', $agents ); + + $robotstxt = @file( $robots_txt ); + if ( empty( $robotstxt ) ) + return true; + + $rules = array(); + $ruleApplies = false; + foreach ( $robotstxt as $line ) + { + if ( !$line = trim( $line ) ) + continue; + + if ( preg_match('/^\s*User-agent: (.*)/i', $line, $match ) ) + $ruleApplies = preg_match( "/($agents)/i", $match[1] ); + + if ( $ruleApplies && preg_match( '/^\s*Disallow:(.*)/i', $line, $regs ) ) + { + if ( !$regs[1] ) + return true; + + $rules[] = preg_quote( trim( $regs[1] ), '/' ); + } + } + + foreach ( $rules as $rule ) + { + if ( preg_match( "/^$rule/", $parsed['path'] ) ) + return false; + } + + return true; + } + + public static function is_url_internal( $domain, $url ) + { + $domain_host = parse_url( $domain, PHP_URL_HOST ); + $url_host = parse_url( $url, PHP_URL_HOST ); + + if ( $domain_host == $url_host or empty( $url_host ) ) + { + if ( $url != '/' and $url != '#' and strpos( $url, 'mailto:' ) === false and $url != '' and strpos( $url, 'tel:' ) === false ) + return true; + } + + return false; + } + + public static function is_url_external( $domain, $url ) + { + $domain_host = str_replace( 'www.', '', parse_url( $domain, PHP_URL_HOST ) ); + $url_host = str_replace( 'www.', '', parse_url( $url, PHP_URL_HOST ) ); + + if ( $domain_host != $url_host and !empty( $url_host ) and !empty( $domain_host ) ) + { + if ( $url != '/' and $url != '#' and strpos( $url, 'mailto:' ) === false and $url != '' and strpos( $url, 'tel:' ) === false ) + return true; + } + + return false; + } + + public static function semstorm( $url ) + { + if ( !$url ) + return false; + + $data = [ 'domains' => [ $url ] ]; + $data_string = json_encode( $data ); + + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, 'http://api.semstorm.com/api-v3/explorer/explorer-keywords/position-distribution.json?services_token=ay_oMCvqro2DuTbG5EMayLUTYitOJC_Lf40gq2Rj_zE' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_POST, true ); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length: ' . strlen( $data_string ) ) + ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + + echo $response; + exit; + } + + public static function data08( $url ) + { + global $mdb; + + $data08['top3']['txt'] = 0; + $data08['top10']['txt'] = 0; + $data08['top50']['txt'] = 0; + $results = $mdb -> get( 'as_sites', [ 'semstorm' ], [ 'url' => $url ] ); + + if ( !$results['semstorm'] ) + { + if ( strpos( $url, 'www.' ) === 0 ) + $url = str_replace( 'www.', '', $url ); + + $data = [ 'domains' => [ $url ] ]; + $data_string = json_encode( $data ); + + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, 'http://api.semstorm.com/api-v3/explorer/explorer-keywords/position-distribution.json?services_token=ay_oMCvqro2DuTbG5EMayLUTYitOJC_Lf40gq2Rj_zE' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_POST, true ); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string ); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length: ' . strlen( $data_string ) ) + ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + $mdb -> update( 'as_sites', [ 'semstorm' => $response ], [ 'url' => $url ] ); + + $results['semstorm'] = $response; + } + + $data_tmp = json_decode( $results['semstorm'], true ); + + foreach ( $data_tmp['results'][$url] as $key => $val ) + { + if ( $key <= 3 ) + $data08['top3']['txt'] += $val; + + if ( $key > 3 and $key <= 10 ) + $data08['top10']['txt'] += $val; + + if ( $key > 10 ) + $data08['top50']['txt'] += $val; + } + + return $data08; + } + + public static function data07( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ 'html', 'effective_url' ], [ 'url' => $url ] ); + + $data07['audit_links_inside']['count'] = 0; + $data07['audit_links_outside']['count'] = 0; + + $dom = new \DOMDocument(); + @$dom -> loadHTML( $results['html'] ); + $links = @$dom -> getElementsByTagName( 'a' ); + + for ( $i = 0; $i < $links -> length; $i++ ) + { + $link = $links -> item( $i ); + $url_tmp = $link -> getAttribute( 'href' ); + + if ( self::is_url_internal( $results['effective_url'], $url_tmp ) ) + { + $data07['audit_links_inside']['count']++; + $links_internal[] = $url_tmp; + } + + if ( self::is_url_external( $results['effective_url'], $url_tmp ) ) + { + $data07['audit_links_outside']['count']++; + $links_external[] = $url_tmp; + } + } + $data07['audit_links_inside']['txt'] = implode( '<br>', $links_internal ); + $data07['audit_links_outside']['txt'] = implode( '<br>', $links_external ); + + return $data07; + } + + public static function data06( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ 'effective_url', 'html', 'flash', 'iframe', 'file_robots_txt', 'file_sitemap_xml', 'inline_css', 'doctype', 'html_language', 'w3c' ], [ 'url' => $url ] ); + + $data06['flash']['txt'] = $results['flash'] ? 'tak' : 'nie'; + $data06['iframe']['txt'] = $results['iframe'] ? 'tak' : 'nie'; + $data06['file_robots_txt']['txt'] = $results['file_robots_txt'] ? 'tak' : 'nie'; + $data06['file_sitemap_xml']['txt'] = $results['file_sitemap_xml'] ? 'tak' : 'nie'; + $data06['imgs_without_alt']['txt'] = implode( '<br/>', self::imgs_without_alt( $results['html'] ) ); + $data06['inline_css']['txt'] = $results['inline_css'] ? 'tak' : 'nie'; + $data06['doctype']['txt'] = $results['doctype']; + $data06['html_language']['txt'] = $results['html_language']; + + if ( !$results['w3c'] ) + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, 'https://validator.w3.org/nu/?doc=' . urlencode( $results['effective_url'] ) . '%2F&out=json' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + + $mdb -> update( 'as_sites', [ 'w3c' => $response ], [ 'url' => $url ] ); + + $w3c = json_decode( $response, true ); + } + else + { + $w3c = json_decode( $results['w3c'], true ); + } + + $data06['w3c_validator']['txt'] = 0; + + foreach ( $w3c['messages'] as $message ) { + if ( $message['type'] == 'error' ) + $data06['w3c_validator']['txt']++; + } + + return $data06; + } + + public static function data05( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ + 'effective_url', + 'page_speed_insight_mobile' + ], [ + 'url' => $url + ] ); + + if ( !$results['page_speed_insight_mobile'] ) + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' . $results['effective_url'] . '&category=performance&strategy=mobile' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + + $mdb -> update( 'as_sites', [ 'page_speed_insight_mobile' => $response ], [ 'url' => $url ] ); + + $page_speed_insight_mobile = json_decode( $response, true ); + } + else + { + $page_speed_insight_mobile = json_decode( $results['page_speed_insight_mobile'], true ); + } + + $data05['psid']['txt'] = ( $page_speed_insight_mobile['lighthouseResult']['categories']['performance']['score'] * 100 ) . '/100'; + $data05['psid']['score'] = $page_speed_insight_mobile['lighthouseResult']['categories']['performance']['score'] * 100; + + return $data05; + } + + public static function data04( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ + 'effective_url', + 'page_speed_insight_desktop' + ], [ + 'url' => $url + ] ); + + if ( !$results['page_speed_insight_desktop'] ) + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' . $results['effective_url'] . '&category=performance&strategy=desktop' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $response = curl_exec( $ch ); + curl_close ( $ch ); + + $mdb -> update( 'as_sites', [ 'page_speed_insight_desktop' => $response ], [ 'url' => $url ] ); + + $page_speed_insight_desktop = json_decode( $response, true ); + } + else + { + $page_speed_insight_desktop = json_decode( $results['page_speed_insight_desktop'], true ); + } + + $data04['psid']['txt'] = ( $page_speed_insight_desktop['lighthouseResult']['categories']['performance']['score'] * 100 ) . '/100'; + $data04['psid']['score'] = $page_speed_insight_desktop['lighthouseResult']['categories']['performance']['score'] * 100; + $data04['site_size']['txt'] = round( $page_speed_insight_desktop['lighthouseResult']['audits']['total-byte-weight']['numericValue'] / 1024 ) . ' KB'; + $data04['site_http']['txt'] = $page_speed_insight_desktop['lighthouseResult']['audits']['network-requests']['numericValue']; + + return $data04; + } + + public static function data03( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ 'meta_title', 'meta_description', 'meta_keywords', 'code_length', 'text_length', 'words_count', + 'h1_count', 'h2_count', 'h3_count', 'h4_count', 'h5_count', 'h6_count' + ], [ + 'url' => $url + ] ); + + $data03['meta_title']['txt'] = $results['meta_title']; + $data03['meta_title']['signs'] = strlen( $results['meta_title'] ); + $data03['meta_description']['txt'] = $results['meta_description']; + $data03['meta_description']['signs'] = strlen( $results['meta_description'] ); + $data03['meta_keywords']['txt'] = $results['meta_keywords'] != '' ? $results['meta_keywords'] : 'brak'; + $data03['code_to_text_ratio']['txt'] = round( ( $results['text_length'] / ( $results['text_length'] + $results['code_length'] ) * 100 ), 0 ); + $data03['words_count']['txt'] = $results['words_count']; + $data03['headers']['h1_count']['txt'] = $results['h1_count']; + $data03['headers']['h2_count']['txt'] = $results['h2_count']; + $data03['headers']['h3_count']['txt'] = $results['h3_count']; + $data03['headers']['h4_count']['txt'] = $results['h4_count']; + $data03['headers']['h5_count']['txt'] = $results['h5_count']; + $data03['headers']['h6_count']['txt'] = $results['h6_count']; + + return $data03; + } + + public static function data02( $url ) + { + global $mdb; + + $results = $mdb -> get( 'as_sites', [ 'meta_robots', 'robots_txt', 'redirect_www', 'https' ], [ 'url' => $url ] ); + + $data02['meta_robots']['txt'] = strpos( $results['meta_robots'], 'index' ) !== false ? 'tak' : 'nie'; + $data02['meta_robots']['img'] = strpos( $results['meta_robots'], 'index' ) !== false ? self::$good_img : self::$bad_img; + + $robots_txt = self::robots_allowed( $data02['robots_txt'], 'GoogleBot' ); + $data02['robots_txt']['txt'] = $robots_txt ? 'tak' : 'nie'; + $data02['robots_txt']['img'] = $robots_txt ? self::$good_img : self::$bad_img; + + $data02['redirect_www']['txt'] = $results['redirect_www'] ? 'tak' : 'nie'; + $data02['redirect_www']['img'] = $results['redirect_www'] ? self::$good_img : self::$bad_img; + + $data02['https']['txt'] = $results['https'] ? 'tak' : 'nie'; + $data02['https']['img'] = $results['https'] ? self::$good_img : self::$bad_img; + + return $data02; + } + + public static function data01( $url ) + { + global $mdb; + + $data01 = $mdb -> get( 'as_sites', [ + 'effective_url', + 'ip', + 'location', + 'favicon', + 'cms' + ], [ + 'url' => $url + ] ); + + $url_tmp = parse_url( $data01['effective_url'] ); + + $location = json_decode( $data01['location'] ); + $data01['domain']['txt'] = $url_tmp['host']; + $data01['location'] = $location -> country; + $data01['favicon'] = $data01['favicon'] != null ? 'tak' : 'nie'; + $data01['cms'] = $data01['cms'] != null ? $data01['cms'] : 'nieznany'; + + return $data01; + } + + public static function imgs_without_alt( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $images = $dom -> getElementsByTagName( 'img' ); + $cms = ''; + + for ( $i = 0; $i < $images -> length; $i++ ) + { + $img = $images -> item( $i ); + if ( $img -> getAttribute( 'alt' ) == '' ) + $imgs_output[] = $img -> getAttribute( 'src' ); + } + return $imgs_output; + } + + public static function cms( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $metas = $dom -> getElementsByTagName( 'meta' ); + $cms = ''; + + for ( $i = 0; $i < $metas -> length; $i++ ) + { + $meta = $metas -> item( $i ); + if ( $meta -> getAttribute( 'name' ) == 'generator' ) + $cms = $meta -> getAttribute( 'content' ); + } + return $cms; + } + + public static function meta_title( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $metas = $dom -> getElementsByTagName( 'title' ); + $meta_title = ''; + + $meta = $metas -> item( 0 ); + $meta_title = $meta -> textContent; + + return $meta_title; + } + + public static function meta_description( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $metas = $dom -> getElementsByTagName( 'meta' ); + $meta_description = ''; + + for ( $i = 0; $i < $metas -> length; $i++ ) + { + $meta = $metas -> item( $i ); + if ( $meta -> getAttribute( 'name' ) == 'description' ) + $meta_description = $meta -> getAttribute( 'content' ); + } + return $meta_description; + } + + public static function meta_keywords( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $metas = $dom -> getElementsByTagName( 'meta' ); + $meta_keywords = ''; + + for ( $i = 0; $i < $metas -> length; $i++ ) + { + $meta = $metas -> item( $i ); + if ( $meta -> getAttribute( 'name' ) == 'keywords' ) + $meta_keywords = $meta -> getAttribute( 'content' ); + } + return $meta_keywords; + } + + public static function meta_robots( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $metas = $dom -> getElementsByTagName( 'meta' ); + $meta_robots = ''; + + for ( $i = 0; $i < $metas -> length; $i++ ) + { + $meta = $metas -> item( $i ); + if ( $meta -> getAttribute( 'name' ) == 'robots' || $meta -> getAttribute( 'name' ) == 'googlebot' ) + $meta_robots = $meta -> getAttribute( 'content' ); + } + return $meta_robots; + } + + public static function header_count( $html, $header = 'h1' ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $headers = $dom -> getElementsByTagName( $header ); + return $headers -> length; + } + + public static function favicon( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $links = $dom -> getElementsByTagName( 'link' ); + $favicon = ''; + + for ( $i = 0; $i < $links -> length; $i++ ) + { + $link = $links -> item( $i ); + if ( $link -> getAttribute( 'rel' ) == 'icon' || $link -> getAttribute( 'rel' ) == "Shortcut Icon" || $link -> getAttribute( 'rel' ) == "shortcut icon" ) + $favicon = $link -> getAttribute( 'href' ); + } + return $favicon; + } + + public static function flash_check( $html ) + { + if ( strpos( $html, 'Get Adobe Flash player' ) !== false ) + return true; + return false; + } + + public static function iframe_check( $html ) + { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $iframes = $dom -> getElementsByTagName( 'iframe' ); + if ( $iframes -> length ) + return true; + return false; + } + + public static function doctype( $html ) { + if ( strpos( $html, 'HTML 4.01 Frameset//EN' ) !== false ) + return 'HTML 4.01 Frameset'; + elseif ( strpos( $html, 'HTML 4.01 Transitional//EN' ) !== false ) + return 'HTML 4.01 Transitional'; + elseif ( strpos( $html, 'HTML 4.01//EN' ) !== false ) + return 'HTML 4.01 Strict'; + else + return 'HTML 5'; + } + + public static function html_language( $html ) { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $htmls = $dom -> getElementsByTagName( 'html' ); + + for ( $i = 0; $i < $htmls -> length; $i++ ) { + $html = $htmls -> item( $i ); + return $html -> getAttribute( 'lang' ); + } + return false; + } + + public static function inline_css( $html ) { + $dom = new \DOMDocument(); + @$dom -> loadHTML( $html ); + $spans = $dom -> getElementsByTagName( 'span' ); + for ( $i = 0; $i < $spans -> length; $i++ ) { + $span = $spans -> item( $i ); + if ( $span -> getAttribute( 'style' ) != '' ) + return true; + } + + $ps = $dom -> getElementsByTagName( 'p' ); + for ( $i = 0; $i < $ps -> length; $i++ ) { + $p = $ps -> item( $i ); + if ( $p -> getAttribute( 'style' ) != '' ) + return true; + } + + $divs = $dom -> getElementsByTagName( 'div' ); + for ( $i = 0; $i < $divs -> length; $i++ ) { + $div = $divs -> item( $i ); + if ( $div -> getAttribute( 'style' ) != '' ) + return true; + } + + return false; + } + + public static function audit( $url ) + { + global $mdb; + + if ( !$url ) + return false; + + if ( strpos( $url, 'http://' ) === false and strpos( $url, 'https://' ) === false ) + $url = 'http://' . $url; + + $url_tmp = parse_url( $url ); + $url = strip_tags( $url_tmp['host'] ) . $url_tmp['path']; + if ( substr( $url, -1, 1 ) == '/') + $url = substr( $url, 0, -1 ); + + if ( $mdb -> count( 'as_sites', [ 'url' => $url ] ) ) + return $url; + else + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, $url ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $response = curl_exec( $ch ); + + $effective_url = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL ); + $ip = curl_getinfo( $ch, CURLINFO_PRIMARY_IP ); + $location = file_get_contents( "http://ipinfo.io/{$ip}/json" ); + $favicon = self::favicon( $response ); + $cms = self::cms( $response ); + $meta_robots = self::meta_robots( $response ); + $meta_title = self::meta_title( $response ); + $meta_description = self::meta_description( $response ); + $meta_keywords = self::meta_keywords( $response ); + $h1_count = self::header_count( $response, 'h1' ); + $h2_count = self::header_count( $response, 'h2' ); + $h3_count = self::header_count( $response, 'h3' ); + $h4_count = self::header_count( $response, 'h4' ); + $h5_count = self::header_count( $response, 'h5' ); + $h6_count = self::header_count( $response, 'h6' ); + $flash = self::flash_check( $response ); + $iframe = self::iframe_check( $response ); + $inline_css = self::inline_css( $response ); + $doctype = self::doctype( $response ); + $html_language = self::html_language( $response ); + + $html_length = strlen( $response ); + $text_length = strlen( strip_tags( $response ) ); + $code_length = $html_length - $text_length; + + $words_count = str_word_count( strip_tags( $response ) ); + + curl_close ( $ch ); + + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, $effective_url . '/robots.txt' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $robots_txt = curl_exec( $ch ); + + if ( curl_getinfo( $ch, CURLINFO_HTTP_CODE ) == 200 ) + $file_robots_txt = 1; + else + $file_robots_txt = 0; + + curl_close ( $ch ); + + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, $effective_url . '/sitemap.xml' ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + $sitemap_xml = curl_exec( $ch ); + + if ( curl_getinfo( $ch, CURLINFO_HTTP_CODE ) == 200 ) + $file_sitemap_xml = 1; + else + $file_sitemap_xml = 0; + + curl_close ( $ch ); + + $url_parse = parse_url( $effective_url ); + $redirect_www = false; + + if ( strpos( $effective_url, $url_parse['scheme'] . '://www.' ) !== false ) + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, str_replace( $url_parse['scheme'] . '://www.', $url_parse['scheme'] . '://', $effective_url ) ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + curl_exec( $ch ); + $effective_url_tmp = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL ); + curl_close ( $ch ); + + if ( $effective_url_tmp == $effective_url ) + $redirect_www = true; + } + else + { + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, str_replace( $url_parse['scheme'] . '://', $url_parse['scheme'] . '://www.', $effective_url ) ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_VERBOSE, 1 ); + curl_setopt( $ch, CURLOPT_TIMEOUT, 60 ); + curl_setopt( $ch, CURLOPT_HEADER, true ); + curl_setopt( $ch, CURLOPT_CAINFO, 'cacert.pem' ); + curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); + curl_setopt( $ch, CURLOPT_HEADER, false ); + curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36' ); + curl_exec( $ch ); + $effective_url_tmp = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL ); + curl_close ( $ch ); + + if ( $effective_url_tmp == $effective_url ) + $redirect_www = true; + } + + $mdb -> insert( 'as_sites', [ + 'url' => $url, + 'html' => $response, + 'effective_url' => $effective_url, + 'ip' => $ip, + 'location' => $location, + 'favicon' => $favicon, + 'cms' => $cms, + 'meta_robots' => $meta_robots, + 'robots_txt' => $robots_txt, + 'redirect_www' => $redirect_www ? 1 : 0, + 'https' => $url_parse['scheme'] == 'https' ? 1 : 0, + 'meta_title' => $meta_title, + 'meta_description' => $meta_description, + 'meta_keywords' => $meta_keywords, + 'code_length' => $code_length, + 'text_length' => $text_length, + 'words_count' => $words_count, + 'h1_count' => $h1_count, + 'h2_count' => $h2_count, + 'h3_count' => $h3_count, + 'h4_count' => $h4_count, + 'h5_count' => $h5_count, + 'h6_count' => $h6_count, + 'flash' => $flash ? 1 : 0, + 'iframe' => $iframe ? 1 : 0, + 'file_robots_txt' => $file_robots_txt, + 'file_sitemap_xml' => $file_sitemap_xml, + 'inline_css' => $inline_css, + 'doctype' => $doctype, + 'html_language' => $html_language + ] ); + + return $url; + } + } +} \ No newline at end of file diff --git a/autoload/front/factory/class.Authors.php b/autoload/front/factory/class.Authors.php new file mode 100644 index 0000000..a021624 --- /dev/null +++ b/autoload/front/factory/class.Authors.php @@ -0,0 +1,22 @@ +<? +namespace front\factory; +class Authors +{ + // szczególy autora + static public function get_single_author( $id_author ) + { + global $mdb; + + if ( !$author = \Cache::fetch( "get_single_author:$id_author" ) ) + { + $author = $mdb -> get( 'pp_authors', '*', [ 'id' => (int)$id_author ] ); + + $results = $mdb -> select( 'pp_authors_langs', '*', [ 'id_author' => (int)$id_author ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $author['languages'][$row['id_lang']] = $row; + + \Cache::store( "get_single_author:$id_author", $author ); + } + return $author; + } +} \ No newline at end of file diff --git a/autoload/front/factory/class.Banners.php b/autoload/front/factory/class.Banners.php new file mode 100644 index 0000000..568a0f2 --- /dev/null +++ b/autoload/front/factory/class.Banners.php @@ -0,0 +1,63 @@ +<?php +namespace front\factory; + +class Banners +{ + public static function banners() + { + global $mdb, $lang; + + if ( !$banners = \Cache::fetch( 'banners' ) ) + { + $results = $mdb -> query( 'SELECT ' + . 'id, name ' + . 'FROM ' + . 'pp_banners ' + . 'WHERE ' + . 'status = 1 ' + . 'AND ' + . '( date_start <= \'' . date( 'Y-m-d' ) . '\' OR date_start IS NULL ) ' + . 'AND ' + . '( date_end >= \'' . date( 'Y-m-d' ) . '\' OR date_end IS NULL ) ' + . 'AND ' + . 'home_page = 0' ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + { + $row['languages'] = $mdb -> get( 'pp_banners_langs', '*', [ 'AND' => [ 'id_banner' => (int)$row['id'], 'id_lang' => $lang[0] ] ] ); + $banners[] = $row; + } + \Cache::store( 'banners', $banners ); + } + return $banners; + } + + public static function main_banner() + { + global $mdb, $lang; + + if ( !$banner = \Cache::fetch( "main_banner:" . $lang[0] ) ) + { + $banner = $mdb -> query( 'SELECT ' + . '* ' + . 'FROM ' + . 'pp_banners ' + . 'WHERE ' + . 'status = 1 ' + . 'AND ' + . '( date_start <= \'' . date( 'Y-m-d' ) . '\' OR date_start IS NULL ) ' + . 'AND ' + . '( date_end >= \'' . date( 'Y-m-d' ) . '\' OR date_end IS NULL ) ' + . 'AND ' + . 'home_page = 1 ' + . 'ORDER BY ' + . 'date_end ASC ' + . 'LIMIT 1' ) -> fetchAll(); + $banner = $banner[0]; + if ( $banner ) + $banner['languages'] = $mdb -> get( 'pp_banners_langs', '*', [ 'AND' => [ 'id_banner' => (int)$banner['id'], 'id_lang' => $lang[0] ] ] ); + + \Cache::store( "main_banner:" . $lang[0], $banner ); + } + return $banner; + } +} \ No newline at end of file diff --git a/autoload/front/factory/class.Languages.php b/autoload/front/factory/class.Languages.php new file mode 100644 index 0000000..5ed6351 --- /dev/null +++ b/autoload/front/factory/class.Languages.php @@ -0,0 +1,58 @@ +<?php +namespace front\factory; + +class Languages +{ + public static function default_domain() + { + global $mdb; + $results = $mdb -> query( 'SELECT domain FROM pp_langs WHERE status = 1 AND domain IS NOT NULL AND main_domain = 1' ) -> fetchAll(); + return $default_domain = $results[0][0]; + } + + public static function default_language( $domain = '' ) + { + global $mdb; + if ( !$default_language = \Cache::fetch( "default_language:$domain" ) ) + { + if ( $domain ) + $results = $mdb -> query( 'SELECT id FROM pp_langs WHERE status = 1 AND domain = \'' . $domain . '\' ORDER BY start DESC, o ASC LIMIT 1' ) -> fetchAll(); + if ( !$domain or !\front\factory\Languages::default_domain() ) + $results = $mdb -> query( 'SELECT id FROM pp_langs WHERE status = 1 AND domain IS NULL ORDER BY start DESC, o ASC LIMIT 1' ) -> fetchAll(); + $default_language = $results[0][0]; + + \Cache::store( "default_language:$domain", $default_language ); + } + return $default_language; + } + + public static function active_languages() + { + global $mdb; + + if ( !$active_languages = \Cache::fetch( 'active_languages' ) ) + { + $active_languages = $mdb -> select( 'pp_langs', [ 'id', 'name', 'domain' ], [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] ); + \Cache::store( 'active_languages', $active_languages ); + } + return $active_languages; + } + + public static function lang_translations( $language = 'pl' ) + { + global $mdb; + + if ( !$translations = \Cache::fetch( "lang_translations:$language" ) ) + { + $translations[ '0' ] = $language; + + $results = $mdb -> select( 'pp_langs_translations', [ 'text', $language ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $translations[ $row['text'] ] = $row[ $language ]; + + \Cache::store( "lang_translations:$language", $translations ); + } + + return $translations; + } +} diff --git a/autoload/front/factory/class.Layouts.php b/autoload/front/factory/class.Layouts.php new file mode 100644 index 0000000..54fa2be --- /dev/null +++ b/autoload/front/factory/class.Layouts.php @@ -0,0 +1,53 @@ +<?php +namespace front\factory; + +class Layouts +{ + public static function layout_details( $layout_id ) + { + global $mdb, $cache; + + if ( !$layout = \Cache::fetch( "layout_details:$layout_id" ) ) + { + $layout = $mdb -> get( 'pp_layouts', '*', [ 'id' => (int)$layout_id ] ); + + if ( !$layout ) + $layout = $mdb -> get( 'pp_layouts', '*', [ 'status' => 1 ] ); + + \Cache::store( "layout_details:$layout_id", $layout ); + } + return $layout; + } + + public static function article_layout( $article_id ) + { + global $mdb, $cache; + + if ( !$layout = \Cache::fetch( "article_layout:$article_id" ) ) + { + $layout = $mdb -> get( 'pp_layouts', [ '[><]pp_articles' => [ 'id' => 'layout_id' ] ], '*', [ 'pp_articles.id' => (int)$article_id ] ); + + if ( !$layout ) + $layout = $mdb -> get( 'pp_layouts', '*', [ 'status' => 1 ] ); + + \Cache::store( "article_layout:$article_id", $layout ); + } + return $layout; + } + + public static function active_layout( $page_id ) + { + global $mdb, $cache; + + if ( !$layout = \Cache::fetch( "active_layouts:$page_id" ) ) + { + $layout = $mdb -> get( 'pp_layouts', [ '[><]pp_layouts_pages' => [ 'id' => 'layout_id' ] ], '*', [ 'page_id' => (int)$page_id ] ); + + if ( !$layout ) + $layout = $mdb -> get( 'pp_layouts', '*', [ 'status' => 1 ] ); + + \Cache::store( "active_layouts:$page_id", $layout ); + } + return $layout; + } +} diff --git a/autoload/front/factory/class.Menu.php b/autoload/front/factory/class.Menu.php new file mode 100644 index 0000000..76e09a1 --- /dev/null +++ b/autoload/front/factory/class.Menu.php @@ -0,0 +1,64 @@ +<?php +namespace front\factory; + +class Menu +{ + public static function submenu_details( $page_id, $lang_id ) + { + return self::subpages( $page_id, $lang_id ); + } + + static public function subpages( $page_id, $lang_id ) + { + global $mdb; + + if ( !$pages = \Cache::fetch( "subpages:$page_id:$lang_id" ) ) + { + $results = $mdb -> select( 'pp_pages', [ 'id' ], [ 'AND' => [ 'status' => 1, 'parent_id' => $page_id ], 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $page = \front\factory\Pages::page_details( $row['id'] ); + $page['pages'] = self::subpages( $row['id'], $lang_id ); + + $pages[] = $page; + } + + \Cache::store( "subpages:$page_id", $pages ); + } + return $pages; + } + + public static function menu_details( $menu_id ) + { + global $mdb, $lang_id; + + if ( !$menu = \Cache::fetch( "menu_details:$menu_id:$lang_id" ) ) + { + $menu = $mdb -> get( 'pp_menus', '*', [ 'id' => (int)$menu_id ] ); + $menu['pages'] = self::menu_pages( $menu_id ); + + \Cache::store( "menu_details:$menu_id:$lang_id", $menu ); + } + return $menu; + } + + public static function menu_pages( $menu_id, $parent_id = null ) + { + global $mdb, $lang_id; + + if ( !$pages = \Cache::fetch( "menu_pages:$menu_id:$parent_id:$lang_id" ) ) + { + $results = $mdb -> select( 'pp_pages', [ 'id' ], [ 'AND' => [ 'status' => 1, 'menu_id' => (int)$menu_id, 'parent_id' => $parent_id ], 'ORDER' => [ 'o' => 'ASC' ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + { + $page = \front\factory\Pages::page_details( $row['id'] ); + $page['pages'] = self::menu_pages( $menu_id, $row['id'] ); + + $pages[] = $page; + } + + \Cache::store( "menu_pages:$menu_id:$parent_id:$lang_id", $pages ); + } + return $pages; + } +} diff --git a/autoload/front/factory/class.Newsletter.php b/autoload/front/factory/class.Newsletter.php new file mode 100644 index 0000000..6fa4cfc --- /dev/null +++ b/autoload/front/factory/class.Newsletter.php @@ -0,0 +1,118 @@ +<?php +namespace front\factory; + +class Newsletter +{ + public static function newsletter_unsubscribe( $hash ) + { + global $mdb; + return $mdb -> update( 'pp_newsletter', [ 'status' => 0 ], [ 'hash' => $hash ] ); + } + + public static function newsletter_confirm( $hash ) + { + global $mdb; + if ( !$id = $mdb -> get( 'pp_newsletter', 'id', [ 'AND' => [ 'hash' => $hash, 'status' => 0 ] ] ) ) + return false; + else + $mdb -> update( 'pp_newsletter', [ 'status' => 1 ], [ 'id' => $id ] ); + return true; + } + + public static function newsletter_send( $limit = 5 ) + { + global $mdb, $settings, $lang; + + $results = $mdb -> query( 'SELECT * FROM pp_newsletter_send WHERE mailed = 0 ORDER BY id ASC LIMIT ' . $limit ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) + { + foreach ( $results as $row ) + { + $dates = explode( ' - ', $row['dates'] ); + + $text = \admin\view\Newsletter::preview( + \admin\factory\Articles::articles_by_date_add( $dates[0], $dates[1] ), + \admin\factory\Settings::settings_details(), + \admin\factory\Newsletter::email_template_detalis($row['id_template']) + ); + + if ( $settings['ssl'] ) $base = 'https'; else $base = 'http'; + + $link = $base . "://" . $_SERVER['SERVER_NAME'] . '/newsletter/unsubscribe/hash=' . \front\factory\Newsletter::get_hash( $row['email'] ); + $text = str_replace( '[WYPISZ_SIE]', $link, $text ); + + $regex = "-(<img[^>]+src\s*=\s*['\"])(((?!'|\"|http(|s)://).)*)(['\"][^>]*>)-i"; + $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); + + $regex = "-(<a[^>]+href\s*=\s*['\"])(((?!'|\"|http(|s)://).)*)(['\"][^>]*>)-i"; + $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); + + \S::send_email( $row['email'], 'Newsletter ze strony: ' . $_SERVER['SERVER_NAME'], $text ); + + if ( $row['only_once'] ) + $mdb -> update( 'pp_newsletter_send', [ 'mailed' => 1 ], [ 'id' => $row['id'] ] ); + else + $mdb -> delete( 'pp_newsletter_send', [ 'id' => $row['id'] ] ); + } + return true; + } + return false; + } + + public static function get_hash( $email ) + { + global $mdb; + return $mdb -> get( 'pp_newsletter', 'hash', [ 'email' => $email ] ); + } + + public static function newsletter_signin( $email ) + { + global $mdb, $lang, $settings; + + if ( !\S::email_check( $email ) ) + return false; + + if ( !$mdb -> get( 'pp_newsletter', 'id', [ 'email' => $email ] ) ) + { + $hash = md5( time() . $email ); + + $text = $settings['newsletter_header']; + $text .= \front\factory\Newsletter::get_template( '#potwierdzenie-zapisu-do-newslettera' ); + $text .= $settings['newsletter_footer_1']; + + $settings['ssl'] ? $base = 'https' : $base = 'http'; + + $regex = "-(<img[^>]+src\s*=\s*['\"])(((?!'|\"|http://).)*)(['\"][^>]*>)-i"; + $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); + + $regex = "-(<a[^>]+href\s*=\s*['\"])(((?!'|\"|http://).)*)(['\"][^>]*>)-i"; + $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); + + $link = '/newsletter/confirm/hash=' . $hash; + + $text = str_replace( '[LINK]', $link, $text ); + + $send = \S::send_email( $email, $lang['potwierdz-zapisanie-sie-do-newslettera'], $text ); + + $mdb -> insert( 'pp_newsletter', [ 'email' => $email, 'hash' => $hash, 'status' => 0 ] ); + + return true; + } + return false; + } + + public static function get_template( $template_name ) + { + global $mdb; + return $mdb -> get( 'pp_newsletter_templates', 'text', [ 'name' => $template_name ] ); + } + + public static function newsletter_signout( $email ) + { + global $mdb; + + if ( $mdb -> get( 'pp_newsletter', 'id', [ 'email' => $email ] ) ) + return $mdb -> delete( 'pp_newsletter', [ 'email' => $email ] ); + return false; + } +} \ No newline at end of file diff --git a/autoload/front/factory/class.Pages.php b/autoload/front/factory/class.Pages.php new file mode 100644 index 0000000..637fbcc --- /dev/null +++ b/autoload/front/factory/class.Pages.php @@ -0,0 +1,81 @@ +<?php +namespace front\factory; + +class Pages +{ + public static function page_sort( $page_id ) + { + global $mdb; + + if ( !$sort = \Cache::fetch( "page_sort:$page_id" ) ) + { + $sort = $mdb -> get( 'pp_pages', 'sort_type', [ 'id' => $page_id ] ); + + \Cache::store( "page_sort:$page_id", $sort ); + } + return $sort; + } + + public static function lang_url( $page_id, $lang_id_t, $domain = '', $default_domain = '' ) + { + $page = self::page_details( $page_id, $lang_id_t ); + + $page['language']['seo_link'] ? $url = '/' . $page['language']['seo_link'] : $url = '/s-' . $page['id'] . '-' . \S::seo( $page['language']['title'] ); + + if ( $lang_id_t == \S::get_session( 'current-lang' ) and !$default_domain and $lang_id_t == \front\factory\Languages::default_language( $domain ) ) + return $url; + + if ( $domain and $lang_id_t != \S::get_session( 'current-lang' ) ) + return 'http://' . $domain . $url; + + if ( !$domain && $default_domain ) + { + if ( $lang_id_t != \front\factory\Languages::default_language( $default_domain ) and $url != '#' ) + $url = '/' . $lang_id_t . $url; + + return 'http://' . $default_domain . $url; + } + + if ( $lang_id_t != \front\factory\Languages::default_language( $domain ) and $url != '#' ) + $url = '/' . $lang_id_t . $url; + + return $url; + } + + public static function page_details( $id = '', $lang_tmp = '' ) + { + global $mdb, $lang_id; + + $page_lang = $lang_id; + + if ( !$id ) + $id = self::main_page_id(); + + if ( $lang_tmp ) + $page_lang = $lang_tmp; + + if ( !$page = \Cache::fetch( "page_details:$page_lang:$id" ) ) + { + $page = $mdb -> get( 'pp_pages', '*', [ 'id' => (int)$id ] ); + $page['language'] = $mdb -> get( 'pp_pages_langs', '*', [ 'AND' => [ 'page_id' => (int)$id, 'lang_id' => $page_lang ] ] ); + + \Cache::store( "page_details:$page_lang:$id", $page ); + } + + return $page; + } + + public static function main_page_id() + { + global $mdb; + + if ( !$id = \Cache::fetch( 'main_page_id' ) ) + { + $id = $mdb -> get( 'pp_pages', 'id', [ 'AND' => [ 'status' => 1, 'start' => 1 ] ] ); + if ( !$id ) + $id = $mdb -> get( 'pp_pages', 'id', [ 'status' => 1, 'ORDER' => [ 'menu_id' => 'ASC', 'o' => 'ASC' ], 'LIMIT' => 1 ] ); + \Cache::store( 'main_page_id', $id ); + } + return $id; + } +} diff --git a/autoload/front/factory/class.Scontainers.php b/autoload/front/factory/class.Scontainers.php new file mode 100644 index 0000000..8a6be0a --- /dev/null +++ b/autoload/front/factory/class.Scontainers.php @@ -0,0 +1,23 @@ +<?php +namespace front\factory; + +class Scontainers +{ + public static function scontainer_details( $scontainer_id ) + { + global $mdb, $lang; + + if ( !$scontainer = \Cache::fetch( "scontainer_details:$scontainer_id:" . $lang[0] ) ) + { + $scontainer = $mdb -> get( 'pp_scontainers', '*', [ 'id' => (int)$scontainer_id ] ); + + $results = $mdb -> select( 'pp_scontainers_langs', '*', [ 'AND' => [ 'container_id' => (int)$scontainer_id, 'lang_id' => $lang[0] ] ] ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $scontainer['languages'] = $row; + + \Cache::store( "scontainer_details:$scontainer_id:" . $lang[0], $scontainer ); + } + + return $scontainer; + } +} diff --git a/autoload/front/factory/class.Search.php b/autoload/front/factory/class.Search.php new file mode 100644 index 0000000..78d56fb --- /dev/null +++ b/autoload/front/factory/class.Search.php @@ -0,0 +1,74 @@ +<?php +namespace front\factory; + +class Search +{ + public static function search_results( $search_txt, $lang_id ) + { + global $mdb, $cache; + + if ( strlen( $search_txt ) < 3 ) + return false; + + if ( !$articles = \Cache::fetch( "search_results:$search_txt:$lang_id" ) ) + { + $results = $mdb -> query( 'SELECT * FROM ( ' + . 'SELECT ' + . 'a.id, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN title ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'title ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS title, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN entry ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'entry ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS entry, ' + . '( CASE ' + . 'WHEN copy_from IS NULL THEN text ' + . 'WHEN copy_from IS NOT NULL THEN ( ' + . 'SELECT ' + . 'text ' + . 'FROM ' + . 'pp_articles_langs ' + . 'WHERE ' + . 'lang_id = al.copy_from AND article_id = a.id ' + . ') ' + . 'END ) AS text ' + . 'FROM ' + . 'pp_articles AS a ' + . 'INNER JOIN pp_articles_langs AS al ON a.id = al.article_id ' + . 'WHERE ' + . 'status = 1 AND lang_id = \'' . $lang_id . '\' ' + . ') AS q1 ' + . 'WHERE ' + . 'q1.title IS NOT NULL ' + . 'AND ' + . '( ' + . 'LOWER( title ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' ' + . 'OR ' + . 'LOWER( entry ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' ' + . 'OR ' + . 'LOWER( text ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' ' + . ')' ) -> fetchAll(); + if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) + $articles[] = \front\factory\Articles::article_details( $row['id'], $lang_id ); + + \Cache::store( "search_results:$search_txt:$lang_id", $articles ); + } + return $articles; + } +} diff --git a/autoload/front/factory/class.SeoAdditional.php b/autoload/front/factory/class.SeoAdditional.php new file mode 100644 index 0000000..196d7a9 --- /dev/null +++ b/autoload/front/factory/class.SeoAdditional.php @@ -0,0 +1,10 @@ +<?php +namespace front\factory; +class SeoAdditional +{ + public static function seo_active() + { + global $mdb; + return $mdb -> select( 'pp_seo_additional', '*', [ 'status' => 1 ] ); + } +} diff --git a/autoload/front/factory/class.Settings.php b/autoload/front/factory/class.Settings.php new file mode 100644 index 0000000..7a04550 --- /dev/null +++ b/autoload/front/factory/class.Settings.php @@ -0,0 +1,27 @@ +<?php +namespace front\factory; + +class Settings +{ + public static function settings_details() + { + global $mdb; + + if ( !$settings = \Cache::fetch( 'settings_details' ) ) + { + $results = $mdb -> select( 'pp_settings', '*' ); + if ( is_array( $results ) ) foreach ( $results as $row ) + $settings[ $row['param'] ] = $row['value']; + + \Cache::store( 'settings_details', $settings ); + } + + return $settings; + } + + public static function visit_counter() + { + global $mdb; + return $mdb -> get( 'pp_settings', 'value', [ 'param' => 'visits'] ); + } +} diff --git a/autoload/front/view/class.Articles.php b/autoload/front/view/class.Articles.php new file mode 100644 index 0000000..a06af80 --- /dev/null +++ b/autoload/front/view/class.Articles.php @@ -0,0 +1,149 @@ +<?php +namespace front\view; + +class Articles +{ + public static function password_view( $values ) + { + $tpl = new \Tpl; + if ( is_array( $values ) ) foreach ( $values as $key => $val ) + $tpl -> $key = $val; + return $tpl -> render( 'articles/password-view' ); + } + + public static function map( $settings, $map_counter ) + { + $tpl = new \Tpl; + $tpl -> settings = $settings; + $tpl -> map_counter = $map_counter; + return $tpl -> render( 'articles/map' ); + } + + public static function tags_cloud() + { + global $settings; + + if ( !$settings['tags'] ) + return false; + + $tpl = new \Tpl; + $tpl -> tags = \front\factory\Articles::tags(); + return $tpl -> render( 'articles/tags-cloud' ); + } + + public static function news( $page_id, $articles, $template = '' ) + { + if ( $template ) + $tpl = $template; + else + $tpl = 'articles/news'; + + return \Tpl::view( $tpl, [ + 'page_id' => $page_id, + 'articles' => $articles + ] ); + } + + public static function articles_list( $articles ) + { + $tpl = new \Tpl; + $tpl -> articles = $articles; + return $tpl -> render( 'articles/articles-list' ); + } + + public static function article( $values ) + { + $tpl = new \Tpl; + if ( is_array( $values ) ) foreach ( $values as $key => $val ) + $tpl -> $key = $val; + return $tpl -> render( 'articles/article' ); + } + + public static function article_full( $article_id, $lang_id ) + { + $tpl = new \Tpl; + $tpl -> article = \front\factory\Articles::article_details( $article_id, $lang_id ); + return $tpl -> render( 'articles/article-full' ); + } + + public static function miniature_articles_list( $page, $lang_id, $bs = 1 ) + { + $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); + + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) + $articles[] = \front\factory\Articles::article_details( $article, $lang_id ); + + $tpl = new \Tpl; + $tpl -> page_id = $page['id']; + $tpl -> articles = $articles; + $out .= $tpl -> render( 'articles/articles-miniatures' ); + + if ( $results['ls'] > 1 ) + { + $tpl = new \Tpl; + $tpl -> ls = $results['ls']; + $tpl -> bs = $bs ? $bs : 1; + $tpl -> page = $page; + $out .= $tpl -> render( 'site/pager' ); + } + + return $out; + } + + public static function entry_articles_list( $page, $lang_id, $bs = 1 ) + { + global $page; + + $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); + + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) + $articles[] = \front\factory\Articles::article_details( $article, $lang_id ); + + $tpl = new \Tpl; + $tpl -> page_id = $page['id']; + $tpl -> articles = $articles; + $out .= $tpl -> render( 'articles/articles-entries' ); + + if ( $results['ls'] > 1 ) + { + $tpl = new \Tpl; + $tpl -> ls = $results['ls']; + $tpl -> bs = $bs ? $bs : 1; + $tpl -> page = $page; + $out .= $tpl -> render( 'site/pager' ); + } + + return $out; + } + + public static function full_articles_list( $page, $lang_id, $bs = 1 ) + { + $results = \front\factory\Articles::page_articles( $page, $lang_id, $bs ); + + if ( is_array( $results['articles'] ) ) foreach ( $results['articles'] as $article ) + { + $article_details = \front\factory\Articles::article_details( $article, $lang_id ); + + if ( $article_details['password'] and !\S::get_session( 'article-' . $article . '-' . $article_details['password'] ) ) + $out .= \front\view\Articles::password_view( [ 'article' => $article ] ); + else + { + $out .= \Tpl::view( 'articles/article-full', [ + 'article' => $article_details, + 'table_of_contents' => \front\factory\Articles::generateTableOfContents( $article_details['language']['text'] ) + ] ); + } + } + + if ( $results['ls'] > 1 ) + { + $tpl = new \Tpl; + $tpl -> ls = $results['ls']; + $tpl -> bs = $bs ? $bs : 1; + $tpl -> page = $page; + $out .= $tpl -> render( 'site/pager' ); + } + + return $out; + } +} \ No newline at end of file diff --git a/autoload/front/view/class.Banners.php b/autoload/front/view/class.Banners.php new file mode 100644 index 0000000..3df8b38 --- /dev/null +++ b/autoload/front/view/class.Banners.php @@ -0,0 +1,35 @@ +<?php +namespace front\view; + +class Banners +{ + public static function banners( $banners ) + { + $tpl = new \Tpl; + $tpl -> banners = $banners; + return $tpl -> render( 'banner/banners' ); + } + + public static function main_banner( $banner ) + { + if ( file_exists( 'templates/banner/draw.php' ) and !file_exists( 'templates/banner/main-banner.php' ) ) + copy( 'templates/banner/draw.php', 'templates/banner/main-banner.php' ); + + if ( file_exists( 'templates/banner/draw.php' ) and file_exists( 'templates/banner/main-banner.php' ) ) + unlink( 'templates/banner/draw.php' ); + + if ( file_exists( 'templates_user/banner/draw.php' ) and !file_exists( 'templates_user/banner/main-banner.php' ) ) + copy( 'templates_user/banner/draw.php', 'templates_user/banner/main-banner.php' ); + + if ( file_exists( 'templates_user/banner/draw.php' ) and file_exists( 'templates_user/banner/main-banner.php' ) ) + unlink( 'templates_user/banner/draw.php' ); + + + if ( !\S::get_session( 'banner_close' ) && is_array( $banner ) ) + { + $tpl = new \Tpl; + $tpl -> banner = $banner; + return $tpl -> render( 'banner/main-banner' ); + } + } +} diff --git a/autoload/front/view/class.Languages.php b/autoload/front/view/class.Languages.php new file mode 100644 index 0000000..d262db5 --- /dev/null +++ b/autoload/front/view/class.Languages.php @@ -0,0 +1,13 @@ +<?php +namespace front\view; + +class Languages +{ + public static function languages() + { + $tpl = new \Tpl; + $tpl -> languages = \front\factory\Languages::active_languages(); + $tpl -> default_domain = \front\factory\Languages::default_domain(); + return $tpl -> render( 'site/languages' ); + } +} diff --git a/autoload/front/view/class.Menu.php b/autoload/front/view/class.Menu.php new file mode 100644 index 0000000..40348d6 --- /dev/null +++ b/autoload/front/view/class.Menu.php @@ -0,0 +1,42 @@ +<?php +namespace front\view; + +class Menu +{ + public static function pages( $pages, $level = 0, $current_page = 0 ) + { + $tpl = new \Tpl; + $tpl -> pages = $pages; + $tpl -> level = $level; + $tpl -> current_page = $current_page; + return $tpl -> render( 'menu/pages' ); + } + + public static function main_menu( $menu, $current_page ) + { + + $tpl = new \Tpl; + $tpl -> menu = $menu; + $tpl -> current_page = $current_page; + return $tpl -> render( 'menu/main-menu' ); + } + + public static function menu( $menu, $current_page ) + { + + $tpl = new \Tpl; + $tpl -> menu = $menu; + $tpl -> current_page = $current_page; + return $tpl -> render( 'menu/menu' ); + } + + public static function submenu( $pages, $current_page, $page_id, $level = 0 ) + { + $tpl = new \Tpl; + $tpl -> page_id = $page_id; + $tpl -> pages = $pages; + $tpl -> current_page = $current_page; + $tpl -> level = $level; + return $tpl -> render( 'menu/submenu' ); + } +} diff --git a/autoload/front/view/class.Newsletter.php b/autoload/front/view/class.Newsletter.php new file mode 100644 index 0000000..e303a2e --- /dev/null +++ b/autoload/front/view/class.Newsletter.php @@ -0,0 +1,11 @@ +<?php +namespace front\view; + +class Newsletter +{ + public static function newsletter() + { + $tpl = new \Tpl; + return $tpl -> render( 'newsletter/newsletter' ); + } +} diff --git a/autoload/front/view/class.Scontainers.php b/autoload/front/view/class.Scontainers.php new file mode 100644 index 0000000..67703e2 --- /dev/null +++ b/autoload/front/view/class.Scontainers.php @@ -0,0 +1,12 @@ +<?php +namespace front\view; + +class Scontainers +{ + public static function scontainer( $id ) + { + $tpl = new \Tpl; + $tpl -> scontainer = \front\factory\Scontainers::scontainer_details( $id ); + return $tpl -> render( 'scontainers/scontainer' ); + } +} diff --git a/autoload/front/view/class.Search.php b/autoload/front/view/class.Search.php new file mode 100644 index 0000000..7179f0d --- /dev/null +++ b/autoload/front/view/class.Search.php @@ -0,0 +1,18 @@ +<?php +namespace front\view; + +class Search +{ + public static function search_results( $articles ) + { + $tpl = new \Tpl; + $tpl -> articles = $articles; + return $tpl -> render( 'search/search-results' ); + } + + public static function search_form() + { + $tpl = new \Tpl; + return $tpl -> render( 'search/search-form' ); + } +} diff --git a/autoload/front/view/class.Site.php b/autoload/front/view/class.Site.php new file mode 100644 index 0000000..afafe2c --- /dev/null +++ b/autoload/front/view/class.Site.php @@ -0,0 +1,408 @@ +<?php + +namespace front\view; + +class Site +{ + const menu_pattern = '/MENU:[0-9]*/'; + const main_menu_pattern = '/MENU_GLOWNE:[0-9]*/'; + const submenu_pattern = '/SUBMENU:[0-9]*/'; + const container_pattern = '/KONTENER:[0-9]*/'; + const language_pattern = '/LANG:[a-zA-Z0-9_-]*/'; + const news_pattern = '/AKTUALNOSCI:([0-9]+)(?::([0-9]*))?(?::([^:\]]+))?/'; + const news_list_pattern = '/AKTUALNOSCI_LISTA:([0-9]*)((:([0-9]*))?)/'; + const top_news_pattern = '/NAJPOULARNIEJSZE_ARTYKULY:([0-9]*)((:([0-9]*))?)/'; + const article_pattern = '/ARTYKUL:[0-9]*/'; + const maps_pattern = '/\[MAPA](.*)\[\/MAPA]/'; + + public static function show() + { + global $page, $settings, $lang_id; + + $settings['link_version'] ? $www = 'www.' : $www = ''; + $settings['ssl'] == true ? $domain_prefix = 'https' : $domain_prefix = 'http'; + $url = preg_replace('#^(http(s)?://)?w{3}\.#', '$1', $_SERVER['SERVER_NAME']); + + if (\S::get('article')) + $layout = \front\factory\Layouts::article_layout(\S::get('article')); + + if (!$layout) + $layout = \front\factory\Layouts::active_layout($page['id']); + + if (\S::get('layout_id')) + $layout = \front\factory\Layouts::layout_details(\S::get('layout_id')); + + if ($settings['devel'] == true and file_exists('devel.html')) + $html = file_get_contents('devel.html'); + else + { + if (\S::is_mobile() and !empty($layout['m_html'])) + $html = $layout['m_html']; + else + $html = $layout['html']; + } + + \S::set_session('layout_id', $layout['layout_id'] ? $layout['layout_id'] : $layout['id']); + + if ($settings['google_search_console']) + $html = str_replace('</head>', '<meta name="google-site-verification" content="' . $settings['google_search_console'] . '"></head>', $html); + + if (\S::get_session('contrast')) + $html = str_replace('</head>', '<link rel="stylesheet" type="text/css" href="/layout/contrast.css"></head>', $html); + + if ($settings['facebook_link']) + $html = str_replace('</body>', \front\view\Site::facebook($settings['facebook_link']) . '</body>', $html); + + if (strpos($html, '[BANER_STRONA_GLOWNA]') === false) + $html = str_replace('</body>', '[BANER_STRONA_GLOWNA]' . '</body>', $html); + + if (strpos($html, '[WIDGET_TELEFON]') === false) + $html = str_replace('</body>', '[WIDGET_TELEFON]' . '</body>', $html); + + if ($settings['ssl'] == true) + { + $layout['css'] = str_replace('http://', 'https://', $layout['css']); + $layout['js'] = str_replace('http://', 'https://', $layout['js']); + $layout['m_css'] = str_replace('http://', 'https://', $layout['m_css']); + $layout['m_js'] = str_replace('http://', 'https://', $layout['m_js']); + } + + $html = str_replace('[COPYRIGHT]', \front\view\Site::copyright(), $html); + $html = str_replace('[BANER_STRONA_GLOWNA]', \front\view\Banners::main_banner(\front\factory\Banners::main_banner()), $html); + $html = str_replace('[BANERY]', \front\view\Banners::banners(\front\factory\Banners::banners()), $html); + $html = str_replace('[LICZNIK_ODWIEDZIN]', \front\view\Site::visit_counter(\S::get_session('visits')), $html); + $html = str_replace('[WYSZUKIWARKA]', \front\view\Search::search_form(), $html); + $html = str_replace('[CHMURA_TAGOW]', \front\view\Articles::tags_cloud(), $html); + $html = str_replace('[KONTRAST]', \front\view\Site::contrast(), $html); + $html = str_replace('[NEWSLETTER]', \front\view\Newsletter::newsletter(), $html); + $html = str_replace('[WIDGET_TELEFON]', $settings['widget_phone'] == 1 ? \front\view\Site::widget_phone() : '', $html); + + if (\S::is_mobile() and !empty($layout['m_html'])) + $html = str_replace('[CSS]', $layout['m_css'], $html); + else + $html = str_replace('[CSS]', $layout['css'], $html); + + if (\S::is_mobile() and !empty($layout['m_html'])) + $html = str_replace('[JAVA_SCRIPT]', $layout['m_js'], $html); + else + $html = str_replace('[JAVA_SCRIPT]', $layout['js'], $html); + + preg_match_all(self::menu_pattern, $html, $menu); + if (is_array($menu[0])) foreach ($menu[0] as $menu_tmp) + { + $menu_tmp = explode(':', $menu_tmp); + $html = str_replace('[MENU:' . $menu_tmp[1] . ']', \front\view\Menu::menu( + \front\factory\Menu::menu_details($menu_tmp[1]), + $page['id'] + ), $html); + } + + preg_match_all(self::main_menu_pattern, $html, $menu); + if (is_array($menu[0])) foreach ($menu[0] as $menu_tmp) + { + $menu_tmp = explode(':', $menu_tmp); + $html = str_replace('[MENU_GLOWNE:' . $menu_tmp[1] . ']', \front\view\Menu::main_menu( + \front\factory\Menu::menu_details($menu_tmp[1]), + $page['id'] + ), $html); + } + + preg_match_all(self::submenu_pattern, $html, $submenu); + if (is_array($submenu[0])) foreach ($submenu[0] as $submenu_tmp) + { + $submenu_tmp = explode(':', $submenu_tmp); + $html = str_replace('[SUBMENU:' . $submenu_tmp[1] . ']', \front\view\Menu::submenu( + \front\factory\Menu::submenu_details($submenu_tmp[1], $lang_id), + $page['id'], + $submenu_tmp[1] + ), $html); + } + + preg_match_all(self::container_pattern, $html, $container_list); + if (is_array($container_list[0])) foreach ($container_list[0] as $container_list_tmp) + { + $container_list_tmp = explode(':', $container_list_tmp); + $html = str_replace('[KONTENER:' . $container_list_tmp[1] . ']', \front\view\Scontainers::scontainer($container_list_tmp[1]), $html); + } + + $html = str_replace('[ZAWARTOSC]', \front\controls\Site::route(), $html); + + preg_match_all( self::news_pattern, $html, $news_list ); + if ( is_array( $news_list[0] ) ) + { + foreach ( $news_list[0] as $index => $news_list_tmp ) + { + $id = $news_list[1][$index]; + $limit = $news_list[2][$index] ?: $settings['news_limit']; + $extra = $news_list[3][$index] ?? ''; + + $pattern_parts = ['AKTUALNOSCI', $id]; + if ($news_list[2][$index] !== '') $pattern_parts[] = $limit; + if ($extra !== '') $pattern_parts[] = $extra; + $pattern = '[' . implode(':', $pattern_parts) . ']'; + + $html = str_replace( + $pattern, + \front\view\Articles::news( $id, \front\factory\Articles::news( $id, $limit, $lang_id ), $extra ), + $html + ); + } + } + + // prosta lista aktualności z wybranej podstrony + preg_match_all(self::news_list_pattern, $html, $news_list); + if (is_array($news_list[0])) foreach ($news_list[0] as $news_list_tmp) + { + $news_list_tmp = explode(':', $news_list_tmp); + $news_list_tmp[2] != '' ? $news_limit = $news_list_tmp[2] : $news_limit = $settings['news_limit']; + $news_list_tmp[2] != '' ? $pattern = '[AKTUALNOSCI_LISTA:' . $news_list_tmp[1] . ':' . $news_list_tmp[2] . ']' : $pattern = '[AKTUALNOSCI_LISTA:' . $news_list_tmp[1] . ']'; + + $news_list = \Article::getNews($news_list_tmp[1], $news_limit, $lang_id); + $view_news_list = \Article::newsList($news_list); + $html = str_replace($pattern, $view_news_list, $html); + } + + // prosta lista z najpopularniejszymi artykułami + preg_match_all(self::top_news_pattern, $html, $news_list); + if (is_array($news_list[0])) foreach ($news_list[0] as $news_list_tmp) + { + $news_list_tmp = explode(':', $news_list_tmp); + $news_list_tmp[2] != '' ? $news_limit = $news_list_tmp[2] : $news_limit = $settings['news_limit']; + $news_list_tmp[2] != '' ? $pattern = '[NAJPOULARNIEJSZE_ARTYKULY:' . $news_list_tmp[1] . ':' . $news_list_tmp[2] . ']' : $pattern = '[NAJPOULARNIEJSZE_ARTYKULY:' . $news_list_tmp[1] . ']'; + + $news_list = \Article::getTopNews($news_list_tmp[1], $news_limit, $lang_id); + $view_news_list = \Article::newsList($news_list); + $html = str_replace($pattern, $view_news_list, $html); + } + + preg_match_all(self::language_pattern, $html, $language_list); + if (is_array($language_list[0])) foreach ($language_list[0] as $language_list_tmp) + { + $language_list_tmp = explode(':', $language_list_tmp); + $html = str_replace('[LANG:' . $language_list_tmp[1] . ']', \S::lang($language_list_tmp[1]), $html); + } + + if (\S::get('article')) + { + $article = \front\factory\Articles::article_details(\S::get('article'), $lang_id); + + $title = $article['language']['meta_title'] ? $article['language']['meta_title'] : $article['language']['title']; + $meta_keywords = $article['language']['meta_keywords']; + $meta_description = $article['language']['meta_description']; + $og_image = $article['language']['main_image'] ? $article['language']['main_image'] : null; + } + else if (\S::get('tag')) + { + $tag = \front\factory\Articles::tag_details(\S::get('tag')); + + $title = 'Tag: ' . $tag['name']; + $meta_keywords = $tag['name']; + $meta_description = 'Artykuły oznaczone tagiem: ' . $tag['name']; + } + else if (\S::get('search')) + { + $title = 'Wyniki wyszukiwania: ' . \S::get_session('search_txt'); + $meta_keywords = \S::get_session('search_txt'); + $meta_description = 'Wyniki wyszukiwania: ' . \S::get_session('search_txt'); + } + else + { + if ($page['language']['meta_title']) + $title = $page['language']['meta_title']; + else + $title = $page['language']['title'] . ' ● ' . $settings['firm_name']; + + $meta_keywords = $page['language']['meta_keywords']; + $meta_description = $page['language']['meta_description']; + } + + $seo_additional = \front\factory\SeoAdditional::seo_active(); + if (is_array($seo_additional) and count($seo_additional)) foreach ($seo_additional as $seo) + { + preg_match('/' . str_replace('/', '\/', $seo['url']) . '/', $_SERVER['REQUEST_URI'], $seo_results); + if (is_array($seo_results) and count($seo_results)) + { + if ($seo['title']) + $title = $seo['title']; + + if ($seo['keywords']) + $meta_keywords = $seo['keywords']; + + if ($meta_description) + $meta_description = $seo['description']; + + if ($seo['text']) + $html = str_replace('[DODATKOWA_TRESC]', '<div class="seo-additional-text">' . $seo['text'] . '</div>', $html); + else + $html = str_replace('[DODATKOWA_TRESC]', '', $html); + } + } + + $html = str_replace('[DODATKOWA_TRESC]', '', $html); + $html = str_replace('[TITLE]', $title, $html); + $html = str_replace('[META_KEYWORDS]', $meta_keywords, $html); + $html = str_replace('[META_DESCRIPTION]', $meta_description, $html); + $html = str_replace('[OG_URL]', $domain_prefix . '://' . $www . $url . $_SERVER["REQUEST_URI"], $html); + $html = str_replace('[OG_IMG]', $og_image ? ($domain_prefix . '://' . $www . $url . '/' . $og_image) : '', $html); + $html = str_replace('[JEZYKI]', \front\view\Languages::languages(), $html); + $html = str_replace('[KALENDARZ]', \front\view\Site::calendar(), $html); + $html = str_replace('[TYTUL_STRONY]', \front\view\Site::title( + $page['language']['title'], + $page['show_title'], + $page['language']['site_title'] + ), $html); + $html = str_replace('[STRONA_GLOWNA]', \front\factory\Pages::lang_url( + \front\factory\Pages::main_page_id(), + $lang_id, + \S::get_domain($_SERVER['HTTP_HOST']), + \front\factory\Languages::default_domain() + ), $html); + + preg_match_all(self::article_pattern, $html, $articles_list); + if (is_array($articles_list[0])) foreach ($articles_list[0] as $article_tmp) + { + $article_tmp = explode(':', $article_tmp); + $html = str_replace('[ARTYKUL:' . $article_tmp[1] . ']', \front\view\Articles::article_full($article_tmp[1], $lang_id), $html); + } + + /* atrybut noindex */ + if (\S::get('article')) + { + \front\factory\Articles::article_noindex(\S::get('article')) === '1' ? $noindex = 'noindex' : $noindex = 'index, follow'; + $html = str_replace('[META_INDEX]', '<meta name="robots" content="' . $noindex . '">', $html); + } + else + { + $page['language']['noindex'] === '1' ? $noindex = 'noindex' : $noindex = 'index, follow'; + $html = str_replace('[META_INDEX]', '<meta name="robots" content="' . $noindex . '">', $html); + } + + if ($page['language']['canonical']) + $html = str_replace('</head>', '<link rel="canonical" href="' . $page['language']['canonical'] . '" /></head>', $html); + + while (strpos($html, '[PHP]') !== false) + { + $text = explode('[PHP]', $html); + $before = $text[0]; + for ($i = 1; $i < count($text); $i++) + { + $temp = explode('[/PHP]', $text[$i]); + $code = $temp[0]; + + ob_start(); + eval(str_replace(''', '"', $code)); + $out .= ob_get_contents(); + ob_end_clean(); + + $out .= $temp[1]; + } + $html = $before . $out; + } + + preg_match_all(self::maps_pattern, $html, $maps_list); + if (is_array($maps_list[1]) and !empty($maps_list[1])) + { + $html = strrev(implode(strrev('<link class="footer" rel="stylesheet" type="text/css" href="/libraries/leaflet/leaflet.css"><script class="footer" type="text/javascript" src="/libraries/leaflet/leaflet.js"></script></head>'), explode(strrev('</head>'), strrev($html), 2))); + foreach ($maps_list[1] as $map_tmp) + { + ++$map_counter; + $map_settings = explode('|', $map_tmp); + $html = str_replace('[MAPA]' . $map_tmp . '[/MAPA]', \front\view\Articles::map($map_settings, $map_counter), $html); + } + } + + $html = str_replace('[ALERT]', \front\view\Site::alert(), $html); + + return $html; + } + + public static function widget_phone() + { + $tpl = new \Tpl; + return $tpl->render('widgets/widget-phone'); + } + + public static function facebook($facebook_link) + { + $tpl = new \Tpl; + $tpl->facebook_link = $facebook_link; + return $tpl->render('site/facebook'); + } + + public static function title($title, $show_title, $site_title) + { + if (!$show_title) + return false; + + if ($site_title) + $title = $site_title; + + $tpl = new \Tpl; + $tpl->title = $title; + return $tpl->render('site/title'); + } + + static public function alert() + { + if ($alert = \S::get_session('alert')) + { + \S::delete_session('alert'); + \S::delete_session('alert-class'); + + return \Tpl::view('site/alert', [ + 'alert' => $alert, + 'alert_class' => \S::get_session('alert-class') + ]); + } + } + + public static function copyright() + { + $tpl = new \Tpl; + return $tpl->render('site/copyright'); + } + + public static function contact() + { + $tpl = new \Tpl; + return $tpl->render('site/contact'); + } + + public static function cookie_information() + { + $tpl = new \Tpl; + return $tpl->render('site/cookie-information'); + } + + public static function calendar($month = '', $year = '', $ajax = false) + { + global $settings, $lang_id; + + if (!$settings['calendar']) + return false; + + if (!$month) $month = date('n'); + if (!$year) $year = date('Y'); + + $tpl = new \Tpl; + $tpl->month = $month; + $tpl->year = $year; + $tpl->months = \S::months(); + $tpl->ajax = $ajax; + $tpl->articles = \front\factory\Articles::articles_by_date($month, $year, $lang_id); + return $tpl->render('site/calendar'); + } + + public static function visit_counter($visit_counter) + { + $tpl = new \Tpl; + $tpl->visit_counter = $visit_counter; + return $tpl->render('site/visit-counter'); + } + + public static function contrast() + { + $tpl = new \Tpl; + return $tpl->render('site/contrast'); + } +} diff --git a/autoload/view/class.Projects.php b/autoload/view/class.Projects.php new file mode 100644 index 0000000..e29e831 --- /dev/null +++ b/autoload/view/class.Projects.php @@ -0,0 +1,83 @@ +<?php +namespace view; + +class Projects +{ + public static function links_external( $project_id, $bs ) + { + $count = \factory\Projects::count_links_external( $project_id ); + $count = $count[0]['c']; + $ls = ceil( $count / \factory\Projects::$limit ); + + if ( $bs > $ls ) + $bs = $ls; + if ( $bs < 1 ) + $bs = 1; + + $tpl = new \Tpl; + $tpl -> links_internal_all = \factory\Projects::count_links_internal_all( $project_id ); + $tpl -> links_visited = \factory\Projects::links_visited( $project_id ); + $tpl -> links_external = \factory\Projects::links_external( $bs, $project_id ); + $tpl -> project = \factory\Projects::project_details( $project_id ); + $tpl -> link_external_count = $count; + + $pager = new \Paging( $ls, $bs, \factory\Projects::$limit, $count, '/projects/links_external/&id='. $project_id . '&' ); + $tpl -> pager = $pager -> draw(); + + return $tpl -> render( 'projects/links-external' ); + } + + public static function details( $project_id, $bs, $filtr_mke = 0, $filtr_mde = 0, $filtr_mte = 0, $filtr_irb = 0, $filtr_grb = 0, $filtr_url = 0, $filtr_wor = 0, $filtr_wir = 0, $filtr_hid = 0, + $filtr_edf = 0, $filtr_edfrops = 0, $filtr_404 = 0, $filtr_tables = 0, $filtr_iframe = 0, $filtr_h1 = 0, $filtr_images_alt = 0 ) + { + $count = \factory\Projects::count_links_internal( + $project_id, $filtr_mke, $filtr_mde, $filtr_mte, $filtr_irb, $filtr_grb, $filtr_url, $filtr_wor, $filtr_wir, $filtr_hid, $filtr_edf, $filtr_edfrops, $filtr_404, $filtr_tables, $filtr_iframe, $filtr_h1, + $filtr_images_alt + ); + $count = $count[0]['c']; + $ls = ceil( $count / \factory\Projects::$limit ); + + if ( $bs > $ls ) + $bs = $ls; + if ( $bs < 1 ) + $bs = 1; + + $tpl = new \Tpl; + $tpl -> project_id = $project_id; + $tpl -> filtr_mke = $filtr_mke; + $tpl -> filtr_mde = $filtr_mde; + $tpl -> filtr_mte = $filtr_mte; + $tpl -> filtr_irb = $filtr_irb; + $tpl -> filtr_grb = $filtr_grb; + $tpl -> filtr_url = $filtr_url; + $tpl -> filtr_wor = $filtr_wor; + $tpl -> filtr_wir = $filtr_wir; + $tpl -> filtr_hid = $filtr_hid; + $tpl -> filtr_edf = $filtr_edf; + $tpl -> filtr_iframe = $filtr_iframe; + $tpl -> filtr_tables = $filtr_tables; + $tpl -> filtr_edfrops = $filtr_edfrops; + $tpl -> filtr_images_alt = $filtr_images_alt; + $tpl -> filtr_h1 = $filtr_h1; + $tpl -> filtr_404 = $filtr_404; + $tpl -> links_interval_count = $count; + $tpl -> project = \factory\Projects::project_details( $project_id ); + $tpl -> links_internal_all = \factory\Projects::count_links_internal_all( $project_id ); + $tpl -> links_internal = \factory\Projects::links_internal_list( + $bs, $project_id, $filtr_mke, $filtr_mde, $filtr_mte, $filtr_irb, $filtr_grb, $filtr_url, $filtr_wor, $filtr_wir, $filtr_hid, $filtr_edf, $filtr_edfrops, $filtr_404, $filtr_tables, $filtr_iframe, $filtr_h1, + $filtr_images_alt + ); + $tpl -> links_visited = \factory\Projects::links_visited( $project_id ); + + $pager = new \Paging( $ls, $bs, \factory\Projects::$limit, $count, '/projects/details/&id='. $project_id . '&' ); + $tpl -> pager = $pager -> draw(); + + return $tpl -> render( 'projects/details' ); + } + + public static function view_list() + { + $tpl = new \Tpl; + return $tpl -> render( 'projects/view-list' ); + } +} diff --git a/backup_20250512_232458.zip b/backup_20250512_232458.zip new file mode 100644 index 0000000..4a322e7 Binary files /dev/null and b/backup_20250512_232458.zip differ diff --git a/backup_tmp.json b/backup_tmp.json new file mode 100644 index 0000000..0a9f0a8 --- /dev/null +++ b/backup_tmp.json @@ -0,0 +1 @@ +{"method":"php_zip","files":["\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/index.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/sitemap.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/facebook.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/logo-facebook.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/logo-linkedin.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/lang_en.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/lang_uk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/logo-twitter.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/lang_pl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/logo-pinterest.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/logo-google.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/lang_ru.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/system\/no_img.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/03.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/02.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/images\/01.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/404.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/.htaccess","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/2\/e\/s_cache_2ee377301adb607837cf36dd0be1d55d","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/2\/e\/s_cache_2e377effb2e8dee00915d10bc41c4828","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/8\/2\/s_cache_824cdda0500db9426af5ec2fb3846b2b","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/8\/a\/s_cache_8a1c2c42f3b939badbc3e5177fed8130","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/8\/d\/s_cache_8dbda3c46cb28c6c99ef9bfb465a670a","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/b\/e\/s_cache_be865270a0fc2db1dd05b600a33e26b0","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/4\/b\/s_cache_4b916ae533b4ded88ddc3edfe99de1be","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/4\/f\/s_cache_4f8d44beda75c5ce22c4c71a424b2924","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/4\/f\/s_cache_4f2a88383d9e7d5a3b156e42e163e140","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/4\/0\/s_cache_40ad008eb3804cc736ac60d0ac505acd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/4\/d\/s_cache_4d1e8c5b911f25a38000e1be6b6e1484","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/f\/f\/s_cache_ff99420789784e56863fe969f7b405c9","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/f\/a\/s_cache_faebd22e7d407d96f5a31f0ef85ea81c","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/5\/c\/s_cache_5c85f90e0e2637c2e4c574a7d1c00e58","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/5\/s_cache_05a4fa1fa3f7a426dee8373179846081","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/5\/s_cache_0513195467b5c3a33e05245133766eca","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/0\/s_cache_009a93317a248d0fbcd664b6fa5e79e8","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/0\/s_cache_005fd49cec23e9dea5b899898fe1605a","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/c\/s_cache_0cc7a3a852e48158942f8f3c1670f044","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/0\/e\/s_cache_0e16d1a2bd092a234b450e191b5a93da","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/a\/4\/s_cache_a4e7cd3b73167172d2779733e1fa4a2e","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/a\/4\/s_cache_a4167a3dc2d339e741df9a4327ca2b0f","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/1\/c\/s_cache_1c3762e2c25aaeac7742566dfa4090cc","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/1\/d\/s_cache_1dadc53aac80dbf4091c197e359e301a","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/2\/s_cache_c202d8248a09f0392c7a3dff2ebc3237","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/b\/s_cache_cba7481b112bd52ec34f3ff39241edbf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/b\/s_cache_cb1c0c6d0e3d722d25d1dfdcb1bc8474","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/4\/s_cache_c49fe1b5271400c65d78f2acc23561a7","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/0\/s_cache_c0cf150fcad27a95dad0b850a9fc00bc","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/c\/9\/s_cache_c9ef9c9f3cbe1c7aa53d0b7b3816d034","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/e\/4\/s_cache_e4634a68d6b1324060542d7367002ad9","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/e\/0\/s_cache_e0f5627ca4e602091a6031b79708705b","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/e\/a\/s_cache_eafe8d12c6ea80f6a8027048d41bcfc0","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/e\/1\/s_cache_e1f217f92b88a697f84f7cfe1ef39517","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/6\/f\/s_cache_6f95fe93af62cc2a989cde74cdcc06e8","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/6\/e\/s_cache_6e0482ecd119670c7b623f9bb1a539bd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/b\/s_cache_7b455a211826b583aed685841a3846d1","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/b\/s_cache_7be6d4d863ba5b4018135edaa776f1ca","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/0\/s_cache_70c889178cded5f9ed5b07860de4998a","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/a\/s_cache_7af8065fdc6fa8ee0c837c0b3b1011b8","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/d\/s_cache_7d5f5442018d1bf777df0ce79317133c","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/7\/3\/s_cache_7392692e27887a6a3f1638f4da1a076f","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/d\/f\/s_cache_df8e16882b112ce2c0739934bd19b578","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/d\/5\/s_cache_d57ac45256849d9b13e2422d91580fb9","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/d\/a\/s_cache_da1df15afaf9871e8162e4a5c7c926f4","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/d\/a\/s_cache_da88fdad0e74f1220f1f34acd2b5ee9b","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/d\/d\/s_cache_dd720e9091dfdb2a07db5929affbacf7","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/3\/8\/s_cache_38f758989f90119e865038d3d0f43098","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/3\/c\/s_cache_3cfb68b8f1d8b990538ad0a994d3d0e7","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/9\/1\/s_cache_9196f0e085e81dc1ea4245246029fc18","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/temp\/9\/9\/s_cache_9904a85ac0d682c47f2ed349b55e5573","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/cron.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/.gitignore","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/thumb.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/logs\/2016-03-22.log","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/logs\/2016-03-14.log","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/logs\/2016-06-08.log","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.silverlight.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.browserplus.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/i18n\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/css\/jquery.plupload.queue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/jquery.plupload.queue.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/delete.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/backgrounds.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/throbber.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/done.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/error.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/buttons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/buttons-disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.plupload.queue\/img\/transp50.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.html5.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.flash.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.full.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/.part","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/upload-articles-files.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.silverlight.xap","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.gears.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.flash.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/upload-articles-images.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.ui.plupload\/jquery.ui.plupload.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.ui.plupload\/css\/jquery.ui.plupload.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.ui.plupload\/img\/plupload-bw.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/jquery.ui.plupload\/img\/plupload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.html4.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload\/plupload.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-nested-sortable\/jquery.mjs.nestedSortable.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-nested-sortable\/skin-vista\/ui.dynatree.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-nested-sortable\/skin-vista\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-nested-sortable\/skin-vista\/icons.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/htaccess.ini","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/captcha.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/sortable\/sortable.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/jquery-2.1.3.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/javascript.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/lozad.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/jquery-migrate-1.0.0.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery\/captcha.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/FontAwesome.otf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.woff2","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/css\/font-awesome.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/font-awesome-4.7.0\/css\/font-awesome.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/additional-classes.ini","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/version.ini","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/groovy\/groovy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/groovy\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/toml\/toml.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/toml\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/troff\/troff.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/troff\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/eiffel\/eiffel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/eiffel\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jinja2\/jinja2.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jinja2\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dtd\/dtd.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dtd\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haxe\/haxe.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haxe\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sass\/sass.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sass\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/markdown\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/markdown\/markdown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/markdown\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/scheme\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/scheme\/scheme.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/commonlisp\/commonlisp.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/commonlisp\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiddlywiki\/tiddlywiki.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiddlywiki\/tiddlywiki.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiddlywiki\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/velocity\/velocity.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/velocity\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xml\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xml\/xml.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xml\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/properties\/properties.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/properties\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ttcn\/ttcn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ttcn\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/idl\/idl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/idl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asn.1\/asn.1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asn.1\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/swift\/swift.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/swift\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/django\/django.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/django\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mathematica\/mathematica.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mathematica\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/diff\/diff.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/diff\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mllike\/mllike.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mllike\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asterisk\/asterisk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asterisk\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/fortran\/fortran.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/fortran\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cypher\/cypher.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cypher\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mumps\/mumps.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mumps\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dart\/dart.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dart\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/htmlembedded\/htmlembedded.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/htmlembedded\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/javascript\/typescript.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/javascript\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/javascript\/javascript.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/javascript\/json-ld.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/javascript\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/htmlmixed\/htmlmixed.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/htmlmixed\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sieve\/sieve.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sieve\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ttcn-cfg\/ttcn-cfg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ttcn-cfg\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mscgen\/msgenny_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mscgen\/mscgen.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mscgen\/xu_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mscgen\/mscgen_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mscgen\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vue\/vue.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vue\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/stex\/stex.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/stex\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/stex\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/modelica\/modelica.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/modelica\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/verilog\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/verilog\/verilog.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/verilog\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gas\/gas.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gas\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/python\/python.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/python\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rst\/rst.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rst\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/perl\/perl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/perl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cmake\/cmake.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cmake\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/nginx\/nginx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/nginx\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/spreadsheet\/spreadsheet.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/spreadsheet\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/slim\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/slim\/slim.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/slim\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sparql\/sparql.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sparql\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asciiarmor\/asciiarmor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/asciiarmor\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ecl\/ecl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ecl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ntriples\/ntriples.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ntriples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ebnf\/ebnf.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ebnf\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/factor\/factor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/factor\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haskell-literate\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haskell-literate\/haskell-literate.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vb\/vb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vb\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/shell\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/shell\/shell.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/shell\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/yaml-frontmatter\/yaml-frontmatter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/yaml-frontmatter\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/nsis\/nsis.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/nsis\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ruby\/ruby.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ruby\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/ruby\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mirc\/mirc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/mirc\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vhdl\/vhdl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vhdl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dylan\/dylan.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dylan\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/coffeescript\/coffeescript.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/coffeescript\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/gss.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/scss_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/less_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/gss_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/css.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/less.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/scss.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/css\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/julia\/julia.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/julia\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/twig\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/twig\/twig.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/apl\/apl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/apl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clojure\/clojure.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clojure\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/livescript\/livescript.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/livescript\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/textile\/textile.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/textile\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/textile\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/smalltalk\/smalltalk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/smalltalk\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clike\/clike.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clike\/scala.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clike\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/clike\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/erlang\/erlang.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/erlang\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/handlebars\/handlebars.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/handlebars\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vbscript\/vbscript.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/vbscript\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/solr\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/solr\/solr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haskell\/haskell.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haskell\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tcl\/tcl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tcl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/crystal\/crystal.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/crystal\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/stylus\/stylus.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/stylus\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/turtle\/turtle.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/turtle\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/meta.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/q\/q.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/q\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/lua\/lua.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/lua\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/go\/go.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/go\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/php\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/php\/php.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/php\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xquery\/xquery.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xquery\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/xquery\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/smarty\/smarty.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/smarty\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/z80\/z80.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/z80\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/oz\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/oz\/oz.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jsx\/jsx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jsx\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jsx\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jade\/jade.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/jade\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sql\/sql.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/sql\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/octave\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/octave\/octave.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gherkin\/gherkin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gherkin\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rust\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rust\/rust.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rust\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiki\/tiki.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiki\/tiki.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tiki\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pig\/pig.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pig\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/soy\/soy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/soy\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tornado\/tornado.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/tornado\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gfm\/gfm.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gfm\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/gfm\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/elm\/elm.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/elm\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/fcl\/fcl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/fcl\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/r\/r.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/r\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/forth\/forth.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/forth\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/yaml\/yaml.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/yaml\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cobol\/cobol.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/cobol\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haml\/test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haml\/haml.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/haml\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/brainfuck\/brainfuck.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/brainfuck\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dockerfile\/dockerfile.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/dockerfile\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rpm\/rpm.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rpm\/changes\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/rpm\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/d\/d.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/d\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pascal\/pascal.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pascal\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pegjs\/pegjs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/pegjs\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/http\/http.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/http\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/puppet\/puppet.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/mode\/puppet\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/matchtags.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/closetag.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/closebrackets.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/matchbrackets.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/trailingspace.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/edit\/continuelist.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/dialog\/dialog.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/dialog\/dialog.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/scroll\/annotatescrollbar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/scroll\/simplescrollbars.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/scroll\/scrollpastend.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/scroll\/simplescrollbars.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/mode\/loadmode.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/mode\/overlay.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/mode\/simple.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/mode\/multiplex.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/mode\/multiplex_test.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/selection\/selection-pointer.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/selection\/mark-selection.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/selection\/active-line.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/merge\/merge.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/merge\/merge.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/runmode\/runmode-standalone.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/runmode\/runmode.node.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/runmode\/colorize.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/runmode\/runmode.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/brace-fold.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/indent-fold.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/foldcode.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/foldgutter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/comment-fold.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/foldgutter.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/markdown-fold.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/fold\/xml-fold.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/javascript-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/xml-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/anyword-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/css-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/sql-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/html-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/show-hint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/hint\/show-hint.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/matchesonscrollbar.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/searchcursor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/match-highlighter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/jump-to-line.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/matchesonscrollbar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/search\/search.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/tern\/tern.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/tern\/tern.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/tern\/worker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/wrap\/hardwrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/comment\/continuecomment.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/comment\/comment.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/css-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/yaml-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/html-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/json-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/lint.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/javascript-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/coffeescript-lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/lint\/lint.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/fullscreen.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/autorefresh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/rulers.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/panel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/fullscreen.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/addon\/display\/placeholder.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/eclipse.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/twilight.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/isotope.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/mdn-like.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/colorforth.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/ttcn.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/liquibyte.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/yeti.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/neat.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/cobalt.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/night.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/3024-day.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/neo.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/tomorrow-night-bright.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/paraiso-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/vibrant-ink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/lesser-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/icecoder.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/the-matrix.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/blackboard.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/material.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/railscasts.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/tomorrow-night-eighties.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/ambiance-mobile.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/dracula.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/mbo.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/pastel-on-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/elegant.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/bespin.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/xq-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/abcdef.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/base16-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/monokai.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/xq-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/ambiance.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/paraiso-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/zenburn.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/seti.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/hopscotch.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/midnight.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/3024-night.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/erlang-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/rubyblue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/base16-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/theme\/solarized.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/lib\/codemirror.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/codemirror\/lib\/codemirror.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/phpmailer\/class.phpmailer.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/phpmailer\/class.pop3.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/phpmailer\/class.smtp.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/theme.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/checkboxes.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/breadcrumbs.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/alerts.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/glyphicons.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/admindesigns.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/font-awesome.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/icomoon.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/octicons.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/open-sans.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/glyphicons-pro.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/zocial.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/stateface.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/fonts\/iconsweets.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/navbar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/pages.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/switches.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/panels.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/widgets\/tile-widgets.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/widgets\/all.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/widgets\/panel-widgets.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/print.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/jumbotron.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utility\/responsive.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utility\/boxed.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utility\/print.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utility\/all.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utility\/demo.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/tabs.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/grid.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/button-groups.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/close.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/animate.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/media.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/settings.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/dropdowns.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/helpers.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/topbar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/navbar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/sidebar_left.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/sidebar_right.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/sidebar_actions.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/footer.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/all.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/components\/content_trays.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/type.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/tables.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/code.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/icons.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/carousel.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/shared.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/table-tools.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/flot.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/mapplic.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/nanoscroller.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/cropper.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/fileupload.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/admindock.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/pickers.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/ckeditor.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/typeahead.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/fullcalendar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/gmap.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/jqueryspinner.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/footable.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/datatables.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/tagmanager.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/multiselect.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/maxlength.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/all_plugins.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/treeview.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/summernote.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/markdown.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/dropzone.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/adminmodals.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/datepicker.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/rangeslider.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/countdown.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/circlegraphs.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/jvectormap.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/highcharts.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/scroller.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/select2.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/nestable.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/nprogress.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/pnotify.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/adminpanels.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/markitup.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/duallistbox.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/expose.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/magnific.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/plugins\/tagsinput.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/responsive-embed.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/widgets.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/ie.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/pagination.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/labels.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/list-group.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/badges.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/wells.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/normalize.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/pricing-tables.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/backgrounds.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/utilities.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/pager.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/variables.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/thumbnails.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/popovers.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/input-groups.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/tooltip.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/scaffolding.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/buttons.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/modals.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/checkboxes.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/image.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/alerts.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/size.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/navbar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/panels.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/resize.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/tabs.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/nav-divider.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/grid.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/progress-bar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/border-radius.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/dropdowns.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/helpers.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/text-emphasis.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/table-row.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/vendor-prefixes.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/hide-text.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/plugins.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/gradients.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/pagination.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/opacity.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/labels.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/list-group.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/responsive-visibility.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/backgrounds.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/clearfix.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/text-overflow.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/reset-filter.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/tab-focus.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/grid-framework.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/center-block.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/buttons.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/forms.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/nav-vertical-align.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/mixins\/sidebar.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/forms.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/navs.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/component-animations.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/responsive-utilities.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/progress-bars.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/base\/tiles.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/less\/theme.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/less\/theme_variables.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/less\/theme_settings.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/less\/custom_changes\/custom.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/less\/theme_base.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/css\/theme.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/skin\/default_skin\/css\/theme.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/admindesigns\/admindesigns.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/admindesigns\/admindesigns.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/admindesigns\/admindesigns.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/admindesigns\/admindesigns.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/admindesigns\/admindesigns.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons-halflings-regular.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons-halflings-regular.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons-halflings-regular.woff2","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons-halflings-regular.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons-halflings-regular.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons\/glyphicons.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/stateface\/stateface-regular-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/stateface\/stateface-regular-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/stateface\/stateface.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/stateface\/stateface-regular-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/stateface\/stateface-regular-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-regular.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-regular.otf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-regular.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-regular.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-regular.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/glyphicons-pro\/glyphicons-pro.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/License.rtf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/IconSweets-Deluxe.dev.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/IconSweets-Deluxe.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/iconsweets.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/IconSweets-Deluxe.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/IconSweets-Deluxe.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/iconsweets\/IconSweets-Deluxe.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/octicons\/octicons.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/octicons\/octicons.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/octicons\/octicons.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/octicons\/octicons.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/octicons\/octicons.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/fontawesome-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/fontawesome-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/FontAwesome.otf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/fontawesome-webfont.woff2","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/fontawesome-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/fontawesome-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/font-awesome\/font-awesome.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/README.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/icomoon\/icomoon.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/icomoon\/icomoon.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/icomoon\/icomoon.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/icomoon\/icomoon.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/icomoon\/icomoon.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-Light.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-SemiBold.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-Regular.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-SemiBoldItalic.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-Bold.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-Italic.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-ExtraBoldItalic.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-LightItalic.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/open-sans.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-ExtraBold.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/open-sans\/OpenSans-BoldItalic.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/zocial\/zocial.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/zocial\/zocial-regular-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/zocial\/zocial-regular-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/zocial\/zocial-regular-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/fonts\/zocial\/zocial-regular-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/elements.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/bootstrap_fix.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/plugins.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/all-themes.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-danger.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-dark.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-warning.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/colors.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-system.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-primary.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-alert.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/mixins\/admin-skins.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-success.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/skins\/theme-info.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/less\/admin-forms.less","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/admin-forms.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/admin-forms.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/all-themes.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/all-themes.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-danger.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-system.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-primary.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-info.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-warning.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-alert.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/css\/skins\/theme-success.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery.stepper.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/source\/jquery.spectrum.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/source\/jquery-ui-monthpicker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/source\/jquery-ui-timepicker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/source\/jquery.steps.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-it-CH.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ta.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-en-GB.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-zh-TW.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-en-AU.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ky.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fr-CA.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-en-NZ.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-be.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-rm.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-nn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sr-SR.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-nl-BE.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-kk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-lb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-pt-BR.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-zh-HK.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ar-DZ.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ml.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-cy-GB.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-hy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-zh-CN.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fr-CH.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-tj.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/i18n\/datepicker-fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/additional-methods.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery.steps.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery-ui-monthpicker.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery.spectrum.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery.validate.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/admin-tools\/admin-forms\/js\/jquery-ui-datepicker.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/jquery-ui.theme.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_flat_10_000000_40x100.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_glass_100_fdf5ce_1x400.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_diagonals-thick_20_666666_40x40.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_gloss-wave_35_f6a828_500x100.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/animated-overlay.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_highlight-soft_100_eeeeee_1x100.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-icons_ffd27a_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-icons_ef8c08_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_diagonals-thick_18_b81900_40x40.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_highlight-soft_75_ffe45c_1x100.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-icons_228ef1_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_glass_100_f6f6f6_1x400.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-bg_glass_65_ffffff_1x400.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-icons_ffffff_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/images\/ui-icons_222222_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/jquery-ui.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/jquery-ui.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery_ui\/jquery-ui.structure.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/jquery\/jquery-1.11.1.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/jquery.plugin.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/countdownBasic.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/jquery.countdown.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/countdownLED.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/countdownGlowing.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/countdown\/digits.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.ua.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.kr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/locale\/bootstrap-markdown.ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/markdown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/bootstrap-markdown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markdown\/to-markdown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/canvasbg\/canvasbg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/duallistbox\/jquery.bootstrap-duallistbox.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/duallistbox\/jquery.bootstrap-duallistbox.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/moment\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/moment\/moment.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/moment\/moment.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jquery.spin\/spin.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/fonts\/slick.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/fonts\/slick.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/fonts\/slick.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/fonts\/slick.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/ajax-loader.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/slick.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/slick.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/slick\/slick.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/css\/bootstrap-colorpicker.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/css\/bootstrap-colorpicker.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/js\/bootstrap-colorpicker.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/img\/bootstrap-colorpicker\/hue-horizontal.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/img\/bootstrap-colorpicker\/alpha.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/img\/bootstrap-colorpicker\/alpha-horizontal.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/img\/bootstrap-colorpicker\/saturation.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/colorpicker\/img\/bootstrap-colorpicker\/hue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/templates\/preview.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/templates\/preview.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-textile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-container.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-dotclear.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/handle.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-wiki.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-json.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/menu.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-markdown.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-bbcode.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/submenu.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/images\/bg-editor-html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/markitup\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/simple\/images\/handle.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/simple\/images\/menu.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/simple\/images\/submenu.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/skins\/simple\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/list-numeric.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/clean.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/italic.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/link.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/stroke.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/image.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/list-bullet.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/picture.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/images\/bold.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/sets\/default\/set.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/markitup\/jquery.markitup.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/imagezoom\/jquery.elevatezoom.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/imagezoom\/jquery.elevatezoom.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/nprogress\/nprogress.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/sparkline\/jquery.sparkline.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/sparkline\/jquery.sparkline.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/ladda\/ladda.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/ladda\/ladda.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datepicker\/css\/bootstrap-datetimepicker.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datepicker\/js\/bootstrap-datetimepicker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datepicker\/js\/bootstrap-datetimepicker.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts-3d.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/heatmap.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/data.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/drilldown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/solid-gauge.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/canvas-tools.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/solid-gauge.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/no-data-to-display.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/funnel.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/canvas-tools.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/data.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/drilldown.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/no-data-to-display.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/exporting.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/heatmap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/funnel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/modules\/exporting.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts-more.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts-3d.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/grid-light.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/dark-blue.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/sand-signika.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/dark-unica.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/dark-green.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/skies.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/gray.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/themes\/grid.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts-more.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/adapters\/standalone-framework.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/adapters\/standalone-framework.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts-all.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highcharts\/highcharts.src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/css\/bootstrap-editable.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/js\/bootstrap-editable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/js\/bootstrap-editable.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/CHANGELOG.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/wysihtml5.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/wysihtml5-0.3.0.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/wysiwyg-color.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/wysihtml5-0.3.0.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/bootstrap-wysihtml5-0.0.2.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/bootstrap-wysihtml5-0.0.2.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/wysihtml5\/bootstrap-wysihtml5-0.0.2\/bootstrap-wysihtml5-0.0.2.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/typeaheadjs\/typeaheadjs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/typeaheadjs\/lib\/typeahead.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/typeaheadjs\/lib\/typeahead.js-bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/address\/address.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/inputs\/address\/address.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/xeditable\/img\/clear.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/pnotify\/pnotify.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/bstour\/bootstrap-tour.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/bstour\/bootstrap-tour.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/component.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/thumbs\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/thumbs\/3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/thumbs\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/images\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/modernizr.custom.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/grid.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/oggrid\/default.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/text-data.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/skin-win8\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/skin-win8\/ui.fancytree.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/skin-win8\/ui.fancytree.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/skin-win8\/icons.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-tree-taxonomy.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/jquery.fancytree-all.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-tree-fs.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-tree-local.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/MIT-LICENSE.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.columnview.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.persist.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.debug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.themeroller.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.dnd.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.menu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.filter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.wide.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.table.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.childcounter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/extensions\/jquery.fancytree.edit.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/jquery.fancytree-all.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-tree-plain2.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-tree-plain.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fancytree\/ajax-sub2.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jquerydial\/jquery.knob.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/zh-CN.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/pt-BR.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/zh-TW.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/i18n\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/style-css\/core.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/style-css\/core.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/css\/core.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/css\/theme\/classic\/layout.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/css\/theme\/default\/layout.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/select2.full.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/select2.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/_multiple.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/_dropdown.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/style-css\/layout.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/style-css\/layout.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/classic\/_multiple.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/classic\/layout.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/classic\/_single.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/classic\/_defaults.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/default\/_multiple.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/default\/layout.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/theme\/default\/_single.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/core.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/_single.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/select2\/scss\/mixins\/_gradients.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/map\/gmaps.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/map\/gmaps.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/flip\/jquery.flip.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/flip\/jquery.flip.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/bstimeout\/bs-timeout.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/bstimeout\/bs-timeout.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/xls.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/background.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/pdf_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/psd\/printer.psd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/psd\/collection.psd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/psd\/copy document.psd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/psd\/file_types.psd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/collection.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/xls_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/collection_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/csv_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/copy_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/print.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/csv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/images\/print_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/css\/dataTables.tableTools.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/css\/dataTables.tableTools.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/js\/dataTables.tableTools.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/js\/dataTables.tableTools.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/select_column.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/alter_buttons.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/button_text.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/select_os.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/collection.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/new_init.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/select_single.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/plug-in.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/pdf_message.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/multi_instance.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/swf_path.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/bootstrap.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/multiple_tables.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/ajax.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/defaults.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/select_multi.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/examples\/jqueryui.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/swf\/copy_csv_xls_pdf.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/TableTools\/swf\/copy_csv_xls.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/css\/dataTables.colvis.jqueryui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/css\/dataTables.colVis.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/css\/dataTables.colVis.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/js\/dataTables.colVis.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/js\/dataTables.colVis.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/new_init.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/mouseover.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/restore.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/text.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/button_order.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/two_tables.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/exclude_columns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/two_tables_identical.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/title_callback.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/group_columns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColVis\/examples\/jqueryui.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/images\/insert.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/css\/dataTables.colReorder.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/css\/dataTables.colReorder.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/js\/dataTables.colReorder.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/js\/dataTables.colReorder.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/realtime.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/col_filter.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/reset.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/colvis.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/predefined.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/new_init.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/scrolling.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/alt_insert.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/server_side.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/fixedcolumns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/fixedheader.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/state_save.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/ColReorder\/examples\/jqueryui.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/css\/dataTables.fixedHeader.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/css\/dataTables.fixedHeader.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/js\/dataTables.fixedHeader.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/js\/dataTables.fixedHeader.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/header_footer.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/two_tables.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/top_left_right.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedHeader\/examples\/zIndexes.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/css\/dataTables.fixedColumns.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/css\/dataTables.fixedColumns.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/js\/dataTables.fixedColumns.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/js\/dataTables.fixedColumns.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/col_filter.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/css_size.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/right_column.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/colvis.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/two_columns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/index_column.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/server-side-processing.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/bootstrap.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/size_fixed.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/rowspan.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/left_right_columns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/FixedColumns\/examples\/size_fluid.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/average().js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/page.jumpToData().js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetHiddenNodes.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFindCellRowIndexes.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFilterAll.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetColumnData.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetTds.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetColumnIndex.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnStandingRedraw.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/columns().order().js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnDataUpdate.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnSetFilteringDelay.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnAddDataAndDisplay.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnSortNeutral.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnMultiFilter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnAddTr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/sum().js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFilterOnReturn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFakeRowspan.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnProcessingIndicator.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/column().title().js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnDisplayStart.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnVisibleToColumnIndex.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnDisplayRow.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetAdjacentTr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnReloadAjax.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnGetTd.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFilterClear.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnColumnIndexToVisible.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnLengthChange.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnFindCellRowNodes.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/api\/fnPagingInfo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Romanian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Tamil.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Russian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Swahili.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Indonesian-Alternative.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Macedonian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Polish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Belarusian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Galician.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Vietnamese.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Croatian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Bulgarian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Italian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Swedish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Hebrew.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Spanish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Bangla.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Albanian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Chinese-traditional.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Turkish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Hindi.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Catalan.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Afrikaans.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Latvian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Urdu.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Czech.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Slovak.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Finnish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Arabic.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Slovenian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/German.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Azerbaijan.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Greek.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Filipino.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Chinese.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Gujarati.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Portuguese-Brasil.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Uzbek.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Irish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Japanese.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Dutch.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Georgian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Hungarian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Danish.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/French.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Serbian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Norwegian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Estonian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Indonesian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Persian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/English.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Icelandic.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Ukranian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Korean.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Thai.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Malay.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Lithuanian.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/Portuguese.lang","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/i18n\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/time.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/file-size.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/date-euro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/chinese-string.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/enum.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/stringMonthYear.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/numeric-comma.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/formatted-numbers.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/currency.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/natural.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/percent.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/title-numeric.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/date-uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/num-html.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/date-de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/scientific.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/monthYear.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/anti-the.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/datetime-us.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/title-string.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/alt-string.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/ip-address.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/persian.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/date-eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/signed-num.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/turkish-string.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/custom-data-source\/dom-text.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/custom-data-source\/dom-checkbox.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/custom-data-source\/dom-select.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/date-dd-MMM-yyyy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/sorting\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/file-size.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/numeric-comma.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/currency.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/date-uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/num-html.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/ip-address.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/formatted-num.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/type-detection\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/jqueryui\/dataTables.jqueryui.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/jqueryui\/dataTables.jqueryui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/jqueryui\/dataTables.jqueryui.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/jqueryui\/dataTables.jqueryui.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/jqueryui\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/style-css\/dataTables.jqueryui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/style-css\/dataTables.jqueryui.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/dataTables.foundation.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/dataTables.foundation.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/images\/sort_asc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/images\/sort_asc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/images\/sort_both.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/images\/sort_desc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/images\/sort_desc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/dataTables.foundation.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/foundation\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/font-awesome\/dataTables.fontAwesome.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/font-awesome\/foundation.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/font-awesome\/datatables.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/font-awesome\/bootstrap.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/2\/dataTables.bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/2\/dataTables.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/2\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/2\/dataTables.bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/images\/sort_asc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/images\/sort_asc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/images\/sort_both.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/images\/sort_desc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/images\/sort_desc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/1\/dataTables.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/1\/dataTables.bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/3\/dataTables.bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/3\/dataTables.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/3\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/integration\/bootstrap\/3\/dataTables.bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/row-based\/TableTools.ShowSelectedOnly.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/row-based\/range_numbers.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/row-based\/range_dates.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/type-based\/phoneNumber.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/type-based\/html.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/type-based\/accent-neutralise.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/filtering\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/four_button.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/select.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/ellipses.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/extjs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/input.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/scrolling.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/pagination\/jPaginator\/dataTables.jPaginator.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/searchHighlight\/dataTables.searchHighlight.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/searchHighlight\/dataTables.searchHighlight.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/searchHighlight\/dataTables.searchHighlight.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/lengthLinks\/dataTables.lengthLinks.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/lengthLinks\/dataTables.lengthLinks.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/lengthLinks\/dataTables.lengthLinks.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/alphabetSearch\/dataTables.alphabetSearch.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/alphabetSearch\/dataTables.alphabetSearch.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Plugins\/features\/alphabetSearch\/dataTables.alphabetSearch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/css\/dataTables.keyTable.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/css\/dataTables.keyTable.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/js\/dataTables.keyTable.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/js\/dataTables.keyTable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/examples\/events.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/examples\/scrolling.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/examples\/html.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/KeyTable\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/images\/filler.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/css\/dataTables.autoFill.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/css\/dataTables.autoFill.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/js\/dataTables.autoFill.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/js\/dataTables.autoFill.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/step-callback.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/complete-callback.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/scrolling.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/columns.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/fill-both.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/fill-horizontal.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/AutoFill\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/images\/ajax-loader.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/images\/calender.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/images\/close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/images\/shadow_left.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/images\/shadow_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/css\/dataTables.editor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/js\/editor.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/js\/dataTables.editor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/js\/dataTables.editor.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/plug-ins\/fieldPlugin.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/plug-ins\/displayController.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/plug-ins\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/tabControl.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/options.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/submitButton.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/server-side-processing.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/editIcon.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/inline-editing\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/confirmClose.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/triggerButton.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/clientValidation.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/backNext.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/duplicateButton.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/api\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/inTableControls.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/grouped.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/options.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/defaultOptions.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/bubble-editing\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/envelope.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/envelopeInTable.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/stackedInputs.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/bootstrap.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/styling\/jqueryui.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/standalone\/inline.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/standalone\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/standalone\/bubble.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/standalone\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/jsonId.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/formOnlyData.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/joinArray.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/joinLinkTable.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/joinSelf.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/tableOnlyData.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/htmlTable.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/test.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/localstorage.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/exportButtons.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/REST.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/deepObjects.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/advanced\/test.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/fieldTypes.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/join.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/responsive.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/inTableControls.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/fieldDefaults.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/server-side-processing.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/test.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/i18n.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/dates.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/simple\/test.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/jqueryui\/editor.jqueryui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/jqueryui\/editor.jqueryui.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/examples.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/editor-demo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/bootstrap\/editor.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/bootstrap\/editor.bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/resources\/bootstrap\/editor.bootstrap.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/staff-array.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/standalone.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/tableFormatting.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/jsonId.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/todo.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/htmlTable.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/browsers_array.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/tableOnlyData.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/rest\/staff-rest.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/rest\/remove.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/rest\/create.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/rest\/get.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/rest\/edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/join.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/joinArray.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/joinSelf.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/staff.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/joinLinkTable.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/README.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/dates.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/formOnlyData.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/fieldTypes.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/php\/browsers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/sql\/sqlserver.sql","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/sql\/mysql.sql","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/sql\/sqlite.sql","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/sql\/postgres.sql","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Bootstrap.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Sqlserver\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Sqlserver\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Oracle\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Oracle\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Postgres\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Postgres\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Sqlite\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Sqlite\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Mysql\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Driver\/Mysql\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Database.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Result.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Database\/Query.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Editor\/Validate.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Editor\/Field.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Editor\/Join.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Editor\/Format.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Editor\/Editor.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/Ext\/Ext.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Editor\/php\/DataTables.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/Readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/images\/loading-background.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/css\/dataTables.scroller.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/css\/dataTables.scroller.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/js\/dataTables.scroller.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/js\/dataTables.scroller.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/simple.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/server-side_processing.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/data\/2500.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/data\/ssp.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/large_js_source.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/state_saving.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Scroller\/examples\/api_scrolling.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/style-css\/dataTables.responsive.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/style-css\/dataTables.responsive.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/Readme.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/css\/dataTables.responsive.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/css\/dataTables.responsive.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/js\/dataTables.responsive.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/js\/dataTables.responsive.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/right-column.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/custom-renderer.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/whole-row-control.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/column-control.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/disable-child-rows.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/child-rows\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/new.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/option.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/default.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/ajax.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/className.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/initialisation\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/styling\/foundation.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/styling\/bootstrap.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/styling\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/display-control\/auto.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/display-control\/init-classes.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/display-control\/classes.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/display-control\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/extensions\/Responsive\/examples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/sort_asc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/forward_enabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/Sorting icons.psd","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/calender.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/forward_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/sort_asc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/sort_both.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/sort_desc_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/back_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/forward_enabled_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/favicon.ico","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/sort_desc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/back_enabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/images\/back_enabled_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/css\/dataTables.plugins.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/css\/dataTables.bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/js\/jquery.dataTables.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/datatables\/media\/js\/dataTables.bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/circles\/circles.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/jquery.form.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/jquery.validate.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/additional-methods.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/additional-methods.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/jquery.mockjax.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/validate\/jquery.validate.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.services.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.rdfa.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.microdata.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.microformat.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.overlays.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/ui\/jquery.ui.map.extensions.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/jquery.ui.map.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/gmap\/jquery.ui.map.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/maxlength\/bootstrap-maxlength.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/maxlength\/bootstrap-maxlength.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jquerymask\/jquery.maskedinput.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/tabdrop\/bootstrap-tabdrop.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/nestable\/nestable.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/nestable\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/nestable\/jquery.nestable.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/nestable\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fileupload\/fileupload.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/cropper\/cropper.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/cropper\/cropper.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/cropper\/cropper.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/cropper\/cropper.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/typeahead.bundle.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/typeahead.jquery.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/bloodhound.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/bloodhound.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/typeahead.bundle.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/typeahead\/typeahead.jquery.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/summernote\/summernote-bs3.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/summernote\/summernote.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/summernote\/summernote.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/tagsinput\/tagsinput.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/tagsinput\/tagsinput.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/tagmanager\/tagmanager.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/tagmanager\/tagmanager.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/jquery.jvectormap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/abstract-canvas-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/numeric-scale.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-group-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-canvas-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-group-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/jvectormap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/abstract-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-shape-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-circle-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-shape-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/abstract-shape-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-canvas-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-path-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vml-circle-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/ordinal-scale.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/world-map.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/vector-canvas.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/color-scale.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/proj.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/data-series.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/simple-scale.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/lib\/svg-path-element.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-us-lcc-en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-world-mill-en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-us-merc-en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-us-mill-en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-map.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jvectormap\/assets\/jquery-jvectormap-us-aea-en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/globalize\/cultures-download.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/globalize\/globalize.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/globalize\/globalize.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/cloth.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/food.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/misc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-first.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-ground.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-basement.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-first-small.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-basement-small.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-ground-small.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-first.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/subway.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/oldnavy.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/pullbear.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/pizzahut.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/starbucks.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/amc.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/kfc.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/gap.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/mcdonalds.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/walgreens.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/hm.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/applebees.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/petco.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/zara.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/belk.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/sportchek.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/sears.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/cvs.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/att.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/sephora.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/jcpenney.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/thumb\/macys.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-basement.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/mall\/mall-ground.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/cart.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/images\/health.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/css\/map.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/js\/html5shiv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/js\/jquery.mousewheel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/js\/hammer.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/js\/jquery.easing.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/mapplic-ie.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/arrow-down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/arrow-up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/loader.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/tooltip-triangle.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/target.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/pin-purple.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/fullscreen.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/pin-orange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/cross.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/openhand.cur","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/fullscreen-exit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/closedhand.cur","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/alpha20.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/viewer.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/alpha50.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/pin-green.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/pin-blue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/images\/pin-red.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/mapplic.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mapplic\/mapplic.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mapplic\/mall.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/sunburst.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-forest.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/docco.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/pojoaque.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/far.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/obsidian.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/xcode.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/arta.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/color-brewer.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/paraiso.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/idea.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/kimbie.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-heath.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-seaside.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/tomorrow-night-bright.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/kimbie.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/solarized_dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/tomorrow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-heath.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/railscasts.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/tomorrow-night-eighties.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/tomorrow-night.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-dune.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-lakeside.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/brown_paper.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-seaside.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/vs.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/googlecode.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/ascetic.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/mono-blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-dune.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/brown_papersq.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/school_book.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/pojoaque.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/solarized_light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-lakeside.light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/atelier-forest.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/magula.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/monokai.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/school_book.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/rainbow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/tomorrow-night-blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/zenburn.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/github.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/monokai_sublime.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/ir_black.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/codepen-embed.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/hybrid.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/default.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/paraiso.dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/styles\/foundation.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/highlight\/highlight.pack.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/images\/spritemap@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/images\/spritemap.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/css\/basic.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/css\/stylus\/basic.styl","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/css\/stylus\/dropzone.styl","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/css\/dropzone.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/dropzone\/dropzone.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ar-ma.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/zh-tw.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/sr-cyrl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ar-sa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/de-at.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/fullcalendar.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/fullcalendar.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/gcal.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/lib\/moment.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/fullcalendar\/fullcalendar.print.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/jquery.magnific-popup.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/8.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/5.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/9.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/6.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/example_thumbs\/7.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/magnific-popup.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/magnific\/jquery.magnific-popup.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/daterange\/moment.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/daterange\/daterangepicker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/daterange\/daterangepicker.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/d3.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/c3.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/shape.bar-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/legend-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/interaction-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/type-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/class-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/axis-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/tooltip-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/api.data-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/core-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/api.grid-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/api.focus-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/c3-helper.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/domain-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/api.zoom-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/arc-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/data-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/zoom-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/shape.line-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/grid-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/c3-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/spec\/api.load-spec.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/c3.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/require.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/extensions\/exporter\/test.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/extensions\/exporter\/phantom-exporter.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/extensions\/exporter\/config.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/c3charts\/extensions\/js\/c3ext.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.errorbars.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.selection.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.resize.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.stack.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.categories.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/FAQ.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.navigate.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/excanvas.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.pie.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/API.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.time.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/excanvas.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/build.log","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.crosshair.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/PLUGINS.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.threshold.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/CONTRIBUTING.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/LICENSE.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.tooltip.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.canvas.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.fillbetween.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.colorhelpers.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.symbol.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.image.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/jquery.flot.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/NEWS.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/jqueryflot\/Makefile","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/lazyline\/rAF-polyfil.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/lazyline\/jquery.lazylinepainter-1.5.0.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/lazyline\/jquery.lazylinepainter-1.5.0.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.metro.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/fonts\/footable.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/fonts\/footable.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/fonts\/footable.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/fonts\/footable.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.standalone.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.metro.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.core.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.standalone.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/css\/footable.core.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.bookmarkable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.striping.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.sort.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.paginate.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.grid.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.filter.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/footable\/js\/footable.all.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/holder\/holder.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/waypoints\/jquery.waypoints.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/animate\/animate.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/animate\/animate.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mixitup\/jquery.mixitup.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/vendor\/plugins\/mixitup\/jquery.mixitup.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/main.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery-scrollLock.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery.hoverIntent.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery-ui-touch-punch.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery.mousewheel.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery.smooth-scroll.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/json2.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/source\/jquery-scrollLock.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/helpers.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/helpers\/readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/admindock\/admindock.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/underscore\/underscore.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootbox\/bootbox.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/nanoscroller\/jquery.nanoscroller.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/nanoscroller\/jquery.nanoscroller.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/multiselect\/bootstrap-multiselect.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/utility.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/scroller\/jquery.scroller.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/affix.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/carousel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/scrollspy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/tooltip.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/button.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/collapse.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/tab.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/modal.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/transition.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/alert.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/popover.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/source\/dropdown.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/bootstrap\/bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/adminpanels\/adminpanels.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/utility\/fullscreen\/jquery.fullscreen.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/custom.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/demo\/charts\/flot.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/demo\/charts\/highcharts.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/demo\/charts\/d3.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/demo\/widgets.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/js\/demo\/demo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/topbar-bg2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/noise.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/backgrounds\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/backgrounds\/2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/backgrounds\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/error-bg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/patterns\/topbar-bg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo_white.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo_red.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo-icon_white.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo_grey.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/admin-form-logo.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/logos\/logo-icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/details_open.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/arrow_right_12x12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/Markdown.Editor.Icons.fw.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/arrow_left_12x12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/Markdown.Editor.Icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/admindock-sprite.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/grippy_large.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/plugins\/details_close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/sprites\/flag-sm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/sprites\/news-logo_sprite.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/sprites\/flag-xs.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/sprites\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/sprites\/favicons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/favicon.ico","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/5.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/placeholder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/6.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/profile_avatar.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/avatars\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/5.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/license.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_1.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_2.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_6.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_5.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/framework\/img\/stock\/products\/thumb_7.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/ckeditor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/contents.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/oc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/es-mx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/de-ch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/magicline\/images\/hidpi\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/magicline\/images\/hidpi\/icon-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/magicline\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/magicline\/images\/icon-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/table\/dialogs\/table.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/a11yhelp.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/oc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/_translationstatus.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/es-mx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/de-ch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/pagebreak\/images\/pagebreak.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/flash\/images\/placeholder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/flash\/dialogs\/flash.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/icons\/jsplus_bootstrap_show_blocks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/style-no-paddings.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_show_blocks\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_label\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_label\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_label\/icons\/jsplus_bootstrap_label.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_label\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmsstaticcontainer\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmsstaticcontainer\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_down\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_down\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_down\/icons\/jsplus_bootstrap_table_merge_cell_down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_down\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/oc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/es-mx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/de-ch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_address.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_p.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_div.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_pre.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_blockquote.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/images\/block_h1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/icons\/hidpi\/showblocks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/icons\/hidpi\/showblocks-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/icons\/showblocks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/icons\/showblocks-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/showblocks\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/dialog\/dialogDefinition.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_button\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_button\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_button\/icons\/jsplus_bootstrap_button.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_button\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/images\/uncommentselectedrange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/images\/autoformat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/images\/searchcode.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/images\/autocomplete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/images\/commentselectedrange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/icons\/uncommentselectedrange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/icons\/autoformat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/icons\/searchcode.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/icons\/autocomplete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/icons\/commentselectedrange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/eclipse.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/twilight.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/isotope.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/mdn-like.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/colorforth.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/ttcn.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/liquibyte.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/yeti.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/neat.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/cobalt.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/darcula.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/idea.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/yonce.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/night.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/3024-day.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/neo.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/tomorrow-night-bright.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/paraiso-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/vibrant-ink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/duotone-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/lesser-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/icecoder.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/the-matrix.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/blackboard.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/ssms.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/material.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/railscasts.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/tomorrow-night-eighties.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/ambiance-mobile.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/dracula.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/duotone-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/mbo.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/pastel-on-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/elegant.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/lucario.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/nord.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/bespin.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/shadowfox.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/xq-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/gruvbox-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/abcdef.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/base16-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/monokai.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/xq-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/oceanic-next.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/ambiance.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/panda-syntax.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/paraiso-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/zenburn.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/seti.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/hopscotch.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/midnight.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/3024-night.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/erlang-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/rubyblue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/base16-dark.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/theme\/solarized.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/css\/codemirror.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.javascript.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.bbcode.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.addons.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.addons.search.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.twig.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.bbcodemixed.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.handlebars.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/beautify.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.htmlmixed.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/js\/codemirror.mode.php.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/codemirror\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/LICENSE.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/skins\/moono-lisa\/scayt.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/CHANGELOG.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/dialogs\/options.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/dialogs\/dialog.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/scayt\/dialogs\/toolbar.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/oc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/es-mx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/de-ch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/icons\/blockquote.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/icons\/hidpi\/blockquote.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/blockquote\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/find\/dialogs\/find.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/liststyle\/dialogs\/liststyle.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_left\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_left\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_left\/icons\/jsplus_bootstrap_table_add_col_left.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_left\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/tableresize\/dev\/tableresize.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/tableresize\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/tableresize\/samples\/tableresize.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_down\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_down\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_down\/icons\/jsplus_bootstrap_table_row_move_down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_down\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widgetselection\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_left\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_left\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_left\/icons\/jsplus_bootstrap_table_col_move_left.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_left\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/link\/images\/hidpi\/anchor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/link\/images\/anchor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/link\/dialogs\/link.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/link\/dialogs\/anchor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/oc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/_translationstatus.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/es-mx.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/de-ch.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/specialchar\/dialogs\/specialchar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/tr_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ar_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/de_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ru_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/fr_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/hu_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/pt_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/nl_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ja_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/pl_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/it_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/nn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/vi_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/en_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/images\/icon_1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/youtube\/plugin_1.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_left\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_left\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_left\/icons\/jsplus_bootstrap_table_add_cell_left.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_left\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/icons\/jsplus_bootstrap_gallery.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/icons\/jsplus_bootstrap_gallery_3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/uploader.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/css\/jquery.plupload.queue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/uploader.xap","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/delete.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/backgrounds.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/throbber.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/done.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/error.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/buttons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/buttons-disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/lib\/img\/transp50.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/img\/resize_up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/img\/resize_up_checked_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/img\/resize_up_disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/img\/resize_up_hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_gallery\/img\/resize_up_checked.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmslinkarticle\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmslinkarticle\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_up\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_up\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_up\/icons\/jsplus_bootstrap_table_add_row_up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_up\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_down\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_down\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_down\/icons\/jsplus_bootstrap_row_move_down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_down\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_badge\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_badge\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_badge\/icons\/jsplus_bootstrap_badge_4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_badge\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_conf\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_conf\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_conf\/icons\/jsplus_bootstrap_table_col_conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_conf\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/readme.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/iconsamples\/finish.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/iconsamples\/start.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/iconsamples\/shadow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/images\/sprite.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/images\/TextIcon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/icons\/googlemaps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/icons\/gmapsinsertdirections.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/docs\/inlinesample.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/docs\/install.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/docs\/styles.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/scripts\/cke_gmaps_end.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/dialogs\/googlemaps.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/dialogs\/icons.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/dialogs\/line.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/dialogs\/text.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/googlemaps\/dialogs\/marker.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/shades_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/tongue_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/broken_heart.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/wink_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/embaressed_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/heart.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/lightbulb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/confused_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/devil_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/angel_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/broken_heart.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/angry_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/omg_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/thumbs_down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/omg_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/whatchutalkingabout_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/cry_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/lightbulb.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/whatchutalkingabout_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/heart.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/kiss.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/envelope.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/confused_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/wink_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/angel_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/kiss.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/shades_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/sad_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/embarrassed_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/envelope.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/regular_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/thumbs_up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/thumbs_down.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/devil_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/angry_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/embarrassed_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/tongue_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/sad_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/teeth_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/tounge_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/regular_smile.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/teeth_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/cry_smile.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/images\/thumbs_up.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/smiley\/dialogs\/smiley.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-11.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/span.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-10.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-7.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-code.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-div.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/add-mini.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-8.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-code-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-10.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-11.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-p.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-tag.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-col.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-9.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-7.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-p.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-span.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-7.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-span.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/add-mini-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-span-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-9.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/row.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delete-mini-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/th.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-11.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/div.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delete--mini-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-11.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/td.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-9.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-10.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-8.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-tag-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-11.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/add-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delete-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-p-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-9.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-9.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-cols-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-table.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-div-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-7.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-8.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-table-hover.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-row.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-7.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delimer.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-8.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/p.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/add.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/delete-mini.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-12.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-1.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-cols.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/menu-div.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/eye-table.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-10.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-md-8.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-sm-6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-lg-10.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/offset-2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/images\/col-xs-3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/icons\/jsplus_bootstrap_advanced_blocks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_advanced_blocks\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/fonts\/icons.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/fonts\/gen.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/fonts\/gen.config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/images\/zoom_out.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/images\/search.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/images\/zoom_in.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/icons\/jsplus_bootstrap_icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/hv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/hs.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/jscolor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/demo.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/arrow.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/jscolor\/cross.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_icons\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_left\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_left\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_left\/icons\/jsplus_bootstrap_col_move_left.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_left\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/ckeditor.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/icons\/move.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/icons\/bootstrapTab.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/js\/Sortable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapTab\/dialogs\/bootstrapTab.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_block_conf\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_block_conf\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_block_conf\/icons\/jsplus_bootstrap_block_conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_block_conf\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/ckeditor.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/images\/img.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/icons\/move.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/icons\/bootstrapCarousel.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/js\/Sortable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCarousel\/dialogs\/bootstrapCarousel.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmslinkpage\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/cmslinkpage\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/icons\/leaflet.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/leaflet-providers\/package.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/leaflet-providers\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/leaflet-providers\/license.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/leaflet-providers\/leaflet-providers.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/leaflet-providers\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/mapParser.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/package.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/src\/images\/toggle.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/src\/Control.MiniMap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/src\/Control.MiniMap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/LICENSE.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/scripts\/Leaflet-MiniMap\/readme.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/css\/contents.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/leaflet\/dialogs\/leaflet.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/icons\/textcolor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/icons\/hidpi\/textcolor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/icons\/hidpi\/bgcolor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/icons\/bgcolor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colorbutton\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/images\/transformCapitalize.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/images\/transformSwitcher.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/images\/transformToLower.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/images\/transformToUpper.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/texttransform\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/clipboard\/dialogs\/paste.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_right\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_right\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_right\/icons\/jsplus_bootstrap_table_merge_cell_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cell_right\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/uz.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/icons\/html5video.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/html5video\/dialogs\/html5video.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_breadcrumbs\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_breadcrumbs\/icons\/jsplus_bootstrap_breadcrumbs.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_breadcrumbs\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/templates\/images\/template3.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/templates\/images\/template2.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/templates\/images\/template1.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/templates\/default.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/dialogs\/templates.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/templates\/dialogs\/templates.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/tabletools\/dialogs\/tableCell.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/about\/dialogs\/about.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/about\/dialogs\/hidpi\/logo_ckeditor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/about\/dialogs\/logo_ckeditor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/pastefromword\/filter\/default.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cells\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cells\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cells\/icons\/jsplus_bootstrap_table_merge_cells.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_merge_cells\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/icons\/ckawesome.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/resources\/select2\/select2.full.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/resources\/select2\/select2.full.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/dialogs\/ckawesome.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/ckawesome\/dialogs\/ckawesome.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_conf\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_conf\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_conf\/icons\/jsplus_bootstrap_table_conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_conf\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_cell_conf\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_cell_conf\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_cell_conf\/icons\/jsplus_bootstrap_table_cell_conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_cell_conf\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_uploader\/config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_uploader\/uploader.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_uploader\/userfiles\/.htaccess","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_new\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_new\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_new\/icons\/jsplus_bootstrap_table_new.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_new\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_col\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_col\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_col\/icons\/jsplus_bootstrap_delete_col.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_col\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_col\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_col\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_col\/icons\/jsplus_bootstrap_table_delete_col.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_col\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/copyformatting\/cursors\/cursor-disabled.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/copyformatting\/cursors\/cursor.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/copyformatting\/styles\/copyformatting.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/LANG.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/LICENSE","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/readme.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineheight\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_up\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_up\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_up\/icons\/jsplus_bootstrap_row_move_up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_row_move_up\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_right\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_right\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_right\/icons\/jsplus_bootstrap_table_col_move_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_col_move_right\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_hor\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_hor\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_hor\/icons\/jsplus_bootstrap_table_split_cell_hor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_hor\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_row\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_row\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_row\/icons\/jsplus_bootstrap_delete_row.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_delete_row\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/fontawesome-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/fontawesome-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/FontAwesome.otf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/fontawesome-webfont.woff2","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/fontawesome-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/fonts\/fontawesome-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/icons\/fontAwesome.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/css\/font-awesome.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/fontAwesome\/dialogs\/fontAwesome.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/icons\/jsplus_bootstrap_editor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/ckeditor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/contents.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/magicline\/images\/hidpi\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/magicline\/images\/hidpi\/icon-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/magicline\/images\/icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/magicline\/images\/icon-rtl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/table\/dialogs\/table.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/a11yhelp.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sr-latn.js.new","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/_translationstatus.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/a11yhelp\/dialogs\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/dialog\/dialogDefinition.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/scayt\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/scayt\/LICENSE.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/scayt\/dialogs\/options.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/scayt\/dialogs\/toolbar.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/link\/images\/hidpi\/anchor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/link\/images\/anchor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/link\/dialogs\/link.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/link\/dialogs\/anchor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/_translationstatus.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/specialchar\/dialogs\/specialchar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/clipboard\/dialogs\/paste.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/tabletools\/dialogs\/tableCell.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/about\/dialogs\/about.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/about\/dialogs\/hidpi\/logo_ckeditor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/about\/dialogs\/logo_ckeditor.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/pastefromword\/filter\/default.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/image\/images\/noimage.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/image\/dialogs\/image.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/icons_hidpi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/LICENSE.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/dialogs\/tmpFrameset.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/dialogs\/wsc_ie.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/dialogs\/ciframe.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/dialogs\/wsc.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/wsc\/dialogs\/wsc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/plugins\/icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/LICENSE.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/dialog_ie8.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor_iequirks.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/dialog_ie7.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/lock-open.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/lock.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/refresh.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/arrow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/hidpi\/lock-open.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/hidpi\/lock.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/hidpi\/refresh.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/images\/hidpi\/close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/dialog_ie.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor_ie7.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/dialog_iequirks.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/readme.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/icons_hidpi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor_gecko.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/dialog.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor_ie8.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/skins\/moono\/editor_ie.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/adapters\/jquery.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/CHANGES.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/build-config.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/styles.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/uilanguages.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/inlinetextarea.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/jquery.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/inlinebycode.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/tabindex.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/datafiltering.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/appendto.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/divreplace.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/replacebycode.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/inlineall.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/magicline\/magicline.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/dialog\/dialog.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/dialog\/assets\/my_dialog.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/toolbar\/toolbar.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/wysiwygarea\/fullpage.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/enterkey\/enterkey.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/htmlwriter\/outputforflash.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/htmlwriter\/assets\/outputforflash\/swfobject.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/htmlwriter\/assets\/outputforflash\/outputforflash.fla","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/htmlwriter\/assets\/outputforflash\/outputforflash.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/plugins\/htmlwriter\/outputhtml.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/uicolor.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/sample_posteddata.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/sample.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/xhtmlstyle.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/readonly.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/api.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/assets\/uilanguages\/languages.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/assets\/posteddata.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/assets\/inlineall\/logo.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/assets\/outputxhtml\/outputxhtml.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/assets\/sample.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/sample.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/ajax.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/samples\/replacebyclass.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/editor\/ckeditor\/config.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/lang\/ru.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/lang\/en.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/js\/alphamanager.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/system.inc.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/raw.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/tmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/indd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/sitx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/macho.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gzip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/swf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/python.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/bak.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mid.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/lua.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rtf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dem.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ogg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/msg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/jar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/m4a.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cfm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/exe.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dxf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cfg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dll.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/psd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dwg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/tga.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/m4v.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/svg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pages.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/xls.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/class.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/eps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/vcd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/max.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cur.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/vcf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/db.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/object.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/yuv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/asx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/torrent.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/xlr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/hqz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pub.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ai.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cpl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/.directory","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/css.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/fnt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/bin.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/docx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ibooks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/csr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mov.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/thm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ppt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/vob.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/vb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wpd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/tiff.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/icns.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rss.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/apk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/drv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/sav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rpm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/3gp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/7z.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/asf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wsf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/aif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/elf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/bat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rom.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/flv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/jpg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wma.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/fla.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/xlsx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cdr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/key.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/crx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/msi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/aac.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mpa.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pct.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ged.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cad.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ttf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dds.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dtd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dbf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gam.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/xhtml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/kmz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wmv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dmg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odt5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pdb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pptx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/doc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/3g2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/sdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/tex.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/asp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ics.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/png.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gpx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/flash.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/iff.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/tar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/sql.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/zip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/iso.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/wps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/kml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mp4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/sys.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mpg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/csv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/log.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/gbr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/com.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/nes.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/pkg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/fon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cpp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/srt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/lnk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/m3u.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/bmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/app6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/uue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/aspx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cab.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ico.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/rm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cer.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/jsp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cgi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/cue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mim.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/odx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/otf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/3ds.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/dat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ods.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/ra.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_thumb\/mdb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/raw.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/tmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/indd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/sitx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/macho.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gzip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/swf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/python.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/bak.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mid.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/lua.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rtf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dem.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ogg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/msg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/jar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/m4a.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cfm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/exe.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dxf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cfg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dll.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/psd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dwg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/tga.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/m4v.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/svg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pages.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/xls.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/class.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/eps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/vcd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/max.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cur.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/vcf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/db.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/object.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/yuv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/asx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/torrent.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/xlr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/hqz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pub.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ai.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cpl.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/css.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/fnt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/bin.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/docx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ibooks.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/csr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mov.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/thm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ppt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/vob.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/vb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wpd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/tiff.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/icns.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rss.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/apk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/drv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/sav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rpm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/3gp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/7z.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/asf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wsf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/aif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/elf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/bat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rom.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/flv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/jpg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wma.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/fla.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/xlsx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cdr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/key.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/crx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/msi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/aac.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mpa.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pct.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ged.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cad.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ttf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dds.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dtd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dbf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gam.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/xhtml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/kmz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wmv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dmg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odt5.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pdb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pptx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/doc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/3g2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/sdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/tex.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/asp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ics.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/png.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gpx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/flash.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/iff.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/tar.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/sql.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/zip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/iso.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/wps.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gz.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pif.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/kml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mp4.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/sys.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mpg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/csv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/log.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/gbr.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/com.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/nes.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/pkg.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/fon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cpp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/srt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/lnk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/m3u.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/bmp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/app6.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/uue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/aspx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cab.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ico.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/rm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cer.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/jsp.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cgi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/cue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mim.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/odx.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/otf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/3ds.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/dat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ods.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/ra.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/filetype_list\/mdb.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/paste.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/loading2.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/order.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/upload_fail.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/folder-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/select.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/minus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/upload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/plus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/edit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/cut.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/list.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/paste.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/order.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/upload_fail.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/folder-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/select.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/minus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/upload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/plus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/edit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/cut.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/list.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/add.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/cancel.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/white\/upload_ok.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/add.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/cancel.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/img\/upload_ok.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/mono\/skin.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/crt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/ini.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/php.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/chm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/wav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/sql.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_thumb\/lnk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/crt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/ini.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/php.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/chm.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/wav.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/doc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/png.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/sql.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/filetype_list\/lnk.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/upload2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/paste.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/order.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/order2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/upload_fail.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/select.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-download2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/minus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/upload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-download2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/plus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/select2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/edit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/cut.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-download3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-add2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/find2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-delete2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/list.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/cancel.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/upload_ok.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/folder-add.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/img\/file-rename2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/business\/skin.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/psd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/xls.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/htaccess.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/css.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/ppt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/flv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/php.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/script.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/doc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/png.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/txt (2).png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/zip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/log.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_thumb\/conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/xml.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/avi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/images.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/psd.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/xls.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/default.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/htaccess.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/css.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/ppt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/flv.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/pdf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/php.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/script.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/doc.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/png.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/txt.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/zip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/mp3.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/log.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/js.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/html.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/filetype_list\/conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/paste.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/plus-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/loading2.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/order.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/upload_fail.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/folder_rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/_find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/folder-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/select.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/minus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/upload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/dir-download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/minus-selected.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/plus.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/rename2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/edit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/cut.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/folder_delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/delete.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/list.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/add.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/cancel.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/__find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/upload_ok.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/delete2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/download2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/paste2.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/img\/_thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/skin.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/_img\/loading2.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/_img\/order.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/_img\/find.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/_img\/thumbnails.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins\/flat\/_img\/list.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/thumb.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/security.inc.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/dirtree.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/renamedir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/renamefile.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/fileslist.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/deletefile.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/download.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/copydir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/createdir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/deletedir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/movefile.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/movedir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/copyfile.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/uploadurl.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/downloaddir.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/functions.inc.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/php\/upload.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins_editor\/ckeditor_close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins_editor\/ckeditor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/skins_editor\/tinymce.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/gplugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/conf.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/plugins\/alphamanager\/index.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/litestrap\/litestrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/fonts\/glyphicons-halflings-regular.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/fonts\/glyphicons-halflings-regular.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/fonts\/glyphicons-halflings-regular.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/fonts\/glyphicons-halflings-regular.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/fonts\/_notes\/dwsync.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/css\/bootstrap-theme.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/css\/bootstrap-theme.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/css\/_notes\/dwsync.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/css\/bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/css\/bootstrap.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/js\/bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/js\/_notes\/dwsync.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/css\/bootstrap\/js\/bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/bootstrapeditor.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/lib\/bootstrapeditor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_editor\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/iframe\/images\/placeholder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/iframe\/dialogs\/iframe.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/ckeditor.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ku.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/si.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/hi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/eu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/af.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/en-au.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/en-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/is.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/fr-ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/th.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/bn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sr-latn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/mk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/mn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/gu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ug.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/eo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/fo.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/lang\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/icons\/move.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/icons\/bootstrapCollapse.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/js\/Sortable.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/bootstrapCollapse\/dialogs\/bootstrapCollapse.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/image\/images\/noimage.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/image\/dialogs\/image.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_alert\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_alert\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_alert\/icons\/jsplus_bootstrap_alert.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_alert\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_up\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_up\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_up\/icons\/jsplus_bootstrap_table_row_move_up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_move_up\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/icons_hidpi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/images\/hiddenfield.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/select.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/hiddenfield.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/checkbox.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/textfield.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/button.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/radio.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/textarea.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/forms\/dialogs\/form.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_right\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_right\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_right\/icons\/jsplus_bootstrap_table_add_col_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_col_right\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/README.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/LICENSE.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/skins\/moono-lisa\/wsc.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/dialogs\/tmpFrameset.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/dialogs\/wsc_ie.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/dialogs\/ciframe.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/dialogs\/wsc.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/wsc\/dialogs\/wsc.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_include\/bootstrap_styles.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_include\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_conf\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_conf\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_conf\/icons\/jsplus_bootstrap_table_row_conf.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_row_conf\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_right\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_right\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_right\/icons\/jsplus_bootstrap_col_move_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_col_move_right\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_cell\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_cell\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_cell\/icons\/jsplus_bootstrap_table_delete_cell.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_cell\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_down\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_down\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_down\/icons\/jsplus_bootstrap_table_add_row_down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_row_down\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/tableselection\/styles\/tableselection.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_templates\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_templates\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_templates\/icons\/jsplus_bootstrap_templates.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_templates\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_row\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_row\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_row\/icons\/jsplus_bootstrap_table_delete_row.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_delete_row\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/gl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/pt-br.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/uk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/zh-cn.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/no.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/nb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/zh.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/tt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/en-gb.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/images\/handle.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/dev\/console.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/widget\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/div\/dialogs\/div.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineutils\/dev\/magicfinger.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineutils\/dev\/dnd.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/lineutils\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_vert\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_vert\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_vert\/icons\/jsplus_bootstrap_table_split_cell_vert.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_split_cell_vert\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colordialog\/dialogs\/colordialog.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/colordialog\/dialogs\/colordialog.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_right\/lang\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_right\/lang\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_right\/icons\/jsplus_bootstrap_table_add_cell_right.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/jsplus_bootstrap_table_add_cell_right\/plugin.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/plugins\/preview\/preview.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/dialog_ie8.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/editor_iequirks.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/lock-open.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/lock.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/refresh.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/spinner.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/arrow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/hidpi\/lock-open.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/hidpi\/lock.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/hidpi\/refresh.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/images\/hidpi\/close.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/dialog_ie.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/dialog_iequirks.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/readme.md","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/icons_hidpi.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/editor_gecko.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/dialog.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/icons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/editor_ie8.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/editor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/skins\/moono-lisa\/editor_ie.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/adapters\/jquery.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/build-config.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/styles.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/ckeditor\/config.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet-src.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/images\/marker-icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/images\/marker-icon-2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/images\/marker-shadow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/images\/layers.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/images\/layers-2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet-src.esm.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet-src.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet-src.esm.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/leaflet\/leaflet.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/MotionCAPTCHA\/jquery.motionCaptcha.0.2.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/MotionCAPTCHA\/jquery.motionCaptcha.0.2.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/MotionCAPTCHA\/motionCaptcha-shapes.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/logs\/2016-02-17.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/gdb.min.bck.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/grid-view.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/grid-upload.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/jq-context-menu\/context.standalone.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/jq-context-menu\/context.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/fonts\/fontawesome-webfont.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/fonts\/fontawesome-webfont.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/fonts\/FontAwesome.otf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/fonts\/fontawesome-webfont.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/fonts\/fontawesome-webfont.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/css\/font-awesome.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/font-awesome-4.2.0\/css\/font-awesome.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/jquery-form\/jquery.form.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/jquery-impromptu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/jquery-impromptu.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/smooth.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/base.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/classic-impromptu.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/ext-blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/clean-blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/impromptu\/themes\/zoo.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/css\/tooltipster.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/css\/themes\/tooltipster-noir.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/css\/themes\/tooltipster-light.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/css\/themes\/tooltipster-shadow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/css\/themes\/tooltipster-punk.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/js\/jquery.tooltipster.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/tooltipster-master\/js\/jquery.tooltipster.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/icheck.jquery.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/polaris\/polaris@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/polaris\/polaris.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/polaris\/polaris.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/line.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/line.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/grey.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/purple.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/orange.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/green.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/aero.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/pink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/yellow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/line@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/red.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/line\/_all.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/all.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/purple@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/pink.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/blue@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/red.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/red@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/aero@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/grey.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/green@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/purple.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/yellow@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/green.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/blue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/orange.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/square@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/square.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/aero.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/green.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/purple.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/yellow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/aero.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/orange@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/pink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/yellow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/grey.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/grey@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/orange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/pink@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/square.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/red.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/square\/_all.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/purple@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/pink.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/blue@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/red.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/minimal.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/red@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/aero@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/grey.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/minimal.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/green@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/purple.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/yellow@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/green.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/blue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/orange.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/aero.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/green.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/purple.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/yellow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/aero.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/yellow.css.new","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/orange@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/pink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/yellow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/grey.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/grey@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/orange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/pink@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/minimal@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/red.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/minimal\/_all.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/futurico\/futurico@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/futurico\/futurico.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/futurico\/futurico.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/purple@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/pink.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/blue@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/red.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/flat.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/red@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/aero@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/grey.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/green@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/blue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/purple.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/yellow@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/green.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/blue.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/orange.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/aero.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/green.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/purple.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/yellow.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/aero.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/orange@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/pink.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/yellow.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/grey.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/grey@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/orange.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/pink@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/red.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/flat@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/flat.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/skins\/flat\/_all.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/icheck.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/icheck.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/plugins\/icheck\/bower.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/css\/ajax-loader.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/css\/grid.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/edit-simple.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/print.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/results.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/upload.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/templates\/container.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/ajax.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/js\/grid.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/print.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/grid-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/gdb.min.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/grid.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/get.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/grid\/upload.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/force_download.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/az_AZ.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/da.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/pl.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/de.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/nb_NO.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/el_GR.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/nn_NO.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/fr_FR.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/bg_BG.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/pt_BR.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/cs.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/hr.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/uk_UA.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/he_IL.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/th_TH.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/ja.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/it.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/tr_TR.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/id.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/pt_PT.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/mn_MN.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/en_EN.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/sl.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/nl.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/ca.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/ro.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/ru.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/fa.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/sk.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/lt.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/zh_CN.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/hu_HU.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/sv_SE.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/vi.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/lang\/es.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/config\/config.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/config\/.htaccess","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/index.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/UploadHandler.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/plugin.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/svg\/icon-b.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/svg\/icon-d.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/svg\/svg.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/svg\/icon-c.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/svg\/icon-a.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/utils.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/Response.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/FtpException.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/ftp_class.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/mime_type_lib.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/FtpClient.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/FtpWrapper.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/include\/php_image_magician.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/rtl-style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/jquery.fileupload-ui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/jquery.fileupload-ui-noscript.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/jquery.fileupload-noscript.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/jquery.fileupload.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/ajax_calls.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.iframe-transport.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/vendor\/jquery.ui.widget.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/plugins.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-image.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-process.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-jquery-ui.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-ui.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-angular.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/modernizr.custom.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-validate.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-audio.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/include.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/js\/jquery.fileupload-video.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/dialog.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/execute.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/download.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/logo.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/date.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/up.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/edit_img.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/preview.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/label.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/sort.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mp4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/otp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/odp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/xml.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/odf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mpg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/gif.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/tiff.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mp3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/png.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ai.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/bmp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mdb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/otg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/psd.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/wav.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ods.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ott.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ac3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ade.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/doc.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/pdf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/jpg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/odg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/folder_back.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/flv.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/aiff.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/iso.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/odb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/rar.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/accdb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/avi.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/tar.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/docx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/html.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/dmg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/m4a.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/log.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ots.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/pptx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/odt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/rtf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/sql.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/gz.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ppt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mpeg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/favicon.ico","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/xlsx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/xhtml.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mov.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/default.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/xls.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/wma.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/fla.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/css.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/adp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/txt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/webm.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/svg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/csv.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/jpeg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/ogg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/mid.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico_dark\/zip.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/duplicate.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/url.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/rename.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/info.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/upload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mp4.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/otp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/odp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/xml.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/odf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mpg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/dxf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/skp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/gif.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/tiff.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mp3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/png.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ai.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/bmp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mdb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/otg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/psd.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/vwx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/wav.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ods.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/dwg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ott.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ac3.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ade.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/doc.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/c4d.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/pdf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/folder.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/jpg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/odg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/folder_back.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/flv.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/aiff.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/iso.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/odb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/rar.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/accdb.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/avi.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/tar.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/docx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/html.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/dmg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/m4a.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/log.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ots.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/pptx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/odt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/rtf.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/sql.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/gz.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ppt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mpeg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/favicon.ico","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/xlsx.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/stp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/xhtml.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mov.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/default.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/xls.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/wma.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/fla.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/css.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/adp.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/txt.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/webm.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/svg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/csv.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/jpeg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/ogg.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/mid.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/ico\/zip.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/copy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/dimension.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/clipboard_clear.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/trans.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/glyphicons-halflings-white.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/key.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/cut.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/processing.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/zip.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/glyphicons-halflings.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/storing_animation.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/down.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/size.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/file_edit.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/img\/clipboard_apply.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/filemanager-9.14.1\/upload.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/visit-counter.ini","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-grid.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-reboot.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-grid.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-reboot.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-grid.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap.min.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-reboot.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-grid.min.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap-reboot.min.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/css\/bootstrap.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.bundle.min.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.bundle.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.bundle.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.bundle.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.min.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.js.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap-4.1.3\/js\/bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/functions.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/htaccess.conf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/MySQLDump.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/jquery.fancybox-buttons.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/fancybox_buttons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/jquery.fancybox-media.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/jquery.fancybox-thumbs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/jquery.fancybox-thumbs.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/helpers\/jquery.fancybox-buttons.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/blank_1.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_loading@2x_1.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_sprite.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/jquery.fancybox.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_sprite@2x.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/jquery.fancybox.pack.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/jquery.fancybox.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_loading@2x.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/blank.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/fancyBox\/fancybox_overlay.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.theme.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_777777_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_cc0000_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_777620_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_444444_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_555555_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/images\/ui-icons_ffffff_256x240.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_F2F2F2_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_3B5998_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_6D84B4_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_ffffff_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_555555_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/images\/ui-icons_96A6C5_0.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/theme\/jmetro\/jquery-ui.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.structure.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.theme.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-ui\/1.11.3\/jquery-ui.structure.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/validator.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/fonts\/glyphicons-halflings-regular.eot","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/fonts\/glyphicons-halflings-regular.woff","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/fonts\/glyphicons-halflings-regular.woff2","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/fonts\/glyphicons-halflings-regular.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/fonts\/glyphicons-halflings-regular.ttf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/config.json","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/css\/bootstrap-theme.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/css\/bootstrap-theme.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/css\/bootstrap.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/css\/bootstrap.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/js\/bootstrap.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/bootstrap\/js\/bootstrap.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/Moxie.xap","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/pl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/cs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/el.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/lt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ja.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/cy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ka.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/hr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/lv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/pt_BR.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ca.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ms.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/km.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/sk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ar.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/zh_CN.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/sl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/fi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/zh_TW.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/da.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/bg.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/he.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ku_IQ.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/id.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/az.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/nl.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/es.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/kk.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/hu.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/sq.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/tr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/pt.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/it.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/fa.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/uk_UA.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ru.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/th_TH.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/et.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/sv.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ro.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/bs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/sr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/hy.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/de.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/ko.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/fr.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/en.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/i18n\/vi.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/jquery.plupload.queue.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/css\/jquery.plupload.queue.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/jquery.plupload.queue.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/delete.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/backgrounds.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/throbber.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/done.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/error.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/buttons.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/buttons-disabled.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.plupload.queue\/img\/transp50.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/Moxie.swf","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/moxie.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/moxie.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/plupload.dev.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.ui.plupload\/jquery.ui.plupload.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.ui.plupload\/jquery.ui.plupload.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.ui.plupload\/css\/jquery.ui.plupload.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.ui.plupload\/img\/loading.gif","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/jquery.ui.plupload\/img\/plupload.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/plupload.full.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/plupload-3.1.2\/plupload.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-confirm\/jquery-confirm.min.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/jquery-confirm\/jquery-confirm.min.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/webp.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/medoo\/medoo.bck.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/medoo\/medoo.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/easy-tabs\/css\/easy-responsive-tabs.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/easy-tabs\/js\/easyResponsiveTabs.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/libraries\/functions-front.js","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/sitemap_cmsenproject-dcpl.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/download.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/cache\/upload\/filemanager\/api\/article_23\/article_23.jpg.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/test.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/log.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/devel.html","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/api.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/audit-seo\/main-view.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/inline-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/widgets\/widget-phone.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/widgets\/widget-phone.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/menu\/main-menu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/menu\/pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/menu\/menu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/menu\/submenu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/projects\/details.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/newsletter\/preview.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/newsletter\/newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/calendar.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/facebook.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/pager.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/alert.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/contact.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/contrast.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/title.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/cookie-information.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/copyright.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/site\/visit-counter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/search\/search-form.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/search\/search-results.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/news.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/password-view.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article-entry.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article-files.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/slider.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/tags-cloud.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/articles-miniatures.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/articles-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/map.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/articles-entries.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article-full.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article-gallery.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/article-miniature.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/articles\/news-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/scontainers\/scontainer.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/banner\/main-banner.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates\/banner\/banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/ajax.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/cmsPro.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.19.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.12.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.17.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.13.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.10.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.11.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.15.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.18.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.16.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.10\/ver_1.14.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.588.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.528_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.585.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.533.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.582_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.557.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.596.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.509.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.535.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.597.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.532.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.505.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.559.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.583.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.562.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.525.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.574.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.511.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.535_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.542.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.567.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.515.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.545.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.507_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.578.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.539.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.547.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.549.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.517.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.590.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.543.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.587.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.555.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.518_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.504.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.522.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.546.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.514.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.529.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.507.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.521.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.565.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.593.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.537.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.544.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.520.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.579.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.599_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.586.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.569_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.506.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.575_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.526.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.592.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.569.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.561.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.559_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.507_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.513.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.563.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.528.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.518.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.524.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.512.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.503.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.575.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.562_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.534.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.541.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.519.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.502.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.527.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.564.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.594.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.518_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.538.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.584.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.510.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.508.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.589.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.553.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.595.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.572.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.523.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.568.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.550.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.501.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.548.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.556.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.598.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.536.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.576.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.558.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.582.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.560.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.530.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.506_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.531.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.585_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.546_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.571.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.540.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.566.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.595_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.580_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.591.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.552.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.573.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.599.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.554.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.500.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.551.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.581.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.577.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.570.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.580.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/ver_1.516.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.50\/libraries.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.07.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.04.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.02.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.09.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.01.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.06.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.08.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.03.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.00\/ver_0.05.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.88.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.82.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.83.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.87.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.89.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.81.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.86.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.80.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.85.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.80\/ver_0.84.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.30\/ver_0.38.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.30\/ver_0.39.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.675.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.605.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.679.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.643.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.615.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.654.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.682.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.676.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.645.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.647.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.669.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.648.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.650.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.507_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.602.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.614.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.668.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.680.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.632_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.657.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.621_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.670.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.631.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.602_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.617.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.636.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.622.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.616.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.638.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.663.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.629.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.660.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.656.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.671.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.636_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.640.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.620_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.658.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.666.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.623.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.630.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.667.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.661.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.681.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.625.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.649.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.683.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.634.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.626.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.619.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.610.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.632.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.613.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.628.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.609.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.664.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.682_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.678.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.674.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.630_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.659.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.642.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.637.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.641.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.635_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.635.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.621.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.633.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.671_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.655.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.624.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.603.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.684.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.665.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.620.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.644.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.673.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.651.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.611.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.670_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.662.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.601.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.672.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.600_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.627.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.639.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.652.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.618.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.646.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.600.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.619_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.606.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.653.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.612.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.608.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.677.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.607.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.60\/ver_1.604.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.54.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.57.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.50.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.55.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.58.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.51.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.53.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.52.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.59.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.50\/ver_0.56.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.470.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.410.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.487.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.499.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.463_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.465.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.419.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.461.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.459.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.482.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.497.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.469.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.455.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.466.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.416_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.411.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.468.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.494.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.495_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.483.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.407.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.457.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.446.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.451.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.496.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.454.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.477.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.462.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.475.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.489.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.484_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.437.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.471.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.442.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.479.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.480.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.444.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.486.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.429.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.498.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.418.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.448.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.464.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.458.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.463.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.438.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.490.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.435.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.406.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.440.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.420.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.431.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.414.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.434.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.472.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.466_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.455_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.473.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.433_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.416.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.422.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.436.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.491.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.484.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.460.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.425.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.427.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.481_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.401.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.400.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.421.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.424.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.488.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.474.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.492.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.400_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.441.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.403.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.479.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.432.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.400_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.402.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.417.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.439.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.404.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.426.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.412.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.493.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.433.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.476.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.453.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.481.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.415.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.447.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.485.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.456.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.405.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.443.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.413.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.430.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.445.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.496_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.495.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.427.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.452.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.428.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.449.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.450.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.454_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.409.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.467.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.423.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.415_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.408.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.40\/ver_1.478.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/install.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/versions.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.48.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.41.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.44.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.46.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.42.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.43.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.47.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.40.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.45.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.40\/ver_0.49.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.12.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.10.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.13.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.15.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.16.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.11.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.14.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.18.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.19.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.10\/ver_0.17.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.99.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.91.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.96.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.97.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.92.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.90.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.93.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.98.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.95.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.90\/ver_0.94.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.326_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.367.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.313.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.340.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.343.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.302.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.387.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.396_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.339.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.324.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.357.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.316.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.306.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.386.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.391.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.385_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.365.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.336.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.358.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.373.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.318.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.332.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.354.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.395.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.372.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.356_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.351.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.393.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.381.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.308.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.338.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.333.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.375.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.376.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.335.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.331.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.359.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.346_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.399.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.309.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.395.zi#","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.327.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.378.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.363.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.341.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.385.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.317.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.350.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.325.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.382.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.326.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.342.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.395_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.362_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.383.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.398.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.314.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.304.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.364.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.366.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.384.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.320.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.389.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.310_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.397.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.383_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.374.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.369.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.305.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.396.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.355.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.370.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.349.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.337.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.392.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.376_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.328.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.310.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.347.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.360.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.322.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.356.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.379.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.311.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.396_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.345.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.321.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.323.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.346.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.319.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.394.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.368.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.303.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.348.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.371.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.361.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.377.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.353.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.300.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.352.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.330.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.344.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.329.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.301.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.361_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.353_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.312.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.362.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.380.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.315.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.334.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.307.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.388.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.30\/ver_1.390.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.03.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.05.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.00.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.08.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.02.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.04.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.01.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.09.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.07.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.00\/ver_1.06.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/cmsPro_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.296.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.294_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.284.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.23.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.288.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.278.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.297.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.281.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.296_sql.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.296_files.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.283.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.285.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.280.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.282.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.27.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.287.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.293.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.276.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.288.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.298.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.291.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.20.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.271.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.275.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.25.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.24.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.26.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.292.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.287.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.274.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.282.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.279.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.21.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.290.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.291.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.289.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.295.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.277.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.273.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.272.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.22.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.299.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.294.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/1.20\/ver_1.286.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.21.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.24.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.23.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.20.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.25.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.26.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.20\/ver_0.22.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.67.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.66.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.69.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.68.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.60.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.65.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.63.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.61.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.64.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.60\/ver_0.62.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.73.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.71.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.76.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.72.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.75.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.77.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.79.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.78.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.74.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/0.70\/ver_0.70.zip","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/updates\/changelog.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/_restore.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/kalkulator-kalorii-zdjecie.png.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/api\/article_20\/article_20.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/api\/article_21\/article_21.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/api\/article_22\/article_22.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/api\/article_19\/article_19.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/api\/article_23\/article_23.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/kalkulator-kalorii-zdjecie.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/slide-02.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/slide-01.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.htaccess","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/61371df8cb979c85ab030f1a_img-linkedin-accountavatar-p-500.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/e-pit-2019m.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/special-strategy.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.thumbs\/images\/logo.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/blog-01-03.mov","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/monitoring_users.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.tmb\/t1_MDAwXzAxMTQuanBn1521192754.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.tmb\/t1_c2xpZGUtMDMuanBn1516616280.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.tmb\/t1_MDAwXzAxMTUuanBn1521192754.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.tmb\/l1_MDAwXzAxMTQuanBn1521192754.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/.tmb\/l1_c2xpZGUtMDMuanBn1516616280.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/filemanager\/wow-cup.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/article_images\/article_10\/20200411_200313.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/upload\/article_images\/article_10\/20200411_200313.jpg.webp","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-css\/style.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-css\/mottcoffe.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-css\/style.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-css\/mottcoffe.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/contrast.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-scss\/mottcoffe.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-scss\/_mixins.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/layout\/style-scss\/style.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/robots.txt","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/sitemap_cmsproproject-dcpl.xml","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/_backup.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/restore.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Cron.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Article.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Mobile_Detect.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Scontainer.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/controls\/class.Projects.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Tpl.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.S.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/view\/class.Projects.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Page.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/controls\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/controls\/class.Site.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/controls\/class.AuditSEO.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/controls\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Scontainers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Site.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Menu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Search.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/view\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Scontainers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.SeoAdditional.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Menu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.AuditSEO.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Search.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Layouts.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Authors.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/front\/factory\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.geoplugin.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Image.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Html.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/class.Cache.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/factory\/class.Projects.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Users.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Scontainers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.SeoAdditional.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Backups.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Filemanager.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Layouts.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Update.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Authors.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.ArticlesArchive.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/controls\/class.Emails.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/class.Site.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.PagePanel.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Users.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Scontainers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.SeoAdditional.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Backups.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.FileManager.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Page.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Layouts.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Update.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.ArticlesArchive.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/view\/class.Emails.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Users.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Scontainers.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.SeoAdditional.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Backups.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Banners.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Layouts.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Update.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Authors.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.ArticlesArchive.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Languages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/autoload\/admin\/factory\/class.Emails.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/partials\/aside.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/partials\/footer.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/menu\/main-menu.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/newsletter\/newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/site\/pager.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/site\/title.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/search\/search-form.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/search\/search-results.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/news.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/article-entry.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/article.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/tags-cloud.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/articles-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/articles-entries.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/article-gallery.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/articles\/news-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/templates_user\/header.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/index.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/temp\/4\/b\/s_cache_4b916ae533b4ded88ddc3edfe99de1be","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/custom.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/ckeditor.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-ru.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-fr.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/custom.scss","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/ckeditor.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/user-icon.png","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/template.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/bx-news.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/photo-video.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/letter-aa.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/news-24-regular.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/settings-20-filled.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/image.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/send.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/bx-at.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/double-right-outlined.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/email.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/people-fill.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/menu-alt.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/backup-line.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/language.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/container-solid.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/list-settings-line.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/icons\/template-2.svg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-it.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-pl.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-de.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-en.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/custom.css.map","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/ckeditor.css","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/css\/lang-uk.jpg","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/emails\/email-details.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/emails\/emails-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/languages\/language-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/languages\/languages-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/languages\/translation-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/languages\/translations-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/backups\/backup-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/update\/main-view.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/prepare.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/import.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/email-template-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/preview.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/email-templates-user.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/emails-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/email-templates-admin.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/newsletter\/settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/site\/unlogged-layout.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/site\/main-layout.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/filemanager\/filemanager.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/articles\/subpages-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/articles\/articles-archive-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/articles\/articles-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/articles\/article-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/articles\/articles-browse-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/layouts\/layout-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/layouts\/layouts-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/layouts\/subpages-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/seo-additional\/main-view.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/seo-additional\/element-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/input.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/input-switch.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/form-text.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/input-icon.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/button.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/textarea.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/panel.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/html\/select.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/authors\/view-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/authors\/author-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/settings\/settings.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/banners\/banners-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/banners\/banner-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/scontainers\/container-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/scontainers\/ckeditor-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/scontainers\/containers-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/subpages-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/subpages-browse-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/menu-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/pages-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/page-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/page-articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/pages\/pages-browse-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/users\/users-list.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/templates\/users\/user-edit.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ajax.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ajax\/pages.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ajax\/users.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ajax\/articles.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ajax\/newsletter.php","\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/admin\/ip.conf"],"index":5901,"zipfile":"\/home\/host117523\/domains\/cmspro.project-dc.pl\/public_html\/backup_20250512_232458.zip","zipname":"backup_20250512_232458.zip"} \ No newline at end of file diff --git a/build-update.ps1 b/build-update.ps1 new file mode 100644 index 0000000..8d1bdb0 --- /dev/null +++ b/build-update.ps1 @@ -0,0 +1,367 @@ +<# +.SYNOPSIS + Automatyczne budowanie paczki aktualizacji cmsPRO na podstawie git diff miedzy tagami. + +.DESCRIPTION + Skrypt porownuje dwa tagi git, filtruje pliki przez .updateignore, + tworzy ZIP + manifest JSON i aktualizuje changelog.php oraz versions.php. + +.PARAMETER FromTag + Tag poczatkowy (np. v1.689). Domyslnie: ostatni tag. + +.PARAMETER ToTag + Tag docelowy (np. v1.690). Wymagany. + +.PARAMETER ChangelogEntry + Wpis do changelogu. Wymagany (chyba ze -DryRun). + +.PARAMETER DryRun + Tylko pokaz co zostaloby zrobione, bez tworzenia plikow. + +.EXAMPLE + ./build-update.ps1 -ToTag v1.690 -ChangelogEntry "NEW - nowa funkcja" + ./build-update.ps1 -FromTag v1.689 -ToTag v1.690 -ChangelogEntry "NEW - opis" -DryRun +#> + +param( + [string]$FromTag = "", + [Parameter(Mandatory=$true)] + [string]$ToTag, + [string]$ChangelogEntry = "", + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" +$Utf8NoBom = New-Object System.Text.UTF8Encoding $false + +# --- Helpers --- + +function Write-Step($msg) { + Write-Host " [*] $msg" -ForegroundColor Cyan +} + +function Write-Ok($msg) { + Write-Host " [OK] $msg" -ForegroundColor Green +} + +function Write-Warn($msg) { + Write-Host " [!] $msg" -ForegroundColor Yellow +} + +function Write-Err($msg) { + Write-Host " [ERROR] $msg" -ForegroundColor Red +} + +# --- 1. Walidacja tagow --- + +Write-Host "`n=== cmsPRO Build Update ===" -ForegroundColor White + +if (-not $FromTag) { + $FromTag = (git describe --tags --abbrev=0 2>$null) + if (-not $FromTag) { + Write-Err "Nie znaleziono zadnego taga. Uzyj parametru -FromTag." + exit 1 + } + Write-Step "Auto-detect FromTag: $FromTag" +} + +# Sprawdz czy tagi istnieja +$tagExists = git tag -l $FromTag +if (-not $tagExists) { + Write-Err "Tag '$FromTag' nie istnieje." + exit 1 +} + +$toTagExists = git tag -l $ToTag +if (-not $toTagExists) { + Write-Warn "Tag '$ToTag' nie istnieje. Uzywam HEAD jako punktu docelowego." + $diffTarget = "HEAD" +} else { + $diffTarget = $ToTag +} + +# --- 2. Wersja i katalog --- + +$versionNumber = $ToTag -replace '^v', '' +$versionInt = [int]($versionNumber -replace '\.', '') + +# Oblicz katalog: 1.689 -> "1.6" + "0" -> "1.60" +$dirStr = $versionNumber.Substring(0, $versionNumber.Length - 2) + "0" + +Write-Step "Wersja: $versionNumber (int: $versionInt)" +Write-Step "Katalog: updates/$dirStr/" + +# --- 3. Git diff --- + +Write-Step "Porownywanie: $FromTag..$diffTarget" + +$diffOutput = git diff --name-status "$FromTag..$diffTarget" 2>&1 +if ($LASTEXITCODE -ne 0) { + Write-Err "git diff nie powiodl sie: $diffOutput" + exit 1 +} + +$addedFiles = @() +$modifiedFiles = @() +$deletedFiles = @() +$renamedFiles = @() + +foreach ($line in ($diffOutput -split "`n")) { + $line = $line.Trim() + if (-not $line) { continue } + + $parts = $line -split "`t" + $status = $parts[0] + $filePath = if ($parts.Count -gt 1) { $parts[1] } else { "" } + + # Zamien backslash na slash + $filePath = $filePath -replace '\\', '/' + + switch -Wildcard ($status) { + "A" { $addedFiles += $filePath } + "M" { $modifiedFiles += $filePath } + "D" { $deletedFiles += $filePath } + "R*" { + # Rename: stary plik = deleted, nowy = added + $newPath = if ($parts.Count -gt 2) { $parts[2] -replace '\\', '/' } else { "" } + $deletedFiles += $filePath + if ($newPath) { $addedFiles += $newPath } + } + } +} + +Write-Step "Zmiany: A=$($addedFiles.Count), M=$($modifiedFiles.Count), D=$($deletedFiles.Count)" + +# --- 4. Filtrowanie przez .updateignore --- + +$ignorePatterns = @() +$ignoreFile = ".updateignore" + +if (Test-Path $ignoreFile) { + $ignorePatterns = Get-Content $ignoreFile | ForEach-Object { $_.Trim() } | Where-Object { $_ -and ($_ -notmatch '^\s*#') } + Write-Step "Zaladowano $($ignorePatterns.Count) wzorcow z .updateignore" +} + +function Test-Ignored { + param([string]$FilePath) + + foreach ($pattern in $ignorePatterns) { + # Wzorzec katalogu (konczy sie na /) + if ($pattern.EndsWith('/')) { + $dirPattern = $pattern.TrimEnd('/') + if ($FilePath -like "$dirPattern/*" -or $FilePath -eq $dirPattern) { + return $true + } + } + # Wzorzec z wildcard + elseif ($pattern.Contains('*')) { + # *.md -> dopasuj nazwe pliku + if ($pattern.StartsWith('*')) { + $fileName = Split-Path $FilePath -Leaf + if ($fileName -like $pattern) { return $true } + } + # Zwykly glob + elseif ($FilePath -like $pattern) { return $true } + } + # Dokladne dopasowanie + else { + if ($FilePath -eq $pattern) { return $true } + } + } + return $false +} + +$filteredAdded = @() +$filteredModified = @() +$filteredDeleted = @() +$ignoredCount = 0 + +foreach ($f in $addedFiles) { + if (Test-Ignored $f) { $ignoredCount++; continue } + $filteredAdded += $f +} +foreach ($f in $modifiedFiles) { + if (Test-Ignored $f) { $ignoredCount++; continue } + $filteredModified += $f +} +foreach ($f in $deletedFiles) { + if (Test-Ignored $f) { $ignoredCount++; continue } + $filteredDeleted += $f +} + +Write-Step "Po filtrowaniu: A=$($filteredAdded.Count), M=$($filteredModified.Count), D=$($filteredDeleted.Count) (pominieto: $ignoredCount)" + +# Rozdziel usuniete pliki i katalogi +$deletedDirs = @() +$deletedFilesOnly = @() + +foreach ($f in $filteredDeleted) { + # Git nie trackuje pustych katalogow, wiec deleted entries to zawsze pliki + $deletedFilesOnly += $f +} + +# --- 5. Odczyt migracji SQL --- + +$sqlQueries = @() +$migrationFile = "migrations/$versionNumber.sql" + +if (Test-Path $migrationFile) { + $sqlQueries = @(Get-Content $migrationFile | Where-Object { $_.Trim() -ne '' } | ForEach-Object { $_.ToString() }) + Write-Step "Znaleziono migracje SQL: $migrationFile ($($sqlQueries.Count) zapytan)" +} else { + Write-Step "Brak migracji SQL ($migrationFile nie istnieje)" +} + +# --- 6. Podsumowanie --- + +$filesToPack = $filteredAdded + $filteredModified + +if ($filesToPack.Count -eq 0 -and $filteredDeleted.Count -eq 0 -and $sqlQueries.Count -eq 0) { + Write-Warn "Brak zmian do pakowania (po filtrowaniu). Przerywam." + exit 0 +} + +Write-Host "`n--- Pliki do paczki ---" -ForegroundColor White +foreach ($f in $filteredAdded) { Write-Host " A $f" -ForegroundColor Green } +foreach ($f in $filteredModified) { Write-Host " M $f" -ForegroundColor Yellow } +foreach ($f in $filteredDeleted) { Write-Host " D $f" -ForegroundColor Red } + +if ($sqlQueries.Count -gt 0) { + Write-Host "`n--- SQL ---" -ForegroundColor White + foreach ($q in $sqlQueries) { Write-Host " $q" -ForegroundColor Gray } +} + +# --- DryRun? --- + +if ($DryRun) { + Write-Host "`n[DRY RUN] Zadne pliki nie zostaly utworzone.`n" -ForegroundColor Magenta + exit 0 +} + +# --- 7. Walidacja ChangelogEntry --- + +if (-not $ChangelogEntry) { + Write-Err "Parametr -ChangelogEntry jest wymagany (chyba ze uzywasz -DryRun)." + exit 1 +} + +# --- 8. Tworzenie temp i kopiowanie plikow --- + +$tempDir = "temp/temp_$versionInt" + +if (Test-Path $tempDir) { + Remove-Item -Recurse -Force $tempDir +} + +foreach ($f in $filesToPack) { + $destPath = Join-Path $tempDir $f + $destDir = Split-Path $destPath -Parent + + if (-not (Test-Path $destDir)) { + New-Item -ItemType Directory -Path $destDir -Force | Out-Null + } + + if (Test-Path $f) { + Copy-Item $f $destPath -Force + } else { + Write-Warn "Plik nie istnieje (moze zostal usuniety po TAGU): $f" + } +} + +Write-Ok "Skopiowano $($filesToPack.Count) plikow do $tempDir" + +# --- 9. Tworzenie ZIP --- + +$updatesDir = "updates/$dirStr" +if (-not (Test-Path $updatesDir)) { + New-Item -ItemType Directory -Path $updatesDir -Force | Out-Null +} + +$zipPath = "$updatesDir/ver_$versionNumber.zip" + +if (Test-Path $zipPath) { + Remove-Item $zipPath -Force +} + +# Pakuj zawartosc temp dir (bez folderu temp/) +$originalLocation = Get-Location +Set-Location $tempDir +Compress-Archive -Path '*' -DestinationPath "../../$zipPath" -Force +Set-Location $originalLocation + +Write-Ok "Utworzono ZIP: $zipPath" + +# --- 10. Checksum SHA256 --- + +$hash = (Get-FileHash $zipPath -Algorithm SHA256).Hash.ToLower() +Write-Ok "SHA256: $hash" + +# --- 11. Manifest JSON --- + +$manifest = @{ + version = $versionNumber + date = (Get-Date -Format "yyyy-MM-dd") + checksum_zip = "sha256:$hash" + files = @{ + modified = $filteredModified + added = $filteredAdded + deleted = $deletedFilesOnly + } + directories_deleted = $deletedDirs + sql = $sqlQueries + changelog = $ChangelogEntry +} + +$manifestJson = $manifest | ConvertTo-Json -Depth 4 +$manifestPath = "$updatesDir/ver_${versionNumber}_manifest.json" +[System.IO.File]::WriteAllText($manifestPath, $manifestJson, $Utf8NoBom) + +Write-Ok "Utworzono manifest: $manifestPath" + +# --- 12. Legacy _sql.txt i _files.txt (okres przejsciowy) --- + +if ($sqlQueries.Count -gt 0) { + $sqlPath = "$updatesDir/ver_${versionNumber}_sql.txt" + [System.IO.File]::WriteAllText($sqlPath, ($sqlQueries -join "`n"), $Utf8NoBom) + Write-Ok "Utworzono legacy SQL: $sqlPath" +} + +if ($deletedFilesOnly.Count -gt 0 -or $deletedDirs.Count -gt 0) { + $filesContent = @() + foreach ($f in $deletedFilesOnly) { $filesContent += "F: ../$f" } + foreach ($d in $deletedDirs) { $filesContent += "D: ../$d" } + + $filesPath = "$updatesDir/ver_${versionNumber}_files.txt" + [System.IO.File]::WriteAllText($filesPath, ($filesContent -join "`n"), $Utf8NoBom) + Write-Ok "Utworzono legacy files: $filesPath" +} + +# --- 13. Aktualizacja versions.php --- + +$versionsFile = "updates/versions.php" +if (Test-Path $versionsFile) { + $content = Get-Content $versionsFile -Raw + $content = $content -replace '\$current_ver\s*=\s*\d+;', "`$current_ver = $versionInt;" + [System.IO.File]::WriteAllText($versionsFile, $content, $Utf8NoBom) + Write-Ok "Zaktualizowano versions.php: `$current_ver = $versionInt" +} + +# --- 14. Cleanup --- + +if (Test-Path $tempDir) { + Remove-Item -Recurse -Force $tempDir +} +# Usun pusty folder temp jesli nie ma juz w nim nic +if ((Test-Path "temp") -and ((Get-ChildItem "temp" -Force).Count -eq 0)) { + Remove-Item "temp" -Force +} + +Write-Ok "Wyczyszczono pliki tymczasowe" + +# --- Podsumowanie --- + +Write-Host "`n=== Gotowe ===" -ForegroundColor Green +Write-Host " ZIP: $zipPath" +Write-Host " Manifest: $manifestPath" +Write-Host " Wersja: $versionNumber (int: $versionInt)" +Write-Host "" diff --git a/config.php b/config.php new file mode 100644 index 0000000..4b48b0c --- /dev/null +++ b/config.php @@ -0,0 +1,6 @@ +<?php +$database['host'] = 'localhost'; +$database['user'] = 'host117523_cmspro'; +$database['password'] = '3sJADeqKHLqHddfavDeR'; +$database['name'] = 'host117523_cmspro'; +?> diff --git a/cron.php b/cron.php new file mode 100644 index 0000000..dcbbcac --- /dev/null +++ b/cron.php @@ -0,0 +1,47 @@ +<?php +error_reporting( E_ALL ^ E_NOTICE ^ E_STRICT ^ E_WARNING ); +function __autoload_my_classes( $classname ) +{ + $q = explode( '\\' , $classname ); + $c = array_pop( $q ); + $f = 'autoload/' . implode( '/' , $q ) . '/class.' . $c . '.php'; + + if ( file_exists( $f ) ) + require_once( $f ); +} +spl_autoload_register( '__autoload_my_classes' ); +date_default_timezone_set( 'Europe/Warsaw' ); + +require_once 'config.php'; +require_once 'libraries/medoo/medoo.php'; + +session_start(); + +if ( !isset( $_SESSION['check'] ) ) +{ + session_regenerate_id(); + $_SESSION['check'] = true; + $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; +} + +if ( $_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'] ) +{ + session_destroy(); + header( 'Location: /' ); + exit; +} + +$mdb = new medoo( [ + 'database_type' => 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +$settings = \front\factory\Settings::settings_details(); + +/* wysyłka newslettera */ +if ( \front\factory\Newsletter::newsletter_send() ) + exit( '<p>Wysylanie newslettera.</p>' ); \ No newline at end of file diff --git a/devel.html b/devel.html new file mode 100644 index 0000000..065b61b --- /dev/null +++ b/devel.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html lang="pl"> + + <head> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>[TITLE] + + + + + + + + + + + Bez nazwy - 03 lipca 2025 13.51.05 + + \ No newline at end of file diff --git a/download.php b/download.php new file mode 100644 index 0000000..3b02a2b --- /dev/null +++ b/download.php @@ -0,0 +1,52 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +if ( $file_id = \S::get( 'file' ) ) +{ + $result = $mdb -> get( 'pp_articles_files', [ 'src' ], [ 'id' => $file_id ] ); + if ( $result ) + { + $file = ltrim( $result['src'], '/' ); + + if ( file_exists( $file ) ) + { + header( 'Content-Description: File Transfer' ); + header( 'Content-Type: application/octet-stream' ); + header( 'Content-Disposition: attachment; filename=' . basename( $file ) ); + header( 'Expires: 0'); + header( 'Cache-Control: must-revalidate'); + header( 'Pragma: public'); + header( 'Content-Length: ' . filesize( $file ) ); + readfile( $file ); + exit; + } + } +} +header( 'Content-Type: text/html; charset=utf-8' ); +exit( 'Nieprawidłowy plik.' ); +?> \ No newline at end of file diff --git a/images/01.jpg b/images/01.jpg new file mode 100644 index 0000000..50d89a1 Binary files /dev/null and b/images/01.jpg differ diff --git a/images/02.jpg b/images/02.jpg new file mode 100644 index 0000000..31e42d4 Binary files /dev/null and b/images/02.jpg differ diff --git a/images/03.jpg b/images/03.jpg new file mode 100644 index 0000000..9d623be Binary files /dev/null and b/images/03.jpg differ diff --git a/images/system/facebook.jpg b/images/system/facebook.jpg new file mode 100644 index 0000000..72dd814 Binary files /dev/null and b/images/system/facebook.jpg differ diff --git a/images/system/lang_en.png b/images/system/lang_en.png new file mode 100644 index 0000000..11d6322 Binary files /dev/null and b/images/system/lang_en.png differ diff --git a/images/system/lang_pl.png b/images/system/lang_pl.png new file mode 100644 index 0000000..3bc1360 Binary files /dev/null and b/images/system/lang_pl.png differ diff --git a/images/system/lang_ru.png b/images/system/lang_ru.png new file mode 100644 index 0000000..3ed6f18 Binary files /dev/null and b/images/system/lang_ru.png differ diff --git a/images/system/lang_uk.png b/images/system/lang_uk.png new file mode 100644 index 0000000..356c3ad Binary files /dev/null and b/images/system/lang_uk.png differ diff --git a/images/system/loading.gif b/images/system/loading.gif new file mode 100644 index 0000000..ab48712 Binary files /dev/null and b/images/system/loading.gif differ diff --git a/images/system/logo-facebook.jpg b/images/system/logo-facebook.jpg new file mode 100644 index 0000000..c21e12b Binary files /dev/null and b/images/system/logo-facebook.jpg differ diff --git a/images/system/logo-google.jpg b/images/system/logo-google.jpg new file mode 100644 index 0000000..f971021 Binary files /dev/null and b/images/system/logo-google.jpg differ diff --git a/images/system/logo-linkedin.jpg b/images/system/logo-linkedin.jpg new file mode 100644 index 0000000..527b55c Binary files /dev/null and b/images/system/logo-linkedin.jpg differ diff --git a/images/system/logo-pinterest.jpg b/images/system/logo-pinterest.jpg new file mode 100644 index 0000000..0de7f40 Binary files /dev/null and b/images/system/logo-pinterest.jpg differ diff --git a/images/system/logo-twitter.jpg b/images/system/logo-twitter.jpg new file mode 100644 index 0000000..f499dcd Binary files /dev/null and b/images/system/logo-twitter.jpg differ diff --git a/images/system/no_img.jpg b/images/system/no_img.jpg new file mode 100644 index 0000000..5635b05 Binary files /dev/null and b/images/system/no_img.jpg differ diff --git a/index.php b/index.php new file mode 100644 index 0000000..5c2debf --- /dev/null +++ b/index.php @@ -0,0 +1,228 @@ + 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' + ] ); + +\front\controls\Site::check_url_params(); + +if ( file_exists( 'plugins/special-actions.php' ) ) + include 'plugins/special-actions.php'; + +if ( !$lang_id = \S::get_session( 'current-lang' ) ) +{ + $lang_id = \front\factory\Languages::default_language(); + \S::set_session( 'current-lang', $lang_id ); +} + +if ( \S::get('action') == 'htaccess' ) +{ + \S::htacces( '' ); + unlink( 'install.php' ); + unlink( 'update.zip' ); + header('Location: /'); + exit; +} + +if ( !$lang = \S::get_session( 'lang-' . $lang_id ) ) +{ + $lang = \front\factory\Languages::lang_translations( $lang_id ); + \S::set_session( 'lang-' . $lang_id, $lang ); +} + +$settings = \front\factory\Settings::settings_details(); + +preg_match_all( \front\view\Site::language_pattern, $settings['additional_info'], $language_list ); +if ( is_array( $language_list[0] ) ) foreach( $language_list[0] as $language_list_tmp ) +{ + $language_list_tmp = explode( ':', $language_list_tmp ); + $settings['additional_info'] = str_replace( '[LANG:' . $language_list_tmp[1] . ']', $lang[ $language_list_tmp[1] ], $settings['additional_info'] ); +} + +if ( $settings['visit_counter'] and ! \S::get_session( 'visits' ) and ! \S::is_bot() ) +{ + $visits = (int)\front\factory\Settings::visit_counter(); + $visits_new = $visits+1; + if ( $visits_new > $visits ) + { + if ( !$mdb -> count( 'pp_settings', [ 'param' => 'visits' ] ) ) + $mdb -> insert( 'pp_settings', [ 'value' => $visits_new, 'param' => 'visits' ] ); + else + $mdb -> update( 'pp_settings', [ 'value' => $visits_new ], [ 'param' => 'visits' ] ); + \S::set_session( 'visits', $visits_new ); + } +} + +if ( \S::get( 'a' ) == 'page' and \S::get( 'id' ) ) +{ + $page = \front\factory\Pages::page_details( \S::get( 'id' ) ); + \S::set_session( 'page', $page ); +} + +if ( \S::get( 'devel' ) ) + $settings['devel'] = true; + +if ( \S::get( 'hash' ) == $settings['update_key'] ) + \S::set_session( 'front-devel', true ); + +if ( file_exists( 'plugins/special-actions-middle.php' ) ) + include 'plugins/special-actions-middle.php'; + +if ( $page['cache'] and !\S::get_session( 'front-devel' ) ) +{ + $cache_url = $_SERVER['REQUEST_URI']; + $cache_file = \S::cache_file_url( $cache_url ); + if ( file_exists( $cache_file ) ) + { + $timedif = ( time() - filemtime( $cache_file )); + if ( $timedif < 3600 * 24 ) + { + $html = \S::cache_read( $cache_file ); + $html = str_replace( ' contenteditable="true"', '', $html ); + $html = str_replace( ' alltemplates="true"', '', $html ); + echo $html; + exit; + } + } +} + +$out = \front\view\Site::show(); + +if ( !isset( $_COOKIE["cookie_information"] ) ) + $out = strrev( implode( strrev( \front\view\Site::cookie_information() . '' ), explode( strrev( '' ), strrev( $out ), 2 ) ) ); + +if ( $settings['statistic_code'] ) + $out = strrev( implode( strrev( $settings['statistic_code'] . '' ), explode( strrev( '' ), strrev( $out ), 2 ) ) ); + +/* wysyłka newslettera w tle */ +if ( !$settings['newsletter_cron'] ) + \front\factory\Newsletter::newsletter_send( 1 ); + +$dom = new DOMDocument('1.0', 'UTF-8'); +$dom -> loadHTML( $out, LIBXML_HTML_NOIMPLIED ); +$stylesheet = $dom -> getElementsByTagName( 'link' ); +$remove = []; +foreach ( $stylesheet as $item ) +{ + if ( $item -> getAttribute( 'rel' ) == 'stylesheet' and strpos( $item -> getAttribute( 'class' ), 'footer' ) !== false ) + $remove[] = $item; +} + +foreach ( $remove as $item ) +{ + $item -> parentNode -> removeChild( $item ); + if ( strpos( $item -> getAttribute( 'class' ), 'footer' ) !== false ) + { + $body = $dom -> getElementsByTagName( 'body' ) -> item(0); + $body -> appendChild( $item ); + } +} + +$script = $dom -> getElementsByTagName( 'script' ); +$remove = []; +foreach ( $script as $item ) +{ + if ( $item -> getAttribute( 'class' ) == 'footer' ) + $remove[] = $item; +} + +foreach ( $remove as $item ) +{ + $item -> parentNode -> removeChild( $item ); + $body = $dom -> getElementsByTagName( 'body' ) -> item(0); + $body -> appendChild( $item ); +} + +// konwersja obrazków na webp +if ( $settings['generate_webp'] ) +{ + $images = $dom -> getElementsByTagName( 'img' ); + foreach ( $images as $img ) + { + $img_src = $img -> getAttribute( 'src' ); + + if ( $img_src != '' and strpos( $img -> getAttribute( 'class' ), 'nowebp' ) === false ) + { + if ( strpos( $img_src, '/' ) === 0 ) + $img_src = substr( $img_src, 1, strlen( $img_src ) ); + + $img_webp = \S::generate_webp_image( $img_src, 85 ); + if ( $img_webp !== false and file_exists( $img_webp ) ) + { + $img -> setAttribute( 'src', '/' . $img_webp ); + $img -> setAttribute( 'src-nowebp', '/' . $img_src ); + } + } + } +} + +// lazy loading obrazków +if ( $settings['lazy_loading'] ) +{ + $images = $dom -> getElementsByTagName( 'img' ); + foreach ( $images as $img ) + { + if ( strpos( $img -> getAttribute( 'class' ), 'nolazy' ) === false ) + { + $img -> setAttribute( 'data-src', $img -> getAttribute( 'src' ) ); + $img -> setAttribute( 'class', $img -> getAttribute( 'class' ) . ' lozad' ); + $img -> removeAttribute( 'src' ); + } + } +} + +$html = $dom -> saveHTML(); + +if ( file_exists( 'plugins/special-actions-end.php' ) ) + include 'plugins/special-actions-end.php'; + +if ( $page['cache'] ) + \S::cache_write( $cache_url, $cache_file, $html ); + +if ( !\S::get_session( 'front-devel' ) ) +{ + $html = str_replace( ' contenteditable="true"', '', $html ); + $html = str_replace( ' alltemplates="true"', '', $html ); +} + +echo $html; + +if ( \S::get_session( 'front-devel' ) ) + include( 'templates/inline-edit.php' ); +?> diff --git a/layout/contrast.css b/layout/contrast.css new file mode 100644 index 0000000..e69de29 diff --git a/layout/style-css/mottcoffe.css b/layout/style-css/mottcoffe.css new file mode 100644 index 0000000..66b6c5f --- /dev/null +++ b/layout/style-css/mottcoffe.css @@ -0,0 +1 @@ +body{line-height:1.5;font-size:16px;font-family:"Poppins",sans-serif}body>div.wrap.rwd{width:100% !important}.categorydesc{font-size:15px}#promocja{height:60px;line-height:60px;font-size:22px;font-weight:bold;color:#1da2a3}#promocja1{height:30px;line-height:30px;font-size:29px;font-weight:bold;color:#1da2a3;letter-spacing:5px}#box_custom33{overflow:hidden}#aboutcoffee{display:block}@media screen and (min-width: 768px)and (max-width: 768px){.container{width:auto !important}}.js__search-mobile-btn{display:none}#box_custom42{display:none !important}.slider-wrap{text-align:center !important;width:auto !important;height:auto !important;padding-bottom:10px}#custom-menu-2{margin:5px;text-align:center;font:normal normal 500 18px/50px "Poppins";letter-spacing:1.8px;color:#fff !important;text-transform:uppercase;opacity:1;text-decoration:none}#custom-mobile-menu1{background-image:url("/skins/user/rwd_shoper_4/images/user/menu_bg.png");background-size:cover;background-repeat:no-repeat;width:100%;background-position:top}.swiper-button-next{right:5% !important}.swiper-button-prev{left:5% !important}.swiper-pagination-bullet-active{background:#ff913b !important}#aboutcoffee:before,#our-coffeehouses-desktop:before,#news-tablet:before,#news-mobile:before,#section2-tablet:before{height:150px;display:block;content:""}.row-section1-1:after{height:100px;display:block;content:""}.placeholderIcon:hover{cursor:pointer}footer{margin-bottom:0 !important;padding-bottom:0 !important;color:#fff !important;background-color:#42281d}footer a{color:#fff !important}footer p{margin-bottom:15px !important}footer .innerfooter ul.overall>li{border-top:none !important}footer .innerfooter ul li.head{background-color:#42281d}.row-2{position:fixed;z-index:10 !important;width:100% !important}.count{color:#2f120e !important}.empty-basket{background:rgba(0,0,0,0) !important;border:none !important}header{display:none}.search__input-area,.search__input{background-color:rgba(0,0,0,0) !important}.search__input{color:#2f120e !important}.search__input-area{border:0 !important;padding-left:0 !important}.js__search-submit-btn{background-color:rgba(0,0,0,0) !important;border:none !important;box-shadow:none !important}.search__input-area-item{color:#2f120e !important}.search__input-area-item ::-moz-placeholder{color:#2f120e !important}.search__input-area-item :-ms-input-placeholder{color:#2f120e !important}.search__input-area-item ::placeholder{color:#2f120e !important}.search-focused,.search__input-area{box-shadow:none !important}@media screen and (max-width: 768px){#section1-mobile>div.page-row.row-section1-1>div{width:100vw}#p-section1-1{width:100%;text-align:center}#section1-mobile>div:nth-child(3)>div{width:100%;text-align:center}#footer-mobile>div:nth-child(5)>div.col-8>p{font-size:11px}#footer-mobile>div.page-row.row-border>div>p{font-size:12px}.swiper-pagination{position:relative !important}#box_productfull>div.innerbox.product-main-box>div>div>div:nth-child(2)>div.bottomborder.row>div.productdetails-more-details.clearfix>div{width:auto}.rwd #box_productfull .basket .form-basket .quantity_wrap{width:25%}.rwd #box_productfull .basket .form-basket .button_wrap{width:73%}#box_productfull .basket .form-basket .button_wrap{min-width:73%}.basket-step-border{padding:5px}.inpost_paczkomaty>label{width:70vw;line-height:18px;font-weight:900}div.inpost_paczkomaty>span{margin-bottom:30px;margin-left:5px}html{scroll-behavior:smooth}#section1-mobile:before{height:150px;display:block;content:""}.row-1,.row-2,.section1-tablet,.products-tablet,.delivery-tablet,.news-tablet,.section-2-tablet,.footer-tablet{display:none !important}.top{margin:0}.rwd header{padding:0}.row-1{display:none}html{width:100%;height:100%;margin:0px;padding:0px}.header{background-image:url("/skins/user/rwd_shoper_4/images/user/header.webp");background-size:cover;background-repeat:no-repeat;width:100%;background-position:center center;height:100vh}#box_custom35{margin:0 !important}.row-mobile{margin-left:0;margin-right:0 !important;position:fixed;width:100%;z-index:10}#mott-logo{margin-bottom:50px}#icon-close-image{width:40px}#img-logo{width:125%;margin-top:25px;margin-left:10px}.row-mobile a{margin:5px;margin:0 3% 0 3%}.nav-mobile{position:absolute;right:0;top:0}.nav-mobile a{float:none;display:block;text-align:left}.row-3{margin-left:auto}#text-1{padding-top:50px}#text-1 p{padding:0;margin:0}#header-div-txt-2{padding-left:0;margin-top:270px}#p-small-header{color:#fff;text-align:left;font:normal normal 600 16px/31px Poppins;letter-spacing:0px;color:#fff;text-shadow:0px 4px 6px rgba(0,0,0,.6);opacity:1;margin:0}#p-header-1{font-family:Poppins;text-align:left;font-size:29px;line-height:32px;font-weight:600;letter-spacing:0px;color:#fff;margin:0;text-shadow:0px 4px 6px rgba(0,0,0,.6)}#p-header-2{font-family:Poppins;text-align:left;letter-spacing:0px;color:#fff;font-size:30px;line-height:32px;font-weight:500;margin-bottom:10px !important}#p-header-3{font:normal normal normal 14px/17px "Poppins";letter-spacing:0px;color:#000;opacity:1}.section1-tablet{display:none}#background1{padding-top:30px;background-image:url("/skins/user/rwd_shoper_4/images/user/background.svg");background-size:cover;background-repeat:no-repeat}#elipse1{position:absolute;z-index:0;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}#elipse2{position:absolute;z-index:0;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}.row-section1-1{margin-bottom:-30px;width:100%;margin:0}.swiper-slide{width:100% !important}.p-slide-title{font-family:"Poppins";letter-spacing:0px;color:#000;opacity:1;font-size:30px;font-weight:700;line-height:32px}.p-slide-address{margin-top:30px !important;letter-spacing:1.1px;text-transform:uppercase;color:#070707;opacity:1;font-family:"Poppins";font-size:16px;line-height:20px;font-weight:700}.p-slide-description{letter-spacing:1.1px;color:#070707;text-transform:uppercase;opacity:1;text-align:center;font-size:11px;line-height:14px;font-weight:600}.swiper-pagination{bottom:55px !important;padding-bottom:20px}.swiper-pagination-bullet{--swiper-theme-color: #FFC400 !important}.swiper-slide{background-color:#ffa231}#section1-row-12{margin-bottom:20px}.row-section1-2{width:100%;margin-right:0}#div-coffeehouse{text-align:right;padding-right:0;height:50px}#coffeehouse-mobile{position:relative;z-index:2;width:100%;top:-50px;left:-5%;height:250px;content:url("/skins/user/rwd_shoper_4/images/user/coffeehouse.png")}.row-section1-3{padding-bottom:30px}#p-section1-1{position:relative;margin-top:22px;margin-left:5% !important;font:normal normal 700 30px/32px Poppins;letter-spacing:0px;color:#000;opacity:1}#p-section1-2{font:normal normal normal 14px/17px "Poppins";text-align:left;letter-spacing:0px;color:#000;opacity:1;margin:20px 0 20px 0}#background2{padding-top:140px}.row-section1-3{margin:auto;width:100%}#img-1{width:79%;position:absolute;top:1600px;right:0%}.row-products-1{margin-top:50px}.products-p-1{font:normal normal 500 14px/17px "Poppins";letter-spacing:1.4px;color:#000;text-transform:uppercase;opacity:1;text-align:center}.products-p-2{margin-top:0 !important;margin-bottom:45px !important;text-align:center;font:normal normal bold 32px/36px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}.productname{text-align:center;font:normal normal bold 32px/36px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}.productnamewrap{height:auto !important}.price em{text-align:center;font:normal normal bold 20px/30px Poppins;font-size:20px !important;letter-spacing:0px;opacity:1}#products-p-1{font:normal normal 600 14px/17px "Poppins";letter-spacing:1.4px;color:#000;text-transform:uppercase;opacity:1;text-align:center}#products-p-2{text-align:center;font:normal normal bold 20px/30px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-3{text-align:center;font:normal normal normal 14px/17px "Poppins";letter-spacing:0px;color:#848484;opacity:1;margin:0 5% 15px 5%}#products-p-4{text-align:center;font:normal normal bold 30px/32px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}.products-image{margin:auto}#products-p-price{text-align:center;font:normal normal bold 20px/30px Poppins;letter-spacing:0px;color:#e01643;opacity:1}.row-delivery{padding:25px 0 25px 0;background-color:#ffa231 !important}#delivery-icon-mobile{content:url("/skins/user/rwd_shoper_4/images/user/delivery-mobile.svg")}.row-delivery p{font:normal normal 700 18px/24px Poppins;margin:auto;text-align:left;letter-spacing:0px;color:#000;opacity:1}.row-delivery img{width:110%}.mb-3{margin:25px;box-shadow:0px 3px 30px rgba(0,0,0,.1607843137)}#news-mobile-1{content:url("/skins/user/rwd_shoper_4/images/user/news1.png")}#news-p1{text-align:left;font:normal normal 600 12px/15px "Poppins";letter-spacing:1.2px;color:#848484;opacity:1}#news-p2{margin-top:20px !important;text-align:left;font:normal normal bold 20px/24px "Poppins";letter-spacing:0px;color:#000;opacity:1}#news-p4{font:normal normal 600 12px/17px "Poppins";letter-spacing:1.4px;color:#ffc400;text-transform:uppercase;opacity:1;text-align:right}#background3{margin:auto;background-image:url("../style/mobile/background3.svg");background-size:cover;background-repeat:no-repeat;width:100%;text-align:center;padding-bottom:15px}#costarica2{margin:auto;background-image:url("../images/user/costarica2.png");background-size:cover;background-repeat:no-repeat;padding-top:60%}.footer{background-color:#3d241a;margin:0 !important}.footer div{margin:auto}.footer-p1{text-align:left;font:normal normal bold 24px/27px Poppins;letter-spacing:0px;color:#fff;opacity:1;margin:0 !important}.footer-p2{text-align:left;font:normal normal 600 15px/18px "Poppins";letter-spacing:1.5px;color:#fff;text-transform:uppercase;opacity:1;line-height:25px;margin:0 !important}.footer-p3{font:normal normal normal 12px/15px "Poppins";letter-spacing:1.2px;color:#fff;text-transform:uppercase;opacity:1}.footer-p3-phone{font:normal normal bold 18px/25px "Poppins";letter-spacing:1.2px;color:#fff;text-transform:uppercase;opacity:1;margin:0 !important}.footer-p4{text-align:center;font:normal normal normal 12px/25px Poppins;letter-spacing:0px;color:#fff;opacity:1;margin:0 !important}#icon-cup{content:url("/skins/user/rwd_shoper_4/images/user/cup.svg");max-width:100% !important}#icon-store{content:url("/skins/user/rwd_shoper_4/images/user/store.svg");max-width:100% !important}#icon-phone{content:url("/skins/user/rwd_shoper_4/images/user/phone.svg");max-width:100% !important}#icon-mail{content:url("/skins/user/rwd_shoper_4/images/user/mail.svg");max-width:100% !important}.row-border{border-top:1px solid #b07985;padding-bottom:25px}#button1{margin-top:20px;border-width:0px;border-radius:37px;box-shadow:0 3px 6px 0 rgba(0,0,0,.16);background-color:#ffa231;width:auto;height:50px;text-align:center;font-family:"Poppins";font-style:normal;font-size:11px;font-weight:700;font-stretch:normal;line-height:normal;letter-spacing:1.6px;color:#fff;padding:0 30px 0 30px}#button2{border-width:0px;border-radius:37px;border:solid 2px #e01643;width:200px;height:65px;font-size:20px;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:2px;text-align:center;color:#e01643}#box_custom34{margin-bottom:0 !important}}@media only screen and (max-width: 1439px)and (min-width: 769px){html{scroll-behavior:smooth}#footer-mobile{display:none}html,body{width:100%;height:100%;margin:0px;padding:0px}.innerbox img{max-width:100%}.rwd .container{max-width:none;width:100% !important}.container{max-width:none;width:100%}.card-img-top{max-width:100% !important}.header{background-image:url("../images/user/header_v22.webp");background-size:cover;background-repeat:no-repeat;width:100%;height:730px;margin-top:-35px}#p-small-header{color:#fff;text-align:left;font:normal normal 400 20px/31px Poppins;letter-spacing:0px;color:#fff;text-shadow:0px 4px 6px rgba(0,0,0,.6);opacity:1;margin:0 0 0 15% !important}.p-tablet-slide-title{margin-left:10%;text-align:left;font:normal normal bold 35px/34px Poppins;letter-spacing:0px;color:#070707;opacity:1;margin-top:20px;margin-bottom:0 !important}.p-tablet-slide-description1{margin-left:10%;text-align:left;font:normal normal bold 16px/26px Poppins;letter-spacing:2px;color:#070707;text-transform:uppercase;opacity:1;margin-top:5px}.p-tablet-slide-description2{text-align:left;font:normal normal medium 20px/25px Poppins;letter-spacing:2px;color:#070707;text-transform:uppercase;opacity:1;font-weight:600}.swiper-button-prev{color:#dbdbdb !important}.swiper-button-next{color:#dbdbdb !important}.row-mobile{display:none !important}.row-1{padding:20px 15px 0 0}.row-1 a{font:normal normal 600 10px/12px "Poppins";letter-spacing:.5px;color:#000;text-transform:uppercase;opacity:1;margin-left:2%}.nav-1{margin-right:20px}.nav-1,.nav-2{text-align:right}.row-2 a{font:normal normal 600 10px/12px "Poppins";letter-spacing:.5px;color:#fff;text-transform:uppercase;opacity:1;margin-right:3%}.row-2 button{margin-top:0}.row-3{margin-top:100px}#header-div-txt-2{margin-top:250px}#p-header-1{font-family:Poppins;text-align:left;font-size:42px;line-height:52px;font-weight:600;letter-spacing:0px;color:#fff;margin:0 0 0 15%;text-shadow:0px 4px 6px rgba(0,0,0,.6)}#p-header-2{margin:0;text-align:left;font:normal normal 500 36px/37px Poppins;letter-spacing:0px;color:#000}#p-header-3{font:normal normal normal 14px/17px "Poppins";letter-spacing:0px;color:#000;opacity:1}#button1{margin-top:20px;margin-left:15%;border-width:0px;border-radius:37px;box-shadow:0 3px 6px 0 rgba(0,0,0,.16);background-color:#fff;width:auto;height:40px;text-align:center;font-family:"Poppins",sans-serif;font-style:normal;font-size:12px;font-weight:800;font-stretch:normal;line-height:normal;letter-spacing:1.6px;color:#ffa231;padding:0 20px 0 20px}.section1-mobile{display:none}.row-section1-1{margin-top:0;margin-bottom:-50px;z-index:9;position:relative}#section1-row2{height:493px;max-height:493px}#section1-text1-tablet{width:100%;z-index:-1}#section1-text1-tablet p{margin-right:5%}#p-section1-1{margin-top:120px;font:normal normal 700 30px/32px Poppins;letter-spacing:0px;color:#000;opacity:1}#elipse1{position:absolute;z-index:-1;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}#elipse2{position:absolute;z-index:-1;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}#section1-image1{background-image:url("../images/user/costarica1.png");background-size:cover;background-repeat:no-repeat;z-index:-1;max-width:100%;max-height:100%}#section1-coffee1{position:relative;bottom:-265px;left:-55%}#section1-coffeebeans{width:200%;position:absolute;bottom:60;right:-100%;z-index:-1}#section1-coffeehouse{width:200%;margin-top:50px}#section1-trapeze{background-image:url("../images/user/trapeze2_tablet.svg");background-size:cover;background-repeat:no-repeat;z-index:-2}#p-section1-2{margin-right:30%;font:normal normal normal 14px/17px "Poppins";text-align:left;letter-spacing:0px;color:#000;opacity:1}#text2-div{position:absolute;top:15;left:60%;margin-right:5%}#section1-text2{margin-bottom:10px;text-align:left;font:normal normal bold 27px/27px Poppins;letter-spacing:0px;color:#000;opacity:1}#section1-text3{margin-bottom:10px;line-height:1.3;text-align:left;font:normal normal 400 15px/17px "Poppins";letter-spacing:-0.5px;color:#000;opacity:1}.products-mobile{display:none}.products-p-1{font:normal normal 500 14px/17px "Poppins";letter-spacing:1.4px;color:#000;text-transform:uppercase;opacity:1;text-align:center}.products-p-2{margin-top:0 !important;margin-bottom:12px !important;text-align:center;font:normal normal bold 32px/36px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}.productname{text-align:center;font:normal normal bold 32px/36px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}.productnamewrap{height:auto !important}.price em{text-align:center;font:normal normal bold 20px/30px Poppins;font-size:20px !important;letter-spacing:0px;opacity:1}#products-p-1{font:normal normal 600 14px/17px "Poppins";letter-spacing:1.4px;color:#000;text-transform:uppercase;opacity:1;text-align:center}#products-p-2{text-align:center;font:normal normal bold 30px/32px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-2-title{text-align:center;font:normal normal bold 15px/23px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-3{text-align:center;font:normal normal normal 14px/17px "Poppins";letter-spacing:0px;color:#848484;opacity:1;margin:0 5% 15px 5%}#products-p-price{text-align:center;font:normal normal bold 20px/30px Poppins;letter-spacing:0px;color:#e01643;opacity:1}.row-products-2{margin-top:50px}.row-products-2 div{margin:auto;text-align:center}.row-products-2 div:not(:last-child):not(:nth-child(5)):not(:first-child){border-right:1px solid #c4c4c4}.delivery{display:none}#delivery-icon{content:url("/skins/user/rwd_shoper_4/images/user/delivery_tablet.svg")}#delivery-tablet-p1{text-align:left;font:normal normal 800 27px/31px Poppins;letter-spacing:0px;color:#000;margin-bottom:0}#delivery-tablet-p2{text-align:left;font:normal normal 400 27px/31px Poppins;letter-spacing:0px;color:#000}.news{display:none}.news-tablet .col{margin:20px}.card-img-top{min-height:300px}.card-body{min-height:230px}.mb-3{box-shadow:0px 3px 30px rgba(0,0,0,.1607843137)}#news-p1{text-align:left;font:normal normal 600 15px/15px "Poppins";letter-spacing:1.2px;color:#848484;opacity:1;margin:auto}#news-p2{margin-top:20px !important;text-align:left;font:normal normal bold 20px/20px "Poppins";letter-spacing:0px;color:#000;opacity:1;display:none}#news-p4{font:normal normal 600 14px/17px "Poppins";letter-spacing:1.4px;color:#ffc400;text-transform:uppercase;opacity:1;text-align:right;position:absolute;top:90%;left:70%}.section-2{display:none}#section-2-image-tablet{position:relative;top:65px}#image-section2{position:relative;height:600px;right:-10%;top:150px;content:url(/skins/user/rwd_shoper_4/images/user/wspieramy.jpg);z-index:1}#p-section2-2{text-align:left;font:normal normal normal 15px/18px "Poppins";letter-spacing:0px;color:#000;opacity:1;margin-right:50% !important}#elipse3{position:absolute;z-index:-1;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}.footer div{margin-bottom:0}.p-footer1{text-align:left;font:normal normal bold 20px/28px "Poppins";letter-spacing:0px;color:#fff;opacity:1}.p-footer2{text-align:left;font:normal normal 400 16px/26px "Poppins";letter-spacing:1.5px;color:#fff;text-transform:uppercase;opacity:1;margin-bottom:0 !important;margin-top:0 !important}.p-footer3{text-align:left;font:normal normal normal 12px/15px "Poppins";letter-spacing:1.2px;color:#fff;text-transform:uppercase;opacity:1;margin-bottom:0}.footer-p4{text-align:center;font:normal normal normal 12px/25px Poppins;letter-spacing:0px;color:#fff;opacity:1;margin-bottom:0}.row-border{border-top:1px solid #b07985;padding-bottom:25px}}@media screen and (min-width: 1440px){html{scroll-behavior:smooth}.row-mobile,.section1-mobile,.products-mobile,.news,.section-2,.mobile{display:none}html,body{width:100%;height:100%;margin:0px;padding:0px}#home{display:block}.header{max-width:1000%;background-size:cover;background-image:url("../images/user/header_v22.webp");background-repeat:no-repeat;width:100%;height:101vh;margin-top:-55px}#header-div-txt-2{margin-top:250px}.row-1{padding:20px 15px 0 0}.row-1 a{font:normal normal 600 15px/23px "Poppins";letter-spacing:1.8;color:#000;text-transform:uppercase;opacity:1;margin-left:2%}.nav-1{margin-right:20px;padding-top:20px}.nav-1,.nav-2{text-align:center}.row-2 a{font:normal normal 600 15px/23px "Poppins";letter-spacing:1.8;color:#fff;text-transform:uppercase;opacity:1;margin-right:3%}.row-3{margin-top:100px}#p-small-header{color:#fff;text-align:left;font:normal normal 400 20px/31px Poppins;letter-spacing:0px;color:#fff;text-shadow:0px 4px 6px rgba(0,0,0,.6);opacity:1;margin:0 0 0 15% !important}.p-tablet-slide-title{margin-left:10%;text-align:left;font:normal normal bold 57px/51px Poppins;letter-spacing:0px;color:#070707;opacity:1;margin-top:20px;margin-bottom:0 !important}.p-tablet-slide-description1{margin-left:10%;text-align:left;font:normal normal bold 16px/26px Poppins;letter-spacing:2px;color:#070707;text-transform:uppercase;opacity:1;margin-top:5px}.p-tablet-slide-description2{text-align:left;font:normal normal medium 20px/25px Poppins;letter-spacing:2px;color:#070707;text-transform:uppercase;opacity:1;font-weight:600}.swiper-button-prev{color:#dbdbdb !important}.swiper-button-next{color:#dbdbdb !important}#p-header-1{font-family:Poppins;text-align:left;font-size:42px;line-height:52px;font-weight:600;letter-spacing:0px;color:#fff;margin:0 0 0 15%;text-shadow:0px 4px 6px rgba(0,0,0,.6)}#p-header-2{margin:0;text-align:left;font:normal normal 500 70px/72px Poppins;letter-spacing:0px;color:#000}#p-header-3{text-align:left;font:normal normal normal 20px/24px "Poppins";letter-spacing:0px;color:#000;opacity:1;padding-right:225px}#button1{border-width:0px;border-radius:37px;box-shadow:0 3px 6px 0 rgba(0,0,0,.16);background-color:#fff;width:auto;height:55px;text-align:center;font:normal normal medium 18px/23px "Poppins";letter-spacing:1.8px;color:#fff;text-transform:uppercase;opacity:1;font-stretch:normal;line-height:normal;letter-spacing:1.6px;color:#ffa231;padding:0 20px 0 20px;font-weight:700;margin-left:15%}#button2{border-width:0px;border-radius:37px;border:solid 2px #e01643;width:200px;height:65px;font-size:20px;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:2px;text-align:center;color:#e01643}#icon-search{max-width:1000%;content:url("/skins/user/rwd_shoper_4/images/user/search_desktop.svg")}#icon-person{max-width:1000%;content:url("/skins/user/rwd_shoper_4/images/user/person_desktop.svg")}#icon-basket{max-width:1000%;content:url("/skins/user/rwd_shoper_4/images/user/basket_desktop.svg")}#mott-logo{max-width:1000%;content:url("/skins/user/rwd_shoper_4/images/user/logo_desktop.svg");position:relative;top:-40px}.row-section1-1{margin-top:-40px;margin-bottom:-60px}#section1-row2{height:493px;max-height:493px}#section1-text1-tablet{width:100%;z-index:-1}#p-section1-1{margin-top:120px;text-align:left;font:normal normal bold 50px/50px Poppins;letter-spacing:0px;color:#000;opacity:1}#p-section1-2{text-align:left;color:#000}#elipse1{max-width:1000%;content:url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg");position:absolute;z-index:-1}.elipse1-slider{width:45px}#elipse2{max-width:1000%;content:url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg");position:absolute;z-index:-1}#section1-image1{max-width:1000%;background-image:url("/skins/user/rwd_shoper_2/images/user/costarica1.png");background-size:cover;background-repeat:no-repeat;z-index:-1;margin-top:-150px;max-width:100%;max-height:100%}#section1-coffee1{content:url("/skins/user/rwd_shoper_2/images/user/coffee1_desktop.png");position:relative;bottom:-275px;left:-60%;width:80%}#section1-coffeebeans{width:200%;position:absolute;bottom:60;right:-100%;z-index:-1}#section1-coffeehouse{width:200%;margin-top:50px;max-width:200%;content:url("/skins/user/rwd_shoper_2/images/user/both_desktop.png")}#section1-trapeze{height:600px;max-width:1000%;background-image:url("/skins/user/rwd_shoper_2/images/user/trapeze2.svg");background-size:cover;background-repeat:no-repeat;z-index:-2}#elipse2{position:absolute;z-index:-1;max-width:1000%;content:url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg")}#text2-div{position:absolute;top:15;left:60%;margin-right:-5%}#section1-text2{margin-bottom:10px;text-align:left;font:normal normal bold 27px/27px Poppins;letter-spacing:0px;color:#000;opacity:1}#section1-text3{margin-bottom:10px;line-height:1.3;text-align:left;font:normal normal 400 15px/17px "Poppins";letter-spacing:-0.5px;color:#000;opacity:1}.productname{padding-top:0 !important;text-align:center;font:normal normal bold 20x/36px Poppins !important;letter-spacing:0px;color:#000;opacity:1;margin:auto}.productnamewrap{height:70px !important}.price em{text-align:center;font:normal normal bold 20px/30px Poppins;font-size:20px !important;letter-spacing:0px;opacity:1}.roductnamewrap{height:70px !important}.row-products-1{margin-top:650px}.products-p-1{font:normal normal 500 14px/17px "Poppins";letter-spacing:1.4px;color:#000;text-transform:uppercase;opacity:1;text-align:center}.products-p-2{margin-top:0 !important;margin-bottom:12px !important;text-align:center;font:normal normal bold 52px/55px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-1{font:normal normal 600 16px/19px "Poppins";letter-spacing:1.6px;color:#000;text-transform:uppercase;opacity:1;text-align:center}#products-p-2{text-align:center;font:normal normal bold 50px/76px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-2-title{text-align:center;font:normal normal bold 15px/23px Poppins;letter-spacing:0px;color:#000;opacity:1;margin:auto}#products-p-3{text-align:center;font:normal normal normal 14px/17px "Poppins";letter-spacing:0px;color:#848484;opacity:1;margin:0 5% 15px 5%}#products-p-price{text-align:center;font:normal normal bold 20px/30px Poppins;letter-spacing:0px;color:#e01643;opacity:1}.row-products-2{margin-top:50px}.row-products-2 div{margin:auto;text-align:center}.row-products-2 div:not(:last-child):not(:nth-child(5)):not(:first-child){border-right:1px solid #c4c4c4}#delivery-tablet-p1{text-align:left;font:normal normal 800 50px/57px Poppins;letter-spacing:0px;color:#000;margin-bottom:0}#delivery-tablet-p2{text-align:left;font:normal normal 400 50px/57px Poppins;letter-spacing:0px;color:#000}#delivery-icon{max-width:1000%;content:url("../images/user/delivery_desktop.svg")}#delivery-tablet-p2{margin-top:0}.news-tablet .col{margin:20px}.card-img-top{height:300px}.card-body{margin:20px;min-height:220px}}.card-body p{margin:15px}#icon-clock{max-width:1000%;content:url("../images/user/clock_desktop.svg")}#icon-arrow{max-width:1000%;content:url("../images/user/arrow.svg")}.mb-3{box-shadow:0px 3px 30px rgba(0,0,0,.1607843137)}#news-p1{text-align:left;font:normal normal 600 15px/15px "Poppins";letter-spacing:1.2px;color:#848484;opacity:1}#news-p2{margin-top:20px !important;text-align:left;font:normal normal bold 20px/20px "Poppins";letter-spacing:0px;color:#000;opacity:1}#news-p4{font:normal normal 600 14px/17px "Poppins";letter-spacing:1.4px;color:#ffc400;text-transform:uppercase;opacity:1;text-align:right}.section-2-tablet{margin-top:-100px}#section1-row2{margin-top:-10px}#image-section2{margin-left:20%;max-width:100%;margin-top:170px;content:url("/skins/user/rwd_shoper_4/images/user/costarica2_desktop.png");height:600px;position:relative;z-index:1;left:20%}#section2-text{margin-top:300px}#section2-text p{margin-right:20%}#elipse3{position:absolute;z-index:-1;max-width:1000%;content:url("/skins/user/rwd_shoper_4/images/user/elipse1_desktop.svg")}#section-2-image-tablet{position:relative;top:130px}#p-section2-2{text-align:left;font:normal normal normal 15px/23px "Poppins";letter-spacing:0px;color:#000;opacity:1}#icon-cup{max-width:26px;content:url("/skins/user/rwd_shoper_4/images/user/cup_desktop.svg")}#icon-store{max-width:26px;content:url("/skins/user/rwd_shoper_4/images/user/store_desktop.svg")}#icon-phone{max-width:26px;content:url("/skins/user/rwd_shoper_4/images/user/phone_desktop.svg")}#icon-mail{max-width:26px;content:url("/skins/user/rwd_shoper_4/images/user/mail_desktop.svg")}#footer{padding-top:75px;font-size:15px;font-weight:200}#footer div{margin-bottom:0}#footer img{width:30px;height:auto}.footer-tablet{background-color:#42281d !important}.p-footer1{text-align:left;color:#fff;opacity:1;font-weight:500}.p-footer2{text-align:left;line-height:1.5;color:#fff;opacity:1;font-weight:500}.p-footer3{text-align:left;line-height:1.5;color:#fff;opacity:1;margin-bottom:0}.footer-p4{text-align:center;line-height:1.5;letter-spacing:0px;color:#fff;opacity:1;margin-bottom:0}#icon-fb{max-width:1000%;content:url("/skins/user/rwd_shoper_2/images/user/fb_desktop.svg")}#icon-insta{max-width:1000%;content:url("/skins/user/rwd_shoper_2/images/user/insta_desktop.svg")}.row-border{border-top:1px solid #b07985;padding-bottom:25px;margin-bottom:-40px}.mobile-menu-main{background-image:url("/skins/user/rwd_shoper_4/images/user/menu_bg.png");background-size:cover;background-repeat:no-repeat;width:100%;background-position:center center;display:none}#icon-logo{width:35%}.icon-logo{text-align:right;margin:auto}.icon-close-div{text-align:left;margin:auto}.mobile-menu div{display:grid;text-align:center}.mobile-menu a{margin:5px;text-align:center;font:normal normal 500 18px/50px "Poppins";letter-spacing:1.8px;color:#fff;text-transform:uppercase;opacity:1;text-decoration:none}#button1-mobile{margin-top:20px;border:2px solid #fff;border-radius:37px;background-color:#ffa231;width:auto;height:50px;text-align:center;font:normal normal 500 18px/50px "Poppins";font-stretch:normal;line-height:normal;letter-spacing:1.6px;color:#fff;padding:0 20px 0 20px;box-shadow:0px 3px 6px rgba(0,0,0,.1607843137);opacity:1}.page-row{display:flex;-ms-flex-wrap:wrap}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.container{max-width:none}.innermain{max-width:1180px}.innerfooter{max-width:1180px;font-size:15px}.innerfooter a{font-weight:200}.-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.mb-3{box-shadow:0px 3px 30px rgba(0,0,0,.1607843137)}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.footer-tablet p{margin:0 !important}#elipse3{position:absolute;z-index:-1;content:url("/skins/user/rwd_shoper_4/images/user/elipse1.svg")}.quickview{background-color:#fff !important;color:dimgray !important;border:none !important}.quickview::before{color:dimgray !important;border:none !important}.productname{margin-bottom:0 !important}select{background:#fff;font-size:14px}@media screen and (max-width: 768px){.fa,.icon-custom-cart{color:#2f120e !important}#menu-icon-image-1{color:#2f120e !important}.menu #rwd-menu li{background:#2f120e !important}.menu #rwd-menu li a:hover,a:active{color:#ffa231 !important}.rwd footer .innerfooter ul li>ul li{background-color:#ffa231}.search-input{background:rgba(0,0,0,0) !important;height:70px !important}.search__input-area{background:#ffa231 !important}#home-page-menu-container{background:rgba(0,0,0,.3)}#mobile-menu-display{position:fixed;z-index:10000;margin-top:-20px}}@media screen and (min-width: 769px){#custom-mobile-menu1{display:none}#pure_navbar2{background-image:url("https://mottcoffee.eu/skins/user/rwd_shoper_4/images/user/banner_but_without_logo.jpg");background-size:cover;background-repeat:no-repeat;width:100%;background-position:center center}.nav-3{max-width:1180px;margin:auto;text-align:right}.nav-3 a{color:#2f120e}.nav-2{max-width:1180px;text-align:right}}.logo-bar .row .container{display:none !important}.basket-steps{width:100%}@media only screen and (min-width: 769px)and (max-width: 1439px){.products.viewphot .product .productname{font-weight:unset;height:unset}#promocja1{top:86px !important}}@media screen and (max-width: 768px){.products.viewphot .product .productname{font-weight:unset;height:unset}#promocja1{display:block;top:110px !important;height:20px;line-height:20px;text-align:center}}@media screen and (min-width: 320px)and (max-width: 400px){.products.viewphot .product .productname{height:unset;font-weight:unset}}#z_menu span{display:inline-block}#z_menu .register span,#z_menu .login span,#z_menu .myaccount span,#z_menu .logout span{text-transform:lowercase !important;font-size:13px !important;color:#fff}#box_languages_select{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:#000;min-height:unset}#box_languages_select:hover{border-color:rgba(0,0,0,0);color:#000;background-color:rgba(0,0,0,0)}#box_languages_select:active{border-color:rgba(0,0,0,0) !important;color:#000;background-color:rgba(0,0,0,0) !important}.alert-success.alert{margin:0}.mobile-menu a{margin:0px}@media screen and (min-width: 1024px)and (max-width: 1280px){body>div.wrap.rwd{width:98vw;margin:auto}#footgroup2{padding-left:10px}}.popup-screen{z-index:999999;position:fixed;top:0;background:rgba(255,255,255,.1);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);width:100%;height:100vh;display:flex;justify-content:center;align-items:center;visibility:hidden;transition:.5s ease;transition-property:visibility}.popup-screen2{z-index:999999;position:fixed;top:0;background:rgba(255,255,255,.1);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);width:100%;height:100vh;display:flex;justify-content:center;align-items:center;visibility:hidden;transition:.5s ease;transition-property:visibility}.popup-screen.active{visibility:visible}.popup-screen2.active{visibility:visible}.popup-box{position:relative;background:rgba(250,250,250,.8);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);display:flex;width:30%;justify-content:center;align-items:center;flex-direction:column;padding:25px 25px;border-radius:20px;transform:scale(0);transition:.5s ease;transition-property:transform}.popup-box2{position:relative;background:rgba(250,250,250,.8);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);display:flex;width:30%;justify-content:center;align-items:center;flex-direction:column;padding:25px 25px;border-radius:20px;transform:scale(0);transition:.5s ease;transition-property:transform}.popup-screen.active .popup-box{transform:scale(1)}.popup-screen2.active .popup-box2{transform:scale(1)}.popup-btn{color:#fff;background:green;font-size:1.1em;font-weight:500;text-decoration:none;text-transform:uppercase;padding:7px 27px;margin-top:20px;border-radius:3px}.popup-btn2{color:#fff;background:green;font-size:1.1em;font-weight:500;text-decoration:none;text-transform:uppercase;padding:7px 27px;margin-top:20px;border-radius:3px}.popup-img{width:100%}.popup-img2{width:100%}.close-btn{position:absolute;font-size:1.5em;top:0;right:0;margin:15px;cursor:pointer;opacity:.5;transition:.3s ease;transition-property:opacity}.close-btn2{position:absolute;font-size:1.5em;top:0;right:0;margin:15px;cursor:pointer;opacity:.5;transition:.3s ease;transition-property:opacity}.close-btn:hover{opacity:1}.close-btn2:hover{opacity:1}@media screen and (max-width: 768px){.popup-box{width:90%}.popup-box2{width:90%}#promocja1{display:block !important}}.tags{display:flex;flex-direction:column;align-items:baseline;gap:7px}.product .tags .promo,.product-main-box .tags .promo{background:#ea4832 !important;padding:5px 10px;position:relative;top:-5px;left:-5px}.product .tags .new{background:#ea4832;padding:5px 10px}.product .tags .free_del{color:#fff;background:#ea4832;padding:5px 10px;display:none}.menu{position:absolute;top:0;left:0;right:0;padding:0}@media(max-width: 767px){.menu{position:static}}.menu .innermenu{display:flex;border:0 !important}@media(max-width: 1180px){.menu .innermenu{flex-wrap:wrap}}.menu .innermenu .menu-list{display:flex;width:calc(100% - 310px);height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}@media(max-width: 1180px){.menu .innermenu .menu-list{width:100% !important;order:2;padding:0 25px !important;justify-content:space-between}}.menu .innermenu .menu-list li{display:flex;align-items:center;float:none !important;position:relative}.menu .innermenu .menu-list li h3{padding-top:0 !important;margin-top:0 !important}.menu .innermenu .menu-list li h3 a{display:block;padding:5px 10px !important}@media(max-width: 1180px){.menu .innermenu .menu-list li h3 a{font-size:15px !important}}@media(min-width: 768px)and (max-width: 992px){.menu .innermenu .menu-list li h3 a{font-size:14px !important}}.menu .innermenu .menu-list li .submenu.level1{top:100%;position:absolute;z-index:10}.menu .innermenu .menu-list li .submenu.level1 ul{position:static;background:#fff;border-radius:3px;padding:10px;box-shadow:1px 1px 16px 0px rgba(153,153,153,.3882352941)}.menu .innermenu .menu-list li .submenu.level1 ul li{margin:0 !important;border-bottom:1px solid #e6e6e6}.menu .innermenu .menu-list li .submenu.level1 ul li a{display:block;color:#2f120e;font-size:15px;padding:10px 15px !important}.menu .innermenu .login-bar{width:-webkit-fit-content !important;width:-moz-fit-content !important;width:fit-content !important;height:62px;display:flex;align-items:center;position:static;margin:25px 25px 0 0}@media(max-width: 1180px){.menu .innermenu .login-bar{font-size:15px;width:100% !important;justify-content:center;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin:10px auto}.menu .innermenu .login-bar ul{line-height:1.5 !important}}@media(max-width: 767px){.menu .innermenu .login-bar a span{color:#000 !important}}.menu .innermenu .menu-list{border-bottom:none}.menu .innermenu .menu-list li h3 a{color:#fff !important;font-family:"Poppins",sans-serif;font-weight:500;font-size:16px;line-height:20px}.menu .innermenu .parent:hover>div>ul{background-color:rgba(0,0,0,0);border:none}.menu .innermenu .parent:hover>div>ul::before{display:none}.menu .innermenu .parent:hover>div>ul{width:auto;top:90px}.menu .innermenu .parent:hover>div>ul.level1{display:block}.menu .innermenu .parent:hover>div>ul.level1 li{width:100%;display:block}.menu .innermenu .parent:hover>div>ul.level1 li a{color:#2f120e !important;white-space:nowrap}.menu .innermenu .menu-list li #headlink21{color:#ef8300}.menu .innermenu .menu-list li ul.level1>li:first-child{margin-top:0}.menu .innermenu .parent:hover>div>ul.level2{display:none}.menu .innermenu .menu-list{overflow:inherit;padding:25px 25px 0}.menu .innermenu .menu-list li.home-link-menu-li{display:block;margin-right:100px}@media(max-width: 1180px){.menu .innermenu .menu-list li.home-link-menu-li{margin:0}}.menu .innermenu .menu-list li.home-link-menu-li img{width:54px}.menu .innermenu .login-bar .links span{color:#fff;font-family:"Poppins",sans-serif;font-weight:500;font-size:16px;line-height:20px}.menu .innermenu .nav_menu_basket_search{background:#fff}.shop_product_list .menu{position:relative}body.shop_index .nav_menu_basket_search{display:none}body:not(.shop_index) .menu.row{background:url("/userdata/public/boxes/06deda96b2f1c1aac66ad20e910383d5.jpg") no-repeat center top;background-repeat:no-repeat;background-size:cover;background-position:top}.nav_menu_basket_search{margin-top:73px}.nav_menu_basket_search .container{max-width:1180px;margin:auto;display:flex;justify-content:flex-start}.nav_menu_basket_search .container .basket{margin-left:auto}.nav_menu_basket_search .container .search__container form{margin:0;padding:0}.breadcrumbs{padding:15px;font-size:15px;background:#f3f3f3}.breadcrumbs .container{max-width:1180px}.shop_product_list .top .container{max-width:1180px}.shop_product_list .main .centercol{margin-bottom:40px}.main{margin-top:20px}.box-slider .slides li>a img{height:100%;width:100%;-o-object-fit:cover;object-fit:cover}.box-slider .ps-arrow-left{position:relative;background:none !important;background-color:none !important}.box-slider .ps-arrow-left::before{content:"";position:absolute;top:0;left:20px;bottom:0;width:30px;height:30px;border-left:3px solid #e6e6e6;border-bottom:3px solid #e6e6e6;transform:rotate(45deg);border-radius:2px}.box-slider .ps-arrow-right{position:relative;background:none !important;background-color:none !important}.box-slider .ps-arrow-right::before{content:"";position:absolute;top:0;right:20px;bottom:0;width:30px;height:30px;border-right:3px solid #e6e6e6;border-top:3px solid #e6e6e6;transform:rotate(45deg);border-radius:2px}.swiper-container{position:relative}#box_productoftheday .boxhead{border-bottom:none;margin-bottom:0}#box_productoftheday .boxhead span{font-family:"Poppins",sans-serif;font-size:36px;line-height:44px;font-weight:300;text-align:center}#box_productoftheday .innerbox .boxintro{position:relative;font-family:"Poppins",sans-serif;font-size:48px;line-height:58px;font-weight:700;margin-top:0;text-align:center}#box_productoftheday .innerbox .boxintro::before{content:"";position:absolute;bottom:-20px;left:0;right:0;height:1px;width:200px;background:#000;margin:0 auto}header.row{padding:0;border:none}header #box_languages{position:absolute;top:10px;right:30px;margin-bottom:0;z-index:15}@media(max-width: 767px){header #box_languages{position:static}header #box_languages ul{justify-content:center}}header #box_languages .boxhead{display:none}header #box_languages .floatcenterwrap ul.icons{display:flex;flex-direction:row;gap:12px}@media(min-width: 1300px){.s-row .s-grid-4{width:280px}}#box_mainproducts .products .buttons{display:flex;align-items:center;justify-content:center}.addtobasket{background-color:#ffa231 !important;border:none !important;padding:8px 15px;font-size:.8rem;font-weight:700;cursor:pointer;text-transform:uppercase !important;transition:.3s all;border-radius:3px}.addtobasket:hover{background:#2f120e !important}footer.footer .overall ul li:first-child{font-size:16px}footer.footer .overall ul{padding:0 5px}footer.footer .overall ul li{font-family:"Poppins",sans-serif}#footer .page-row .col-1{display:flex;justify-content:center}@media(max-width: 767px){.menu{height:120px !important}.menu #rwd-menu{margin-top:10px;width:100%;text-align:center}.menu #rwd-menu li{background:#2f120e !important;display:block;text-align:center;border-bottom:1px solid #4a2f2b}.menu #rwd-menu li a{width:100%;text-align:center;font-family:"Poppins",sans-serif;font-weight:500;font-size:15px}.menu-mobile{margin:auto;width:100%}.menu-mobile .fa{font-size:26px !important}.menu-mobile .icon-custom-cart{font-size:28px !important}}body:not(.shop_index) .menu.row{background:url("https://mottcoffee.eu/skins/user/rwd_shoper_4/images/user/banner.png") no-repeat top center;background-size:cover;position:static}@media(max-width: 767px){body:not(.shop_index) .menu.row{background:#fff !important}}body:not(.shop_index) .menu.row .innermenu{flex-wrap:wrap;height:-webkit-fit-content !important;height:-moz-fit-content !important;height:fit-content !important}body:not(.shop_index) .menu.row .nav_menu_basket_search{min-width:100% !important}@media(max-width: 767px){body:not(.shop_index) .menu.row .nav_menu_basket_search{display:none !important}}body:not(.shop_index) .main.row{background:#f3f3f3;margin-top:0;padding-top:50px}#contact{padding-top:75px}#box_custom34{margin:0 !important}.centercol .products .product{background:#fff;border-radius:3px;border:0;margin-bottom:15px}.centercol .products .product form.basket{display:flex;align-items:center;justify-content:flex-end}.centercol .products .product form.basket .price{margin-bottom:0;padding-bottom:0}.products.viewphot .product{background:#fff;border-radius:3px;border:0}.products.viewphot .product .productname{font-size:16px;height:auto}.alert.alert-success{background-color:#299129;border:0;color:#fff;text-align:center}.alert.alert-success .close span{color:#fff}.box .boxhead>span,.category-name,h3,h4{font-size:1.1rem;font-weight:600;color:#42281d}h4{font-size:1rem}body:not(.shop_index) footer{padding:50px 0 !important}#box_menu,.productdetails-more-details,#box_description,#box_productdeliveries,#box_productcomments,#box_basketlist,#box_basketstep2,#box_basketaddress,#box_basketsummary,#box_register,#box_login,#box_passchange,#box_productrelated{background:#fff;padding:25px !important;border-radius:3px;border:0 !important;font-size:.9rem !important;font-weight:400}#box_menu .boxhead,.productdetails-more-details .boxhead,#box_description .boxhead,#box_productdeliveries .boxhead,#box_productcomments .boxhead,#box_basketlist .boxhead,#box_basketstep2 .boxhead,#box_basketaddress .boxhead,#box_basketsummary .boxhead,#box_register .boxhead,#box_login .boxhead,#box_passchange .boxhead,#box_productrelated .boxhead{border:0}.productnamewrap .productname{font-size:16px}#box_productfull{font-size:.95rem !important}#box_productfull .boxhead{border:0}#box_productfull .first{font-size:.95rem !important}#box_productfull .second{color:#838383}#box_productfull h1{font-weight:600}#box_productfull .productimg .mainimg{background:#fff;border:0}#box_productfull .productimg .tags .free_del{background:#2f2f2f;color:#fff;display:none !important}.basket-contain .basket-summery a{box-sizing:border-box;background-color:#fff;padding:5px 10px;vertical-align:middle;width:100%;text-align:center;display:block;line-height:1.5}#pure_navbar2 img{width:75px}.row.checkout{padding-bottom:25px}.basket-step-border{border:0;padding:0}/*# sourceMappingURL=mottcoffe.css.map */ \ No newline at end of file diff --git a/layout/style-css/mottcoffe.css.map b/layout/style-css/mottcoffe.css.map new file mode 100644 index 0000000..a778368 --- /dev/null +++ b/layout/style-css/mottcoffe.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../style-scss/mottcoffe.scss"],"names":[],"mappings":"AAGA,KACE,eAAA,CACA,cAAA,CACA,gCAAA,CAGF,kBACE,qBAAA,CAGF,cACE,cAAA,CAGF,UACE,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,aAAA,CAGF,WACE,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,aAAA,CACA,kBAAA,CAIF,cACE,eAAA,CAKF,aACE,aAAA,CAGF,2DACE,WACE,qBAAA,CAAA,CAIJ,uBACE,YAAA,CAGF,cACE,uBAAA,CAYF,aACE,4BAAA,CACA,qBAAA,CACA,sBAAA,CACA,mBAAA,CAGF,eACE,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,oBAAA,CACA,qBAAA,CACA,wBAAA,CACA,SAAA,CACA,oBAAA,CAGF,qBACE,wEAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,uBAAA,CAGF,oBACE,mBAAA,CAGF,oBACE,kBAAA,CAGF,iCACE,6BAAA,CAGF,qHAKE,YAAA,CACA,aAAA,CACA,UAAA,CAGF,sBACE,YAAA,CACA,aAAA,CACA,UAAA,CAGF,uBACE,cAAA,CAGF,OACE,0BAAA,CACA,2BAAA,CACA,qBAAA,CACA,wBAAA,CAGF,SACE,qBAAA,CAGF,SACE,6BAAA,CAGF,kCACE,0BAAA,CAGF,+BACE,wBAAA,CAKF,OACE,cAAA,CACA,qBAAA,CACA,qBAAA,CAcF,OACE,wBAAA,CAGF,cACE,mCAAA,CACA,sBAAA,CAGF,OACE,YAAA,CAGF,mCAEE,yCAAA,CAGF,eACE,wBAAA,CAGF,oBACE,mBAAA,CACA,yBAAA,CAGF,uBACE,yCAAA,CACA,sBAAA,CACA,0BAAA,CAGF,yBACE,wBAAA,CAGF,4CACE,wBAAA,CADF,gDACE,wBAAA,CADF,uCACE,wBAAA,CAGF,oCAEE,0BAAA,CAGF,qCAGE,iDACE,WAAA,CAIF,cACE,UAAA,CACA,iBAAA,CAGF,sCACE,UAAA,CACA,iBAAA,CAGF,4CACE,cAAA,CAGF,6CACE,cAAA,CAGF,mBACE,4BAAA,CAIF,0IACE,UAAA,CAIF,0DACE,SAAA,CAGF,wDACE,SAAA,CAGF,mDACE,aAAA,CAIF,oBACE,WAAA,CAIF,yBACE,UAAA,CACA,gBAAA,CACA,eAAA,CAGF,2BACE,kBAAA,CACA,eAAA,CAIF,KACE,sBAAA,CAGF,wBAGE,YAAA,CACA,aAAA,CACA,UAAA,CAGF,+GAQE,uBAAA,CAYF,KACE,QAAA,CAGF,YACE,SAAA,CAGF,OACE,YAAA,CAGF,KACE,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CAIF,QACE,wEAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,iCAAA,CACA,YAAA,CAGF,cACE,mBAAA,CAGF,YACE,aAAA,CACA,yBAAA,CACA,cAAA,CACA,UAAA,CACA,UAAA,CAGF,WACE,kBAAA,CAGF,kBACE,UAAA,CAGF,UACE,UAAA,CACA,eAAA,CACA,gBAAA,CAGF,cACE,UAAA,CACA,gBAAA,CAGF,YACE,iBAAA,CACA,OAAA,CACA,KAAA,CAGF,cACE,UAAA,CACA,aAAA,CACA,eAAA,CAGF,OACE,gBAAA,CAGF,QACE,gBAAA,CAGF,UACE,SAAA,CACA,QAAA,CAGF,kBACE,cAAA,CACA,gBAAA,CAGF,gBACE,UAAA,CACA,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,sCAAA,CACA,SAAA,CACA,QAAA,CAGF,YACE,mBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,QAAA,CACA,sCAAA,CAGF,YACE,mBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,6BAAA,CAGF,YACE,6CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAKF,iBACE,YAAA,CAIF,aACE,gBAAA,CACA,2EAAA,CACA,qBAAA,CACA,2BAAA,CAGF,SACE,iBAAA,CACA,SAAA,CACA,+DAAA,CAGF,SACE,iBAAA,CACA,SAAA,CACA,+DAAA,CAGF,gBACE,mBAAA,CACA,UAAA,CACA,QAAA,CAGF,cACE,qBAAA,CAGF,eACE,qBAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,cAAA,CACA,eAAA,CACA,gBAAA,CAGF,iBACE,0BAAA,CACA,oBAAA,CACA,wBAAA,CACA,aAAA,CACA,SAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CAGF,qBACE,oBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CAGF,mBACE,sBAAA,CACA,mBAAA,CAGF,0BACE,wCAAA,CAGF,cACE,wBAAA,CAGF,iBACE,kBAAA,CAGF,gBACE,UAAA,CACA,cAAA,CAGF,iBACE,gBAAA,CACA,eAAA,CACA,WAAA,CAGF,oBACE,iBAAA,CACA,SAAA,CACA,UAAA,CACA,SAAA,CACA,QAAA,CACA,YAAA,CACA,mEAAA,CAGF,gBACE,mBAAA,CAGF,cACE,iBAAA,CACA,eAAA,CACA,yBAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,cACE,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,oBAAA,CAGF,aACE,iBAAA,CAGF,gBACE,WAAA,CACA,UAAA,CAGF,OACE,SAAA,CACA,iBAAA,CACA,UAAA,CACA,QAAA,CAIF,gBACE,eAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,uBAAA,CACA,6BAAA,CACA,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,aACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,iBACE,sBAAA,CAGF,UACE,iBAAA,CACA,yCAAA,CACA,yBAAA,CACA,kBAAA,CACA,SAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,cACE,iBAAA,CACA,6CAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CACA,mBAAA,CAGF,cACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,gBACE,WAAA,CAGF,kBACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CAIF,cACE,qBAAA,CACA,mCAAA,CAGF,sBACE,uEAAA,CAGF,gBACE,wCAAA,CACA,WAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,kBACE,UAAA,CAMF,MACE,WAAA,CACA,+CAAA,CAGF,eACE,6DAAA,CAGF,SACE,eAAA,CACA,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,SAAA,CAGF,SACE,0BAAA,CACA,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,SACE,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,gBAAA,CAIF,aACE,WAAA,CACA,uDAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,iBAAA,CACA,mBAAA,CAGF,YACE,WAAA,CACA,qDAAA,CACA,qBAAA,CACA,2BAAA,CACA,eAAA,CAIF,QACE,wBAAA,CACA,mBAAA,CAGF,YACE,WAAA,CAGF,WACE,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,mBAAA,CAGF,WACE,eAAA,CACA,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,gBAAA,CACA,mBAAA,CAGF,WACE,6CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CAGF,iBACE,2CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,mBAAA,CAGF,WACE,iBAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,mBAAA,CAGF,UACE,2DAAA,CACA,yBAAA,CAGF,YACE,6DAAA,CACA,yBAAA,CAGF,YACE,6DAAA,CACA,yBAAA,CAGF,WACE,4DAAA,CACA,yBAAA,CAGF,YACE,4BAAA,CACA,mBAAA,CAIF,SACE,eAAA,CACA,gBAAA,CACA,kBAAA,CACA,sCAAA,CACA,wBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,mBAAA,CACA,kBAAA,CACA,oBAAA,CACA,UAAA,CACA,qBAAA,CAGF,SACE,gBAAA,CACA,kBAAA,CACA,wBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CACA,mBAAA,CACA,iBAAA,CACA,kBAAA,CACA,kBAAA,CACA,iBAAA,CACA,aAAA,CAGF,cACE,0BAAA,CAAA,CAIJ,iEAGE,KACE,sBAAA,CAGF,eACE,YAAA,CAYF,UAEE,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CAGF,cACE,cAAA,CAGF,gBACE,cAAA,CACA,qBAAA,CAGF,WACE,cAAA,CACA,UAAA,CAKF,cACE,yBAAA,CAGF,QACE,sDAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,YAAA,CACA,gBAAA,CAGF,gBACE,UAAA,CACA,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,sCAAA,CACA,SAAA,CACA,2BAAA,CAGF,sBACE,eAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CACA,eAAA,CACA,0BAAA,CAGF,6BACE,eAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,cAAA,CAGF,6BACE,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,eAAA,CAGF,oBACE,wBAAA,CAGF,oBACE,wBAAA,CAGF,YACE,uBAAA,CAGF,OACE,qBAAA,CAGF,SACE,0CAAA,CACA,mBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,cAAA,CAGF,OACE,iBAAA,CAGF,cAEE,gBAAA,CAGF,SACE,0CAAA,CACA,mBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,eAAA,CAGF,cACE,YAAA,CAGF,OACE,gBAAA,CAGF,kBACE,gBAAA,CAGF,YACE,mBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,gBAAA,CACA,sCAAA,CAGF,YACE,QAAA,CACA,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CAGF,YACE,6CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,SACE,eAAA,CACA,eAAA,CACA,gBAAA,CACA,kBAAA,CACA,sCAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,gCAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,mBAAA,CACA,kBAAA,CACA,oBAAA,CACA,aAAA,CACA,qBAAA,CAKF,iBACE,YAAA,CAGF,gBACE,YAAA,CACA,mBAAA,CACA,SAAA,CACA,iBAAA,CAGF,eACE,YAAA,CACA,gBAAA,CAGF,uBAIE,UAAA,CACA,UAAA,CAGF,yBACE,eAAA,CAGF,cACE,gBAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,+DAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,+DAAA,CAGF,iBACE,qDAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,cAAA,CACA,eAAA,CAGF,kBACE,iBAAA,CACA,aAAA,CACA,SAAA,CAGF,sBACE,UAAA,CACA,iBAAA,CACA,SAAA,CACA,WAAA,CACA,UAAA,CAGF,sBACE,UAAA,CACA,eAAA,CAGF,kBAEE,0DAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CAGF,cACE,gBAAA,CACA,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,WACE,iBAAA,CACA,MAAA,CACA,QAAA,CACA,eAAA,CAGF,gBACE,kBAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,gBACE,kBAAA,CACA,eAAA,CACA,eAAA,CACA,0CAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAIF,iBACE,YAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,uBAAA,CACA,6BAAA,CACA,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,aACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,iBACE,sBAAA,CAGF,UACE,iBAAA,CACA,yCAAA,CACA,yBAAA,CACA,kBAAA,CACA,SAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,oBACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,cACE,iBAAA,CACA,6CAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CACA,mBAAA,CAGF,kBACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CAGF,gBACE,eAAA,CAGF,oBACE,WAAA,CACA,iBAAA,CAGF,0EACE,8BAAA,CAMF,UACE,YAAA,CAGF,eACE,uEAAA,CAGF,oBACE,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,eAAA,CAGF,oBACE,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CAIF,MACE,YAAA,CAGF,kBACE,WAAA,CAGF,cACE,gBAAA,CAGF,WACE,gBAAA,CAGF,MACE,+CAAA,CAGF,SACE,eAAA,CACA,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,SAAA,CACA,WAAA,CAGF,SACE,0BAAA,CACA,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,YAAA,CAGF,SACE,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,gBAAA,CACA,iBAAA,CACA,OAAA,CACA,QAAA,CAIF,WACE,YAAA,CAGF,wBACE,iBAAA,CACA,QAAA,CAIF,gBACE,iBAAA,CACA,YAAA,CACA,UAAA,CACA,SAAA,CACA,+DAAA,CACA,SAAA,CAGF,cACE,eAAA,CACA,6CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,2BAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,+DAAA,CAMF,YACE,eAAA,CAGF,WACE,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,WACE,eAAA,CACA,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,0BAAA,CACA,uBAAA,CAGF,WACE,eAAA,CACA,6CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,eAAA,CAGF,WACE,iBAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,eAAA,CAGF,YACE,4BAAA,CACA,mBAAA,CAAA,CAIJ,sCACE,KACE,sBAAA,CAYF,uEAME,YAAA,CAQF,UAEE,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CAGF,MACE,aAAA,CAGF,QACE,eAAA,CACA,qBAAA,CACA,sDAAA,CACA,2BAAA,CACA,UAAA,CACA,YAAA,CACA,gBAAA,CAGF,kBACE,gBAAA,CAGF,OACE,qBAAA,CAGF,SACE,0CAAA,CACA,kBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,cAAA,CAGF,OACE,iBAAA,CACA,gBAAA,CAGF,cAEE,iBAAA,CAKF,SACE,0CAAA,CACA,kBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,eAAA,CAGF,OACE,gBAAA,CAGF,gBACE,UAAA,CACA,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,sCAAA,CACA,SAAA,CACA,2BAAA,CAGF,sBACE,eAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CACA,eAAA,CACA,0BAAA,CAGF,6BACE,eAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,cAAA,CAGF,6BACE,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,eAAA,CAGF,oBACE,wBAAA,CAGF,oBACE,wBAAA,CAKF,YACE,mBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,gBAAA,CACA,sCAAA,CAGF,YACE,QAAA,CACA,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CAGF,YACE,eAAA,CACA,6CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,mBAAA,CAGF,SACE,gBAAA,CACA,kBAAA,CACA,sCAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,6CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,mBAAA,CACA,kBAAA,CACA,oBAAA,CACA,aAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CAGF,SACE,gBAAA,CACA,kBAAA,CACA,wBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,eAAA,CACA,mBAAA,CACA,iBAAA,CACA,kBAAA,CACA,kBAAA,CACA,iBAAA,CACA,aAAA,CAGF,aACE,eAAA,CACA,sEAAA,CAGF,aACE,eAAA,CACA,sEAAA,CAGF,aACE,eAAA,CACA,sEAAA,CAGF,WACE,eAAA,CACA,oEAAA,CACA,iBAAA,CACA,SAAA,CAMF,gBACE,gBAAA,CACA,mBAAA,CAGF,eACE,YAAA,CACA,gBAAA,CAGF,uBAIE,UAAA,CACA,UAAA,CAGF,cACE,gBAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,cACE,eAAA,CACA,UAAA,CAGF,SACE,eAAA,CACA,uEAAA,CACA,iBAAA,CACA,UAAA,CAGF,gBACE,UAAA,CAGF,SACE,eAAA,CACA,uEAAA,CACA,iBAAA,CACA,UAAA,CAGF,iBACE,eAAA,CACA,2EAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CAGF,kBACE,uEAAA,CACA,iBAAA,CACA,aAAA,CACA,SAAA,CACA,SAAA,CAGF,sBACE,UAAA,CACA,iBAAA,CACA,SAAA,CACA,WAAA,CACA,UAAA,CAGF,sBACE,UAAA,CACA,eAAA,CACA,cAAA,CACA,oEAAA,CAGF,kBACE,YAAA,CACA,eAAA,CACA,yEAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,eAAA,CACA,uEAAA,CAGF,WACE,iBAAA,CACA,MAAA,CACA,QAAA,CACA,gBAAA,CAGF,gBACE,kBAAA,CACA,eAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,gBACE,kBAAA,CACA,eAAA,CACA,eAAA,CACA,0CAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAGF,aACE,wBAAA,CACA,iBAAA,CACA,mDAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,iBACE,sBAAA,CAGF,UACE,iBAAA,CACA,yCAAA,CACA,yBAAA,CACA,kBAAA,CACA,SAAA,CAGF,gBACE,sBAAA,CAGF,gBACE,gBAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,uBAAA,CACA,6BAAA,CACA,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,cACE,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,iBAAA,CAGF,cACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,oBACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,WAAA,CAGF,cACE,iBAAA,CACA,6CAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CACA,mBAAA,CAGF,kBACE,iBAAA,CACA,yCAAA,CACA,kBAAA,CACA,aAAA,CACA,SAAA,CAGF,gBACE,eAAA,CAGF,oBACE,WAAA,CACA,iBAAA,CAGF,0EACE,8BAAA,CAKF,oBACE,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CACA,eAAA,CAGF,oBACE,eAAA,CACA,wCAAA,CACA,kBAAA,CACA,UAAA,CAGF,eACE,eAAA,CACA,kDAAA,CAGF,oBACE,YAAA,CAIF,kBACE,WAAA,CAGF,cACE,YAAA,CAGF,WACE,WAAA,CACA,gBAAA,CAAA,CAIJ,aACE,WAAA,CAGF,YACE,eAAA,CACA,+CAAA,CAGF,YACE,eAAA,CACA,uCAAA,CAGF,MACE,+CAAA,CAGF,SACE,eAAA,CACA,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,SAAA,CAGF,SACE,0BAAA,CACA,eAAA,CACA,2CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAGF,SACE,0CAAA,CACA,oBAAA,CACA,aAAA,CACA,wBAAA,CACA,SAAA,CACA,gBAAA,CAIF,kBACE,iBAAA,CAGF,eACE,gBAAA,CAGF,gBACE,eAAA,CACA,cAAA,CACA,gBAAA,CACA,0EAAA,CACA,YAAA,CACA,iBAAA,CACA,SAAA,CACA,QAAA,CAGF,eACE,gBAAA,CAGF,iBACE,gBAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,eAAA,CACA,uEAAA,CAGF,wBACE,iBAAA,CACA,SAAA,CAGF,cACE,eAAA,CACA,6CAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CAIF,UACE,cAAA,CACA,mEAAA,CAGF,YACE,cAAA,CACA,qEAAA,CAGF,YACE,cAAA,CACA,qEAAA,CAGF,WACE,cAAA,CACA,oEAAA,CAGF,QACE,gBAAA,CACA,cAAA,CACA,eAAA,CAEA,YACE,eAAA,CAGF,YACE,UAAA,CACA,WAAA,CAIJ,eACE,mCAAA,CAGF,WACE,eAAA,CACA,UAAA,CACA,SAAA,CACA,eAAA,CAGF,WACE,eAAA,CACA,eAAA,CACA,UAAA,CACA,SAAA,CACA,eAAA,CAGF,WACE,eAAA,CACA,eAAA,CACA,UAAA,CACA,SAAA,CACA,eAAA,CAGF,WACE,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,SAAA,CACA,eAAA,CAGF,SACE,eAAA,CACA,kEAAA,CAGF,YACE,eAAA,CACA,qEAAA,CAGF,YACE,4BAAA,CACA,mBAAA,CACA,mBAAA,CAGF,kBACE,wEAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,iCAAA,CACA,YAAA,CAMF,WACE,SAAA,CAGF,WACE,gBAAA,CACA,WAAA,CAGF,gBACE,eAAA,CACA,WAAA,CAMF,iBACE,YAAA,CACA,iBAAA,CAGF,eACE,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,oBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CACA,oBAAA,CAIF,gBACE,eAAA,CACA,qBAAA,CACA,kBAAA,CAEA,wBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,0CAAA,CACA,mBAAA,CACA,kBAAA,CACA,oBAAA,CACA,UAAA,CACA,qBAAA,CACA,8CAAA,CACA,SAAA,CAIF,UAGE,YAAA,CACA,kBAAA,CAIF,OAGE,kBAAA,CACA,mBAAA,CAGF,OAGE,mBAAA,CACA,oBAAA,CAGF,OAGE,YAAA,CACA,aAAA,CAGF,OAGE,mBAAA,CACA,oBAAA,CAGF,OAGE,mBAAA,CACA,oBAAA,CAGF,OAGE,YAAA,CACA,aAAA,CAGF,OAGE,mBAAA,CACA,oBAAA,CAGF,OAGE,mBAAA,CACA,oBAAA,CAGF,OAGE,YAAA,CACA,aAAA,CAGF,QAGE,mBAAA,CACA,oBAAA,CAGF,QAGE,mBAAA,CACA,oBAAA,CAGF,QAGE,aAAA,CACA,cAAA,CAGF,KAEE,YAAA,CAGA,WAAA,CACA,cAAA,CAOF,WACE,cAAA,CAGF,WACE,gBAAA,CAGF,aACE,gBAAA,CACA,cAAA,CAEA,eACE,eAAA,CAKJ,UACE,UAAA,CACA,yCAAA,CACA,0CAAA,CAGF,MACE,+CAAA,CAGF,MACE,iBAAA,CAGA,YAAA,CAIA,qBAAA,CACA,WAAA,CACA,oBAAA,CACA,qBAAA,CACA,0BAAA,CACA,iCAAA,CACA,oBAAA,CAGF,iBACE,mBAAA,CAGF,SACE,iBAAA,CACA,UAAA,CACA,+DAAA,CAGF,WACE,gCAAA,CACA,wBAAA,CACA,sBAAA,CAGF,mBACE,wBAAA,CACA,sBAAA,CAGF,aACE,0BAAA,CAGF,OACE,eAAA,CACA,cAAA,CAcF,qCAGE,sBAEE,wBAAA,CAGF,mBACE,wBAAA,CAGF,mBACE,6BAAA,CAGF,oCAEE,wBAAA,CAGF,qCACE,wBAAA,CAGF,cACE,mCAAA,CACA,sBAAA,CAGF,oBACE,6BAAA,CAGF,0BACE,yBAAA,CAGF,qBACE,cAAA,CACA,aAAA,CACA,gBAAA,CAAA,CAIJ,qCACE,qBACE,YAAA,CAGF,cACE,6GAAA,CACA,qBAAA,CACA,2BAAA,CACA,UAAA,CACA,iCAAA,CAGF,OACE,gBAAA,CAEA,WAAA,CACA,gBAAA,CAGF,SACE,aAAA,CAGF,OACE,gBAAA,CAGA,gBAAA,CAAA,CAYJ,0BACE,uBAAA,CAIF,cACE,UAAA,CAIF,iEACE,yCACE,iBAAA,CACA,YAAA,CAGF,WACE,mBAAA,CAAA,CAKJ,qCACE,yCACE,iBAAA,CACA,YAAA,CAGF,WAEE,aAAA,CACA,oBAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CAAA,CAOJ,2DAEE,yCACE,YAAA,CACA,iBAAA,CAAA,CAIJ,aACE,oBAAA,CAGF,wFAIE,mCAAA,CACA,yBAAA,CACA,UAAA,CAGF,sBACE,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,gBAAA,CAGF,4BACE,0BAAA,CACA,UAAA,CACA,8BAAA,CAIF,6BACE,qCAAA,CACA,UAAA,CACA,yCAAA,CAIF,qBACE,QAAA,CAGF,eACE,UAAA,CAGF,6DACE,kBACE,UAAA,CACA,WAAA,CAGF,YACE,iBAAA,CAAA,CAKJ,cACE,cAAA,CACA,cAAA,CACA,KAAA,CACA,+BAAA,CACA,iCAAA,CAAA,yBAAA,CACA,UAAA,CACA,YAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iBAAA,CACA,mBAAA,CACA,8BAAA,CAGF,eACE,cAAA,CACA,cAAA,CACA,KAAA,CACA,+BAAA,CACA,iCAAA,CAAA,yBAAA,CACA,UAAA,CACA,YAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,iBAAA,CACA,mBAAA,CACA,8BAAA,CAKF,qBACE,kBAAA,CAGF,sBACE,kBAAA,CAKF,WACE,iBAAA,CACA,+BAAA,CACA,kCAAA,CAAA,0BAAA,CACA,YAAA,CACA,SAAA,CACA,sBAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,kBAAA,CACA,mBAAA,CACA,6BAAA,CAKF,YACE,iBAAA,CACA,+BAAA,CACA,kCAAA,CAAA,0BAAA,CACA,YAAA,CACA,SAAA,CACA,sBAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,kBAAA,CACA,mBAAA,CACA,6BAAA,CAKF,gCACE,kBAAA,CAGF,kCACE,kBAAA,CAKF,WACE,UAAA,CACA,gBAAA,CACA,eAAA,CACA,eAAA,CACA,oBAAA,CACA,wBAAA,CACA,gBAAA,CACA,eAAA,CACA,iBAAA,CAGF,YACE,UAAA,CACA,gBAAA,CACA,eAAA,CACA,eAAA,CACA,oBAAA,CACA,wBAAA,CACA,gBAAA,CACA,eAAA,CACA,iBAAA,CAKF,WACE,UAAA,CAGF,YACE,UAAA,CAIF,WACE,iBAAA,CACA,eAAA,CACA,KAAA,CACA,OAAA,CACA,WAAA,CACA,cAAA,CACA,UAAA,CACA,mBAAA,CACA,2BAAA,CAGF,YACE,iBAAA,CACA,eAAA,CACA,KAAA,CACA,OAAA,CACA,WAAA,CACA,cAAA,CACA,UAAA,CACA,mBAAA,CACA,2BAAA,CAKF,iBACE,SAAA,CAGF,kBACE,SAAA,CAIF,qCACE,WACE,SAAA,CAGF,YACE,SAAA,CAGF,WACE,wBAAA,CAAA,CAIJ,MACE,YAAA,CACA,qBAAA,CACA,oBAAA,CACA,OAAA,CAGF,qDAEE,6BAAA,CACA,gBAAA,CACA,iBAAA,CACA,QAAA,CACA,SAAA,CAGF,oBACE,kBAAA,CACA,gBAAA,CAGF,yBACE,UAAA,CACA,kBAAA,CACA,gBAAA,CACA,YAAA,CAIF,MACE,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,SAAA,CAIA,yBADF,MAEI,eAAA,CAAA,CAGF,iBACE,YAAA,CACA,mBAAA,CAEA,0BAJF,iBAKI,cAAA,CAAA,CAGF,4BACE,YAAA,CACA,wBAAA,CACA,0BAAA,CAAA,uBAAA,CAAA,kBAAA,CAEA,0BALF,4BAMI,qBAAA,CACA,OAAA,CACA,yBAAA,CACA,6BAAA,CAAA,CAGF,+BACE,YAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,kCACE,wBAAA,CACA,uBAAA,CAEA,oCACE,aAAA,CACA,2BAAA,CAEA,0BAJF,oCAKI,yBAAA,CAAA,CAGF,+CARF,oCASI,yBAAA,CAAA,CAKN,+CACE,QAAA,CACA,iBAAA,CACA,UAAA,CAEA,kDACE,eAAA,CACA,eAAA,CACA,iBAAA,CACA,YAAA,CACA,yDAAA,CAEA,qDACE,mBAAA,CACA,+BAAA,CAEA,uDACE,aAAA,CACA,aAAA,CACA,cAAA,CACA,4BAAA,CAQZ,4BACE,oCAAA,CAAA,iCAAA,CAAA,4BAAA,CACA,WAAA,CACA,YAAA,CACA,kBAAA,CACA,eAAA,CACA,oBAAA,CAEA,0BARF,4BASI,cAAA,CACA,qBAAA,CACA,sBAAA,CACA,0BAAA,CAAA,uBAAA,CAAA,kBAAA,CACA,gBAAA,CAEA,+BACE,0BAAA,CAAA,CAIJ,yBAEI,mCACE,qBAAA,CAAA,CAQZ,4BACE,kBAAA,CAGF,oCACE,qBAAA,CACA,gCAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CAIF,sCACE,8BAAA,CACA,WAAA,CAGF,8CACE,YAAA,CAGF,sCACE,UAAA,CACA,QAAA,CAGF,6CACE,aAAA,CAEA,gDACE,UAAA,CACA,aAAA,CAEA,kDACE,wBAAA,CACA,kBAAA,CAKN,2CACE,aAAA,CAGF,wDACE,YAAA,CAGF,6CACE,YAAA,CAGF,4BACE,gBAAA,CACA,mBAAA,CAGF,iDACE,aAAA,CACA,kBAAA,CAEA,0BAJF,iDAKI,QAAA,CAAA,CAIJ,qDACE,UAAA,CAGF,wCACE,UAAA,CACA,gCAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CAGF,yCACE,eAAA,CAIF,yBACE,iBAAA,CAKF,wCACE,YAAA,CAGF,gCACE,kGAAA,CACA,2BAAA,CACA,qBAAA,CACA,uBAAA,CAGF,wBACE,eAAA,CAGF,mCACE,gBAAA,CACA,WAAA,CACA,YAAA,CACA,0BAAA,CAGF,2CACE,gBAAA,CAGF,2DACE,QAAA,CACA,SAAA,CAGF,aACE,YAAA,CACA,cAAA,CACA,kBAAA,CAGF,wBACE,gBAAA,CAGF,mCACE,gBAAA,CAGF,oCACE,kBAAA,CAIF,MACE,eAAA,CAME,6BACE,WAAA,CACA,UAAA,CACA,mBAAA,CAAA,gBAAA,CAON,2BACE,iBAAA,CACA,0BAAA,CACA,gCAAA,CAGF,mCACE,UAAA,CACA,iBAAA,CACA,KAAA,CACA,SAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,6BAAA,CACA,+BAAA,CACA,uBAAA,CACA,iBAAA,CAGF,4BACE,iBAAA,CACA,0BAAA,CACA,gCAAA,CAGF,oCACE,UAAA,CACA,iBAAA,CACA,KAAA,CACA,UAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,8BAAA,CACA,4BAAA,CACA,uBAAA,CACA,iBAAA,CAIF,kBACE,iBAAA,CAKF,8BACE,kBAAA,CACA,eAAA,CAGF,mCACE,gCAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,iBAAA,CAGF,yCACE,iBAAA,CACA,gCAAA,CACA,cAAA,CACA,gBAAA,CACA,eAAA,CACA,YAAA,CACA,iBAAA,CAGF,iDACE,UAAA,CACA,iBAAA,CACA,YAAA,CACA,MAAA,CACA,OAAA,CACA,UAAA,CACA,WAAA,CACA,eAAA,CACA,aAAA,CAIF,WACE,SAAA,CACA,WAAA,CAGF,sBACE,iBAAA,CACA,QAAA,CACA,UAAA,CACA,eAAA,CACA,UAAA,CAEA,yBAPF,sBAQI,eAAA,CAEA,yBACE,sBAAA,CAAA,CAKN,+BACE,YAAA,CAGF,gDACE,YAAA,CACA,kBAAA,CACA,QAAA,CAIF,0BACE,iBACE,WAAA,CAAA,CAKJ,qCACE,YAAA,CACA,kBAAA,CACA,sBAAA,CAGF,aACE,mCAAA,CACA,sBAAA,CACA,gBAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,mCAAA,CACA,kBAAA,CACA,iBAAA,CAEA,mBACE,6BAAA,CAKJ,yCACE,cAAA,CAGF,0BACE,aAAA,CAGF,6BACE,gCAAA,CAGF,yBACE,YAAA,CACA,sBAAA,CAGF,yBACE,MACE,uBAAA,CAEA,gBACE,eAAA,CACA,UAAA,CACA,iBAAA,CAEA,mBACE,6BAAA,CACA,aAAA,CACA,iBAAA,CACA,+BAAA,CAEA,qBACE,UAAA,CACA,iBAAA,CACA,gCAAA,CACA,eAAA,CACA,cAAA,CAMR,aACE,WAAA,CACA,UAAA,CAEA,iBACE,yBAAA,CAGF,+BACE,yBAAA,CAAA,CAMJ,gCACE,2GAAA,CACA,qBAAA,CACA,eAAA,CAEA,yBALF,gCAMI,0BAAA,CAAA,CAGF,2CACE,cAAA,CACA,qCAAA,CAAA,kCAAA,CAAA,6BAAA,CAGF,wDACE,yBAAA,CAEA,yBAHF,wDAII,uBAAA,CAAA,CAKN,gCACE,kBAAA,CACA,YAAA,CACA,gBAAA,CAIJ,SACE,gBAAA,CAGF,cACE,mBAAA,CAGF,8BACE,eAAA,CACA,iBAAA,CACA,QAAA,CACA,kBAAA,CAEA,0CACE,YAAA,CACA,kBAAA,CACA,wBAAA,CAEA,iDACE,eAAA,CACA,gBAAA,CAKN,4BACE,eAAA,CACA,iBAAA,CACA,QAAA,CAEA,yCACE,cAAA,CACA,WAAA,CAIJ,qBACE,wBAAA,CACA,QAAA,CACA,UAAA,CACA,iBAAA,CAGE,iCACE,UAAA,CAKN,wCAIE,gBAAA,CACA,eAAA,CACA,aAnzGO,CAszGT,GACE,cAAA,CAIA,6BACE,yBAAA,CAIJ,wOAaE,eAAA,CACA,uBAAA,CACA,iBAAA,CACA,mBAAA,CACA,0BAAA,CACA,eAAA,CAEA,6VACE,QAAA,CAKF,8BACE,cAAA,CAIJ,iBACE,2BAAA,CAEA,0BACE,QAAA,CAGF,wBACE,2BAAA,CAGF,yBACE,aAAA,CAGF,oBACE,eAAA,CAGF,sCACE,eAAA,CACA,QAAA,CAKE,6CACE,kBAAA,CACA,UAAA,CACA,uBAAA,CAMR,kCAGE,qBAAA,CACA,qBAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,iBAAA,CACA,aAAA,CACA,eAAA,CAIA,kBACE,UAAA,CAIJ,cACE,mBAAA,CAGF,oBACE,QAAA,CACA,SAAA","file":"mottcoffe.css"} \ No newline at end of file diff --git a/layout/style-css/style.css b/layout/style-css/style.css new file mode 100644 index 0000000..449f8de --- /dev/null +++ b/layout/style-css/style.css @@ -0,0 +1 @@ +body{line-height:1.5;font-family:"Roboto",sans-serif}*{box-sizing:border-box}h3{font-size:18px}#cookie-information{background-color:#303440;color:#fff;padding:20px 0;font-size:10px;text-align:center}#cookie-information a{font-weight:900;color:#fff;font-size:12px}#main-menu{text-transform:uppercase}@media(max-width: 991px){#main-menu{height:100vh;width:100%;position:fixed;top:0;left:0;z-index:99;background:#000;display:none}#main-menu.visible{display:flex}}@media(max-width: 991px){#main-menu div[id^=menu-container-]{width:100%;display:flex;-moz-align-items:center;-ms-align-items:center;align-items:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}}#main-menu div[id^=menu-container-] ul{margin:0;padding:0;list-style-type:none;flex-direction:column}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul{display:flex;flex-direction:row}}@media(max-width: 991px){#main-menu div[id^=menu-container-] ul{width:100%}}#main-menu div[id^=menu-container-] ul li{position:relative;width:100%;font-size:12px;text-align:center;padding:0}@media(max-width: 992px){#main-menu div[id^=menu-container-] ul li a{padding:10px}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li{width:auto;font-size:12px;padding:20px}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li{font-size:14px;padding:10px}}#main-menu div[id^=menu-container-] ul li.active{background-color:#47b0ed}#main-menu div[id^=menu-container-] ul li.parent>a i{opacity:1;margin-left:5px}#main-menu div[id^=menu-container-] ul li ul{position:absolute;display:none}@media(max-width: 991px){#main-menu div[id^=menu-container-] ul li ul{position:static}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li:hover ul{display:block}}#main-menu div[id^=menu-container-] ul li.active ul{display:block}#main-menu-btn.active{position:fixed;top:20px;right:20px;font-size:16px;background-color:rgba(0,0,0,0)}#main-menu-btn{height:50px;width:50px;color:#fff;background:rgba(0,0,0,0);display:none;z-index:999;line-height:50px;text-align:center;font-size:25px;cursor:pointer}@media(max-width: 991px){#main-menu-btn{display:block}}.header{display:flex;flex-direction:column}.header__logo{padding:20px 0}@media(max-width: 767px){.header__logo{display:flex;justify-content:center}}.header__navigation{width:100%;background-color:#19232d;margin-bottom:20px}@media(min-width: 992px){.header__navigation{margin-bottom:60px}}.header__navigation #menu-container-1{width:100%;margin:0 auto}.header__navigation #menu-container-1 ul{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;list-style:none;margin:0}.header__navigation #menu-container-1 ul li{padding:10px 5px;transition:background-color .3s;cursor:pointer;font-size:14px}.header__navigation #menu-container-1 ul li:hover{background-color:#289dcc}.header__navigation #menu-container-1 ul li a{text-decoration:none;color:#fff;display:block;height:100%}@media(min-width: 992px){.header__navigation #menu-container-1 ul li.parent ul{position:absolute;top:50px;left:0;width:150px;background-color:#000;z-index:999}.header__navigation #menu-container-1 ul li.parent ul li{text-align:start;padding:10px}.header__navigation #menu-container-1 ul li.parent a i{margin-left:5px}}.header__navigation #menu-container-1 ul li.parent:hover{background-color:#19232d}@media(max-width: 992px){.header__navigation #menu-container-1 ul li.parent.active{background-color:#000}}@media(min-width: 992px){.header__navigation #menu-container-1 ul li.parent.active ul{display:none;background-color:#22303d}.header__navigation #menu-container-1 ul li.parent.active:hover ul{display:block}}.news{display:flex;flex-wrap:wrap;justify-content:space-between}@media(min-width: 768px){.news{height:350px}}@media(min-width: 768px){.news{display:flex;justify-content:space-between;height:350px}}.news__big-articles{width:100%;display:flex;justify-content:center;align-items:center;height:100%}@media(min-width: 768px){.news__big-articles{width:50%;padding-right:2px}}.news__big-articles .big-articles__article{width:100%;height:300px;background-size:cover;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;margin-bottom:2px}@media(min-width: 768px){.news__big-articles .big-articles__article{height:100%;margin-bottom:0}}.news__big-articles .big-articles__article .article__category{text-decoration:none;color:#fff;background-color:#d33;padding:3px 8px;margin-left:20px;font-size:10px;transition:background-color .3s;text-transform:uppercase}.news__big-articles .big-articles__article .article__category:hover{background-color:#333946}.news__big-articles .big-articles__article #article-main{padding:10px 15px 20px;background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) 100%);width:100%}.news__big-articles .big-articles__article #article-main .article-title{text-transform:uppercase;margin:0;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;font-family:"Roboto"}.news__big-articles .big-articles__article #article-main .article-title a{text-decoration:none;color:#fff;transition:color .3s}.news__big-articles .big-articles__article #article-main .article-title a:hover{color:#289dcc}.news__big-articles .big-articles__article #article-main .date-add{color:#fff;font-size:10px;display:none}.news__big-articles .big-articles__article #article-main .date-add i{margin-right:5px}.news__small-articles{width:100%;display:flex;flex-wrap:wrap;justify-content:space-between;align-content:space-between;height:1000px}@media(min-width: 370px){.news__small-articles{height:500px;gap:1px}}@media(min-width: 768px){.news__small-articles{width:50%;height:100%}}.news__small-articles .small-articles__article{width:100%;height:24%;background-size:cover;display:flex;align-items:flex-end}@media(min-width: 370px){.news__small-articles .small-articles__article{width:calc(50% - 1px);height:calc(50% - 1px)}}.news__small-articles .small-articles__article #article-main{padding:15px 10px;background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) 100%);width:100%}.news__small-articles .small-articles__article #article-main .article-title{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;text-transform:uppercase;font-family:"Roboto"}.news__small-articles .small-articles__article #article-main .article-title a{text-decoration:none;color:#fff;transition:color .3s;text-align:center}.news__small-articles .small-articles__article #article-main .article-title a:hover{color:#289dcc}.news__small-articles .small-articles__article #article-main .date-add{color:#fff;font-size:10px;display:none}.news__small-articles .small-articles__article #article-main .date-add i{margin-right:5px}.main{display:flex;flex-wrap:wrap;justify-content:space-between}.main .right-section{width:100%;order:1}@media(min-width: 992px){.main .right-section{width:calc(30% - 5px)}}.main .right-section .aside{display:flex;flex-direction:column;justify-content:center;z-index:0;position:sticky;top:0;gap:20px}.main .right-section .aside .title{color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px;border-bottom:2px solid #47b0ed}.main .right-section .aside .title span{text-align:center;background-color:#47b0ed;padding:6px 12px}.main .right-section .aside .tag-section{padding:20px 0}.main .right-section .aside .tag-section .tag__container #tags ul{display:flex;flex-direction:row;flex-wrap:wrap;list-style:none}.main .right-section .aside .tag-section .tag__container #tags ul li{padding:5px}.main .right-section .aside .tag-section .tag__container #tags ul li a{color:#47b0ed}.main .right-section .aside .weather-section{margin-top:40px}.main .right-section .aside .weather-section .weather__container{display:flex;flex-direction:column;align-items:center}.main .right-section .aside .weather-section .weather__container .iframe{width:100%;height:380px}@media(min-width: 992px){.main .right-section .aside .weather-section .weather__container .iframe{height:300px}}.main .right-section .aside .weather-section .weather__container a{color:#000}.main .right-section .aside .weather-section--subpages{margin-top:0}.main .left-section{width:100%}@media(min-width: 992px){.main .left-section{width:calc(70% - 5px)}}.main .left-section .left-section-articles{display:flex;justify-content:space-between;flex-direction:column;flex-wrap:wrap}.main .left-section .left-section-articles .journalism{width:100%}.main .left-section .left-section-articles .sport{width:100%}.main .left-section .articles{display:flex;flex-direction:row;justify-content:center;margin-top:40px;flex-wrap:wrap;gap:30px;z-index:0;position:relative;max-width:100%}.main .left-section .articles .title{text-transform:uppercase;color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px}.main .left-section .articles .title span{text-align:center;padding:6px 12px}.main .left-section .articles .title--journalism span{background-color:#d93}.main .left-section .articles .title--sport span{background-color:#81d742}.main .left-section .articles .title--business span{background-color:#4c66a4}.main .left-section .articles .title--culture span{background-color:#ff5d00}.main .left-section .articles .title--moto span{background-color:#3ca12c}.main .left-section .articles .title--policy span{background-color:#d33}.main .left-section .articles .title--kitchen span{background-color:#bd7e20}.main .left-section .articles .title--lifestyle span{background-color:#75c4f2}.main .left-section .articles__big-article{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);width:100%}@media(min-width: 992px){.main .left-section .articles__big-article{width:calc(50% - 15px)}}.main .left-section .articles__big-article .big-article__img{width:100%;height:auto}.main .left-section .articles__big-article .article__category{padding:3px 8px;border-radius:3px;margin:20px 10px 10px;text-align:center;font-size:10px}.main .left-section .articles__big-article .article__category a{text-decoration:none;font-size:12px;color:#fff}.main .left-section .articles__big-article .article__category--journalism{background-color:#d93;width:90px}.main .left-section .articles__big-article .article__category--sport{background-color:#81d742;width:70px}.main .left-section .articles__big-article .article__category--chronicle{background-color:#47b0ed;width:150px}.main .left-section .articles__big-article .article__category--policy{background-color:#d33}.main .left-section .articles__big-article .article__category--culture{background-color:#ff5d00}.main .left-section .articles__big-article .article__category--moto{background-color:#3ca12c}.main .left-section .articles__big-article .article__category--business{background-color:#4c66a4}.main .left-section .articles__big-article .article__category--kitchen{background-color:#bd7e20}.main .left-section .articles__big-article .article__category--lifestyle{background-color:#75c4f2}.main .left-section .articles__big-article #article-main{display:flex;flex-direction:column;justify-content:center;padding:0 20px}.main .left-section .articles__big-article #article-main .article-title{margin:0 0 10px 0}.main .left-section .articles__big-article #article-main .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:22px}.main .left-section .articles__big-article #article-main .article-title a:hover{color:#47b0ed}.main .left-section .articles__big-article #article-main .date-add{font-size:12px;color:#888;margin-bottom:10px}.main .left-section .articles__big-article #article-main .date-add i{margin-right:5px}.main .left-section .articles__big-article #article-main .entry{font-size:12px}.main .left-section .articles__small-articles{width:100%}@media(min-width: 992px){.main .left-section .articles__small-articles{width:calc(50% - 15px)}}.main .left-section .articles__small-articles .small-article:nth-child(1){margin-top:0}.main .left-section .articles__small-articles .small-article{display:flex;justify-content:flex-start;margin:25px 0}.main .left-section .articles__small-articles .small-article .small-article__img{width:30%;margin-right:15px}.main .left-section .articles__small-articles .small-article .small-article__img img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.main .left-section .articles__small-articles .small-article #article-main{width:60%;display:flex;flex-direction:column;justify-content:flex-end}.main .left-section .articles__small-articles .small-article #article-main .article-title{margin-bottom:10px;text-overflow:ellipsis;overflow:hidden;white-space:wrap;width:100%;height:40px;line-height:1.3}.main .left-section .articles__small-articles .small-article #article-main .article-title a{font-size:16px;text-decoration:none;color:#000;transition:color .3s;font-weight:400;display:block}.main .left-section .articles__small-articles .small-article #article-main .article-title a:hover{color:#47b0ed}.main .left-section .articles__small-articles .small-article #article-main .date-add{font-size:12px;color:gray;margin-bottom:10px}.main .left-section .articles__small-articles .small-article #article-main .date-add i{margin-right:5px}.main .left-section .sport.articles{justify-content:flex-start}.main .left-section .chronicle{margin-top:40px;width:100%;margin-bottom:0;z-index:0;position:relative}.main .left-section .chronicle .title--chronicle{text-transform:uppercase;color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px;border-bottom:2px solid #47b0ed}.main .left-section .chronicle .title--chronicle span{text-align:center;background-color:#47b0ed;padding:6px 12px}.main .left-section .chronicle .articles--chronicle{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-top:0}.main .left-section .chronicle .articles--chronicle .articles__big-article{width:100%}@media(min-width: 992px){.main .left-section .chronicle .articles--chronicle .articles__big-article{width:calc(50% - 15px)}}.main .left-section .chronicle .articles--chronicle .articles__small-articles .small-article{width:100%}.footer--footer{background-color:#252729;border-top:15px solid #333;margin-top:20px;max-width:100%}@media(min-width: 992px){.footer--footer{justify-content:start}}.footer--footer .container{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:center;align-items:center}.footer--footer .logo,.footer--footer .footer-menu{padding:15px;margin:20px 0}@media(max-width: 991px){.footer--footer .logo{width:100%;display:flex;justify-content:center;align-items:center}}.footer--footer .footer-menu{height:100%}@media(min-width: 992px){.footer--footer .footer-menu{border-left:1px solid #333}}.footer--footer .footer-menu #menu-container-1 ul{list-style:none;display:flex;flex-direction:column;align-items:center;justify-content:space-between}@media(min-width: 992px){.footer--footer .footer-menu #menu-container-1 ul{flex-direction:row}}.footer--footer .footer-menu #menu-container-1 ul li{width:100%}@media(min-width: 992px){.footer--footer .footer-menu #menu-container-1 ul li{width:auto}}.footer--footer .footer-menu #menu-container-1 ul li a{text-align:center;text-decoration:none;color:#fff;text-transform:uppercase;font-size:12px;font-weight:600;padding:10px;display:block;position:relative}.footer--footer .footer-menu #menu-container-1 ul li a::after{content:"";position:absolute;width:100%;bottom:0;right:0;border-bottom:2px solid #555;z-index:0}.footer--footer .footer-menu #menu-container-1 ul li.active a::after{border-bottom:2px solid #47b0ed}.footer--footer .footer-menu #menu-container-1 ul li.parent a i{display:none}.footer--footer .footer-menu #menu-container-1 ul li.parent ul{display:none}.footer--footer .footer-menu #menu-container-1 ul #link-1{display:none}.footer--footer .footer-menu #menu-container-1 ul #link-2{display:none}.left-section__subpages{width:100%;display:flex;flex-direction:column}@media(min-width: 992px){.left-section__subpages{width:calc(70% - 20px);margin-right:20px}}.left-section__subpages .title{border-bottom:2px solid #47b0ed;margin-bottom:15px;padding-bottom:0}.left-section__subpages .title .site-title{color:#fff;padding:6px 12px;display:inline-block;font-size:18px;margin:0}.left-section__subpages .title .site-title--business{background-color:#4c66a4}.left-section__subpages .title .site-title--culture{background-color:#ff5d00}.left-section__subpages .title .site-title--moto{background-color:#3ca12c}.left-section__subpages .title .site-title--journalism{background-color:#d93}.left-section__subpages .title .site-title--chronicle{background-color:#47b0ed}.left-section__subpages .title .site-title--policy{background-color:#d33}.left-section__subpages .title .site-title--sport{background-color:#81d742}.left-section__subpages .title .site-title--news{background-color:#d33}.left-section__subpages .articles{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.left-section__subpages .articles .article-entry.first{width:100%;padding:0;margin-left:0}.left-section__subpages .articles .article-entry{width:100%;box-shadow:0 1px 3px 0 rgba(0,0,0,.1);margin-top:20px}@media(min-width: 576px){.left-section__subpages .articles .article-entry:nth-child(odd){margin-left:10px}}@media(min-width: 576px){.left-section__subpages .articles .article-entry{width:calc(50% - 5px)}}.left-section__subpages .articles .article-entry .main-image img{width:100%;height:auto}.left-section__subpages .articles .article-entry .article-entry__category{margin:20px 20px 10px 20px;display:flex;flex-wrap:wrap;justify-content:flex-start}.left-section__subpages .articles .article-entry .article-entry__category a{text-decoration:none;font-size:12px;color:#fff;padding:2px 10px;margin:0 5px 0 0;border-radius:3px;display:inline-flex;background-color:#47b0ed}.left-section__subpages .articles .article-entry .article-title{margin:0;padding:0 20px}.left-section__subpages .articles .article-entry .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:22px}.left-section__subpages .articles .article-entry .article-title a:hover{color:#47b0ed}.left-section__subpages .articles .article-entry .date-add{color:gray;font-size:12px;padding:20px}.left-section__subpages .articles .article-entry .date-add i{margin-right:5px}.left-section__subpages .articles .article-entry .entry{padding:0 20px}.left-section__subpages .articles .article-entry .entry p strong{font-weight:400 !important}.left-section__subpages .articles .article-entry .more{text-decoration:none;padding:3px 10px;background-color:#47b0ed;color:#fff;font-size:12px;border-radius:3px;display:inline-block;margin:0 20px 20px;transition:background-color .3s}.left-section__subpages .articles .article-entry .more:hover{background-color:#0e5e8d}.left-section__subpages .articles .article-entry.first{width:100%;padding:0;margin-left:0}.left-section__subpages .article{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);margin-bottom:20px;width:100%}.left-section__subpages .article .main-image{margin-bottom:40px;margin-top:20px}.left-section__subpages .article .main-image img{width:100%;height:auto}.left-section__subpages .article .article-title{margin:0;padding:20px 10px 0;font-size:30px;font-family:"Roboto";font-weight:600}@media(min-width: 992px){.left-section__subpages .article .article-title{font-size:40px}}.left-section__subpages .article .social-icons{display:flex;flex-direction:row;margin-top:10px;padding-left:10px}.left-section__subpages .article .social-icons .social-icons-text{font-size:15px;font-weight:600;text-transform:uppercase;margin-right:25px;margin-bottom:0;line-height:30px;text-align:center}.left-section__subpages .article .social-icons a{padding:0 5px}.left-section__subpages .article .social-icons a img{width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.left-section__subpages .article .wrapper{display:flex;justify-content:flex-start;padding:10px 0}.left-section__subpages .article .wrapper .date-add,.left-section__subpages .article .wrapper .views{font-size:13px;color:#888;padding:0 10px}.left-section__subpages .article .wrapper .date-add i,.left-section__subpages .article .wrapper .views i{margin-right:5px}.left-section__subpages .article .wrapper .article-tags ul{display:flex;flex-wrap:wrap;list-style:none;font-size:12px}.left-section__subpages .article .wrapper .article-tags ul i{color:gray;margin-right:5px}.left-section__subpages .article .wrapper .article-tags ul li{padding-right:3px}.left-section__subpages .article .wrapper .article-tags ul li a{text-decoration:none;color:#000}.left-section__subpages .article .text{padding:0 10px}.left-section__subpages .article .text blockquote{border-left:5px solid #47b0ed;padding-left:25px}.left-section__subpages .article .text p img{width:100%;height:auto}.left-section__subpages .article h2{font-size:20px}.pager{margin-top:20px;width:100%;display:flex;flex-direction:row;justify-content:center;align-items:center;list-style:none}.pager li{margin:0 10px;padding:5px 10px;border:1px solid gray;background-color:rgba(0,0,0,0);transition:background-color .3s}.pager li:hover{background-color:#47b0ed}.pager li:hover a{color:#fff}.pager li a{text-decoration:none;color:#000}.pager li:nth-child(5),.pager li:nth-child(1){display:none}.pager li:nth-child(3):hover{background-color:rgba(0,0,0,0)}.articles .article-list{border:1px solid #eee;padding:20px;margin-bottom:20px;width:100%}.articles .article-list h3 a{font-size:1.25rem;color:#47b0ed;line-height:1.5}.articles .article-list .date-add{font-size:.9rem;color:rgba(0,0,0,.75)}.title{background-color:#333946;border-bottom:none !important;position:relative;height:40px}.title span{position:absolute;top:50%;left:0;transform:translateY(-50%);height:100% !important;font-size:14px !important;text-align:center;line-height:40px;padding:0 12px !important;font-weight:600;text-transform:uppercase}.articles__big-article{position:relative;box-shadow:none !important;border-bottom:3px solid #333946}.articles__big-article .article__category{position:absolute;top:0;left:-10px;border-radius:0 !important;transition:background-color .3s}.articles__big-article .article__category:hover{background-color:#333946 !important}.articles__big-article #article-main{width:80%;margin:0 auto;margin-top:-40px;padding:0 !important}.articles__big-article #article-main .article-title{background-color:#fff;padding:15px 20px 0 20px;text-overflow:ellipsis;overflow:hidden;height:74px;font-size:16px;font-weight:600;line-height:1.3}.articles__big-article #article-main .article-title a{font-family:"Roboto"}.articles__big-article #article-main .date-add{padding:0 20px}.articles__big-article #article-main .entry{padding:0 20px}.articles__big-article #article-main .entry{padding-bottom:20px}.articles__big-article #article-main .entry p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden;font-size:16px}li.parent ul{background-color:#22303d !important}.popular-post-section .news-list{list-style:none}.popular-post-section .news-list li{padding-bottom:15px;display:grid;grid-template-columns:80px 1fr;grid-template-areas:"img txt" "img date";-moz-column-gap:20px;column-gap:20px;row-gap:10px}.popular-post-section .news-list li .date-add{grid-area:date;color:#888;font-size:12px}.popular-post-section .news-list li .date-add i{margin-right:5px}.popular-post-section .news-list li .news-list-img{grid-area:img;width:100%;height:80px}.popular-post-section .news-list li .news-list-img img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.popular-post-section .news-list li a{text-decoration:none;color:#000;font-family:"Roboto";font-size:15px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;transition:color .3s;grid-area:txt}.popular-post-section .news-list li a:hover{color:#47b0ed}.popular-post-section .title--sport span{background-color:#81d742 !important}.popular-post-section .title--journalism span{background-color:#d93 !important}.popular-post-section .title--policy span{background-color:#d33 !important}.popular-post-section .title--moto span{background-color:#3ca12c}.popular-post-section .title--culture span{background-color:#ff5d00}.popular-post-section .title--business span{background-color:#4c66a4}.form-group--newsletter{display:grid;grid-template-columns:1fr 50px;grid-template-rows:1fr 1fr;grid-template-areas:"title title" "email btn";border:1px solid #e7e8e8;padding:20px 20px 30px 20px;background-color:#f2f2f2}.form-group--newsletter label{grid-area:title;font-size:13px}.form-group--newsletter .form-control{grid-area:email;display:table-cell;width:100%;margin-bottom:0;background:#333946;border:none;color:#f2f2f2;vertical-align:middle;outline:0;padding:12px 15px;margin:0;font-family:"roboto";font-size:14px;border-radius:0;height:44px}.form-group--newsletter .form-control::-moz-placeholder{color:#fff}.form-group--newsletter .form-control::placeholder{color:#fff}.form-group--newsletter .form-control:focus{outline:none}.form-group--newsletter .form-control:active{outline:none}.form-group--newsletter .form-group--button{grid-area:btn;background-color:#333946;padding:10px;position:relative;transition:background-color .3s;border-radius:0}.form-group--newsletter .form-group--button:hover{background-color:#47b0ed}.form-group--newsletter .form-group--button i{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);color:#fff}.header__navigation #menu-container-1{display:flex;justify-content:space-between;align-items:center}.header__navigation #menu-container-1 .search--button{background-color:rgba(0,0,0,0);border:none}.header__navigation #menu-container-1 .search--button i{font-size:19px;color:#fff;cursor:pointer;padding:10px}#search-form{background-color:#fff}#search-form form{display:flex;justify-content:flex-end;height:50px}#search-form form input{background-color:#3e4555;border:none;color:#fff;font-size:14px;padding:0 12px;height:0;transition:height .3s;width:calc(30% - 5px)}#search-form form input:focus{border:none;outline:none}#search-form form input::-moz-placeholder{color:#fff}#search-form form input::placeholder{color:#fff}#search-form form .search-input--active{height:100%;padding:8px 12px}.header__navigation{position:relative;width:100%;height:50px}@media(min-width: 992px){.header__navigation #menu-container-1{height:50px !important}.header__navigation #menu-container-1 ul{height:100%}.header__navigation #menu-container-1 ul li{height:100%}.header__navigation #menu-container-1 ul li a{line-height:34px}}.header__navigation #main-menu-btn{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}.header__navigation #main-menu-btn.active{position:fixed;top:5%;left:90%}.header__navigation #main-menu-btn.active i{font-size:24px !important}#main-menu.visible #search-form{display:none}#main-menu.visible #menu-container-1 .search--button{display:none}#search-results ul{list-style:none}#search-results li{display:grid;grid-template-columns:100px 1fr;grid-template-areas:"img txt";gap:15px;margin-bottom:20px}@media(min-width: 576px){#search-results li{grid-template-columns:250px 1fr;grid-template-areas:"img txt";gap:20px}}#search-results li .search-results-img{grid-area:img}#search-results li .search-results-img img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}#search-results li .article-title{grid-area:txt;line-height:.6}@media(min-width: 576px){#search-results li .article-title{line-height:1}}#search-results li .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:14px}@media(min-width: 576px){#search-results li .article-title a{font-size:18px}}#search-results li .article-title a:hover{color:#47b0ed}.image-source{padding:0 10px;margin-bottom:10px;font-style:italic}.image-source span{font-weight:600;font-style:normal}.author{padding:20px;background-color:#f8f8f8}@media(max-width: 767px){.author .author-row{justify-content:center}}.author .author-img{width:100px;height:100px}.author .author-img img{height:100%;width:100%;-o-object-fit:cover;object-fit:cover}.author .author-description .author-name{color:#47b0ed;font-weight:600;margin-bottom:10px;display:block}@media(max-width: 767px){.author .author-description .author-name{margin-top:10px;text-align:center}}.author .author-description .author-text{font-size:14px}@media(max-width: 767px){.author .author-description .author-text{text-align:center}}#menu-container-1 ul li ul li{background-color:#22303d !important}#menu-container-1 ul li ul li:hover{background-color:#47b0ed !important}.aktualności,.bukowno,.jaroszowiec,.klucze,.łobzów,.olkusz,.rabsztyn,.wolbrom{background-color:#d33 !important}.biznes{background-color:#4c66a4 !important}.kultura{background-color:#ff5d00 !important}.motoryzacja{background-color:#3ca12c !important}.publicystyka{background-color:#d93 !important}.policja{background-color:#47b0ed !important}.polityka{background-color:#d33 !important}.sport,.piłkanożna,.piłkaręczna,.fitnessizdrowie,.sportywalki{background-color:#81d742 !important}.table-of-contents{margin:20px 20px 30px 20px;box-shadow:0 0px 3px 0 rgba(0,0,0,.1);border-radius:5px;padding:5px}.table-of-contents .title{background-color:rgba(0,0,0,0);color:#000;font-weight:600;margin-bottom:5px}.table-of-contents .title span{font-size:18px !important;text-transform:initial;font-weight:400}.table-of-contents ol li:before{content:counters(item, ".") ". ";counter-increment:item}.table-of-contents ul li:before{content:counters(item, ".") ". ";counter-increment:item}.table-of-contents ol,.table-of-contents ul{list-style:none;counter-reset:item;padding-left:20px}.table-of-contents ol li,.table-of-contents ul li{position:relative}.table-of-contents ol li a,.table-of-contents ul li a{color:#269eae;text-decoration:underline}.table-of-contents ol li a:hover,.table-of-contents ul li a:hover{color:#1e7e8b}.main .left-section .kitchen.articles{display:flex;flex-direction:column}.main .left-section .kitchen.articles .articles__big-article{display:flex;width:100%;border-bottom:none}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article{flex-direction:column}}.main .left-section .kitchen.articles .articles__big-article img{width:60%}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article img{width:100%}}.main .left-section .kitchen.articles .articles__big-article #article-main{width:40%;margin-top:0;border-bottom:3px solid #333946;border-top:3px solid #333946}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article #article-main{border-top:none;width:100%}}.main .left-section .kitchen.articles .articles__small-articles{display:flex;width:100%;gap:30px}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__small-articles{flex-wrap:wrap}}.main .left-section .kitchen.articles .articles__small-articles .small-article{display:flex;flex-direction:column;width:25%;margin-top:0}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__small-articles .small-article{width:calc(50% - 15px)}}.main .left-section .kitchen.articles .articles__small-articles .small-article__img{width:100%}.main .left-section .kitchen.articles .articles__small-articles .small-article #article-main{margin-top:10px;width:100%;flex-direction:column-reverse}.main .left-section .kitchen.articles .articles__small-articles .small-article #article-main .article-title{height:60px}.gallery{padding:20px}.gallery .gallery-title{font-size:20px;font-weight:600}.gallery .gallery-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.gallery .gallery-list .gallery-list-item{width:calc(25% - 7.5px);height:160px;margin:0;padding:0}.gallery .gallery-list .gallery-list-item a{width:100%;height:100%}.gallery .gallery-list .gallery-list-item a img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/layout/style-css/style.css.map b/layout/style-css/style.css.map new file mode 100644 index 0000000..56700b3 --- /dev/null +++ b/layout/style-css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["style.css","..\\style-scss\\style.scss","..\\style-scss\\_mixins.scss"],"names":[],"mappings":"AAAA,KC+BA,eACE,CAAA,+BACA,CAAA,EAGF,qBAGE,CAAA,GAGF,cACE,CAAA,oBAGF,wBACE,CAAA,UACA,CAAA,cACA,CAAA,cACA,CAAA,iBACA,CAAA,sBAEA,eACE,CAAA,UACA,CAAA,cACA,CAAA,WAIJ,wBACE,CAAA,yBCtCE,WDqCJ,YAII,CAAA,UACA,CAAA,cACA,CAAA,KACA,CAAA,MACA,CAAA,UACA,CAAA,eACA,CAAA,YACA,CAAA,mBCWF,YACA,CAAA,CAAA,yBA5DE,oCDwDF,UAEI,CCCJ,YACA,CDAyB,uBAAA,CAAA,sBAAA,CAAA,kBAAA,CACI,2BAAA,CAAA,0BAAA,CAAA,sBAAA,CAAA,oBAAA,CAAA,CAAA,uCAG3B,QACE,CAAA,SACA,CAAA,oBACA,CAAA,qBACA,CAAA,yBClFF,uCAyEF,YACA,CAAA,kBDYM,CAAA,CAAA,yBCxEJ,uCDgEA,UAYI,CAAA,CAAA,0CAGF,iBACE,CAAA,UACA,CAAA,cACA,CAAA,iBACA,CAAA,SACA,CAAA,yBAEA,4CACE,YACE,CAAA,CAAA,yBCtGR,0CD6FE,UAcI,CAAA,cA9FQ,CAAA,YAgGR,CAAA,CAAA,yBC7GN,0CD6FE,cAoBI,CAAA,YACA,CAAA,CAAA,iDAGF,wBAtHK,CAAA,qDA8HD,SACE,CAAA,eACA,CAAA,6CAKN,iBACE,CAAA,YACA,CAAA,yBCxHN,6CDsHI,eAKI,CAAA,CAAA,yBCzIR,mDD+IQ,aACE,CAAA,CAAA,oDAMJ,aACE,CAAA,sBAQZ,cACE,CAAA,QACA,CAAA,UACA,CAAA,cACA,CAAA,8BACA,CAAA,eAGF,WACE,CAAA,UACA,CAAA,UACA,CAAA,wBACA,CAAA,YACA,CAAA,WACA,CAAA,gBACA,CAAA,iBACA,CAAA,cACA,CAAA,cACA,CAAA,yBCnKE,eDyJJ,aAaI,CAAA,CAAA,QAMJ,YACE,CAAA,qBACA,CAAA,cAGA,cACE,CAAA,yBClLA,cDiLF,YAII,CAAA,sBACA,CAAA,CAAA,oBAMJ,UACE,CAAA,wBACA,CAAA,kBACA,CAAA,yBC7MA,oBD0MF,kBAMI,CAAA,CAAA,sCAGF,UACE,CAAA,aAEA,CAAA,yCAkBA,YACE,CAAA,cACA,CAAA,0BACA,CAAA,kBACA,CAAA,eACA,CAAA,QACA,CAAA,4CAEA,gBACE,CAAA,+BACA,CAAA,cACA,CAAA,cACA,CAAA,kDAEA,wBACE,CAAA,8CAGF,oBACE,CAAA,UACA,CAAA,aAEA,CAAA,WACA,CAAA,yBC/PR,sDD2QQ,iBACE,CAAA,QACA,CAAA,MACA,CAAA,WACA,CAAA,qBACA,CAAA,WACA,CAAA,yDAEA,gBACE,CAAA,YACA,CAAA,uDAKF,eACE,CAAA,CAAA,yDAKN,wBACE,CAAA,yBAKF,0DADF,qBAEI,CAAA,CAAA,yBCvSR,6DD2SQ,YACE,CAAA,wBACA,CAAA,mEAIA,aACE,CAAA,CAAA,MAahB,YACE,CAAA,cACA,CAAA,6BACA,CAAA,yBClUE,MD+TJ,YAMI,CAAA,CAAA,yBCrUA,MD+TJ,YAYI,CAAA,6BACA,CAAA,YACA,CAAA,CAAA,oBAGF,UACE,CAAA,YACA,CAAA,sBACA,CAAA,kBACA,CAAA,WACA,CAAA,yBCrVA,oBDgVF,SAQI,CAAA,iBACA,CAAA,CAAA,2CAGF,UACE,CAAA,YACA,CAAA,qBACA,CAAA,YACA,CAAA,qBACA,CAAA,sBACA,CAAA,wBACA,CAAA,iBACA,CAAA,yBCpWF,2CD4VA,WAWI,CAAA,eACA,CAAA,CAAA,8DAGF,oBACE,CAAA,UACA,CAAA,qBACA,CAAA,eACA,CAAA,gBACA,CAAA,cACA,CAAA,+BACA,CAAA,wBACA,CAAA,oEAEA,wBArXK,CAAA,yDA0XP,sBACE,CAAA,4EACA,CAAA,UAGA,CAAA,wEAEA,wBACE,CAAA,QACA,CAAA,cACA,CAAA,kBACA,CAAA,eACA,CAAA,sBACA,CAAA,iBACA,CAAA,oBACA,CAAA,0EAEA,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,gFAEA,aACE,CAAA,mEAKN,UACE,CAAA,cACA,CAAA,YACA,CAAA,qEAEA,gBACE,CAAA,sBAOV,UACE,CAAA,YACA,CAAA,cACA,CAAA,6BACA,CAAA,2BACA,CAAA,aACA,CAAA,yBAEA,sBARF,YASI,CAAA,OACA,CAAA,CAAA,yBC7aF,sBDmaF,SAcI,CAAA,WACA,CAAA,CAAA,+CAGF,UACE,CAAA,UACA,CAAA,qBACA,CAAA,YACA,CAAA,oBACA,CAAA,yBAEA,+CAPF,qBAQI,CAAA,sBACA,CAAA,CAAA,6DAGF,iBACE,CAAA,4EACA,CAAA,UAGA,CAAA,4EAEA,cACE,CAAA,kBACA,CAAA,eACA,CAAA,sBACA,CAAA,QACA,CAAA,wBACA,CAAA,oBACA,CAAA,8EAEA,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,iBACA,CAAA,oFAEA,aACE,CAAA,uEAKN,UACE,CAAA,cACA,CAAA,YACA,CAAA,yEAEA,gBACE,CAAA,MASZ,YACE,CAAA,cACA,CAAA,6BACA,CAAA,qBAEA,UACE,CAAA,OACA,CAAA,yBCnfA,qBDifF,qBAKI,CAAA,CAAA,4BAGF,YACE,CAAA,qBACA,CAAA,sBACA,CAAA,SACA,CAAA,eACA,CAAA,KACA,CAAA,QACA,CAAA,mCAEA,UACE,CAAA,eACA,CAAA,UACA,CAAA,kBACA,CAAA,kBACA,CAAA,+BACA,CAAA,wCAEA,iBACE,CAAA,wBA5gBG,CAAA,gBA8gBH,CAAA,yCAIJ,cACE,CAAA,kEAII,YACE,CAAA,kBACA,CAAA,cACA,CAAA,eACA,CAAA,qEAEA,WACE,CAAA,uEAEA,aAhiBH,CAAA,6CAyiBP,eAphBQ,CAAA,iEAuhBN,YACE,CAAA,qBACA,CAAA,kBACA,CAAA,yEAEA,UACE,CAAA,YACA,CAAA,yBCljBR,yEDgjBM,YAKI,CAAA,CAAA,mEAIJ,UACE,CAAA,uDAKN,YACE,CAAA,oBAKN,UACE,CAAA,yBCtkBA,oBDqkBF,qBAII,CAAA,CAAA,2CAGF,YACE,CAAA,6BACA,CAAA,qBACA,CAAA,cACA,CAAA,uDAEA,UACE,CAAA,kDAGF,UACE,CAAA,8BAKJ,YACE,CAAA,kBACA,CAAA,sBACA,CAAA,eA3kBQ,CAAA,cA6kBR,CAAA,QACA,CAAA,SACA,CAAA,iBACA,CAAA,cACA,CAAA,qCAEA,wBACE,CAAA,UACA,CAAA,eACA,CAAA,UACA,CAAA,kBACA,CAAA,kBACA,CAAA,0CAEA,iBACE,CAAA,gBACA,CAAA,sDAIA,qBAvnBS,CAAA,iDA6nBT,wBA9nBI,CAAA,oDAooBJ,wBAhoBO,CAAA,mDAsoBP,wBAroBM,CAAA,gDA2oBN,wBA1oBG,CAAA,kDAgpBH,qBAvpBG,CAAA,mDA6pBH,wBArpBM,CAAA,qDA2pBN,wBAxpBQ,CAAA,2CA8pBZ,qCACE,CAAA,UACA,CAAA,yBCvqBJ,2CDqqBE,sBAKI,CAAA,CAAA,6DAGF,UACE,CAAA,WACA,CAAA,8DAGF,eACE,CAAA,iBACA,CAAA,qBACA,CAAA,iBACA,CAAA,cACA,CAAA,gEAEA,oBACE,CAAA,cA7qBM,CAAA,UA+qBN,CAAA,0EAGF,qBAjsBS,CAAA,UAmsBP,CAAA,qEAGF,wBAvsBI,CAAA,UAysBF,CAAA,yEAGF,wBA1sBG,CAAA,WA4sBD,CAAA,sEAGF,qBAltBG,CAAA,uEAstBH,wBAhtBM,CAAA,oEAotBN,wBAntBG,CAAA,wEAutBH,wBAztBO,CAAA,uEA6tBP,wBA1tBM,CAAA,yEA8tBN,wBA3tBQ,CAAA,yDAguBV,YACE,CAAA,qBACA,CAAA,sBACA,CAAA,cACA,CAAA,wEAEA,iBACE,CAAA,0EAEA,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,cACA,CAAA,gFAEA,aAvvBD,CAAA,mEA6vBH,cA/uBQ,CAAA,UAivBN,CAAA,kBACA,CAAA,qEAEA,gBACE,CAAA,gEAIJ,cAzvBQ,CAAA,8CA+vBZ,UACE,CAAA,yBC7wBJ,8CD4wBE,sBAII,CAAA,CAAA,0EAGF,YACE,CAAA,6DAGF,YAEE,CAAA,0BACA,CAAA,aACA,CAAA,iFAEA,SACE,CAAA,iBACA,CAAA,qFAEA,UACE,CAAA,WACA,CAAA,mBACA,CADA,gBACA,CAAA,2EAIJ,SACE,CAAA,YACA,CAAA,qBACA,CAAA,wBACA,CAAA,0FAEA,kBACE,CAAA,sBACA,CAAA,eACA,CAAA,gBACA,CAAA,UACA,CAAA,WACA,CAAA,eACA,CAAA,4FAEA,cACE,CAAA,oBACA,CAAA,UACA,CAAA,oBACA,CAAA,eACA,CAAA,aACA,CAAA,kGAEA,aAh0BH,CAAA,qFAs0BD,cACE,CAAA,UACA,CAAA,kBACA,CAAA,uFAEA,gBACE,CAAA,oCAQZ,0BACE,CAAA,+BAGF,eAn0BU,CAAA,UAq0BR,CAAA,eACA,CAAA,SACA,CAAA,iBACA,CAAA,iDAEA,wBACE,CAAA,UACA,CAAA,eACA,CAAA,UACA,CAAA,kBACA,CAAA,kBACA,CAAA,+BACA,CAAA,sDAEA,iBACE,CAAA,wBAz2BG,CAAA,gBA22BH,CAAA,oDAIJ,YACE,CAAA,kBACA,CAAA,sBACA,CAAA,cACA,CAAA,YACA,CAAA,2EAEA,UACE,CAAA,yBCt3BN,2EDq3BI,sBAII,CAAA,CAAA,6FAKF,UACE,CAAA,gBAUZ,wBACE,CAAA,0BACA,CAAA,eACA,CAAA,cACA,CAAA,yBC74BE,gBDy4BJ,qBAOI,CAAA,CAAA,2BAGF,YACE,CAAA,cACA,CAAA,kBACA,CAAA,sBACA,CAAA,kBACA,CAAA,mDAGF,YAEE,CAAA,aACA,CAAA,yBCh5BA,sBDm5BF,UAEI,CAAA,YACA,CAAA,sBACA,CAAA,kBACA,CAAA,CAAA,6BAIJ,WACE,CAAA,yBC36BA,6BD06BF,0BAII,CAAA,CAAA,kDAIA,eACE,CAAA,YACA,CAAA,qBACA,CAAA,kBACA,CAAA,6BACA,CAAA,yBCv7BJ,kDDk7BE,kBAQI,CAAA,CAAA,qDAGF,UACE,CAAA,yBC97BN,qDD67BI,UAII,CAAA,CAAA,uDAGF,iBACE,CAAA,oBACA,CAAA,UACA,CAAA,wBACA,CAAA,cACA,CAAA,eACA,CAAA,YACA,CAAA,aACA,CAAA,iBACA,CAAA,8DAEA,UACE,CAAA,iBACA,CAAA,UACA,CAAA,QACA,CAAA,OACA,CAAA,4BACA,CAAA,SACA,CAAA,qEAOF,+BACE,CAAA,gEAOF,YACE,CAAA,+DAIJ,YACE,CAAA,0DAIJ,YACE,CAAA,0DAGF,YACE,CAAA,wBAQV,UACE,CAAA,YACA,CAAA,qBACA,CAAA,yBC//BE,wBD4/BJ,sBAMI,CAAA,iBACA,CAAA,CAAA,+BAGF,+BACE,CAAA,kBACA,CAAA,gBACA,CAAA,2CAEA,UACE,CAAA,gBACA,CAAA,oBACA,CAAA,cAEA,CAAA,QACA,CAAA,qDAEA,wBAlhCW,CAAA,oDAshCX,wBArhCU,CAAA,iDAyhCV,wBAxhCO,CAAA,uDA4hCP,qBAjiCa,CAAA,sDAqiCb,wBApiCO,CAAA,mDAwiCP,qBA3iCO,CAAA,kDA+iCP,wBA9iCQ,CAAA,iDAkjCR,qBAnjCO,CAAA,kCAyjCX,YACE,CAAA,kBACA,CAAA,cACA,CAAA,6BACA,CAAA,uDAEA,UACE,CAAA,SACA,CAAA,aACA,CAAA,iDAGF,UACE,CAAA,qCACA,CAAA,eAjjCS,CAAA,yBClBX,gEDukCI,gBACE,CAAA,CAAA,yBCxkCN,iDDikCA,qBAYI,CAAA,CAAA,iEAIA,UACE,CAAA,WACA,CAAA,0EAIJ,0BACE,CAAA,YACA,CAAA,cACA,CAAA,0BACA,CAAA,4EAEA,oBACE,CAAA,cAjlCQ,CAAA,UAmlCR,CAAA,gBACA,CAAA,gBACA,CAAA,iBACA,CAAA,mBACA,CAAA,wBArmCG,CAAA,gEA0mCP,QACE,CAAA,cACA,CAAA,kEAEA,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,cACA,CAAA,wEAEA,aApnCG,CAAA,2DA0nCP,UACE,CAAA,cA7mCU,CAAA,YAKH,CAAA,6DA4mCP,gBACE,CAAA,wDAIJ,cACE,CAAA,iEAGE,0BACE,CAAA,uDAKN,oBACE,CAAA,gBACA,CAAA,wBAhpCK,CAAA,UAkpCL,CAAA,cApoCU,CAAA,iBAsoCV,CAAA,oBACA,CAAA,kBACA,CAAA,+BACA,CAAA,6DAEA,wBACE,CAAA,uDAKN,UACE,CAAA,SACA,CAAA,aACA,CAAA,iCAKJ,qCACE,CAAA,kBACA,CAAA,UACA,CAAA,6CAEA,kBACE,CAAA,eACA,CAAA,iDAEA,UACE,CAAA,WACA,CAAA,gDAIJ,QACE,CAAA,mBACA,CAAA,cACA,CAAA,oBACA,CAAA,eACA,CAAA,yBC1rCF,gDDqrCA,cAQI,CAAA,CAAA,+CAIJ,YACE,CAAA,kBACA,CAAA,eACA,CAAA,iBACA,CAAA,kEAEA,cACE,CAAA,eACA,CAAA,wBACA,CAAA,iBACA,CAAA,eACA,CAAA,gBACA,CAAA,iBACA,CAAA,iDAGF,aACE,CAAA,qDAEA,UACE,CAAA,WACA,CAAA,mBACA,CADA,gBACA,CAAA,0CAKN,YACE,CAAA,0BACA,CAAA,cACA,CAAA,qGAEA,cAEE,CAAA,UACA,CAAA,cACA,CAAA,yGAEA,gBACE,CAAA,2DAKF,YACE,CAAA,cACA,CAAA,eACA,CAAA,cAnuCQ,CAAA,6DAsuCR,UACE,CAAA,gBACA,CAAA,8DAGF,iBACE,CAAA,gEAEA,oBACE,CAAA,UACA,CAAA,uCAOV,cACE,CAAA,kDAEA,6BACE,CAAA,iBACA,CAAA,6CAIA,UACE,CAAA,WACA,CAAA,oCAKN,cACE,CAAA,OAON,eACE,CAAA,UACA,CAAA,YACA,CAAA,kBACA,CAAA,sBACA,CAAA,kBACA,CAAA,eACA,CAAA,UAEA,aACE,CAAA,gBACA,CAAA,qBACA,CAAA,8BACA,CAAA,+BACA,CAAA,gBAEA,wBA7yCS,CAAA,kBAgzCP,UACE,CAAA,YAIJ,oBACE,CAAA,UACA,CAAA,8CAIJ,YAEE,CAAA,6BAIA,8BACE,CAAA,wBAMJ,qBACE,CAAA,YACA,CAAA,kBACA,CAAA,UACA,CAAA,6BAGE,iBACE,CAAA,aAh1CK,CAAA,eAk1CL,CAAA,kCAIJ,eACE,CAAA,qBACA,CAAA,OAQN,wBA/1Ca,CAAA,6BAi2CX,CAAA,iBACA,CAAA,WACA,CAAA,YAEA,iBACE,CAAA,OACA,CAAA,MACA,CAAA,0BACA,CAAA,sBACA,CAAA,yBACA,CAAA,iBACA,CAAA,gBACA,CAAA,yBACA,CAAA,eACA,CAAA,wBACA,CAAA,uBAKJ,iBACE,CAAA,0BACA,CAAA,+BACA,CAAA,0CAEA,iBACE,CAAA,KACA,CAAA,UACA,CAAA,0BACA,CAAA,+BACA,CAAA,gDAEA,mCACE,CAAA,qCAIJ,SACE,CAAA,aACA,CAAA,gBACA,CAAA,oBACA,CAAA,oDAEA,qBACE,CAAA,wBACA,CAAA,sBACA,CAAA,eACA,CAAA,WACA,CAAA,cACA,CAAA,eACA,CAAA,eACA,CAAA,sDAEA,oBACE,CAAA,+CAIJ,cACE,CAAA,4CAGF,cACE,CAAA,4CAQF,mBACE,CAAA,8CAEA,mBACE,CAAA,2BACA,CAAA,oBACA,CAAA,eACA,CAAA,cACA,CAAA,aAkBN,mCACE,CAAA,iCAMF,eACE,CAAA,oCAEA,mBACE,CAAA,YACA,CAAA,8BACA,CAAA,wCAEE,CAAA,oBAEF,CAFE,eAEF,CAAA,YACA,CAAA,8CAEA,cACE,CAAA,UACA,CAAA,cACA,CAAA,gDAEA,gBACE,CAAA,mDAIJ,aACE,CAAA,UACA,CAAA,WACA,CAAA,uDAEA,UACE,CAAA,WACA,CAAA,mBACA,CADA,gBACA,CAAA,sCAIJ,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,cACA,CAAA,mBACA,CAAA,2BACA,CAAA,oBACA,CAAA,eACA,CAAA,oBACA,CAAA,aACA,CAAA,4CAEA,aAz/CK,CAAA,yCAigDT,mCACE,CAAA,8CAKF,gCACE,CAAA,0CAKF,gCACE,CAAA,wCAKF,wBA/gDS,CAAA,2CAqhDT,wBAthDY,CAAA,4CA4hDZ,wBA7hDa,CAAA,wBAoiDjB,YACE,CAAA,8BACA,CAAA,0BACA,CAAA,6CAEE,CAAA,wBAEF,CAAA,2BACA,CAAA,wBACA,CAAA,8BAEA,eACE,CAAA,cACA,CAAA,sCAGF,eACE,CAAA,kBACA,CAAA,UACA,CAAA,eACA,CAAA,kBACA,CAAA,WACA,CAAA,aACA,CAAA,qBACA,CAAA,SACA,CAAA,iBACA,CAAA,QACA,CAAA,oBACA,CAAA,cACA,CAAA,eACA,CAAA,WACA,CAAA,wDAEA,UACE,CAHF,mDAEA,UACE,CAAA,4CAGF,YACE,CAAA,6CAGF,YACE,CAAA,4CAIJ,aACE,CAAA,wBACA,CAAA,YACA,CAAA,iBACA,CAAA,+BACA,CAAA,eACA,CAAA,kDAEA,wBA5lDS,CAAA,8CAgmDT,iBACE,CAAA,OACA,CAAA,QACA,CAAA,+BACA,CAAA,UACA,CAAA,sCAOJ,YACE,CAAA,6BACA,CAAA,kBACA,CAAA,sDAEA,8BACE,CAAA,WACA,CAAA,wDAEA,cACE,CAAA,UACA,CAAA,cACA,CAAA,YACA,CAAA,aAMR,qBACE,CAAA,kBAEA,YACE,CAAA,wBACA,CAAA,WACA,CAAA,wBAOA,wBACE,CAAA,WACA,CAAA,UACA,CAAA,cACA,CAAA,cACA,CAAA,QACA,CAAA,qBACA,CAAA,qBACA,CAAA,8BAGF,WACE,CAAA,YACA,CAAA,0CAGF,UACE,CAJA,qCAGF,UACE,CAAA,wCAGF,WACE,CAAA,gBACA,CAAA,oBAON,iBACE,CAAA,UACA,CAAA,WACA,CAAA,yBC3qDE,sCD6qDF,sBAEI,CAAA,yCAEA,WACE,CAAA,4CAEA,WACE,CAAA,8CAEA,gBACE,CAAA,CAAA,mCAOV,iBACE,CAAA,QACA,CAAA,OACA,CAAA,+BACA,CAAA,0CAGF,cACE,CAAA,MACA,CAAA,QACA,CAAA,4CAEA,yBACE,CAAA,gCAMJ,YACE,CAAA,qDAIA,YACE,CAAA,mBAOJ,eACE,CAAA,mBAGF,YACE,CAAA,+BACA,CAAA,6BACA,CAAA,QACA,CAAA,kBACA,CAAA,yBCxuDA,mBDmuDF,+BAQI,CAAA,6BACA,CAAA,QACA,CAAA,CAAA,uCAGF,aACE,CAAA,2CAEA,UACE,CAAA,WACA,CAAA,mBACA,CADA,gBACA,CAAA,kCAIJ,aACE,CAAA,cACA,CAAA,yBC5vDF,kCD0vDA,aAKI,CAAA,CAAA,oCAGF,oBACE,CAAA,UACA,CAAA,oBACA,CAAA,cACA,CAAA,yBCtwDJ,oCDkwDE,cAOI,CAAA,CAAA,0CAGF,aA7wDK,CAAA,cAsxDb,cACE,CAAA,kBACA,CAAA,iBACA,CAAA,mBAEA,eACE,CAAA,iBACA,CAAA,QAMJ,YACE,CAAA,wBACA,CAAA,yBCtxDE,oBDyxDA,sBACE,CAAA,CAAA,oBAIJ,WACE,CAAA,YACA,CAAA,wBAEA,WACE,CAAA,UACA,CAAA,mBACA,CADA,gBACA,CAAA,yCAKF,aAzzDS,CAAA,eA2zDP,CAAA,kBACA,CAAA,aACA,CAAA,yBC9yDF,yCD0yDA,eAOI,CAAA,iBACA,CAAA,CAAA,yCAIJ,cACE,CAAA,yBCvzDF,yCDszDA,iBAII,CAAA,CAAA,8BAYA,mCACE,CAAA,oCAEA,mCACE,CAAA,8EASZ,gCAQE,CAAA,QAGF,mCACE,CAAA,SAGF,mCACE,CAAA,aAGF,mCACE,CAAA,cAGF,gCACE,CAAA,SAGF,mCACE,CAAA,UAGF,gCACE,CAAA,8DAGF,mCAKE,CAAA,mBAGF,0BACE,CAAA,qCACA,CAAA,iBACA,CAAA,WACA,CAAA,0BAEA,8BACE,CAAA,UACA,CAAA,eACA,CAAA,iBACA,CAAA,+BAEA,yBACE,CAAA,sBACA,CAAA,eACA,CAAA,gCAMA,gCACE,CAAA,sBACA,CAAA,gCAOF,gCACE,CAAA,sBACA,CAAA,4CAKN,eAEE,CAAA,kBACA,CAAA,iBACA,CAAA,kDAEA,iBACE,CAAA,sDAEA,aAEE,CAAA,yBAEA,CAAA,kEAEA,aAEE,CAAA,sCASN,YACE,CAAA,qBACA,CAAA,6DAEA,YACE,CAAA,UACA,CAAA,kBACA,CAAA,yBCp8DJ,6DDi8DE,qBAMI,CAAA,CAAA,iEAGF,SACE,CAAA,yBC38DN,iED08DI,UAII,CAAA,CAAA,2EAIJ,SACE,CAAA,YACA,CAAA,+BACA,CAAA,4BACA,CAAA,yBCt9DN,2EDk9DI,eAOI,CAAA,UACA,CAAA,CAAA,gEAQN,YACE,CAAA,UACA,CAAA,QACA,CAAA,yBCr+DJ,gEDk+DE,cAMI,CAAA,CAAA,+EAGF,YACE,CAAA,qBACA,CAAA,SACA,CAAA,YACA,CAAA,yBC/+DN,+ED2+DI,sBAOI,CAAA,CAAA,oFAGF,UACE,CAAA,6FAGF,eACE,CAAA,UACA,CAAA,6BACA,CAAA,4GAEA,WACE,CAAA,SAUd,YArgEe,CAAA,wBAwgEb,cACE,CAAA,eACA,CAAA,uBAGF,YACE,CAAA,kBACA,CAAA,cACA,CAAA,QA/gEY,CAAA,0CAkhEZ,uBACE,CAAA,YACA,CAAA,QACA,CAAA,SACA,CAAA,4CAEA,UACE,CAAA,WACA,CAAA,gDAEA,UACE,CAAA,WACA,CAAA,mBACA,CADA,gBACA","file":"style.css","sourcesContent":["body{line-height:1.5;font-family:\"Roboto\",sans-serif}*{box-sizing:border-box}h3{font-size:18px}#cookie-information{background-color:#303440;color:#fff;padding:20px 0;font-size:10px;text-align:center}#cookie-information a{font-weight:900;color:#fff;font-size:12px}#main-menu{text-transform:uppercase}@media(max-width: 991px){#main-menu{height:100vh;width:100%;position:fixed;top:0;left:0;z-index:99;background:#000;display:none}#main-menu.visible{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}}@media(max-width: 991px){#main-menu div[id^=menu-container-]{width:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}}#main-menu div[id^=menu-container-] ul{margin:0;padding:0;list-style-type:none;flex-direction:column}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;flex-direction:row}}@media(max-width: 991px){#main-menu div[id^=menu-container-] ul{width:100%}}#main-menu div[id^=menu-container-] ul li{position:relative;width:100%;font-size:12px;text-align:center;padding:0}@media(max-width: 992px){#main-menu div[id^=menu-container-] ul li a{padding:10px}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li{width:auto;font-size:12px;padding:20px}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li{font-size:14px;padding:10px}}#main-menu div[id^=menu-container-] ul li.active{background-color:#47b0ed}#main-menu div[id^=menu-container-] ul li.parent>a i{opacity:1;margin-left:5px}#main-menu div[id^=menu-container-] ul li ul{position:absolute;display:none}@media(max-width: 991px){#main-menu div[id^=menu-container-] ul li ul{position:static}}@media(min-width: 992px){#main-menu div[id^=menu-container-] ul li:hover ul{display:block}}#main-menu div[id^=menu-container-] ul li.active ul{display:block}#main-menu-btn.active{position:fixed;top:20px;right:20px;font-size:16px;background-color:rgba(0,0,0,0)}#main-menu-btn{height:50px;width:50px;color:#fff;background:rgba(0,0,0,0);display:none;z-index:999;line-height:50px;text-align:center;font-size:25px;cursor:pointer}@media(max-width: 991px){#main-menu-btn{display:block}}.header{display:flex;flex-direction:column}.header__logo{padding:20px 0}@media(max-width: 767px){.header__logo{display:flex;justify-content:center}}.header__navigation{width:100%;background-color:#19232d;margin-bottom:20px}@media(min-width: 992px){.header__navigation{margin-bottom:60px}}.header__navigation #menu-container-1{width:100%;margin:0 auto}.header__navigation #menu-container-1 ul{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;list-style:none;margin:0}.header__navigation #menu-container-1 ul li{padding:10px 5px;transition:background-color .3s;cursor:pointer;font-size:14px}.header__navigation #menu-container-1 ul li:hover{background-color:#289dcc}.header__navigation #menu-container-1 ul li a{text-decoration:none;color:#fff;display:block;height:100%}@media(min-width: 992px){.header__navigation #menu-container-1 ul li.parent ul{position:absolute;top:50px;left:0;width:150px;background-color:#000;z-index:999}.header__navigation #menu-container-1 ul li.parent ul li{text-align:start;padding:10px}.header__navigation #menu-container-1 ul li.parent a i{margin-left:5px}}.header__navigation #menu-container-1 ul li.parent:hover{background-color:#19232d}@media(max-width: 992px){.header__navigation #menu-container-1 ul li.parent.active{background-color:#000}}@media(min-width: 992px){.header__navigation #menu-container-1 ul li.parent.active ul{display:none;background-color:#22303d}.header__navigation #menu-container-1 ul li.parent.active:hover ul{display:block}}.news{display:flex;flex-wrap:wrap;justify-content:space-between}@media(min-width: 768px){.news{height:350px}}@media(min-width: 768px){.news{display:flex;justify-content:space-between;height:350px}}.news__big-articles{width:100%;display:flex;justify-content:center;align-items:center;height:100%}@media(min-width: 768px){.news__big-articles{width:50%;padding-right:2px}}.news__big-articles .big-articles__article{width:100%;height:300px;background-size:cover;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;margin-bottom:2px}@media(min-width: 768px){.news__big-articles .big-articles__article{height:100%;margin-bottom:0}}.news__big-articles .big-articles__article .article__category{text-decoration:none;color:#fff;background-color:#d33;padding:3px 8px;margin-left:20px;font-size:10px;transition:background-color .3s;text-transform:uppercase}.news__big-articles .big-articles__article .article__category:hover{background-color:#333946}.news__big-articles .big-articles__article #article-main{padding:10px 15px 20px;background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) 100%);width:100%}.news__big-articles .big-articles__article #article-main .article-title{text-transform:uppercase;margin:0;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;font-family:\"Roboto\"}.news__big-articles .big-articles__article #article-main .article-title a{text-decoration:none;color:#fff;transition:color .3s}.news__big-articles .big-articles__article #article-main .article-title a:hover{color:#289dcc}.news__big-articles .big-articles__article #article-main .date-add{color:#fff;font-size:10px;display:none}.news__big-articles .big-articles__article #article-main .date-add i{margin-right:5px}.news__small-articles{width:100%;display:flex;flex-wrap:wrap;justify-content:space-between;align-content:space-between;height:1000px}@media(min-width: 370px){.news__small-articles{height:500px;gap:1px}}@media(min-width: 768px){.news__small-articles{width:50%;height:100%}}.news__small-articles .small-articles__article{width:100%;height:24%;background-size:cover;display:flex;align-items:flex-end}@media(min-width: 370px){.news__small-articles .small-articles__article{width:calc(50% - 1px);height:calc(50% - 1px)}}.news__small-articles .small-articles__article #article-main{padding:15px 10px;background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) 100%);width:100%}.news__small-articles .small-articles__article #article-main .article-title{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;text-transform:uppercase;font-family:\"Roboto\"}.news__small-articles .small-articles__article #article-main .article-title a{text-decoration:none;color:#fff;transition:color .3s;text-align:center}.news__small-articles .small-articles__article #article-main .article-title a:hover{color:#289dcc}.news__small-articles .small-articles__article #article-main .date-add{color:#fff;font-size:10px;display:none}.news__small-articles .small-articles__article #article-main .date-add i{margin-right:5px}.main{display:flex;flex-wrap:wrap;justify-content:space-between}.main .right-section{width:100%;order:1}@media(min-width: 992px){.main .right-section{width:calc(30% - 5px)}}.main .right-section .aside{display:flex;flex-direction:column;justify-content:center;z-index:0;position:sticky;top:0;gap:20px}.main .right-section .aside .title{color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px;border-bottom:2px solid #47b0ed}.main .right-section .aside .title span{text-align:center;background-color:#47b0ed;padding:6px 12px}.main .right-section .aside .tag-section{padding:20px 0}.main .right-section .aside .tag-section .tag__container #tags ul{display:flex;flex-direction:row;flex-wrap:wrap;list-style:none}.main .right-section .aside .tag-section .tag__container #tags ul li{padding:5px}.main .right-section .aside .tag-section .tag__container #tags ul li a{color:#47b0ed}.main .right-section .aside .weather-section{margin-top:40px}.main .right-section .aside .weather-section .weather__container{display:flex;flex-direction:column;align-items:center}.main .right-section .aside .weather-section .weather__container .iframe{width:100%;height:380px}@media(min-width: 992px){.main .right-section .aside .weather-section .weather__container .iframe{height:300px}}.main .right-section .aside .weather-section .weather__container a{color:#000}.main .right-section .aside .weather-section--subpages{margin-top:0}.main .left-section{width:100%}@media(min-width: 992px){.main .left-section{width:calc(70% - 5px)}}.main .left-section .left-section-articles{display:flex;justify-content:space-between;flex-direction:column;flex-wrap:wrap}.main .left-section .left-section-articles .journalism{width:100%}.main .left-section .left-section-articles .sport{width:100%}.main .left-section .articles{display:flex;flex-direction:row;justify-content:center;margin-top:40px;flex-wrap:wrap;gap:30px;z-index:0;position:relative;max-width:100%}.main .left-section .articles .title{text-transform:uppercase;color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px}.main .left-section .articles .title span{text-align:center;padding:6px 12px}.main .left-section .articles .title--journalism span{background-color:#d93}.main .left-section .articles .title--sport span{background-color:#81d742}.main .left-section .articles .title--business span{background-color:#4c66a4}.main .left-section .articles .title--culture span{background-color:#ff5d00}.main .left-section .articles .title--moto span{background-color:#3ca12c}.main .left-section .articles .title--policy span{background-color:#d33}.main .left-section .articles .title--kitchen span{background-color:#bd7e20}.main .left-section .articles .title--lifestyle span{background-color:#75c4f2}.main .left-section .articles__big-article{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);width:100%}@media(min-width: 992px){.main .left-section .articles__big-article{width:calc(50% - 15px)}}.main .left-section .articles__big-article .big-article__img{width:100%;height:auto}.main .left-section .articles__big-article .article__category{padding:3px 8px;border-radius:3px;margin:20px 10px 10px;text-align:center;font-size:10px}.main .left-section .articles__big-article .article__category a{text-decoration:none;font-size:12px;color:#fff}.main .left-section .articles__big-article .article__category--journalism{background-color:#d93;width:90px}.main .left-section .articles__big-article .article__category--sport{background-color:#81d742;width:70px}.main .left-section .articles__big-article .article__category--chronicle{background-color:#47b0ed;width:150px}.main .left-section .articles__big-article .article__category--policy{background-color:#d33}.main .left-section .articles__big-article .article__category--culture{background-color:#ff5d00}.main .left-section .articles__big-article .article__category--moto{background-color:#3ca12c}.main .left-section .articles__big-article .article__category--business{background-color:#4c66a4}.main .left-section .articles__big-article .article__category--kitchen{background-color:#bd7e20}.main .left-section .articles__big-article .article__category--lifestyle{background-color:#75c4f2}.main .left-section .articles__big-article #article-main{display:flex;flex-direction:column;justify-content:center;padding:0 20px}.main .left-section .articles__big-article #article-main .article-title{margin:0 0 10px 0}.main .left-section .articles__big-article #article-main .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:22px}.main .left-section .articles__big-article #article-main .article-title a:hover{color:#47b0ed}.main .left-section .articles__big-article #article-main .date-add{font-size:12px;color:#888;margin-bottom:10px}.main .left-section .articles__big-article #article-main .date-add i{margin-right:5px}.main .left-section .articles__big-article #article-main .entry{font-size:12px}.main .left-section .articles__small-articles{width:100%}@media(min-width: 992px){.main .left-section .articles__small-articles{width:calc(50% - 15px)}}.main .left-section .articles__small-articles .small-article:nth-child(1){margin-top:0}.main .left-section .articles__small-articles .small-article{display:flex;justify-content:flex-start;margin:25px 0}.main .left-section .articles__small-articles .small-article .small-article__img{width:30%;margin-right:15px}.main .left-section .articles__small-articles .small-article .small-article__img img{width:100%;height:100%;object-fit:cover}.main .left-section .articles__small-articles .small-article #article-main{width:60%;display:flex;flex-direction:column;justify-content:flex-end}.main .left-section .articles__small-articles .small-article #article-main .article-title{margin-bottom:10px;text-overflow:ellipsis;overflow:hidden;white-space:wrap;width:100%;height:40px;line-height:1.3}.main .left-section .articles__small-articles .small-article #article-main .article-title a{font-size:16px;text-decoration:none;color:#000;transition:color .3s;font-weight:400;display:block}.main .left-section .articles__small-articles .small-article #article-main .article-title a:hover{color:#47b0ed}.main .left-section .articles__small-articles .small-article #article-main .date-add{font-size:12px;color:gray;margin-bottom:10px}.main .left-section .articles__small-articles .small-article #article-main .date-add i{margin-right:5px}.main .left-section .sport.articles{justify-content:flex-start}.main .left-section .chronicle{margin-top:40px;width:100%;margin-bottom:0;z-index:0;position:relative}.main .left-section .chronicle .title--chronicle{text-transform:uppercase;color:#fff;font-weight:400;width:100%;padding-bottom:6px;margin-bottom:15px;border-bottom:2px solid #47b0ed}.main .left-section .chronicle .title--chronicle span{text-align:center;background-color:#47b0ed;padding:6px 12px}.main .left-section .chronicle .articles--chronicle{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-top:0}.main .left-section .chronicle .articles--chronicle .articles__big-article{width:100%}@media(min-width: 992px){.main .left-section .chronicle .articles--chronicle .articles__big-article{width:calc(50% - 15px)}}.main .left-section .chronicle .articles--chronicle .articles__small-articles .small-article{width:100%}.footer--footer{background-color:#252729;border-top:15px solid #333;margin-top:20px;max-width:100%}@media(min-width: 992px){.footer--footer{justify-content:start}}.footer--footer .container{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:center;align-items:center}.footer--footer .logo,.footer--footer .footer-menu{padding:15px;margin:20px 0}@media(max-width: 991px){.footer--footer .logo{width:100%;display:flex;justify-content:center;align-items:center}}.footer--footer .footer-menu{height:100%}@media(min-width: 992px){.footer--footer .footer-menu{border-left:1px solid #333}}.footer--footer .footer-menu #menu-container-1 ul{list-style:none;display:flex;flex-direction:column;align-items:center;justify-content:space-between}@media(min-width: 992px){.footer--footer .footer-menu #menu-container-1 ul{flex-direction:row}}.footer--footer .footer-menu #menu-container-1 ul li{width:100%}@media(min-width: 992px){.footer--footer .footer-menu #menu-container-1 ul li{width:auto}}.footer--footer .footer-menu #menu-container-1 ul li a{text-align:center;text-decoration:none;color:#fff;text-transform:uppercase;font-size:12px;font-weight:600;padding:10px;display:block;position:relative}.footer--footer .footer-menu #menu-container-1 ul li a::after{content:\"\";position:absolute;width:100%;bottom:0;right:0;border-bottom:2px solid #555;z-index:0}.footer--footer .footer-menu #menu-container-1 ul li.active a::after{border-bottom:2px solid #47b0ed}.footer--footer .footer-menu #menu-container-1 ul li.parent a i{display:none}.footer--footer .footer-menu #menu-container-1 ul li.parent ul{display:none}.footer--footer .footer-menu #menu-container-1 ul #link-1{display:none}.footer--footer .footer-menu #menu-container-1 ul #link-2{display:none}.left-section__subpages{width:100%;display:flex;flex-direction:column}@media(min-width: 992px){.left-section__subpages{width:calc(70% - 20px);margin-right:20px}}.left-section__subpages .title{border-bottom:2px solid #47b0ed;margin-bottom:15px;padding-bottom:0}.left-section__subpages .title .site-title{color:#fff;padding:6px 12px;display:inline-block;font-size:18px;margin:0}.left-section__subpages .title .site-title--business{background-color:#4c66a4}.left-section__subpages .title .site-title--culture{background-color:#ff5d00}.left-section__subpages .title .site-title--moto{background-color:#3ca12c}.left-section__subpages .title .site-title--journalism{background-color:#d93}.left-section__subpages .title .site-title--chronicle{background-color:#47b0ed}.left-section__subpages .title .site-title--policy{background-color:#d33}.left-section__subpages .title .site-title--sport{background-color:#81d742}.left-section__subpages .title .site-title--news{background-color:#d33}.left-section__subpages .articles{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.left-section__subpages .articles .article-entry.first{width:100%;padding:0;margin-left:0}.left-section__subpages .articles .article-entry{width:100%;box-shadow:0 1px 3px 0 rgba(0,0,0,.1);margin-top:20px}@media(min-width: 576px){.left-section__subpages .articles .article-entry:nth-child(odd){margin-left:10px}}@media(min-width: 576px){.left-section__subpages .articles .article-entry{width:calc(50% - 5px)}}.left-section__subpages .articles .article-entry .main-image img{width:100%;height:auto}.left-section__subpages .articles .article-entry .article-entry__category{margin:20px 20px 10px 20px;display:flex;flex-wrap:wrap;justify-content:flex-start}.left-section__subpages .articles .article-entry .article-entry__category a{text-decoration:none;font-size:12px;color:#fff;padding:2px 10px;margin:0 5px 0 0;border-radius:3px;display:inline-flex;background-color:#47b0ed}.left-section__subpages .articles .article-entry .article-title{margin:0;padding:0 20px}.left-section__subpages .articles .article-entry .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:22px}.left-section__subpages .articles .article-entry .article-title a:hover{color:#47b0ed}.left-section__subpages .articles .article-entry .date-add{color:gray;font-size:12px;padding:20px}.left-section__subpages .articles .article-entry .date-add i{margin-right:5px}.left-section__subpages .articles .article-entry .entry{padding:0 20px}.left-section__subpages .articles .article-entry .entry p strong{font-weight:400 !important}.left-section__subpages .articles .article-entry .more{text-decoration:none;padding:3px 10px;background-color:#47b0ed;color:#fff;font-size:12px;border-radius:3px;display:inline-block;margin:0 20px 20px;transition:background-color .3s}.left-section__subpages .articles .article-entry .more:hover{background-color:#0e5e8d}.left-section__subpages .articles .article-entry.first{width:100%;padding:0;margin-left:0}.left-section__subpages .article{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);margin-bottom:20px;width:100%}.left-section__subpages .article .main-image{margin-bottom:40px;margin-top:20px}.left-section__subpages .article .main-image img{width:100%;height:auto}.left-section__subpages .article .article-title{margin:0;padding:20px 10px 0;font-size:30px;font-family:\"Roboto\";font-weight:600}@media(min-width: 992px){.left-section__subpages .article .article-title{font-size:40px}}.left-section__subpages .article .social-icons{display:flex;flex-direction:row;margin-top:10px;padding-left:10px}.left-section__subpages .article .social-icons .social-icons-text{font-size:15px;font-weight:600;text-transform:uppercase;margin-right:25px;margin-bottom:0;line-height:30px;text-align:center}.left-section__subpages .article .social-icons a{padding:0 5px}.left-section__subpages .article .social-icons a img{width:100%;height:auto;object-fit:cover}.left-section__subpages .article .wrapper{display:flex;justify-content:flex-start;padding:10px 0}.left-section__subpages .article .wrapper .date-add,.left-section__subpages .article .wrapper .views{font-size:13px;color:#888;padding:0 10px}.left-section__subpages .article .wrapper .date-add i,.left-section__subpages .article .wrapper .views i{margin-right:5px}.left-section__subpages .article .wrapper .article-tags ul{display:flex;flex-wrap:wrap;list-style:none;font-size:12px}.left-section__subpages .article .wrapper .article-tags ul i{color:gray;margin-right:5px}.left-section__subpages .article .wrapper .article-tags ul li{padding-right:3px}.left-section__subpages .article .wrapper .article-tags ul li a{text-decoration:none;color:#000}.left-section__subpages .article .text{padding:0 10px}.left-section__subpages .article .text blockquote{border-left:5px solid #47b0ed;padding-left:25px}.left-section__subpages .article .text p img{width:100%;height:auto}.left-section__subpages .article h2{font-size:20px}.pager{margin-top:20px;width:100%;display:flex;flex-direction:row;justify-content:center;align-items:center;list-style:none}.pager li{margin:0 10px;padding:5px 10px;border:1px solid gray;background-color:rgba(0,0,0,0);transition:background-color .3s}.pager li:hover{background-color:#47b0ed}.pager li:hover a{color:#fff}.pager li a{text-decoration:none;color:#000}.pager li:nth-child(5),.pager li:nth-child(1){display:none}.pager li:nth-child(3):hover{background-color:rgba(0,0,0,0)}.articles .article-list{border:1px solid #eee;padding:20px;margin-bottom:20px;width:100%}.articles .article-list h3 a{font-size:1.25rem;color:#47b0ed;line-height:1.5}.articles .article-list .date-add{font-size:.9rem;color:rgba(0,0,0,.75)}.title{background-color:#333946;border-bottom:none !important;position:relative;height:40px}.title span{position:absolute;top:50%;left:0;transform:translateY(-50%);height:100% !important;font-size:14px !important;text-align:center;line-height:40px;padding:0 12px !important;font-weight:600;text-transform:uppercase}.articles__big-article{position:relative;box-shadow:none !important;border-bottom:3px solid #333946}.articles__big-article .article__category{position:absolute;top:0;left:-10px;border-radius:0 !important;transition:background-color .3s}.articles__big-article .article__category:hover{background-color:#333946 !important}.articles__big-article #article-main{width:80%;margin:0 auto;margin-top:-40px;padding:0 !important}.articles__big-article #article-main .article-title{background-color:#fff;padding:15px 20px 0 20px;text-overflow:ellipsis;overflow:hidden;height:74px;font-size:16px;font-weight:600;line-height:1.3}.articles__big-article #article-main .article-title a{font-family:\"Roboto\"}.articles__big-article #article-main .date-add{padding:0 20px}.articles__big-article #article-main .entry{padding:0 20px}.articles__big-article #article-main .entry{padding-bottom:20px}.articles__big-article #article-main .entry p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden;font-size:16px}li.parent ul{background-color:#22303d !important}.popular-post-section .news-list{list-style:none}.popular-post-section .news-list li{padding-bottom:15px;display:grid;grid-template-columns:80px 1fr;grid-template-areas:\"img txt\" \"img date\";column-gap:20px;row-gap:10px}.popular-post-section .news-list li .date-add{grid-area:date;color:#888;font-size:12px}.popular-post-section .news-list li .date-add i{margin-right:5px}.popular-post-section .news-list li .news-list-img{grid-area:img;width:100%;height:80px}.popular-post-section .news-list li .news-list-img img{width:100%;height:100%;object-fit:cover}.popular-post-section .news-list li a{text-decoration:none;color:#000;font-family:\"Roboto\";font-size:15px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;transition:color .3s;grid-area:txt}.popular-post-section .news-list li a:hover{color:#47b0ed}.popular-post-section .title--sport span{background-color:#81d742 !important}.popular-post-section .title--journalism span{background-color:#d93 !important}.popular-post-section .title--policy span{background-color:#d33 !important}.popular-post-section .title--moto span{background-color:#3ca12c}.popular-post-section .title--culture span{background-color:#ff5d00}.popular-post-section .title--business span{background-color:#4c66a4}.form-group--newsletter{display:grid;grid-template-columns:1fr 50px;grid-template-rows:1fr 1fr;grid-template-areas:\"title title\" \"email btn\";border:1px solid #e7e8e8;padding:20px 20px 30px 20px;background-color:#f2f2f2}.form-group--newsletter label{grid-area:title;font-size:13px}.form-group--newsletter .form-control{grid-area:email;display:table-cell;width:100%;margin-bottom:0;background:#333946;border:none;color:#f2f2f2;vertical-align:middle;outline:0;padding:12px 15px;margin:0;font-family:\"roboto\";font-size:14px;border-radius:0;height:44px}.form-group--newsletter .form-control::placeholder{color:#fff}.form-group--newsletter .form-control:focus{outline:none}.form-group--newsletter .form-control:active{outline:none}.form-group--newsletter .form-group--button{grid-area:btn;background-color:#333946;padding:10px;position:relative;transition:background-color .3s;border-radius:0}.form-group--newsletter .form-group--button:hover{background-color:#47b0ed}.form-group--newsletter .form-group--button i{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);color:#fff}.header__navigation #menu-container-1{display:flex;justify-content:space-between;align-items:center}.header__navigation #menu-container-1 .search--button{background-color:rgba(0,0,0,0);border:none}.header__navigation #menu-container-1 .search--button i{font-size:19px;color:#fff;cursor:pointer;padding:10px}#search-form{background-color:#fff}#search-form form{display:flex;justify-content:flex-end;height:50px}#search-form form input{background-color:#3e4555;border:none;color:#fff;font-size:14px;padding:0 12px;height:0;transition:height .3s;width:calc(30% - 5px)}#search-form form input:focus{border:none;outline:none}#search-form form input::placeholder{color:#fff}#search-form form .search-input--active{height:100%;padding:8px 12px}.header__navigation{position:relative;width:100%;height:50px}@media(min-width: 992px){.header__navigation #menu-container-1{height:50px !important}.header__navigation #menu-container-1 ul{height:100%}.header__navigation #menu-container-1 ul li{height:100%}.header__navigation #menu-container-1 ul li a{line-height:34px}}.header__navigation #main-menu-btn{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}.header__navigation #main-menu-btn.active{position:fixed;top:5%;left:90%}.header__navigation #main-menu-btn.active i{font-size:24px !important}#main-menu.visible #search-form{display:none}#main-menu.visible #menu-container-1 .search--button{display:none}#search-results ul{list-style:none}#search-results li{display:grid;grid-template-columns:100px 1fr;grid-template-areas:\"img txt\";gap:15px;margin-bottom:20px}@media(min-width: 576px){#search-results li{grid-template-columns:250px 1fr;grid-template-areas:\"img txt\";gap:20px}}#search-results li .search-results-img{grid-area:img}#search-results li .search-results-img img{width:100%;height:100%;object-fit:cover}#search-results li .article-title{grid-area:txt;line-height:.6}@media(min-width: 576px){#search-results li .article-title{line-height:1}}#search-results li .article-title a{text-decoration:none;color:#000;transition:color .3s;font-size:14px}@media(min-width: 576px){#search-results li .article-title a{font-size:18px}}#search-results li .article-title a:hover{color:#47b0ed}.image-source{padding:0 10px;margin-bottom:10px;font-style:italic}.image-source span{font-weight:600;font-style:normal}.author{padding:20px;background-color:#f8f8f8}@media(max-width: 767px){.author .author-row{justify-content:center}}.author .author-img{width:100px;height:100px}.author .author-img img{height:100%;width:100%;object-fit:cover}.author .author-description .author-name{color:#47b0ed;font-weight:600;margin-bottom:10px;display:block}@media(max-width: 767px){.author .author-description .author-name{margin-top:10px;text-align:center}}.author .author-description .author-text{font-size:14px}@media(max-width: 767px){.author .author-description .author-text{text-align:center}}#menu-container-1 ul li ul li{background-color:#22303d !important}#menu-container-1 ul li ul li:hover{background-color:#47b0ed !important}.aktualności,.bukowno,.jaroszowiec,.klucze,.łobzów,.olkusz,.rabsztyn,.wolbrom{background-color:#d33 !important}.biznes{background-color:#4c66a4 !important}.kultura{background-color:#ff5d00 !important}.motoryzacja{background-color:#3ca12c !important}.publicystyka{background-color:#d93 !important}.policja{background-color:#47b0ed !important}.polityka{background-color:#d33 !important}.sport,.piłkanożna,.piłkaręczna,.fitnessizdrowie,.sportywalki{background-color:#81d742 !important}.table-of-contents{margin:20px 20px 30px 20px;box-shadow:0 0px 3px 0 rgba(0,0,0,.1);border-radius:5px;padding:5px}.table-of-contents .title{background-color:rgba(0,0,0,0);color:#000;font-weight:600;margin-bottom:5px}.table-of-contents .title span{font-size:18px !important;text-transform:initial;font-weight:400}.table-of-contents ol li:before{content:counters(item, \".\") \". \";counter-increment:item}.table-of-contents ul li:before{content:counters(item, \".\") \". \";counter-increment:item}.table-of-contents ol,.table-of-contents ul{list-style:none;counter-reset:item;padding-left:20px}.table-of-contents ol li,.table-of-contents ul li{position:relative}.table-of-contents ol li a,.table-of-contents ul li a{color:#269eae;text-decoration:underline}.table-of-contents ol li a:hover,.table-of-contents ul li a:hover{color:#1e7e8b}.main .left-section .kitchen.articles{display:flex;flex-direction:column}.main .left-section .kitchen.articles .articles__big-article{display:flex;width:100%;border-bottom:none}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article{flex-direction:column}}.main .left-section .kitchen.articles .articles__big-article img{width:60%}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article img{width:100%}}.main .left-section .kitchen.articles .articles__big-article #article-main{width:40%;margin-top:0;border-bottom:3px solid #333946;border-top:3px solid #333946}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__big-article #article-main{border-top:none;width:100%}}.main .left-section .kitchen.articles .articles__small-articles{display:flex;width:100%;gap:30px}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__small-articles{flex-wrap:wrap}}.main .left-section .kitchen.articles .articles__small-articles .small-article{display:flex;flex-direction:column;width:25%;margin-top:0}@media(max-width: 575px){.main .left-section .kitchen.articles .articles__small-articles .small-article{width:calc(50% - 15px)}}.main .left-section .kitchen.articles .articles__small-articles .small-article__img{width:100%}.main .left-section .kitchen.articles .articles__small-articles .small-article #article-main{margin-top:10px;width:100%;flex-direction:column-reverse}.main .left-section .kitchen.articles .articles__small-articles .small-article #article-main .article-title{height:60px}.gallery{padding:20px}.gallery .gallery-title{font-size:20px;font-weight:600}.gallery .gallery-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.gallery .gallery-list .gallery-list-item{width:calc(25% - 7.5px);height:160px;margin:0;padding:0}.gallery .gallery-list .gallery-list-item a{width:100%;height:100%}.gallery .gallery-list .gallery-list-item a img{width:100%;height:100%;object-fit:cover}","// out: ../style-css/style.css, compress: true, sourceMap: true\r\n@import \"_mixins\";\r\n//variables\r\n\r\n//colors\r\n$news-color: #dd3333;\r\n$sport-color: #81d742;\r\n$journalism-color: #dd9933;\r\n$base-color: #47b0ed;\r\n$gray-color: #333946;\r\n$business-color: #4c66a4;\r\n$culture-color: #ff5d00;\r\n$moto-color: #3ca12c;\r\n$kitchen-color: darken($color: $journalism-color,\r\n $amount: 10%,\r\n);\r\n$lifestyle-color: lighten($color: $base-color,\r\n $amount: 10%,\r\n);\r\n\r\n//font-size\r\n$base-font-size: 16px;\r\n$small-font-size: 12px;\r\n$large-font-size: 32px;\r\n$xlarge-font-size: 46px;\r\n\r\n//spacing\r\n$main-spacing: 20px;\r\n$small-spacing: 10px;\r\n$big-spacing: 40px;\r\n\r\nbody {\r\n line-height: 1.5;\r\n font-family: \"Roboto\", sans-serif;\r\n}\r\n\r\n* {\r\n // margin: 0;\r\n // padding: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\nh3 {\r\n font-size: 18px;\r\n}\r\n\r\n#cookie-information {\r\n background-color: #303440;\r\n color: white;\r\n padding: $main-spacing 0;\r\n font-size: 10px;\r\n text-align: center;\r\n\r\n a {\r\n font-weight: 900;\r\n color: white;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n#main-menu {\r\n text-transform: uppercase;\r\n\r\n @include respond-below(md) {\r\n height: 100vh;\r\n width: 100%;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 99;\r\n background: black;\r\n display: none;\r\n\r\n &.visible {\r\n @include flexbox;\r\n // z-index: 99999;\r\n }\r\n }\r\n\r\n div[id^=\"menu-container-\"] {\r\n @include respond-below(md) {\r\n width: 100%;\r\n @include flexbox;\r\n @include align-items(center);\r\n @include justify-content(center);\r\n }\r\n\r\n ul {\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n flex-direction: column;\r\n\r\n @include respond-above(md) {\r\n @include flexbox;\r\n flex-direction: row;\r\n }\r\n\r\n @include respond-below(md) {\r\n width: 100%;\r\n }\r\n\r\n li {\r\n position: relative;\r\n width: 100%;\r\n font-size: 12px;\r\n text-align: center;\r\n padding: 0;\r\n\r\n @media (max-width: 992px) {\r\n a {\r\n padding: 10px;\r\n }\r\n }\r\n\r\n @include respond-above(md) {\r\n width: auto;\r\n font-size: $small-font-size;\r\n padding: 20px;\r\n }\r\n\r\n @include respond-above(md) {\r\n font-size: 14px;\r\n padding: 10px;\r\n }\r\n\r\n &.active {\r\n background-color: $base-color;\r\n\r\n @include respond-above(md) {}\r\n }\r\n\r\n &.parent {\r\n >a {\r\n i {\r\n opacity: 1;\r\n margin-left: 5px;\r\n }\r\n }\r\n }\r\n\r\n ul {\r\n position: absolute;\r\n display: none;\r\n\r\n @include respond-below(md) {\r\n position: static;\r\n }\r\n }\r\n\r\n @include respond-above(md) {\r\n &:hover {\r\n ul {\r\n display: block;\r\n }\r\n }\r\n }\r\n\r\n &.active {\r\n ul {\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n#main-menu-btn.active {\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n font-size: 16px;\r\n background-color: transparent;\r\n}\r\n\r\n#main-menu-btn {\r\n height: 50px;\r\n width: 50px;\r\n color: #fff;\r\n background: transparent;\r\n display: none;\r\n z-index: 999;\r\n line-height: 50px;\r\n text-align: center;\r\n font-size: 25px;\r\n cursor: pointer;\r\n\r\n @include respond-below(md) {\r\n display: block;\r\n }\r\n}\r\n\r\n//header\r\n\r\n.header {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n //logo\r\n &__logo {\r\n padding: 20px 0;\r\n\r\n @include respond-below(sm) {\r\n display: flex;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n //navigation\r\n\r\n &__navigation {\r\n width: 100%;\r\n background-color: #19232d;\r\n margin-bottom: 20px;\r\n\r\n @include respond-above(md) {\r\n margin-bottom: 60px;\r\n }\r\n\r\n #menu-container-1 {\r\n width: 100%;\r\n // max-width: 450px;\r\n margin: 0 auto;\r\n\r\n // @include respond-above(xs) {\r\n // max-width: 500px;\r\n // }\r\n\r\n // @include respond-above(sm) {\r\n // max-width: 700px;\r\n // }\r\n\r\n // @include respond-above(md) {\r\n // max-width: 900px;\r\n // }\r\n\r\n // @include respond-above(lg) {\r\n // max-width: 1100px;\r\n // }\r\n\r\n ul {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: flex-start;\r\n align-items: center;\r\n list-style: none;\r\n margin: 0;\r\n\r\n li {\r\n padding: 10px 5px;\r\n transition: background-color 0.3s;\r\n cursor: pointer;\r\n font-size: 14px;\r\n\r\n &:hover {\r\n background-color: #289dcc;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: white;\r\n // font-weight: 700;\r\n display: block;\r\n height: 100%;\r\n }\r\n }\r\n\r\n li.parent {\r\n // ul {\r\n // @media (max-width:992px) {\r\n // display: block;\r\n // }\r\n // }\r\n\r\n @include respond-above(md) {\r\n ul {\r\n position: absolute;\r\n top: 50px;\r\n left: 0;\r\n width: 150px;\r\n background-color: black;\r\n z-index: 999;\r\n\r\n li {\r\n text-align: start;\r\n padding: 10px;\r\n }\r\n }\r\n\r\n a {\r\n i {\r\n margin-left: 5px;\r\n }\r\n }\r\n }\r\n\r\n &:hover {\r\n background-color: #19232d;\r\n }\r\n }\r\n\r\n li.parent.active {\r\n @media (max-width: 992px) {\r\n background-color: black;\r\n }\r\n\r\n @include respond-above(md) {\r\n ul {\r\n display: none;\r\n background-color: #22303d;\r\n }\r\n\r\n &:hover {\r\n ul {\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//container\r\n\r\n//news\r\n.news {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n @include respond-above(sm) {\r\n height: 350px;\r\n }\r\n\r\n @include respond-above(xs) {}\r\n\r\n @include respond-above(sm) {\r\n display: flex;\r\n justify-content: space-between;\r\n height: 350px;\r\n }\r\n\r\n &__big-articles {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n\r\n @include respond-above(sm) {\r\n width: 50%;\r\n padding-right: 2px;\r\n }\r\n\r\n .big-articles__article {\r\n width: 100%;\r\n height: 300px;\r\n background-size: cover;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n justify-content: flex-end;\r\n margin-bottom: 2px;\r\n\r\n @include respond-above(sm) {\r\n height: 100%;\r\n margin-bottom: 0;\r\n }\r\n\r\n .article__category {\r\n text-decoration: none;\r\n color: white;\r\n background-color: #dd3333;\r\n padding: 3px 8px;\r\n margin-left: 20px;\r\n font-size: 10px;\r\n transition: background-color 0.3s;\r\n text-transform: uppercase;\r\n\r\n &:hover {\r\n background-color: $gray-color;\r\n }\r\n }\r\n\r\n #article-main {\r\n padding: 10px 15px 20px;\r\n background: linear-gradient(to bottom,\r\n rgba(0, 0, 0, 0) 0,\r\n rgba(0, 0, 0, 1) 100%);\r\n width: 100%;\r\n\r\n .article-title {\r\n text-transform: uppercase;\r\n margin: 0;\r\n font-size: 16px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: center;\r\n font-family: \"Roboto\";\r\n\r\n a {\r\n text-decoration: none;\r\n color: white;\r\n transition: color 0.3s;\r\n\r\n &:hover {\r\n color: #289dcc;\r\n }\r\n }\r\n }\r\n\r\n .date-add {\r\n color: white;\r\n font-size: 10px;\r\n display: none;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n &__small-articles {\r\n width: 100%;\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n align-content: space-between;\r\n height: 1000px;\r\n\r\n @media (min-width: 370px) {\r\n height: 500px;\r\n gap: 1px;\r\n }\r\n\r\n @include respond-above(sm) {\r\n width: 50%;\r\n height: 100%;\r\n }\r\n\r\n .small-articles__article {\r\n width: 100%;\r\n height: 24%;\r\n background-size: cover;\r\n display: flex;\r\n align-items: flex-end;\r\n\r\n @media (min-width: 370px) {\r\n width: calc(50% - 1px);\r\n height: calc(50% - 1px);\r\n }\r\n\r\n #article-main {\r\n padding: 15px 10px;\r\n background: linear-gradient(to bottom,\r\n rgba(0, 0, 0, 0) 0,\r\n rgba(0, 0, 0, 1) 100%);\r\n width: 100%;\r\n\r\n .article-title {\r\n font-size: 13px;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n margin: 0;\r\n text-transform: uppercase;\r\n font-family: \"Roboto\";\r\n\r\n a {\r\n text-decoration: none;\r\n color: white;\r\n transition: color 0.3s;\r\n text-align: center;\r\n\r\n &:hover {\r\n color: #289dcc;\r\n }\r\n }\r\n }\r\n\r\n .date-add {\r\n color: white;\r\n font-size: 10px;\r\n display: none;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//main\r\n.main {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .right-section {\r\n width: 100%;\r\n order: 1;\r\n\r\n @include respond-above(md) {\r\n width: calc(30% - 5px);\r\n }\r\n\r\n .aside {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n z-index: 0;\r\n position: sticky;\r\n top: 0;\r\n gap: 20px;\r\n\r\n .title {\r\n color: white;\r\n font-weight: 400;\r\n width: 100%;\r\n padding-bottom: 6px;\r\n margin-bottom: 15px;\r\n border-bottom: 2px solid $base-color;\r\n\r\n span {\r\n text-align: center;\r\n background-color: $base-color;\r\n padding: 6px 12px;\r\n }\r\n }\r\n\r\n .tag-section {\r\n padding: $main-spacing 0;\r\n\r\n .tag__container {\r\n #tags {\r\n ul {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n list-style: none;\r\n\r\n li {\r\n padding: 5px;\r\n\r\n a {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .weather-section {\r\n margin-top: $big-spacing;\r\n\r\n .weather__container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n\r\n .iframe {\r\n width: 100%;\r\n height: 380px;\r\n\r\n @include respond-above(md) {\r\n height: 300px;\r\n }\r\n }\r\n\r\n a {\r\n color: black;\r\n }\r\n }\r\n }\r\n\r\n .weather-section--subpages {\r\n margin-top: 0;\r\n }\r\n }\r\n }\r\n\r\n .left-section {\r\n width: 100%;\r\n\r\n @include respond-above(md) {\r\n width: calc(70% - 5px);\r\n }\r\n\r\n .left-section-articles {\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n flex-wrap: wrap;\r\n\r\n .journalism {\r\n width: 100%;\r\n }\r\n\r\n .sport {\r\n width: 100%;\r\n }\r\n }\r\n\r\n //articles\r\n .articles {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n margin-top: $big-spacing;\r\n flex-wrap: wrap;\r\n gap: 30px;\r\n z-index: 0;\r\n position: relative;\r\n max-width: 100%;\r\n\r\n .title {\r\n text-transform: uppercase;\r\n color: white;\r\n font-weight: 400;\r\n width: 100%;\r\n padding-bottom: 6px;\r\n margin-bottom: 15px;\r\n\r\n span {\r\n text-align: center;\r\n padding: 6px 12px;\r\n }\r\n\r\n &--journalism {\r\n span {\r\n background-color: $journalism-color;\r\n }\r\n }\r\n\r\n &--sport {\r\n span {\r\n background-color: $sport-color;\r\n }\r\n }\r\n\r\n &--business {\r\n span {\r\n background-color: $business-color;\r\n }\r\n }\r\n\r\n &--culture {\r\n span {\r\n background-color: $culture-color;\r\n }\r\n }\r\n\r\n &--moto {\r\n span {\r\n background-color: $moto-color;\r\n }\r\n }\r\n\r\n &--policy {\r\n span {\r\n background-color: $news-color;\r\n }\r\n }\r\n\r\n &--kitchen {\r\n span {\r\n background-color: $kitchen-color;\r\n }\r\n }\r\n\r\n &--lifestyle {\r\n span {\r\n background-color: $lifestyle-color;\r\n }\r\n }\r\n }\r\n\r\n &__big-article {\r\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);\r\n width: 100%;\r\n\r\n @include respond-above(md) {\r\n width: calc(50% - 15px);\r\n }\r\n\r\n .big-article__img {\r\n width: 100%;\r\n height: auto;\r\n }\r\n\r\n .article__category {\r\n padding: 3px 8px;\r\n border-radius: 3px;\r\n margin: $main-spacing $small-spacing $small-spacing;\r\n text-align: center;\r\n font-size: 10px;\r\n\r\n a {\r\n text-decoration: none;\r\n font-size: $small-font-size;\r\n color: white;\r\n }\r\n\r\n &--journalism {\r\n background-color: $journalism-color;\r\n width: 90px;\r\n }\r\n\r\n &--sport {\r\n background-color: $sport-color;\r\n width: 70px;\r\n }\r\n\r\n &--chronicle {\r\n background-color: $base-color;\r\n width: 150px;\r\n }\r\n\r\n &--policy {\r\n background-color: $news-color;\r\n }\r\n\r\n &--culture {\r\n background-color: $culture-color;\r\n }\r\n\r\n &--moto {\r\n background-color: $moto-color;\r\n }\r\n\r\n &--business {\r\n background-color: $business-color;\r\n }\r\n\r\n &--kitchen {\r\n background-color: $kitchen-color;\r\n }\r\n\r\n &--lifestyle {\r\n background-color: $lifestyle-color;\r\n }\r\n }\r\n\r\n #article-main {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n padding: 0 $main-spacing;\r\n\r\n .article-title {\r\n margin: 0 0 10px 0;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n transition: color 0.3s;\r\n font-size: 22px;\r\n\r\n &:hover {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n\r\n .date-add {\r\n font-size: $small-font-size;\r\n color: #888888;\r\n margin-bottom: 10px;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n\r\n .entry {\r\n font-size: $small-font-size;\r\n }\r\n }\r\n }\r\n\r\n &__small-articles {\r\n width: 100%;\r\n\r\n @include respond-above(md) {\r\n width: calc(50% - 15px);\r\n }\r\n\r\n .small-article:nth-child(1) {\r\n margin-top: 0;\r\n }\r\n\r\n .small-article {\r\n // box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1);\r\n display: flex;\r\n justify-content: flex-start;\r\n margin: 25px 0;\r\n\r\n .small-article__img {\r\n width: 30%;\r\n margin-right: 15px;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n }\r\n }\r\n\r\n #article-main {\r\n width: 60%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n .article-title {\r\n margin-bottom: 10px;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: wrap;\r\n width: 100%;\r\n height: 40px;\r\n line-height: 1.3;\r\n\r\n a {\r\n font-size: 16px;\r\n text-decoration: none;\r\n color: black;\r\n transition: color 0.3s;\r\n font-weight: 400;\r\n display: block;\r\n\r\n &:hover {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n\r\n .date-add {\r\n font-size: 12px;\r\n color: gray;\r\n margin-bottom: 10px;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .sport.articles {\r\n justify-content: flex-start;\r\n }\r\n\r\n .chronicle {\r\n margin-top: $big-spacing;\r\n width: 100%;\r\n margin-bottom: 0;\r\n z-index: 0;\r\n position: relative;\r\n\r\n .title--chronicle {\r\n text-transform: uppercase;\r\n color: white;\r\n font-weight: 400;\r\n width: 100%;\r\n padding-bottom: 6px;\r\n margin-bottom: 15px;\r\n border-bottom: 2px solid $base-color;\r\n\r\n span {\r\n text-align: center;\r\n background-color: $base-color;\r\n padding: 6px 12px;\r\n }\r\n }\r\n\r\n .articles--chronicle {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n flex-wrap: wrap;\r\n margin-top: 0;\r\n\r\n .articles__big-article {\r\n width: 100%;\r\n\r\n @include respond-above(md) {\r\n width: calc(50% - 15px);\r\n }\r\n }\r\n\r\n .articles__small-articles {\r\n .small-article {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//footer\r\n\r\n.footer--footer {\r\n background-color: #252729;\r\n border-top: 15px solid #333;\r\n margin-top: 20px;\r\n max-width: 100%;\r\n\r\n @include respond-above(md) {\r\n justify-content: start;\r\n }\r\n\r\n .container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n\r\n .logo,\r\n .footer-menu {\r\n padding: 15px;\r\n margin: 20px 0;\r\n }\r\n\r\n .logo {\r\n @include respond-below(md) {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n }\r\n\r\n .footer-menu {\r\n height: 100%;\r\n\r\n @include respond-above(md) {\r\n border-left: 1px solid #333;\r\n }\r\n\r\n #menu-container-1 {\r\n ul {\r\n list-style: none;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n @include respond-above(md) {\r\n flex-direction: row;\r\n }\r\n\r\n li {\r\n width: 100%;\r\n\r\n @include respond-above(md) {\r\n width: auto;\r\n }\r\n\r\n a {\r\n text-align: center;\r\n text-decoration: none;\r\n color: white;\r\n text-transform: uppercase;\r\n font-size: 12px;\r\n font-weight: 600;\r\n padding: 10px;\r\n display: block;\r\n position: relative;\r\n\r\n &::after {\r\n content: \"\";\r\n position: absolute;\r\n width: 100%;\r\n bottom: 0;\r\n right: 0;\r\n border-bottom: 2px solid #555;\r\n z-index: 0;\r\n }\r\n }\r\n }\r\n\r\n li.active {\r\n a {\r\n &::after {\r\n border-bottom: 2px solid $base-color;\r\n }\r\n }\r\n }\r\n\r\n li.parent {\r\n a {\r\n i {\r\n display: none;\r\n }\r\n }\r\n\r\n ul {\r\n display: none;\r\n }\r\n }\r\n\r\n #link-1 {\r\n display: none;\r\n }\r\n\r\n #link-2 {\r\n display: none;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//podstrony artykuly\r\n.left-section__subpages {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n @include respond-above(md) {\r\n width: calc(70% - 20px);\r\n margin-right: 20px;\r\n }\r\n\r\n .title {\r\n border-bottom: 2px solid $base-color;\r\n margin-bottom: 15px;\r\n padding-bottom: 0;\r\n\r\n .site-title {\r\n color: #fff;\r\n padding: 6px 12px;\r\n display: inline-block;\r\n // background-color: $base-color;\r\n font-size: 18px;\r\n margin: 0;\r\n\r\n &--business {\r\n background-color: $business-color;\r\n }\r\n\r\n &--culture {\r\n background-color: $culture-color;\r\n }\r\n\r\n &--moto {\r\n background-color: $moto-color;\r\n }\r\n\r\n &--journalism {\r\n background-color: $journalism-color;\r\n }\r\n\r\n &--chronicle {\r\n background-color: $base-color;\r\n }\r\n\r\n &--policy {\r\n background-color: $news-color;\r\n }\r\n\r\n &--sport {\r\n background-color: $sport-color;\r\n }\r\n\r\n &--news {\r\n background-color: $news-color;\r\n }\r\n }\r\n }\r\n\r\n .articles {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n\r\n .article-entry.first {\r\n width: 100%;\r\n padding: 0;\r\n margin-left: 0;\r\n }\r\n\r\n .article-entry {\r\n width: 100%;\r\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);\r\n margin-top: $main-spacing;\r\n\r\n @include respond-above(xs) {\r\n &:nth-child(odd) {\r\n margin-left: 10px;\r\n }\r\n }\r\n\r\n @include respond-above(xs) {\r\n width: calc(50% - 5px);\r\n }\r\n\r\n .main-image {\r\n img {\r\n width: 100%;\r\n height: auto;\r\n }\r\n }\r\n\r\n .article-entry__category {\r\n margin: 20px 20px 10px 20px;\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: flex-start;\r\n\r\n a {\r\n text-decoration: none;\r\n font-size: $small-font-size;\r\n color: white;\r\n padding: 2px 10px;\r\n margin: 0 5px 0 0;\r\n border-radius: 3px;\r\n display: inline-flex;\r\n background-color: $base-color;\r\n }\r\n }\r\n\r\n .article-title {\r\n margin: 0;\r\n padding: 0 $main-spacing;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n transition: color 0.3s;\r\n font-size: 22px;\r\n\r\n &:hover {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n\r\n .date-add {\r\n color: gray;\r\n font-size: $small-font-size;\r\n padding: $main-spacing;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n\r\n .entry {\r\n padding: 0 $main-spacing;\r\n\r\n p {\r\n strong {\r\n font-weight: 400 !important;\r\n }\r\n }\r\n }\r\n\r\n .more {\r\n text-decoration: none;\r\n padding: 3px 10px;\r\n background-color: $base-color;\r\n color: white;\r\n font-size: $small-font-size;\r\n border-radius: 3px;\r\n display: inline-block;\r\n margin: 0 20px 20px;\r\n transition: background-color 0.3s;\r\n\r\n &:hover {\r\n background-color: darken($color: $base-color, $amount: 30%);\r\n }\r\n }\r\n }\r\n\r\n .article-entry.first {\r\n width: 100%;\r\n padding: 0;\r\n margin-left: 0;\r\n }\r\n }\r\n\r\n //article\r\n .article {\r\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);\r\n margin-bottom: 20px;\r\n width: 100%;\r\n\r\n .main-image {\r\n margin-bottom: 40px;\r\n margin-top: 20px;\r\n\r\n img {\r\n width: 100%;\r\n height: auto;\r\n }\r\n }\r\n\r\n .article-title {\r\n margin: 0;\r\n padding: 20px 10px 0;\r\n font-size: 30px;\r\n font-family: \"Roboto\";\r\n font-weight: 600;\r\n\r\n @include respond-above(md) {\r\n font-size: 40px;\r\n }\r\n }\r\n\r\n .social-icons {\r\n display: flex;\r\n flex-direction: row;\r\n margin-top: 10px;\r\n padding-left: 10px;\r\n\r\n .social-icons-text {\r\n font-size: 15px;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n margin-right: 25px;\r\n margin-bottom: 0;\r\n line-height: 30px;\r\n text-align: center;\r\n }\r\n\r\n a {\r\n padding: 0 5px;\r\n\r\n img {\r\n width: 100%;\r\n height: auto;\r\n object-fit: cover;\r\n }\r\n }\r\n }\r\n\r\n .wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n padding: $small-spacing 0;\r\n\r\n .date-add,\r\n .views {\r\n font-size: 13px;\r\n color: #888888;\r\n padding: 0 10px;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n\r\n .article-tags {\r\n ul {\r\n display: flex;\r\n flex-wrap: wrap;\r\n list-style: none;\r\n font-size: $small-font-size;\r\n\r\n i {\r\n color: gray;\r\n margin-right: 5px;\r\n }\r\n\r\n li {\r\n padding-right: 3px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .text {\r\n padding: 0 10px;\r\n\r\n blockquote {\r\n border-left: 5px solid $base-color;\r\n padding-left: 25px;\r\n }\r\n\r\n p {\r\n img {\r\n width: 100%;\r\n height: auto;\r\n }\r\n }\r\n }\r\n\r\n h2 {\r\n font-size: 20px;\r\n }\r\n }\r\n}\r\n\r\n//pager\r\n\r\n.pager {\r\n margin-top: 20px;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n list-style: none;\r\n\r\n li {\r\n margin: 0 10px;\r\n padding: 5px 10px;\r\n border: 1px solid gray;\r\n background-color: transparent;\r\n transition: background-color 0.3s;\r\n\r\n &:hover {\r\n background-color: $base-color;\r\n\r\n a {\r\n color: white;\r\n }\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n }\r\n\r\n li:nth-child(5),\r\n li:nth-child(1) {\r\n display: none;\r\n }\r\n\r\n li:nth-child(3) {\r\n &:hover {\r\n background-color: transparent;\r\n }\r\n }\r\n}\r\n\r\n.articles {\r\n .article-list {\r\n border: 1px solid #eee;\r\n padding: 20px;\r\n margin-bottom: 20px;\r\n width: 100%;\r\n\r\n h3 {\r\n a {\r\n font-size: 1.25rem;\r\n color: $base-color;\r\n line-height: 1.5;\r\n }\r\n }\r\n\r\n .date-add {\r\n font-size: 0.9rem;\r\n color: rgba(0, 0, 0, 0.75);\r\n }\r\n }\r\n}\r\n\r\n/* NADPISYWANE KLASY*/\r\n\r\n//title\r\n.title {\r\n background-color: $gray-color;\r\n border-bottom: none !important;\r\n position: relative;\r\n height: 40px;\r\n\r\n span {\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n transform: translateY(-50%);\r\n height: 100% !important;\r\n font-size: 14px !important;\r\n text-align: center;\r\n line-height: 40px;\r\n padding: 0 12px !important;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n }\r\n}\r\n\r\n//articles__big-article\r\n.articles__big-article {\r\n position: relative;\r\n box-shadow: none !important;\r\n border-bottom: 3px solid $gray-color;\r\n\r\n .article__category {\r\n position: absolute;\r\n top: 0;\r\n left: -10px;\r\n border-radius: 0 !important;\r\n transition: background-color 0.3s;\r\n\r\n &:hover {\r\n background-color: $gray-color !important;\r\n }\r\n }\r\n\r\n #article-main {\r\n width: 80%;\r\n margin: 0 auto;\r\n margin-top: -40px;\r\n padding: 0 !important;\r\n\r\n .article-title {\r\n background-color: white;\r\n padding: 15px 20px 0 20px;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n height: 74px;\r\n font-size: 16px;\r\n font-weight: 600;\r\n line-height: 1.3;\r\n\r\n a {\r\n font-family: \"Roboto\";\r\n }\r\n }\r\n\r\n .date-add {\r\n padding: 0 20px;\r\n }\r\n\r\n .entry {\r\n padding: 0 20px;\r\n }\r\n }\r\n}\r\n\r\n//entry\r\n.articles__big-article {\r\n #article-main {\r\n .entry {\r\n padding-bottom: 20px;\r\n\r\n p {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 4;\r\n overflow: hidden;\r\n font-size: 16px;\r\n }\r\n }\r\n }\r\n}\r\n\r\n//chronicle last post\r\n// .chronicle {\r\n// .articles--chronicle {\r\n// .small-article:nth-last-child(1) {\r\n// display: none;\r\n// }\r\n// }\r\n// }\r\n\r\n//li parent\r\n\r\nli.parent {\r\n ul {\r\n background-color: lighten($color: #19232d, $amount: 5%) !important;\r\n }\r\n}\r\n\r\n//popular-post\r\n.popular-post-section {\r\n .news-list {\r\n list-style: none;\r\n\r\n li {\r\n padding-bottom: 15px;\r\n display: grid;\r\n grid-template-columns: 80px 1fr;\r\n grid-template-areas:\r\n \"img txt\"\r\n \"img date\";\r\n column-gap: 20px;\r\n row-gap: 10px;\r\n\r\n .date-add {\r\n grid-area: date;\r\n color: #888888;\r\n font-size: 12px;\r\n\r\n i {\r\n margin-right: 5px;\r\n }\r\n }\r\n\r\n .news-list-img {\r\n grid-area: img;\r\n width: 100%;\r\n height: 80px;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n }\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n font-family: \"Roboto\";\r\n font-size: 15px;\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 2;\r\n overflow: hidden;\r\n transition: color 0.3s;\r\n grid-area: txt;\r\n\r\n &:hover {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .title--sport {\r\n span {\r\n background-color: $sport-color !important;\r\n }\r\n }\r\n\r\n .title--journalism {\r\n span {\r\n background-color: $journalism-color !important;\r\n }\r\n }\r\n\r\n .title--policy {\r\n span {\r\n background-color: $news-color !important;\r\n }\r\n }\r\n\r\n .title--moto {\r\n span {\r\n background-color: $moto-color;\r\n }\r\n }\r\n\r\n .title--culture {\r\n span {\r\n background-color: $culture-color;\r\n }\r\n }\r\n\r\n .title--business {\r\n span {\r\n background-color: $business-color;\r\n }\r\n }\r\n}\r\n\r\n//form-group--newsletter\r\n.form-group--newsletter {\r\n display: grid;\r\n grid-template-columns: 1fr 50px;\r\n grid-template-rows: 1fr 1fr;\r\n grid-template-areas:\r\n \"title title\"\r\n \"email btn\";\r\n border: 1px solid #e7e8e8;\r\n padding: 20px 20px 30px 20px;\r\n background-color: #f2f2f2;\r\n\r\n label {\r\n grid-area: title;\r\n font-size: 13px;\r\n }\r\n\r\n .form-control {\r\n grid-area: email;\r\n display: table-cell;\r\n width: 100%;\r\n margin-bottom: 0;\r\n background: #333946;\r\n border: none;\r\n color: #f2f2f2;\r\n vertical-align: middle;\r\n outline: 0;\r\n padding: 12px 15px;\r\n margin: 0;\r\n font-family: \"roboto\";\r\n font-size: 14px;\r\n border-radius: 0;\r\n height: 44px;\r\n\r\n &::placeholder {\r\n color: white;\r\n }\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n &:active {\r\n outline: none;\r\n }\r\n }\r\n\r\n .form-group--button {\r\n grid-area: btn;\r\n background-color: #333946;\r\n padding: 10px;\r\n position: relative;\r\n transition: background-color 0.3s;\r\n border-radius: 0;\r\n\r\n &:hover {\r\n background-color: $base-color;\r\n }\r\n\r\n i {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n color: white;\r\n }\r\n }\r\n}\r\n\r\n//search-form\r\n.header__navigation {\r\n #menu-container-1 {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n .search--button {\r\n background-color: transparent;\r\n border: none;\r\n\r\n i {\r\n font-size: 19px;\r\n color: white;\r\n cursor: pointer;\r\n padding: 10px;\r\n }\r\n }\r\n }\r\n}\r\n\r\n#search-form {\r\n background-color: white;\r\n\r\n form {\r\n display: flex;\r\n justify-content: flex-end;\r\n height: 50px;\r\n // margin-top: 1px;\r\n\r\n // @include respond-above(lg) {\r\n // margin-top: 0px;\r\n // }\r\n\r\n input {\r\n background-color: lighten($color: #333946, $amount: 5%);\r\n border: none;\r\n color: white;\r\n font-size: 14px;\r\n padding: 0 12px;\r\n height: 0;\r\n transition: height 0.3s;\r\n width: calc(30% - 5px);\r\n }\r\n\r\n input:focus {\r\n border: none;\r\n outline: none;\r\n }\r\n\r\n input::placeholder {\r\n color: white;\r\n }\r\n\r\n .search-input--active {\r\n height: 100%;\r\n padding: 8px 12px;\r\n }\r\n }\r\n}\r\n\r\n//navigation-mobile\r\n\r\n.header__navigation {\r\n position: relative;\r\n width: 100%;\r\n height: 50px;\r\n\r\n #menu-container-1 {\r\n @include respond-above(md) {\r\n height: 50px !important;\r\n\r\n ul {\r\n height: 100%;\r\n\r\n li {\r\n height: 100%;\r\n\r\n a {\r\n line-height: 34px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n #main-menu-btn {\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n #main-menu-btn.active {\r\n position: fixed;\r\n top: 5%;\r\n left: 90%;\r\n\r\n i {\r\n font-size: 24px !important;\r\n }\r\n }\r\n}\r\n\r\n#main-menu.visible {\r\n #search-form {\r\n display: none;\r\n }\r\n\r\n #menu-container-1 {\r\n .search--button {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\n//search-results\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n }\r\n\r\n li {\r\n display: grid;\r\n grid-template-columns: 100px 1fr;\r\n grid-template-areas: \"img txt\";\r\n gap: 15px;\r\n margin-bottom: 20px;\r\n\r\n @include respond-above(xs) {\r\n grid-template-columns: 250px 1fr;\r\n grid-template-areas: \"img txt\";\r\n gap: 20px;\r\n }\r\n\r\n .search-results-img {\r\n grid-area: img;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n }\r\n }\r\n\r\n .article-title {\r\n grid-area: txt;\r\n line-height: 0.6;\r\n\r\n @include respond-above(xs) {\r\n line-height: 1;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n transition: color 0.3s;\r\n font-size: 14px;\r\n\r\n @include respond-above(xs) {\r\n font-size: 18px;\r\n }\r\n\r\n &:hover {\r\n color: $base-color;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//image-source\r\n.image-source {\r\n padding: 0 10px;\r\n margin-bottom: 10px;\r\n font-style: italic;\r\n\r\n span {\r\n font-weight: 600;\r\n font-style: normal;\r\n }\r\n}\r\n\r\n//author\r\n\r\n.author {\r\n padding: 20px;\r\n background-color: #f8f8f8;\r\n\r\n @include respond-below(sm) {\r\n .author-row {\r\n justify-content: center;\r\n }\r\n }\r\n\r\n .author-img {\r\n width: 100px;\r\n height: 100px;\r\n\r\n img {\r\n height: 100%;\r\n width: 100%;\r\n object-fit: cover;\r\n }\r\n }\r\n\r\n .author-description {\r\n .author-name {\r\n color: $base-color;\r\n font-weight: 600;\r\n margin-bottom: 10px;\r\n display: block;\r\n\r\n @include respond-below(sm) {\r\n margin-top: 10px;\r\n text-align: center;\r\n }\r\n }\r\n\r\n .author-text {\r\n font-size: 14px;\r\n\r\n @include respond-below(sm) {\r\n text-align: center;\r\n }\r\n }\r\n }\r\n}\r\n\r\n//navigation li\r\n\r\n#menu-container-1 {\r\n ul {\r\n li {\r\n ul {\r\n li {\r\n background-color: #22303d !important;\r\n\r\n &:hover {\r\n background-color: $base-color !important;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//colors\r\n.aktualności,\r\n.bukowno,\r\n.jaroszowiec,\r\n.klucze,\r\n.łobzów,\r\n.olkusz,\r\n.rabsztyn,\r\n.wolbrom {\r\n background-color: $news-color !important;\r\n}\r\n\r\n.biznes {\r\n background-color: $business-color !important;\r\n}\r\n\r\n.kultura {\r\n background-color: $culture-color !important;\r\n}\r\n\r\n.motoryzacja {\r\n background-color: $moto-color !important;\r\n}\r\n\r\n.publicystyka {\r\n background-color: $journalism-color !important;\r\n}\r\n\r\n.policja {\r\n background-color: $base-color !important;\r\n}\r\n\r\n.polityka {\r\n background-color: $news-color !important;\r\n}\r\n\r\n.sport,\r\n.piłkanożna,\r\n.piłkaręczna,\r\n.fitnessizdrowie,\r\n.sportywalki {\r\n background-color: $sport-color !important;\r\n}\r\n\r\n.table-of-contents {\r\n margin: 20px 20px 30px 20px;\r\n box-shadow: 0 0px 3px 0 rgba(0, 0, 0, 0.1);\r\n border-radius: 5px;\r\n padding: 5px;\r\n\r\n .title {\r\n background-color: transparent;\r\n color: black;\r\n font-weight: 600;\r\n margin-bottom: 5px;\r\n\r\n span {\r\n font-size: 18px !important;\r\n text-transform: initial;\r\n font-weight: 400;\r\n }\r\n }\r\n\r\n ol {\r\n li {\r\n &:before {\r\n content: counters(item, \".\") \". \";\r\n counter-increment: item;\r\n }\r\n }\r\n }\r\n\r\n ul {\r\n li {\r\n &:before {\r\n content: counters(item, \".\") \". \";\r\n counter-increment: item;\r\n }\r\n }\r\n }\r\n\r\n ol,\r\n ul {\r\n list-style: none;\r\n counter-reset: item;\r\n padding-left: 20px;\r\n\r\n li {\r\n position: relative;\r\n\r\n a {\r\n // color: black;\r\n color: #269eae;\r\n // text-decoration: none;\r\n text-decoration: underline;\r\n\r\n &:hover {\r\n // color: $base-color;\r\n color: #1e7e8b;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.main {\r\n .left-section {\r\n .kitchen.articles {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .articles__big-article {\r\n display: flex;\r\n width: 100%;\r\n border-bottom: none;\r\n\r\n @include respond-below(xs) {\r\n flex-direction: column;\r\n }\r\n\r\n img {\r\n width: 60%;\r\n\r\n @include respond-below(xs) {\r\n width: 100%;\r\n }\r\n }\r\n\r\n #article-main {\r\n width: 40%;\r\n margin-top: 0;\r\n border-bottom: 3px solid $gray-color;\r\n border-top: 3px solid $gray-color;\r\n\r\n @include respond-below(xs) {\r\n border-top: none;\r\n width: 100%;\r\n // margin: 0 auto;\r\n // margin-top: -40px;\r\n // padding: 0 !important;\r\n }\r\n }\r\n }\r\n\r\n .articles__small-articles {\r\n display: flex;\r\n width: 100%;\r\n gap: 30px;\r\n\r\n @include respond-below(xs) {\r\n flex-wrap: wrap;\r\n }\r\n\r\n .small-article {\r\n display: flex;\r\n flex-direction: column;\r\n width: 25%;\r\n margin-top: 0;\r\n\r\n @include respond-below(xs) {\r\n width: calc(50% - 15px);\r\n }\r\n\r\n &__img {\r\n width: 100%;\r\n }\r\n\r\n #article-main {\r\n margin-top: 10px;\r\n width: 100%;\r\n flex-direction: column-reverse;\r\n\r\n .article-title {\r\n height: 60px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n//gallery\r\n.gallery {\r\n padding: $main-spacing;\r\n\r\n .gallery-title {\r\n font-size: 20px;\r\n font-weight: 600;\r\n }\r\n\r\n .gallery-list {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n gap: $small-spacing;\r\n\r\n .gallery-list-item {\r\n width: calc(25% - 7.5px);\r\n height: 160px;\r\n margin: 0;\r\n padding: 0;\r\n\r\n a {\r\n width: 100%;\r\n height: 100%;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n }\r\n }\r\n }\r\n }\r\n}","$breakpoints: (xs: 576px,\r\n sm: 768px,\r\n md: 992px,\r\n lg: 1200px);\r\n\r\n@mixin respond-above($breakpoint) {\r\n @if map-has-key($breakpoints, $breakpoint) {\r\n $breakpoint-value: map-get($breakpoints, $breakpoint);\r\n\r\n @media (min-width: $breakpoint-value) {\r\n @content;\r\n }\r\n }\r\n\r\n @else {\r\n @warn 'Invalid breakpoint: #{$breakpoint}.';\r\n }\r\n}\r\n\r\n@mixin respond-below($breakpoint) {\r\n @if map-has-key($breakpoints, $breakpoint) {\r\n $breakpoint-value: map-get($breakpoints, $breakpoint);\r\n\r\n @media (max-width: ($breakpoint-value - 1)) {\r\n @content;\r\n }\r\n }\r\n\r\n @else {\r\n @warn 'Invalid breakpoint: #{$breakpoint}.';\r\n }\r\n}\r\n\r\n@mixin respond-between($lower, $upper) {\r\n @if map-has-key($breakpoints, $lower) and map-has-key($breakpoints, $upper) {\r\n $lower-breakpoint: map-get($breakpoints, $lower);\r\n $upper-breakpoint: map-get($breakpoints, $upper);\r\n\r\n @media (min-width: $lower-breakpoint) and (max-width: ($upper-breakpoint - 1)) {\r\n @content;\r\n }\r\n }\r\n\r\n @else {\r\n @if (map-has-key($breakpoints, $lower)==false) {\r\n @warn 'Your lower breakpoint was invalid: #{$lower}.';\r\n }\r\n\r\n @if (map-has-key($breakpoints, $upper)==false) {\r\n @warn 'Your upper breakpoint was invalid: #{$upper}.';\r\n }\r\n }\r\n}\r\n\r\n@mixin border-radius($px: 0) {\r\n -webkit-border-radius: $px;\r\n -moz-border-radius: $px;\r\n border-radius: $px;\r\n}\r\n\r\n@mixin box-shadow($value) {\r\n -webkit-box-shadow: $value;\r\n -moz-box-shadow: $value;\r\n box-shadow: $value;\r\n}\r\n\r\n@mixin transition($element: all, $time: .5s, $option: ease) {\r\n -webkit-transition: $element $time $option;\r\n transition: $element $time $option;\r\n}\r\n\r\n@mixin opacity($value) {\r\n $IEValue: $value*100;\r\n opacity: $value;\r\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=\"+$IEValue+\")\";\r\n filter: alpha(opacity=$IEValue);\r\n}\r\n\r\n@mixin flexbox() {\r\n display: -webkit-box;\r\n display: -moz-box;\r\n display: -ms-flexbox;\r\n display: -webkit-flex;\r\n display: flex;\r\n}\r\n\r\n@mixin flex($values) {\r\n -webkit-box-flex: $values;\r\n -moz-box-flex: $values;\r\n -webkit-flex: $values;\r\n -ms-flex: $values;\r\n flex: $values;\r\n}\r\n\r\n@mixin flex-direction($direction) {\r\n -webkit-flex-direction: $direction;\r\n -moz-flex-direction: $direction;\r\n -ms-flex-direction: $direction;\r\n flex-direction: $direction;\r\n}\r\n\r\n@mixin flex-wrap($wrap) {\r\n -webkit-flex-wrap: $wrap;\r\n -moz-flex-wrap: $wrap;\r\n -ms-flex-wrap: $wrap;\r\n flex-wrap: $wrap;\r\n}\r\n\r\n@mixin flex-flow($flow) {\r\n -webkit-flex-flow: $flow;\r\n -moz-flex-flow: $flow;\r\n -ms-flex-flow: $flow;\r\n flex-flow: $flow;\r\n}\r\n\r\n@mixin order($val) {\r\n -webkit-box-ordinal-group: $val;\r\n -moz-box-ordinal-group: $val;\r\n -ms-flex-order: $val;\r\n -webkit-order: $val;\r\n order: $val;\r\n}\r\n\r\n@mixin flex-grow($grow) {\r\n -webkit-flex-grow: $grow;\r\n -moz-flex-grow: $grow;\r\n -ms-flex-grow: $grow;\r\n flex-grow: $grow;\r\n}\r\n\r\n@mixin flex-shrink($shrink) {\r\n -webkit-flex-shrink: $shrink;\r\n -moz-flex-shrink: $shrink;\r\n -ms-flex-shrink: $shrink;\r\n flex-shrink: $shrink;\r\n}\r\n\r\n@mixin flex-basis($width) {\r\n -webkit-flex-basis: $width;\r\n -moz-flex-basis: $width;\r\n -ms-flex-basis: $width;\r\n flex-basis: $width;\r\n}\r\n\r\n@mixin justify-content($justify) {\r\n -webkit-justify-content: $justify;\r\n -moz-justify-content: $justify;\r\n -ms-justify-content: $justify;\r\n justify-content: $justify;\r\n -ms-flex-pack: $justify;\r\n}\r\n\r\n@mixin align-content($align) {\r\n -webkit-align-content: $align;\r\n -moz-align-content: $align;\r\n -ms-align-content: $align;\r\n align-content: $align;\r\n}\r\n\r\n@mixin align-items($align) {\r\n -webkit-align-items: $align;\r\n -moz-align-items: $align;\r\n -ms-align-items: $align;\r\n align-items: $align;\r\n}\r\n\r\n@mixin align-self($align) {\r\n -webkit-align-self: $align;\r\n -moz-align-self: $align;\r\n -ms-align-self: $align;\r\n align-self: $align;\r\n}"]} \ No newline at end of file diff --git a/layout/style-scss/_mixins.scss b/layout/style-scss/_mixins.scss new file mode 100644 index 0000000..0eecc15 --- /dev/null +++ b/layout/style-scss/_mixins.scss @@ -0,0 +1,172 @@ +$breakpoints: (xs: 576px, + sm: 768px, + md: 992px, + lg: 1200px); + +@mixin respond-above($breakpoint) { + @if map-has-key($breakpoints, $breakpoint) { + $breakpoint-value: map-get($breakpoints, $breakpoint); + + @media (min-width: $breakpoint-value) { + @content; + } + } + + @else { + @warn 'Invalid breakpoint: #{$breakpoint}.'; + } +} + +@mixin respond-below($breakpoint) { + @if map-has-key($breakpoints, $breakpoint) { + $breakpoint-value: map-get($breakpoints, $breakpoint); + + @media (max-width: ($breakpoint-value - 1)) { + @content; + } + } + + @else { + @warn 'Invalid breakpoint: #{$breakpoint}.'; + } +} + +@mixin respond-between($lower, $upper) { + @if map-has-key($breakpoints, $lower) and map-has-key($breakpoints, $upper) { + $lower-breakpoint: map-get($breakpoints, $lower); + $upper-breakpoint: map-get($breakpoints, $upper); + + @media (min-width: $lower-breakpoint) and (max-width: ($upper-breakpoint - 1)) { + @content; + } + } + + @else { + @if (map-has-key($breakpoints, $lower)==false) { + @warn 'Your lower breakpoint was invalid: #{$lower}.'; + } + + @if (map-has-key($breakpoints, $upper)==false) { + @warn 'Your upper breakpoint was invalid: #{$upper}.'; + } + } +} + +@mixin border-radius($px: 0) { + -webkit-border-radius: $px; + -moz-border-radius: $px; + border-radius: $px; +} + +@mixin box-shadow($value) { + -webkit-box-shadow: $value; + -moz-box-shadow: $value; + box-shadow: $value; +} + +@mixin transition($element: all, $time: .5s, $option: ease) { + -webkit-transition: $element $time $option; + transition: $element $time $option; +} + +@mixin opacity($value) { + $IEValue: $value*100; + opacity: $value; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity="+$IEValue+")"; + filter: alpha(opacity=$IEValue); +} + +@mixin flexbox() { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; +} + +@mixin flex($values) { + -webkit-box-flex: $values; + -moz-box-flex: $values; + -webkit-flex: $values; + -ms-flex: $values; + flex: $values; +} + +@mixin flex-direction($direction) { + -webkit-flex-direction: $direction; + -moz-flex-direction: $direction; + -ms-flex-direction: $direction; + flex-direction: $direction; +} + +@mixin flex-wrap($wrap) { + -webkit-flex-wrap: $wrap; + -moz-flex-wrap: $wrap; + -ms-flex-wrap: $wrap; + flex-wrap: $wrap; +} + +@mixin flex-flow($flow) { + -webkit-flex-flow: $flow; + -moz-flex-flow: $flow; + -ms-flex-flow: $flow; + flex-flow: $flow; +} + +@mixin order($val) { + -webkit-box-ordinal-group: $val; + -moz-box-ordinal-group: $val; + -ms-flex-order: $val; + -webkit-order: $val; + order: $val; +} + +@mixin flex-grow($grow) { + -webkit-flex-grow: $grow; + -moz-flex-grow: $grow; + -ms-flex-grow: $grow; + flex-grow: $grow; +} + +@mixin flex-shrink($shrink) { + -webkit-flex-shrink: $shrink; + -moz-flex-shrink: $shrink; + -ms-flex-shrink: $shrink; + flex-shrink: $shrink; +} + +@mixin flex-basis($width) { + -webkit-flex-basis: $width; + -moz-flex-basis: $width; + -ms-flex-basis: $width; + flex-basis: $width; +} + +@mixin justify-content($justify) { + -webkit-justify-content: $justify; + -moz-justify-content: $justify; + -ms-justify-content: $justify; + justify-content: $justify; + -ms-flex-pack: $justify; +} + +@mixin align-content($align) { + -webkit-align-content: $align; + -moz-align-content: $align; + -ms-align-content: $align; + align-content: $align; +} + +@mixin align-items($align) { + -webkit-align-items: $align; + -moz-align-items: $align; + -ms-align-items: $align; + align-items: $align; +} + +@mixin align-self($align) { + -webkit-align-self: $align; + -moz-align-self: $align; + -ms-align-self: $align; + align-self: $align; +} \ No newline at end of file diff --git a/layout/style-scss/mottcoffe.scss b/layout/style-scss/mottcoffe.scss new file mode 100644 index 0000000..b29ffdf --- /dev/null +++ b/layout/style-scss/mottcoffe.scss @@ -0,0 +1,3486 @@ +//promocja w nagłówku +$cBrown: #42281d; + +body { + line-height: 1.5; + font-size: 16px; + font-family: 'Poppins', sans-serif; +} + +body>div.wrap.rwd { + width: 100% !important; +} + +.categorydesc { + font-size: 15px; +} + +#promocja { + height: 60px; + line-height: 60px; + font-size: 22px; + font-weight: bold; + color: #1DA2A3; +} + +#promocja1 { + height: 30px; + line-height: 30px; + font-size: 29px; + font-weight: bold; + color: #1DA2A3; + letter-spacing: 5px; +} + +//ukrycie widoczoności poza ekranem +#box_custom33 { + overflow: hidden; +} + + +//wojtek po awarii +#aboutcoffee { + display: block; +} + +@media screen and (min-width: 768px) and (max-width: 768px) { + .container { + width: auto !important; + } +} + +.js__search-mobile-btn { + display: none; +} + +#box_custom42 { + display: none !important; +} + +/* #mobile-menu-display { + background-image: url("/skins/user/rwd_shoper_4/images/user/menu_bg.png"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + background-position: center center; +} + +*/ +.slider-wrap { + text-align: center !important; + width: auto !important; + height: auto !important; + padding-bottom: 10px +} + +#custom-menu-2 { + margin: 5px; + text-align: center; + font: normal normal 500 18px/50px 'Poppins'; + letter-spacing: 1.8px; + color: #FFFFFF !important; + text-transform: uppercase; + opacity: 1; + text-decoration: none; +} + +#custom-mobile-menu1 { + background-image: url("/skins/user/rwd_shoper_4/images/user/menu_bg.png"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + background-position: top; +} + +.swiper-button-next { + right: 5% !important; +} + +.swiper-button-prev { + left: 5% !important; +} + +.swiper-pagination-bullet-active { + background: #ff913b !important; +} + +#aboutcoffee:before, +#our-coffeehouses-desktop:before, +#news-tablet:before, +#news-mobile:before, +#section2-tablet:before { + height: 150px; + display: block; + content: ""; +} + +.row-section1-1:after { + height: 100px; + display: block; + content: ""; +} + +.placeholderIcon:hover { + cursor: pointer; +} + +footer { + margin-bottom: 0 !important; + padding-bottom: 0 !important; + color: white !important; + background-color: #42281d; +} + +footer a { + color: white !important; +} + +footer p { + margin-bottom: 15px !important; +} + +footer .innerfooter ul.overall>li { + border-top: none !important; +} + +footer .innerfooter ul li.head { + background-color: #42281d; +} + +.nav-2 {} + +.row-2 { + position: fixed; + z-index: 10 !important; + width: 100% !important; +} + +/* #box_custom35 { + margin-top: -100px !important; +} +.links li { + padding-right: 20px !important; +} +.links span { + font: normal normal 600 15px/23px 'Poppins' !important; + color: #2f120e; + text-transform: uppercase !important; +}*/ +.count { + color: #2f120e !important; +} + +.empty-basket { + background: transparent !important; + border: none !important; +} + +header { + display: none; +} + +.search__input-area, +.search__input { + background-color: transparent !important; +} + +.search__input { + color: #2f120e !important; +} + +.search__input-area { + border: 0 !important; + padding-left: 0 !important; +} + +.js__search-submit-btn { + background-color: transparent !important; + border: none !important; + box-shadow: none !important; +} + +.search__input-area-item { + color: #2f120e !important; +} + +.search__input-area-item ::placeholder { + color: #2f120e !important; +} + +.search-focused, +.search__input-area { + box-shadow: none !important; +} + +@media screen and (max-width: 768px) { + + //wojtek dla slidera + #section1-mobile>div.page-row.row-section1-1>div { + width: 100vw; + } + + //wojtek dla slidera + #p-section1-1 { + width: 100%; + text-align: center; + } + + #section1-mobile>div:nth-child(3)>div { + width: 100%; + text-align: center; + } + + #footer-mobile>div:nth-child(5)>div.col-8>p { + font-size: 11px; + } + + #footer-mobile>div.page-row.row-border>div>p { + font-size: 12px; + } + + .swiper-pagination { + position: relative !important; + } + + //nazwa firmy nad gwiazdkami + #box_productfull>div.innerbox.product-main-box>div>div>div:nth-child(2)>div.bottomborder.row>div.productdetails-more-details.clearfix>div { + width: auto; + } + + //do koszyka + .rwd #box_productfull .basket .form-basket .quantity_wrap { + width: 25%; + } + + .rwd #box_productfull .basket .form-basket .button_wrap { + width: 73%; + } + + #box_productfull .basket .form-basket .button_wrap { + min-width: 73%; + } + + //iphon5 ramka za duża przy zakupach + .basket-step-border { + padding: 5px; + } + + // inpost_paczkomaty czesc zakupowa + .inpost_paczkomaty>label { + width: 70vw; + line-height: 18px; + font-weight: 900; + } + + div.inpost_paczkomaty>span { + margin-bottom: 30px; + margin-left: 5px; + } + + // koniec wojtek + html { + scroll-behavior: smooth; + } + + #section1-mobile:before { + // wojtek wcześnej + //height: 150px; + height: 150px; + display: block; + content: ""; + } + + .row-1, + .row-2, + .section1-tablet, + .products-tablet, + .delivery-tablet, + .news-tablet, + .section-2-tablet, + .footer-tablet { + display: none !important; + } + + /*.search__container { + clear: both; + min-width: none !important; + margin-top: 15px; + position: relative !important; + top: -140px !important; + left: -35% !important; + width: 33% !important; + }*/ + .top { + margin: 0; + } + + .rwd header { + padding: 0; + } + + .row-1 { + display: none; + } + + html { + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; + + } + + .header { + background-image: url("/skins/user/rwd_shoper_4/images/user/header.webp"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + background-position: center center; + height: 100vh; + } + + #box_custom35 { + margin: 0 !important; + } + + .row-mobile { + margin-left: 0; + margin-right: 0 !important; + position: fixed; + width: 100%; + z-index: 10; + } + + #mott-logo { + margin-bottom: 50px; + } + + #icon-close-image { + width: 40px; + } + + #img-logo { + width: 125%; + margin-top: 25px; + margin-left: 10px; + } + + .row-mobile a { + margin: 5px; + margin: 0 3% 0 3%; + } + + .nav-mobile { + position: absolute; + right: 0; + top: 0; + } + + .nav-mobile a { + float: none; + display: block; + text-align: left; + } + + .row-3 { + margin-left: auto; + } + + #text-1 { + padding-top: 50px; + } + + #text-1 p { + padding: 0; + margin: 0; + } + + #header-div-txt-2 { + padding-left: 0; + margin-top: 270px; + } + + #p-small-header { + color: #ffffff; + text-align: left; + font: normal normal 600 16px/31px Poppins; + letter-spacing: 0px; + color: #FFFFFF; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + opacity: 1; + margin: 0; + } + + #p-header-1 { + font-family: Poppins; + text-align: left; + font-size: 29px; + line-height: 32px; + font-weight: 600; + letter-spacing: 0px; + color: #ffffff; + margin: 0; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + } + + #p-header-2 { + font-family: Poppins; + text-align: left; + letter-spacing: 0px; + color: #ffffff; + font-size: 30px; + line-height: 32px; + font-weight: 500; + margin-bottom: 10px !important; + } + + #p-header-3 { + font: normal normal normal 14px/17px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + + } + + /* SECTION1 */ + .section1-tablet { + display: none; + + } + + #background1 { + padding-top: 30px; + background-image: url("/skins/user/rwd_shoper_4/images/user/background.svg"); + background-size: cover; + background-repeat: no-repeat; + } + + #elipse1 { + position: absolute; + z-index: 0; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); + } + + #elipse2 { + position: absolute; + z-index: 0; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); + } + + .row-section1-1 { + margin-bottom: -30px; + width: 100%; + margin: 0 + } + + .swiper-slide { + width: 100% !important; + } + + .p-slide-title { + font-family: "Poppins"; + letter-spacing: 0px; + color: #000000; + opacity: 1; + font-size: 30px; + font-weight: 700; + line-height: 32px; + } + + .p-slide-address { + margin-top: 30px !important; + letter-spacing: 1.1px; + text-transform: uppercase; + color: #070707; + opacity: 1; + font-family: 'Poppins'; + font-size: 16px; + line-height: 20px; + font-weight: 700; + } + + .p-slide-description { + letter-spacing: 1.1px; + color: #070707; + text-transform: uppercase; + opacity: 1; + text-align: center; + font-size: 11px; + line-height: 14px; + font-weight: 600; + } + + .swiper-pagination { + bottom: 55px !important; + padding-bottom: 20px; + } + + .swiper-pagination-bullet { + --swiper-theme-color: #FFC400 !important; + } + + .swiper-slide { + background-color: #ffa231; + } + + #section1-row-12 { + margin-bottom: 20px; + } + + .row-section1-2 { + width: 100%; + margin-right: 0; + } + + #div-coffeehouse { + text-align: right; + padding-right: 0; + height: 50px; + } + + #coffeehouse-mobile { + position: relative; + z-index: 2; + width: 100%; + top: -50px; + left: -5%; + height: 250px; + content: url("/skins/user/rwd_shoper_4/images/user/coffeehouse.png"); + } + + .row-section1-3 { + padding-bottom: 30px; + } + + #p-section1-1 { + position: relative; + margin-top: 22px; + margin-left: 5% !important; + font: normal normal 700 30px/32px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #p-section1-2 { + font: normal normal normal 14px/17px 'Poppins'; + text-align: left; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: 20px 0 20px 0; + } + + #background2 { + padding-top: 140px; + } + + .row-section1-3 { + margin: auto; + width: 100%; + } + + #img-1 { + width: 79%; + position: absolute; + top: 1600px; + right: 0%; + } + + /* PRODUCTS */ + .row-products-1 { + margin-top: 50px; + } + + .products-p-1 { + font: normal normal 500 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + .products-p-2 { + margin-top: 0 !important; + margin-bottom: 45px !important; + text-align: center; + font: normal normal bold 32px/36px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .productname { + text-align: center; + font: normal normal bold 32px/36px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .productnamewrap { + height: auto !important; + } + + .price em { + text-align: center; + font: normal normal bold 20px/30px Poppins; + font-size: 20px !important; + letter-spacing: 0px; + opacity: 1; + } + + #products-p-1 { + font: normal normal 600 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + #products-p-2 { + text-align: center; + font: normal normal bold 20px/30px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-3 { + text-align: center; + font: normal normal normal 14px/17px 'Poppins'; + letter-spacing: 0px; + color: #848484; + opacity: 1; + margin: 0 5% 15px 5%; + } + + #products-p-4 { + text-align: center; + font: normal normal bold 30px/32px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .products-image { + margin: auto + } + + #products-p-price { + text-align: center; + font: normal normal bold 20px/30px Poppins; + letter-spacing: 0px; + color: #E01643; + opacity: 1; + } + + /* DELIVERY ROW */ + .row-delivery { + padding: 25px 0 25px 0; + background-color: #FFA231 !important; + } + + #delivery-icon-mobile { + content: url("/skins/user/rwd_shoper_4/images/user/delivery-mobile.svg"); + } + + .row-delivery p { + font: normal normal 700 18px/24px Poppins; + margin: auto; + text-align: left; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + .row-delivery img { + width: 110%; + } + + /* NEWS */ + .row-news-1 {} + + .mb-3 { + margin: 25px; + box-shadow: 0px 3px 30px #00000029; + } + + #news-mobile-1 { + content: url("/skins/user/rwd_shoper_4/images/user/news1.png"); + } + + #news-p1 { + text-align: left; + font: normal normal 600 12px/15px 'Poppins'; + letter-spacing: 1.2px; + color: #848484; + opacity: 1; + } + + #news-p2 { + margin-top: 20px !important; + text-align: left; + font: normal normal bold 20px/24px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #news-p4 { + font: normal normal 600 12px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #FFC400; + text-transform: uppercase; + opacity: 1; + text-align: right; + } + + /* SECTION-2 */ + #background3 { + margin: auto; + background-image: url("../style/mobile/background3.svg"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + text-align: center; + padding-bottom: 15px; + } + + #costarica2 { + margin: auto; + background-image: url("../images/user/costarica2.png"); + background-size: cover; + background-repeat: no-repeat; + padding-top: 60%; + } + + /* FOOTER */ + .footer { + background-color: #3D241A; + margin: 0 !important; + } + + .footer div { + margin: auto; + } + + .footer-p1 { + text-align: left; + font: normal normal bold 24px/27px Poppins; + letter-spacing: 0px; + color: #FFFFFF; + opacity: 1; + margin: 0 !important; + } + + .footer-p2 { + text-align: left; + font: normal normal 600 15px/18px 'Poppins'; + letter-spacing: 1.5px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + line-height: 25px; + margin: 0 !important; + } + + .footer-p3 { + font: normal normal normal 12px/15px 'Poppins'; + letter-spacing: 1.2px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + } + + .footer-p3-phone { + font: normal normal bold 18px/25px 'Poppins'; + letter-spacing: 1.2px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + margin: 0 !important; + } + + .footer-p4 { + text-align: center; + font: normal normal normal 12px/25px Poppins; + letter-spacing: 0px; + color: #fff; + opacity: 1; + margin: 0 !important; + } + + #icon-cup { + content: url("/skins/user/rwd_shoper_4/images/user/cup.svg"); + max-width: 100% !important; + } + + #icon-store { + content: url("/skins/user/rwd_shoper_4/images/user/store.svg"); + max-width: 100% !important; + } + + #icon-phone { + content: url("/skins/user/rwd_shoper_4/images/user/phone.svg"); + max-width: 100% !important; + } + + #icon-mail { + content: url("/skins/user/rwd_shoper_4/images/user/mail.svg"); + max-width: 100% !important; + } + + .row-border { + border-top: 1px solid #B07985; + padding-bottom: 25px; + } + + /* BUTTONS */ + #button1 { + margin-top: 20px; + border-width: 0px; + border-radius: 37px; + box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.16); + background-color: #FFA231; + width: auto; + height: 50px; + text-align: center; + font-family: 'Poppins'; + font-style: normal; + font-size: 11px; + font-weight: 700; + font-stretch: normal; + line-height: normal; + letter-spacing: 1.6px; + color: #ffffff; + padding: 0 30px 0 30px; + } + + #button2 { + border-width: 0px; + border-radius: 37px; + border: solid 2px #e01643; + width: 200px; + height: 65px; + font-size: 20px; + font-weight: 500; + font-stretch: normal; + font-style: normal; + line-height: normal; + letter-spacing: 2px; + text-align: center; + color: #e01643; + } + + #box_custom34 { + margin-bottom: 0 !important; + } +} + +@media only screen and (max-width: 1439px) and (min-width: 769px) { + + + html { + scroll-behavior: smooth; + } + + #footer-mobile { + display: none; + } + + /*.search__container { + clear: both; + min-width: 0 !important; + margin-top: 15px; + position: relative !important; + top: -140px !important; + left: -35% !important; + width: 33% !important; + }*/ + html, + body { + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; + } + + .innerbox img { + max-width: 100%; + } + + .rwd .container { + max-width: none; + width: 100% !important; + } + + .container { + max-width: none; + width: 100%; + } + + #image-costarica {} + + .card-img-top { + max-width: 100% !important; + } + + .header { + background-image: url("../images/user/header_v22.webp"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + height: 730px; + margin-top: -35px; + } + + #p-small-header { + color: #ffffff; + text-align: left; + font: normal normal 400 20px/31px Poppins; + letter-spacing: 0px; + color: #FFFFFF; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + opacity: 1; + margin: 0 0 0 15% !important; + } + + .p-tablet-slide-title { + margin-left: 10%; + text-align: left; + font: normal normal bold 35px/34px Poppins; + letter-spacing: 0px; + color: #070707; + opacity: 1; + margin-top: 20px; + margin-bottom: 0 !important; + } + + .p-tablet-slide-description1 { + margin-left: 10%; + text-align: left; + font: normal normal bold 16px/26px Poppins; + letter-spacing: 2px; + color: #070707; + text-transform: uppercase; + opacity: 1; + margin-top: 5px; + } + + .p-tablet-slide-description2 { + text-align: left; + font: normal normal medium 20px/25px Poppins; + letter-spacing: 2px; + color: #070707; + text-transform: uppercase; + opacity: 1; + font-weight: 600; + } + + .swiper-button-prev { + color: #DBDBDB !important; + } + + .swiper-button-next { + color: #DBDBDB !important; + } + + .row-mobile { + display: none !important; + } + + .row-1 { + padding: 20px 15px 0 0; + } + + .row-1 a { + font: normal normal 600 10px/12px 'Poppins'; + letter-spacing: 0.5px; + color: #000000; + text-transform: uppercase; + opacity: 1; + margin-left: 2%; + } + + .nav-1 { + margin-right: 20px; + } + + .nav-1, + .nav-2 { + text-align: right; + } + + .row-2 a { + font: normal normal 600 10px/12px 'Poppins'; + letter-spacing: 0.5px; + color: #ffffff; + text-transform: uppercase; + opacity: 1; + margin-right: 3%; + } + + .row-2 button { + margin-top: 0; + } + + .row-3 { + margin-top: 100px; + } + + #header-div-txt-2 { + margin-top: 250px; + } + + #p-header-1 { + font-family: Poppins; + text-align: left; + font-size: 42px; + line-height: 52px; + font-weight: 600; + letter-spacing: 0px; + color: #ffffff; + margin: 0 0 0 15%; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + } + + #p-header-2 { + margin: 0; + text-align: left; + font: normal normal 500 36px/37px Poppins; + letter-spacing: 0px; + color: #000000; + } + + #p-header-3 { + font: normal normal normal 14px/17px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #button1 { + margin-top: 20px; + margin-left: 15%; + border-width: 0px; + border-radius: 37px; + box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.16); + background-color: #ffffff; + width: auto; + height: 40px; + text-align: center; + font-family: "Poppins", sans-serif; + font-style: normal; + font-size: 12px; + font-weight: 800; + font-stretch: normal; + line-height: normal; + letter-spacing: 1.6px; + color: #FFA231; + padding: 0 20px 0 20px; + } + + /* SECTION I */ + + .section1-mobile { + display: none; + } + + .row-section1-1 { + margin-top: 0; + margin-bottom: -50px; + z-index: 9; + position: relative; + } + + #section1-row2 { + height: 493px; + max-height: 493px; + } + + #section1-text1-tablet { + /* background-image: url("../style-tablet/icons/section2.svg"); + background-size: cover; + background-repeat: no-repeat; */ + width: 100%; + z-index: -1; + } + + #section1-text1-tablet p { + margin-right: 5%; + } + + #p-section1-1 { + margin-top: 120px; + font: normal normal 700 30px/32px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #elipse1 { + position: absolute; + z-index: -1; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); + } + + #elipse2 { + position: absolute; + z-index: -1; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); + } + + #section1-image1 { + background-image: url("../images/user/costarica1.png"); + background-size: cover; + background-repeat: no-repeat; + z-index: -1; + max-width: 100%; + max-height: 100%; + } + + #section1-coffee1 { + position: relative; + bottom: -265px; + left: -55%; + } + + #section1-coffeebeans { + width: 200%; + position: absolute; + bottom: 60; + right: -100%; + z-index: -1; + } + + #section1-coffeehouse { + width: 200%; + margin-top: 50px; + } + + #section1-trapeze { + /* height: 600px; */ + background-image: url("../images/user/trapeze2_tablet.svg"); + background-size: cover; + background-repeat: no-repeat; + z-index: -2; + } + + #p-section1-2 { + margin-right: 30%; + font: normal normal normal 14px/17px 'Poppins'; + text-align: left; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #text2-div { + position: absolute; + top: 15; + left: 60%; + margin-right: 5%; + } + + #section1-text2 { + margin-bottom: 10px; + text-align: left; + font: normal normal bold 27px/27px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #section1-text3 { + margin-bottom: 10px; + line-height: 1.3; + text-align: left; + font: normal normal 400 15px/17px 'Poppins'; + letter-spacing: -0.5px; + color: #000000; + opacity: 1; + } + + /* PRODUCTS */ + .products-mobile { + display: none; + } + + .products-p-1 { + font: normal normal 500 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + .products-p-2 { + margin-top: 0 !important; + margin-bottom: 12px !important; + text-align: center; + font: normal normal bold 32px/36px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .productname { + text-align: center; + font: normal normal bold 32px/36px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .productnamewrap { + height: auto !important; + } + + .price em { + text-align: center; + font: normal normal bold 20px/30px Poppins; + font-size: 20px !important; + letter-spacing: 0px; + opacity: 1; + } + + #products-p-1 { + font: normal normal 600 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + #products-p-2 { + text-align: center; + font: normal normal bold 30px/32px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-2-title { + text-align: center; + font: normal normal bold 15px/23px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-3 { + text-align: center; + font: normal normal normal 14px/17px 'Poppins'; + letter-spacing: 0px; + color: #848484; + opacity: 1; + margin: 0 5% 15px 5% + } + + #products-p-price { + text-align: center; + font: normal normal bold 20px/30px Poppins; + letter-spacing: 0px; + color: #E01643; + opacity: 1; + } + + .row-products-2 { + margin-top: 50px; + } + + .row-products-2 div { + margin: auto; + text-align: center; + } + + .row-products-2 div:not(:last-child):not(:nth-child(5)):not(:first-child) { + border-right: 1px solid #C4C4C4; + + } + + /* DELIVERY */ + + .delivery { + display: none; + } + + #delivery-icon { + content: url("/skins/user/rwd_shoper_4/images/user/delivery_tablet.svg"); + } + + #delivery-tablet-p1 { + text-align: left; + font: normal normal 800 27px/31px Poppins; + letter-spacing: 0px; + color: #000000; + margin-bottom: 0; + } + + #delivery-tablet-p2 { + text-align: left; + font: normal normal 400 27px/31px Poppins; + letter-spacing: 0px; + color: #000000; + } + + /* NEWS*/ + .news { + display: none; + } + + .news-tablet .col { + margin: 20px; + } + + .card-img-top { + min-height: 300px; + } + + .card-body { + min-height: 230px; + } + + .mb-3 { + box-shadow: 0px 3px 30px #00000029; + } + + #news-p1 { + text-align: left; + font: normal normal 600 15px/15px 'Poppins'; + letter-spacing: 1.2px; + color: #848484; + opacity: 1; + margin: auto; + } + + #news-p2 { + margin-top: 20px !important; + text-align: left; + font: normal normal bold 20px/20px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + display: none; + } + + #news-p4 { + font: normal normal 600 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #FFC400; + text-transform: uppercase; + opacity: 1; + text-align: right; + position: absolute; + top: 90%; + left: 70%; + } + + /* SECTION 2 */ + .section-2 { + display: none; + } + + #section-2-image-tablet { + position: relative; + top: 65px; + + } + + #image-section2 { + position: relative; + height: 600px; + right: -10%; + top: 150px; + content: url(/skins/user/rwd_shoper_4/images/user/wspieramy.jpg); + z-index: 1; + } + + #p-section2-2 { + text-align: left; + font: normal normal normal 15px/18px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin-right: 50% !important; + } + + #elipse3 { + position: absolute; + z-index: -1; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); + } + + /* FOOTER */ + #footer {} + + .footer div { + margin-bottom: 0; + } + + .p-footer1 { + text-align: left; + font: normal normal bold 20px/28px 'Poppins'; + letter-spacing: 0px; + color: #FFFFFF; + opacity: 1; + } + + .p-footer2 { + text-align: left; + font: normal normal 400 16px/26px 'Poppins'; + letter-spacing: 1.5px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + margin-bottom: 0 !important; + margin-top: 0 !important; + } + + .p-footer3 { + text-align: left; + font: normal normal normal 12px/15px 'Poppins'; + letter-spacing: 1.2px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + margin-bottom: 0; + } + + .footer-p4 { + text-align: center; + font: normal normal normal 12px/25px Poppins; + letter-spacing: 0px; + color: #fff; + opacity: 1; + margin-bottom: 0; + } + + .row-border { + border-top: 1px solid #B07985; + padding-bottom: 25px; + } +} + +@media screen and (min-width: 1440px) { + html { + scroll-behavior: smooth; + } + + /*.search__container { + clear: both; + min-width: none !important; + margin-top: 15px; + position: relative !important; + top: -140px !important; + left: -35% !important; + width: 33% !important; + }*/ + .row-mobile, + .section1-mobile, + .products-mobile, + .news, + .section-2, + .mobile { + display: none; + } + + /*.search__container { + position: relative; + top: 70px; + right: 10%; + }*/ + html, + body { + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; + } + + #home { + display: block; + } + + .header { + max-width: 1000%; + background-size: cover; + background-image: url("../images/user/header_v22.webp"); + background-repeat: no-repeat; + width: 100%; + height: 101vh; + margin-top: -55px; + } + + #header-div-txt-2 { + margin-top: 250px; + } + + .row-1 { + padding: 20px 15px 0 0; + } + + .row-1 a { + font: normal normal 600 15px/23px 'Poppins'; + letter-spacing: 1.8; + color: #000000; + text-transform: uppercase; + opacity: 1; + margin-left: 2%; + } + + .nav-1 { + margin-right: 20px; + padding-top: 20px; + } + + .nav-1, + .nav-2 { + text-align: center; + } + + .row-2 {} + + .row-2 a { + font: normal normal 600 15px/23px 'Poppins'; + letter-spacing: 1.8; + color: #ffffff; + text-transform: uppercase; + opacity: 1; + margin-right: 3%; + } + + .row-3 { + margin-top: 100px; + } + + #p-small-header { + color: #ffffff; + text-align: left; + font: normal normal 400 20px/31px Poppins; + letter-spacing: 0px; + color: #FFFFFF; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + opacity: 1; + margin: 0 0 0 15% !important; + } + + .p-tablet-slide-title { + margin-left: 10%; + text-align: left; + font: normal normal bold 57px/51px Poppins; + letter-spacing: 0px; + color: #070707; + opacity: 1; + margin-top: 20px; + margin-bottom: 0 !important; + } + + .p-tablet-slide-description1 { + margin-left: 10%; + text-align: left; + font: normal normal bold 16px/26px Poppins; + letter-spacing: 2px; + color: #070707; + text-transform: uppercase; + opacity: 1; + margin-top: 5px; + } + + .p-tablet-slide-description2 { + text-align: left; + font: normal normal medium 20px/25px Poppins; + letter-spacing: 2px; + color: #070707; + text-transform: uppercase; + opacity: 1; + font-weight: 600; + } + + .swiper-button-prev { + color: #DBDBDB !important; + } + + .swiper-button-next { + color: #DBDBDB !important; + } + + #header-div-txt-2 {} + + #p-header-1 { + font-family: Poppins; + text-align: left; + font-size: 42px; + line-height: 52px; + font-weight: 600; + letter-spacing: 0px; + color: #ffffff; + margin: 0 0 0 15%; + text-shadow: 0px 4px 6px rgba(0, 0, 0, 0.6); + } + + #p-header-2 { + margin: 0; + text-align: left; + font: normal normal 500 70px/72px Poppins; + letter-spacing: 0px; + color: #000000; + } + + #p-header-3 { + text-align: left; + font: normal normal normal 20px/24px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; + padding-right: 225px; + } + + #button1 { + border-width: 0px; + border-radius: 37px; + box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.16); + background-color: #ffffff; + width: auto; + height: 55px; + text-align: center; + font: normal normal medium 18px/23px 'Poppins'; + letter-spacing: 1.8px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + font-stretch: normal; + line-height: normal; + letter-spacing: 1.6px; + color: #FFA231; + padding: 0 20px 0 20px; + font-weight: 700; + margin-left: 15%; + } + + #button2 { + border-width: 0px; + border-radius: 37px; + border: solid 2px #e01643; + width: 200px; + height: 65px; + font-size: 20px; + font-weight: 500; + font-stretch: normal; + font-style: normal; + line-height: normal; + letter-spacing: 2px; + text-align: center; + color: #e01643; + } + + #icon-search { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_4/images/user/search_desktop.svg"); + } + + #icon-person { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_4/images/user/person_desktop.svg"); + } + + #icon-basket { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_4/images/user/basket_desktop.svg"); + } + + #mott-logo { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_4/images/user/logo_desktop.svg"); + position: relative; + top: -40px; + } + + /* */ + /* SECTION1 */ + /* */ + .row-section1-1 { + margin-top: -40px; + margin-bottom: -60px; + } + + #section1-row2 { + height: 493px; + max-height: 493px; + } + + #section1-text1-tablet { + /* background-image: url("../style-tablet/icons/section2.svg"); + background-size: cover; + background-repeat: no-repeat; */ + width: 100%; + z-index: -1; + } + + #p-section1-1 { + margin-top: 120px; + text-align: left; + font: normal normal bold 50px/50px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #p-section1-2 { + text-align: left; + color: #000000; + } + + #elipse1 { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg"); + position: absolute; + z-index: -1; + } + + .elipse1-slider { + width: 45px; + } + + #elipse2 { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg"); + position: absolute; + z-index: -1; + } + + #section1-image1 { + max-width: 1000%; + background-image: url("/skins/user/rwd_shoper_2/images/user/costarica1.png"); + background-size: cover; + background-repeat: no-repeat; + z-index: -1; + margin-top: -150px; + max-width: 100%; + max-height: 100%; + } + + #section1-coffee1 { + content: url("/skins/user/rwd_shoper_2/images/user/coffee1_desktop.png"); + position: relative; + bottom: -275px; + left: -60%; + width: 80%; + } + + #section1-coffeebeans { + width: 200%; + position: absolute; + bottom: 60; + right: -100%; + z-index: -1; + } + + #section1-coffeehouse { + width: 200%; + margin-top: 50px; + max-width: 200%; + content: url("/skins/user/rwd_shoper_2/images/user/both_desktop.png"); + } + + #section1-trapeze { + height: 600px; + max-width: 1000%; + background-image: url("/skins/user/rwd_shoper_2/images/user/trapeze2.svg"); + background-size: cover; + background-repeat: no-repeat; + z-index: -2; + } + + #elipse2 { + position: absolute; + z-index: -1; + max-width: 1000%; + content: url("/skins/user/rwd_shoper_2/images/user/elipse1_desktop.svg"); + } + + #text2-div { + position: absolute; + top: 15; + left: 60%; + margin-right: -5%; + } + + #section1-text2 { + margin-bottom: 10px; + text-align: left; + font: normal normal bold 27px/27px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + } + + #section1-text3 { + margin-bottom: 10px; + line-height: 1.3; + text-align: left; + font: normal normal 400 15px/17px 'Poppins'; + letter-spacing: -0.5px; + color: #000000; + opacity: 1; + } + + .productname { + padding-top: 0 !important; + text-align: center; + font: normal normal bold 20x/36px Poppins !important; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + .productnamewrap { + height: 70px !important; + } + + .price em { + text-align: center; + font: normal normal bold 20px/30px Poppins; + font-size: 20px !important; + letter-spacing: 0px; + opacity: 1; + } + + .roductnamewrap { + height: 70px !important; + } + + .row-products-1 { + margin-top: 650px; + } + + .products-p-1 { + font: normal normal 500 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + .products-p-2 { + margin-top: 0 !important; + margin-bottom: 12px !important; + text-align: center; + font: normal normal bold 52px/55px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-1 { + font: normal normal 600 16px/19px 'Poppins'; + letter-spacing: 1.6px; + color: #000000; + text-transform: uppercase; + opacity: 1; + text-align: center; + } + + #products-p-2 { + text-align: center; + font: normal normal bold 50px/76px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-2-title { + text-align: center; + font: normal normal bold 15px/23px Poppins; + letter-spacing: 0px; + color: #000000; + opacity: 1; + margin: auto; + } + + #products-p-3 { + text-align: center; + font: normal normal normal 14px/17px 'Poppins'; + letter-spacing: 0px; + color: #848484; + opacity: 1; + margin: 0 5% 15px 5%; + } + + #products-p-price { + text-align: center; + font: normal normal bold 20px/30px Poppins; + letter-spacing: 0px; + color: #E01643; + opacity: 1; + } + + .row-products-2 { + margin-top: 50px; + } + + .row-products-2 div { + margin: auto; + text-align: center; + } + + .row-products-2 div:not(:last-child):not(:nth-child(5)):not(:first-child) { + border-right: 1px solid #C4C4C4; + + } + + /* DELIVERY */ + #delivery-tablet-p1 { + text-align: left; + font: normal normal 800 50px/57px Poppins; + letter-spacing: 0px; + color: #000000; + margin-bottom: 0; + } + + #delivery-tablet-p2 { + text-align: left; + font: normal normal 400 50px/57px Poppins; + letter-spacing: 0px; + color: #000000; + } + + #delivery-icon { + max-width: 1000%; + content: url("../images/user/delivery_desktop.svg"); + } + + #delivery-tablet-p2 { + margin-top: 0; + } + + /* NEWS*/ + .news-tablet .col { + margin: 20px; + } + + .card-img-top { + height: 300px; + } + + .card-body { + margin: 20px; + min-height: 220px; + } +} + +.card-body p { + margin: 15px; +} + +#icon-clock { + max-width: 1000%; + content: url("../images/user/clock_desktop.svg"); +} + +#icon-arrow { + max-width: 1000%; + content: url("../images/user/arrow.svg"); +} + +.mb-3 { + box-shadow: 0px 3px 30px #00000029; +} + +#news-p1 { + text-align: left; + font: normal normal 600 15px/15px 'Poppins'; + letter-spacing: 1.2px; + color: #848484; + opacity: 1; +} + +#news-p2 { + margin-top: 20px !important; + text-align: left; + font: normal normal bold 20px/20px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; +} + +#news-p4 { + font: normal normal 600 14px/17px 'Poppins'; + letter-spacing: 1.4px; + color: #FFC400; + text-transform: uppercase; + opacity: 1; + text-align: right; +} + +/* SECTION 2 */ +.section-2-tablet { + margin-top: -100px; +} + +#section1-row2 { + margin-top: -10px; +} + +#image-section2 { + margin-left: 20%; + max-width: 100%; + margin-top: 170px; + content: url("/skins/user/rwd_shoper_4/images/user/costarica2_desktop.png"); + height: 600px; + position: relative; + z-index: 1; + left: 20%; +} + +#section2-text { + margin-top: 300px; +} + +#section2-text p { + margin-right: 20%; +} + +#elipse3 { + position: absolute; + z-index: -1; + max-width: 1000%; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1_desktop.svg"); +} + +#section-2-image-tablet { + position: relative; + top: 130px; +} + +#p-section2-2 { + text-align: left; + font: normal normal normal 15px/23px 'Poppins'; + letter-spacing: 0px; + color: #000000; + opacity: 1; +} + +/* FOOTER */ +#icon-cup { + max-width: 26px; + content: url("/skins/user/rwd_shoper_4/images/user/cup_desktop.svg"); +} + +#icon-store { + max-width: 26px; + content: url("/skins/user/rwd_shoper_4/images/user/store_desktop.svg"); +} + +#icon-phone { + max-width: 26px; + content: url("/skins/user/rwd_shoper_4/images/user/phone_desktop.svg"); +} + +#icon-mail { + max-width: 26px; + content: url("/skins/user/rwd_shoper_4/images/user/mail_desktop.svg"); +} + +#footer { + padding-top: 75px; + font-size: 15px; + font-weight: 200; + + div { + margin-bottom: 0; + } + + img { + width: 30px; + height: auto; + } +} + +.footer-tablet { + background-color: #42281D !important; +} + +.p-footer1 { + text-align: left; + color: #FFFFFF; + opacity: 1; + font-weight: 500; +} + +.p-footer2 { + text-align: left; + line-height: 1.5; + color: #FFFFFF; + opacity: 1; + font-weight: 500; +} + +.p-footer3 { + text-align: left; + line-height: 1.5; + color: #FFFFFF; + opacity: 1; + margin-bottom: 0; +} + +.footer-p4 { + text-align: center; + line-height: 1.5; + letter-spacing: 0px; + color: #fff; + opacity: 1; + margin-bottom: 0; +} + +#icon-fb { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_2/images/user/fb_desktop.svg"); +} + +#icon-insta { + max-width: 1000%; + content: url("/skins/user/rwd_shoper_2/images/user/insta_desktop.svg"); +} + +.row-border { + border-top: 1px solid #B07985; + padding-bottom: 25px; + margin-bottom: -40px; +} + +.mobile-menu-main { + background-image: url("/skins/user/rwd_shoper_4/images/user/menu_bg.png"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + background-position: center center; + display: none; +} + +/* ICONS */ +.row-mobile-menu-1 {} + +#icon-logo { + width: 35%; +} + +.icon-logo { + text-align: right; + margin: auto; +} + +.icon-close-div { + text-align: left; + margin: auto; +} + +/* ICONS END */ + +/* MENU LIST */ +.mobile-menu div { + display: grid; + text-align: center; +} + +.mobile-menu a { + margin: 5px; + text-align: center; + font: normal normal 500 18px/50px 'Poppins'; + letter-spacing: 1.8px; + color: #FFFFFF; + text-transform: uppercase; + opacity: 1; + text-decoration: none; +} + +/* BUTTON */ +#button1-mobile { + margin-top: 20px; + border: 2px solid #FFFFFF; + border-radius: 37px; + /* box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.16); */ + background-color: #FFA231; + width: auto; + height: 50px; + text-align: center; + font: normal normal 500 18px/50px 'Poppins'; + font-stretch: normal; + line-height: normal; + letter-spacing: 1.6px; + color: #ffffff; + padding: 0 20px 0 20px; + box-shadow: 0px 3px 6px #00000029; + opacity: 1; +} + + +.page-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; +} + + +.col-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +/* SHOPER CSS */ + + + +.container { + max-width: none; +} + +.innermain { + max-width: 1180px; +} + +.innerfooter { + max-width: 1180px; + font-size: 15px; + + a { + font-weight: 200; + } +} + +/* NEWS */ +.-img-top { + width: 100%; + border-top-left-radius: calc(.25rem - 1px); + border-top-right-radius: calc(.25rem - 1px); +} + +.mb-3 { + box-shadow: 0px 3px 30px #00000029; +} + +.card { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + /* -webkit-box-orient: vertical; */ + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, .125); + border-radius: .25rem; +} + +.footer-tablet p { + margin: 0 !important; +} + +#elipse3 { + position: absolute; + z-index: -1; + content: url("/skins/user/rwd_shoper_4/images/user/elipse1.svg"); +} + +.quickview { + background-color: #ffffff !important; + color: #696969 !important; + border: none !important; +} + +.quickview::before { + color: #696969 !important; + border: none !important; +} + +.productname { + margin-bottom: 0 !important; +} + +select { + background: #fff; + font-size: 14px; +} + +/*.addtobasket:hover { + border: none !important; + background-color: #ef8300 !important; + }*/ +/* .link-logo-img { + display: none; + } */ + + + +/* SHOP PAGE */ +@media screen and (max-width: 768px) { + .search-info {} + + .fa, + .icon-custom-cart { + color: #2F120E !important; + } + + #menu-icon-image-1 { + color: #2F120E !important; + } + + .menu #rwd-menu li { + background: #2F120E !important; + } + + .menu #rwd-menu li a:hover, + a:active { + color: #FFA231 !important; + } + + .rwd footer .innerfooter ul li>ul li { + background-color: #ffa231; + } + + .search-input { + background: transparent !important; + height: 70px !important; + } + + .search__input-area { + background: #ffa231 !important; + } + + #home-page-menu-container { + background: rgba(0, 0, 0, 0.3); + } + + #mobile-menu-display { + position: fixed; + z-index: 10000; + margin-top: -20px; + } +} + +@media screen and (min-width: 769px) { + #custom-mobile-menu1 { + display: none + } + + #pure_navbar2 { + background-image: url("https://mottcoffee.eu/skins/user/rwd_shoper_4/images/user/banner_but_without_logo.jpg"); + background-size: cover; + background-repeat: no-repeat; + width: 100%; + background-position: center center; + } + + .nav-3 { + max-width: 1180px; + /* text-align: center; */ + margin: auto; + text-align: right; + } + + .nav-3 a { + color: #2f120e; + } + + .nav-2 { + max-width: 1180px; + /* text-align: center; */ + /* margin: 40px 0 auto auto; */ + text-align: right; + } + + +} + +/* @media screen and (min-width: 1920px){ + .header { + background-size: cover !important; + } +} */ +//[RK] +.logo-bar .row .container { + display: none !important; +} + +//RK +.basket-steps { + width: 100%; +} + +//wojtek zmiany w nazwie brak pogrubienia +@media only screen and (min-width: 769px) and (max-width: 1439px) { + .products.viewphot .product .productname { + font-weight: unset; + height: unset; + } + + #promocja1 { + top: 86px !important; + } +} + +//wojtek zmiany w nazwie brak pogrubienia +@media screen and (max-width: 768px) { + .products.viewphot .product .productname { + font-weight: unset; + height: unset; + } + + #promocja1 { + //display: block !important; + display: block; + top: 110px !important; + height: 20px; + line-height: 20px; + text-align: center; + } + + +} + +//wojtek na komórce zmieny odnośnie nazwy produktu na głównym oknie +@media screen and (min-width: 320px) and (max-width: 400px) { + + .products.viewphot .product .productname { + height: unset; + font-weight: unset; + } +} + +#z_menu span { + display: inline-block; +} + +#z_menu .register span, +#z_menu .login span, +#z_menu .myaccount span, +#z_menu .logout span { + text-transform: lowercase !important; + font-size: 13px !important; + color: #FFF; +} + +#box_languages_select { + border-color: transparent; + background-color: transparent; + color: black; + min-height: unset; +} + +#box_languages_select:hover { + border-color: transparent; + color: black; + background-color: transparent; + +} + +#box_languages_select:active { + border-color: transparent !important; + color: black; + background-color: transparent !important; + +} + +.alert-success.alert { + margin: 0; +} + +.mobile-menu a { + margin: 0px; +} + +@media screen and (min-width: 1024px) and (max-width: 1280px) { + body>div.wrap.rwd { + width: 98vw; + margin: auto; + } + + #footgroup2 { + padding-left: 10px; + } + +} + +.popup-screen { + z-index: 999999; + position: fixed; + top: 0; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(2px); + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + visibility: hidden; + transition: 0.5s ease; + transition-property: visibility; +} + +.popup-screen2 { + z-index: 999999; + position: fixed; + top: 0; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(2px); + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + visibility: hidden; + transition: 0.5s ease; + transition-property: visibility; +} + + + +.popup-screen.active { + visibility: visible; +} + +.popup-screen2.active { + visibility: visible; +} + + + +.popup-box { + position: relative; + background: rgba(250, 250, 250, 0.8); + backdrop-filter: blur(10px); + display: flex; + width: 30%; + justify-content: center; + align-items: center; + flex-direction: column; + padding: 25px 25px; + border-radius: 20px; + // box-sizing: 0 5px 25px rgb(0 0 0 / 20%); + transform: scale(0); + transition: 0.5s ease; + transition-property: transform; + + +} + +.popup-box2 { + position: relative; + background: rgba(250, 250, 250, 0.8); + backdrop-filter: blur(10px); + display: flex; + width: 30%; + justify-content: center; + align-items: center; + flex-direction: column; + padding: 25px 25px; + border-radius: 20px; + // box-sizing: 0 5px 25px rgb(0 0 0 / 20%); + transform: scale(0); + transition: 0.5s ease; + transition-property: transform; + + +} + +.popup-screen.active .popup-box { + transform: scale(1); +} + +.popup-screen2.active .popup-box2 { + transform: scale(1); +} + + + +.popup-btn { + color: #fff; + background: green; + font-size: 1.1em; + font-weight: 500; + text-decoration: none; + text-transform: uppercase; + padding: 7px 27px; + margin-top: 20px; + border-radius: 3px; +} + +.popup-btn2 { + color: #fff; + background: green; + font-size: 1.1em; + font-weight: 500; + text-decoration: none; + text-transform: uppercase; + padding: 7px 27px; + margin-top: 20px; + border-radius: 3px; +} + + + +.popup-img { + width: 100%; +} + +.popup-img2 { + width: 100%; +} + + +.close-btn { + position: absolute; + font-size: 1.5em; + top: 0; + right: 0; + margin: 15px; + cursor: pointer; + opacity: 0.5; + transition: 0.3s ease; + transition-property: opacity; +} + +.close-btn2 { + position: absolute; + font-size: 1.5em; + top: 0; + right: 0; + margin: 15px; + cursor: pointer; + opacity: 0.5; + transition: 0.3s ease; + transition-property: opacity; +} + + + +.close-btn:hover { + opacity: 1; +} + +.close-btn2:hover { + opacity: 1; +} + + +@media screen and (max-width: 768px) { + .popup-box { + width: 90%; + } + + .popup-box2 { + width: 90%; + } + + #promocja1 { + display: block !important; + } +} + +.tags { + display: flex; + flex-direction: column; + align-items: baseline; + gap: 7px; +} + +.product .tags .promo, +.product-main-box .tags .promo { + background: #ea4832 !important; + padding: 5px 10px; + position: relative; + top: -5px; + left: -5px; +} + +.product .tags .new { + background: #ea4832; + padding: 5px 10px; +} + +.product .tags .free_del { + color: #fff; + background: #ea4832; + padding: 5px 10px; + display: none; +} + +/* new design 2022 */ +.menu { + position: absolute; + top: 0; + left: 0; + right: 0; + padding: 0; +} + +.menu { + @media(max-width: 767px) { + position: static; + } + + .innermenu { + display: flex; + border: 0 !important; + + @media(max-width: 1180px) { + flex-wrap: wrap; + } + + .menu-list { + display: flex; + width: calc(100% - 310px); + height: fit-content; + + @media(max-width: 1180px) { + width: 100% !important; + order: 2; + padding: 0 25px !important; + justify-content: space-between; + } + + li { + display: flex; + align-items: center; + float: none !important; + position: relative; + + h3 { + padding-top: 0 !important; + margin-top: 0 !important; + + a { + display: block; + padding: 5px 10px !important; + + @media (max-width:1180px) { + font-size: 15px !important; + } + + @media (min-width:768px) and (max-width: 992px) { + font-size: 14px !important; + } + } + } + + .submenu.level1 { + top: 100%; + position: absolute; + z-index: 10; + + ul { + position: static; + background: #FFF; + border-radius: 3px; + padding: 10px; + box-shadow: 1px 1px 16px 0px #99999963; + + li { + margin: 0 !important; + border-bottom: 1px solid #e6e6e6; + + a { + display: block; + color: #2f120e; + font-size: 15px; + padding: 10px 15px !important; + } + } + } + } + } + } + + .login-bar { + width: fit-content !important; + height: 62px; + display: flex; + align-items: center; + position: static; + margin: 25px 25px 0 0; + + @media(max-width: 1180px) { + font-size: 15px; + width: 100% !important; + justify-content: center; + height: fit-content; + margin: 10px auto; + + ul { + line-height: 1.5 !important; + } + } + + @media(max-width: 767px) { + a { + span { + color: #000 !important; + } + } + } + } + } +} + +.menu .innermenu .menu-list { + border-bottom: none; +} + +.menu .innermenu .menu-list li h3 a { + color: #fff !important; + font-family: "Poppins", sans-serif; + font-weight: 500; + font-size: 16px; + line-height: 20px; +} + +/* -> nav menu */ +.menu .innermenu .parent:hover>div>ul { + background-color: transparent; + border: none +} + +.menu .innermenu .parent:hover>div>ul::before { + display: none; +} + +.menu .innermenu .parent:hover>div>ul { + width: auto; + top: 90px; +} + +.menu .innermenu .parent:hover>div>ul.level1 { + display: block; + + li { + width: 100%; + display: block; + + a { + color: #2f120e !important; + white-space: nowrap; + } + } +} + +.menu .innermenu .menu-list li #headlink21 { + color: #EF8300; +} + +.menu .innermenu .menu-list li ul.level1>li:first-child { + margin-top: 0; +} + +.menu .innermenu .parent:hover>div>ul.level2 { + display: none; +} + +.menu .innermenu .menu-list { + overflow: inherit; + padding: 25px 25px 0 +} + +.menu .innermenu .menu-list li.home-link-menu-li { + display: block; + margin-right: 100px; + + @media(max-width:1180px) { + margin: 0; + } +} + +.menu .innermenu .menu-list li.home-link-menu-li img { + width: 54px; +} + +.menu .innermenu .login-bar .links span { + color: #fff; + font-family: "Poppins", sans-serif; + font-weight: 500; + font-size: 16px; + line-height: 20px; +} + +.menu .innermenu .nav_menu_basket_search { + background: #fff; +} + + +.shop_product_list .menu { + position: relative; +} + +/* Temp style */ + +body.shop_index .nav_menu_basket_search { + display: none; +} + +body:not(.shop_index) .menu.row { + background: url('/userdata/public/boxes/06deda96b2f1c1aac66ad20e910383d5.jpg') no-repeat center top; + background-repeat: no-repeat; + background-size: cover; + background-position: top; +} + +.nav_menu_basket_search { + margin-top: 73px; +} + +.nav_menu_basket_search .container { + max-width: 1180px; + margin: auto; + display: flex; + justify-content: flex-start; +} + +.nav_menu_basket_search .container .basket { + margin-left: auto; +} + +.nav_menu_basket_search .container .search__container form { + margin: 0; + padding: 0; +} + +.breadcrumbs { + padding: 15px; + font-size: 15px; + background: #f3f3f3; +} + +.breadcrumbs .container { + max-width: 1180px +} + +.shop_product_list .top .container { + max-width: 1180px +} + +.shop_product_list .main .centercol { + margin-bottom: 40px; +} + +/* all pages */ +.main { + margin-top: 20px; +} + +/* Slider basic */ +.box-slider .slides { + li>a { + img { + height: 100%; + width: 100%; + object-fit: cover; + } + } +} + +.box-slider .slider-nav {} + +.box-slider .ps-arrow-left { + position: relative; + background: none !important; + background-color: none !important; +} + +.box-slider .ps-arrow-left::before { + content: ""; + position: absolute; + top: 0; + left: 20px; + bottom: 0; + width: 30px; + height: 30px; + border-left: 3px solid #e6e6e6; + border-bottom: 3px solid #e6e6e6; + transform: rotate(45deg); + border-radius: 2px; +} + +.box-slider .ps-arrow-right { + position: relative; + background: none !important; + background-color: none !important; +} + +.box-slider .ps-arrow-right::before { + content: ""; + position: absolute; + top: 0; + right: 20px; + bottom: 0; + width: 30px; + height: 30px; + border-right: 3px solid #e6e6e6; + border-top: 3px solid #e6e6e6; + transform: rotate(45deg); + border-radius: 2px; +} + +/* Slider custom fix */ +.swiper-container { + position: relative; +} + + +/* box_productoftheday */ +#box_productoftheday .boxhead { + border-bottom: none; + margin-bottom: 0; +} + +#box_productoftheday .boxhead span { + font-family: "Poppins", sans-serif; + font-size: 36px; + line-height: 44px; + font-weight: 300; + text-align: center; +} + +#box_productoftheday .innerbox .boxintro { + position: relative; + font-family: "Poppins", sans-serif; + font-size: 48px; + line-height: 58px; + font-weight: 700; + margin-top: 0; + text-align: center; +} + +#box_productoftheday .innerbox .boxintro::before { + content: ""; + position: absolute; + bottom: -20px; + left: 0; + right: 0; + height: 1px; + width: 200px; + background: #000; + margin: 0 auto; +} + +/* language box */ +header.row { + padding: 0; + border: none; +} + +header #box_languages { + position: absolute; + top: 10px; + right: 30px; + margin-bottom: 0; + z-index: 15; + + @media (max-width: 767px) { + position: static; + + ul { + justify-content: center; + } + } +} + +header #box_languages .boxhead { + display: none; +} + +header #box_languages .floatcenterwrap ul.icons { + display: flex; + flex-direction: row; + gap: 12px; +} + +/* products list - page */ +@media(min-width: 1300px) { + .s-row .s-grid-4 { + width: 280px; + } +} + +/* products list - button */ +#box_mainproducts .products .buttons { + display: flex; + align-items: center; + justify-content: center; +} + +.addtobasket { + background-color: #ffa231 !important; + border: none !important; + padding: 8px 15px; + font-size: .8rem; + font-weight: 700; + cursor: pointer; + text-transform: uppercase !important; + transition: .3s all; + border-radius: 3px; + + &:hover { + background: #2f120e !important; + } +} + +/* footer */ +footer.footer .overall ul li:first-child { + font-size: 16px; +} + +footer.footer .overall ul { + padding: 0 5px; +} + +footer.footer .overall ul li { + font-family: "Poppins", sans-serif; +} + +#footer .page-row .col-1 { + display: flex; + justify-content: center; +} + +@media (max-width: 767px) { + .menu { + height: 120px !important; + + #rwd-menu { + margin-top: 10px; + width: 100%; + text-align: center; + + li { + background: #2f120e !important; + display: block; + text-align: center; + border-bottom: 1px solid #4a2f2b; + + a { + width: 100%; + text-align: center; + font-family: 'Poppins', sans-serif; + font-weight: 500; + font-size: 15px; + } + } + } + } + + .menu-mobile { + margin: auto; + width: 100%; + + .fa { + font-size: 26px !important; + } + + .icon-custom-cart { + font-size: 28px !important; + } + } +} + +body:not(.shop_index) { + .menu.row { + background: url('https://mottcoffee.eu/skins/user/rwd_shoper_4/images/user/banner.png') no-repeat top center; + background-size: cover; + position: static; + + @media (max-width: 767px) { + background: #FFF !important; + } + + .innermenu { + flex-wrap: wrap; + height: fit-content !important; + } + + .nav_menu_basket_search { + min-width: 100% !important; + + @media (max-width: 767px) { + display: none !important; + } + } + } + + .main.row { + background: #f3f3f3; + margin-top: 0; + padding-top: 50px; + } +} + +#contact { + padding-top: 75px; +} + +#box_custom34 { + margin: 0 !important; +} + +.centercol .products .product { + background: #FFF; + border-radius: 3px; + border: 0; + margin-bottom: 15px; + + form.basket { + display: flex; + align-items: center; + justify-content: flex-end; + + .price { + margin-bottom: 0; + padding-bottom: 0; + } + } +} + +.products.viewphot .product { + background: #FFF; + border-radius: 3px; + border: 0; + + .productname { + font-size: 16px; + height: auto; + } +} + +.alert.alert-success { + background-color: #299129; + border: 0; + color: #FFF; + text-align: center; + + .close { + span { + color: #FFF; + } + } +} + +.box .boxhead>span, +.category-name, +h3, +h4 { + font-size: 1.1rem; + font-weight: 600; + color: $cBrown; +} + +h4 { + font-size: 1rem; +} + +body:not(.shop_index) { + footer { + padding: 50px 0 !important; + } +} + +#box_menu, +.productdetails-more-details, +#box_description, +#box_productdeliveries, +#box_productcomments, +#box_basketlist, +#box_basketstep2, +#box_basketaddress, +#box_basketsummary, +#box_register, +#box_login, +#box_passchange, +#box_productrelated { + background: #FFF; + padding: 25px !important; + border-radius: 3px; + border: 0 !important; + font-size: 0.9rem !important; + font-weight: 400; + + .boxhead { + border: 0; + } +} + +.productnamewrap { + .productname { + font-size: 16px; + } +} + +#box_productfull { + font-size: 0.95rem !important; + + .boxhead { + border: 0; + } + + .first { + font-size: 0.95rem !important; + } + + .second { + color: #838383; + } + + h1 { + font-weight: 600; + } + + .productimg .mainimg { + background: #FFF; + border: 0; + } + + .productimg { + .tags { + .free_del { + background: #2f2f2f; + color: #fff; + display: none !important; + } + } + } +} + +.basket-contain .basket-summery a { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-color: #fff; + padding: 5px 10px; + vertical-align: middle; + width: 100%; + text-align: center; + display: block; + line-height: 1.5; +} + +#pure_navbar2 { + img { + width: 75px; + } +} + +.row.checkout { + padding-bottom: 25px; +} + +.basket-step-border { + border: 0; + padding: 0; +} \ No newline at end of file diff --git a/layout/style-scss/style.scss b/layout/style-scss/style.scss new file mode 100644 index 0000000..057fdc3 --- /dev/null +++ b/layout/style-scss/style.scss @@ -0,0 +1,2113 @@ +// out: ../style-css/style.css, compress: true, sourceMap: true +@import "_mixins"; +//variables + +//colors +$news-color: #dd3333; +$sport-color: #81d742; +$journalism-color: #dd9933; +$base-color: #47b0ed; +$gray-color: #333946; +$business-color: #4c66a4; +$culture-color: #ff5d00; +$moto-color: #3ca12c; +$kitchen-color: darken($color: $journalism-color, + $amount: 10%, +); +$lifestyle-color: lighten($color: $base-color, + $amount: 10%, +); + +//font-size +$base-font-size: 16px; +$small-font-size: 12px; +$large-font-size: 32px; +$xlarge-font-size: 46px; + +//spacing +$main-spacing: 20px; +$small-spacing: 10px; +$big-spacing: 40px; + +body { + line-height: 1.5; + font-family: "Roboto", sans-serif; +} + +* { + // margin: 0; + // padding: 0; + box-sizing: border-box; +} + +h3 { + font-size: 18px; +} + +#cookie-information { + background-color: #303440; + color: white; + padding: $main-spacing 0; + font-size: 10px; + text-align: center; + + a { + font-weight: 900; + color: white; + font-size: 12px; + } +} + +#main-menu { + text-transform: uppercase; + + @include respond-below(md) { + height: 100vh; + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 99; + background: black; + display: none; + + &.visible { + @include flexbox; + // z-index: 99999; + } + } + + div[id^="menu-container-"] { + @include respond-below(md) { + width: 100%; + @include flexbox; + @include align-items(center); + @include justify-content(center); + } + + ul { + margin: 0; + padding: 0; + list-style-type: none; + flex-direction: column; + + @include respond-above(md) { + @include flexbox; + flex-direction: row; + } + + @include respond-below(md) { + width: 100%; + } + + li { + position: relative; + width: 100%; + font-size: 12px; + text-align: center; + padding: 0; + + @media (max-width: 992px) { + a { + padding: 10px; + } + } + + @include respond-above(md) { + width: auto; + font-size: $small-font-size; + padding: 20px; + } + + @include respond-above(md) { + font-size: 14px; + padding: 10px; + } + + &.active { + background-color: $base-color; + + @include respond-above(md) {} + } + + &.parent { + >a { + i { + opacity: 1; + margin-left: 5px; + } + } + } + + ul { + position: absolute; + display: none; + + @include respond-below(md) { + position: static; + } + } + + @include respond-above(md) { + &:hover { + ul { + display: block; + } + } + } + + &.active { + ul { + display: block; + } + } + } + } + } +} + +#main-menu-btn.active { + position: fixed; + top: 20px; + right: 20px; + font-size: 16px; + background-color: transparent; +} + +#main-menu-btn { + height: 50px; + width: 50px; + color: #fff; + background: transparent; + display: none; + z-index: 999; + line-height: 50px; + text-align: center; + font-size: 25px; + cursor: pointer; + + @include respond-below(md) { + display: block; + } +} + +//header + +.header { + display: flex; + flex-direction: column; + + //logo + &__logo { + padding: 20px 0; + + @include respond-below(sm) { + display: flex; + justify-content: center; + } + } + + //navigation + + &__navigation { + width: 100%; + background-color: #19232d; + margin-bottom: 20px; + + @include respond-above(md) { + margin-bottom: 60px; + } + + #menu-container-1 { + width: 100%; + // max-width: 450px; + margin: 0 auto; + + // @include respond-above(xs) { + // max-width: 500px; + // } + + // @include respond-above(sm) { + // max-width: 700px; + // } + + // @include respond-above(md) { + // max-width: 900px; + // } + + // @include respond-above(lg) { + // max-width: 1100px; + // } + + ul { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + list-style: none; + margin: 0; + + li { + padding: 10px 5px; + transition: background-color 0.3s; + cursor: pointer; + font-size: 14px; + + &:hover { + background-color: #289dcc; + } + + a { + text-decoration: none; + color: white; + // font-weight: 700; + display: block; + height: 100%; + } + } + + li.parent { + // ul { + // @media (max-width:992px) { + // display: block; + // } + // } + + @include respond-above(md) { + ul { + position: absolute; + top: 50px; + left: 0; + width: 150px; + background-color: black; + z-index: 999; + + li { + text-align: start; + padding: 10px; + } + } + + a { + i { + margin-left: 5px; + } + } + } + + &:hover { + background-color: #19232d; + } + } + + li.parent.active { + @media (max-width: 992px) { + background-color: black; + } + + @include respond-above(md) { + ul { + display: none; + background-color: #22303d; + } + + &:hover { + ul { + display: block; + } + } + } + } + } + } + } +} + +//container + +//news +.news { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + @include respond-above(sm) { + height: 350px; + } + + @include respond-above(xs) {} + + @include respond-above(sm) { + display: flex; + justify-content: space-between; + height: 350px; + } + + &__big-articles { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + + @include respond-above(sm) { + width: 50%; + padding-right: 2px; + } + + .big-articles__article { + width: 100%; + height: 300px; + background-size: cover; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: flex-end; + margin-bottom: 2px; + + @include respond-above(sm) { + height: 100%; + margin-bottom: 0; + } + + .article__category { + text-decoration: none; + color: white; + background-color: #dd3333; + padding: 3px 8px; + margin-left: 20px; + font-size: 10px; + transition: background-color 0.3s; + text-transform: uppercase; + + &:hover { + background-color: $gray-color; + } + } + + #article-main { + padding: 10px 15px 20px; + background: linear-gradient(to bottom, + rgba(0, 0, 0, 0) 0, + rgba(0, 0, 0, 1) 100%); + width: 100%; + + .article-title { + text-transform: uppercase; + margin: 0; + font-size: 16px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + font-family: "Roboto"; + + a { + text-decoration: none; + color: white; + transition: color 0.3s; + + &:hover { + color: #289dcc; + } + } + } + + .date-add { + color: white; + font-size: 10px; + display: none; + + i { + margin-right: 5px; + } + } + } + } + } + + &__small-articles { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-content: space-between; + height: 1000px; + + @media (min-width: 370px) { + height: 500px; + gap: 1px; + } + + @include respond-above(sm) { + width: 50%; + height: 100%; + } + + .small-articles__article { + width: 100%; + height: 24%; + background-size: cover; + display: flex; + align-items: flex-end; + + @media (min-width: 370px) { + width: calc(50% - 1px); + height: calc(50% - 1px); + } + + #article-main { + padding: 15px 10px; + background: linear-gradient(to bottom, + rgba(0, 0, 0, 0) 0, + rgba(0, 0, 0, 1) 100%); + width: 100%; + + .article-title { + font-size: 13px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + text-transform: uppercase; + font-family: "Roboto"; + + a { + text-decoration: none; + color: white; + transition: color 0.3s; + text-align: center; + + &:hover { + color: #289dcc; + } + } + } + + .date-add { + color: white; + font-size: 10px; + display: none; + + i { + margin-right: 5px; + } + } + } + } + } +} + +//main +.main { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + .right-section { + width: 100%; + order: 1; + + @include respond-above(md) { + width: calc(30% - 5px); + } + + .aside { + display: flex; + flex-direction: column; + justify-content: center; + z-index: 0; + position: sticky; + top: 0; + gap: 20px; + + .title { + color: white; + font-weight: 400; + width: 100%; + padding-bottom: 6px; + margin-bottom: 15px; + border-bottom: 2px solid $base-color; + + span { + text-align: center; + background-color: $base-color; + padding: 6px 12px; + } + } + + .tag-section { + padding: $main-spacing 0; + + .tag__container { + #tags { + ul { + display: flex; + flex-direction: row; + flex-wrap: wrap; + list-style: none; + + li { + padding: 5px; + + a { + color: $base-color; + } + } + } + } + } + } + + .weather-section { + margin-top: $big-spacing; + + .weather__container { + display: flex; + flex-direction: column; + align-items: center; + + .iframe { + width: 100%; + height: 380px; + + @include respond-above(md) { + height: 300px; + } + } + + a { + color: black; + } + } + } + + .weather-section--subpages { + margin-top: 0; + } + } + } + + .left-section { + width: 100%; + + @include respond-above(md) { + width: calc(70% - 5px); + } + + .left-section-articles { + display: flex; + justify-content: space-between; + flex-direction: column; + flex-wrap: wrap; + + .journalism { + width: 100%; + } + + .sport { + width: 100%; + } + } + + //articles + .articles { + display: flex; + flex-direction: row; + justify-content: center; + margin-top: $big-spacing; + flex-wrap: wrap; + gap: 30px; + z-index: 0; + position: relative; + max-width: 100%; + + .title { + text-transform: uppercase; + color: white; + font-weight: 400; + width: 100%; + padding-bottom: 6px; + margin-bottom: 15px; + + span { + text-align: center; + padding: 6px 12px; + } + + &--journalism { + span { + background-color: $journalism-color; + } + } + + &--sport { + span { + background-color: $sport-color; + } + } + + &--business { + span { + background-color: $business-color; + } + } + + &--culture { + span { + background-color: $culture-color; + } + } + + &--moto { + span { + background-color: $moto-color; + } + } + + &--policy { + span { + background-color: $news-color; + } + } + + &--kitchen { + span { + background-color: $kitchen-color; + } + } + + &--lifestyle { + span { + background-color: $lifestyle-color; + } + } + } + + &__big-article { + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + width: 100%; + + @include respond-above(md) { + width: calc(50% - 15px); + } + + .big-article__img { + width: 100%; + height: auto; + } + + .article__category { + padding: 3px 8px; + border-radius: 3px; + margin: $main-spacing $small-spacing $small-spacing; + text-align: center; + font-size: 10px; + + a { + text-decoration: none; + font-size: $small-font-size; + color: white; + } + + &--journalism { + background-color: $journalism-color; + width: 90px; + } + + &--sport { + background-color: $sport-color; + width: 70px; + } + + &--chronicle { + background-color: $base-color; + width: 150px; + } + + &--policy { + background-color: $news-color; + } + + &--culture { + background-color: $culture-color; + } + + &--moto { + background-color: $moto-color; + } + + &--business { + background-color: $business-color; + } + + &--kitchen { + background-color: $kitchen-color; + } + + &--lifestyle { + background-color: $lifestyle-color; + } + } + + #article-main { + display: flex; + flex-direction: column; + justify-content: center; + padding: 0 $main-spacing; + + .article-title { + margin: 0 0 10px 0; + + a { + text-decoration: none; + color: black; + transition: color 0.3s; + font-size: 22px; + + &:hover { + color: $base-color; + } + } + } + + .date-add { + font-size: $small-font-size; + color: #888888; + margin-bottom: 10px; + + i { + margin-right: 5px; + } + } + + .entry { + font-size: $small-font-size; + } + } + } + + &__small-articles { + width: 100%; + + @include respond-above(md) { + width: calc(50% - 15px); + } + + .small-article:nth-child(1) { + margin-top: 0; + } + + .small-article { + // box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1); + display: flex; + justify-content: flex-start; + margin: 25px 0; + + .small-article__img { + width: 30%; + margin-right: 15px; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + #article-main { + width: 60%; + display: flex; + flex-direction: column; + justify-content: flex-end; + + .article-title { + margin-bottom: 10px; + text-overflow: ellipsis; + overflow: hidden; + white-space: wrap; + width: 100%; + height: 40px; + line-height: 1.3; + + a { + font-size: 16px; + text-decoration: none; + color: black; + transition: color 0.3s; + font-weight: 400; + display: block; + + &:hover { + color: $base-color; + } + } + } + + .date-add { + font-size: 12px; + color: gray; + margin-bottom: 10px; + + i { + margin-right: 5px; + } + } + } + } + } + } + + .sport.articles { + justify-content: flex-start; + } + + .chronicle { + margin-top: $big-spacing; + width: 100%; + margin-bottom: 0; + z-index: 0; + position: relative; + + .title--chronicle { + text-transform: uppercase; + color: white; + font-weight: 400; + width: 100%; + padding-bottom: 6px; + margin-bottom: 15px; + border-bottom: 2px solid $base-color; + + span { + text-align: center; + background-color: $base-color; + padding: 6px 12px; + } + } + + .articles--chronicle { + display: flex; + flex-direction: row; + justify-content: center; + flex-wrap: wrap; + margin-top: 0; + + .articles__big-article { + width: 100%; + + @include respond-above(md) { + width: calc(50% - 15px); + } + } + + .articles__small-articles { + .small-article { + width: 100%; + } + } + } + } + } +} + +//footer + +.footer--footer { + background-color: #252729; + border-top: 15px solid #333; + margin-top: 20px; + max-width: 100%; + + @include respond-above(md) { + justify-content: start; + } + + .container { + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: center; + align-items: center; + } + + .logo, + .footer-menu { + padding: 15px; + margin: 20px 0; + } + + .logo { + @include respond-below(md) { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + } + } + + .footer-menu { + height: 100%; + + @include respond-above(md) { + border-left: 1px solid #333; + } + + #menu-container-1 { + ul { + list-style: none; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + + @include respond-above(md) { + flex-direction: row; + } + + li { + width: 100%; + + @include respond-above(md) { + width: auto; + } + + a { + text-align: center; + text-decoration: none; + color: white; + text-transform: uppercase; + font-size: 12px; + font-weight: 600; + padding: 10px; + display: block; + position: relative; + + &::after { + content: ""; + position: absolute; + width: 100%; + bottom: 0; + right: 0; + border-bottom: 2px solid #555; + z-index: 0; + } + } + } + + li.active { + a { + &::after { + border-bottom: 2px solid $base-color; + } + } + } + + li.parent { + a { + i { + display: none; + } + } + + ul { + display: none; + } + } + + #link-1 { + display: none; + } + + #link-2 { + display: none; + } + } + } + } +} + +//podstrony artykuly +.left-section__subpages { + width: 100%; + display: flex; + flex-direction: column; + + @include respond-above(md) { + width: calc(70% - 20px); + margin-right: 20px; + } + + .title { + border-bottom: 2px solid $base-color; + margin-bottom: 15px; + padding-bottom: 0; + + .site-title { + color: #fff; + padding: 6px 12px; + display: inline-block; + // background-color: $base-color; + font-size: 18px; + margin: 0; + + &--business { + background-color: $business-color; + } + + &--culture { + background-color: $culture-color; + } + + &--moto { + background-color: $moto-color; + } + + &--journalism { + background-color: $journalism-color; + } + + &--chronicle { + background-color: $base-color; + } + + &--policy { + background-color: $news-color; + } + + &--sport { + background-color: $sport-color; + } + + &--news { + background-color: $news-color; + } + } + } + + .articles { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + + .article-entry.first { + width: 100%; + padding: 0; + margin-left: 0; + } + + .article-entry { + width: 100%; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + margin-top: $main-spacing; + + @include respond-above(xs) { + &:nth-child(odd) { + margin-left: 10px; + } + } + + @include respond-above(xs) { + width: calc(50% - 5px); + } + + .main-image { + img { + width: 100%; + height: auto; + } + } + + .article-entry__category { + margin: 20px 20px 10px 20px; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + + a { + text-decoration: none; + font-size: $small-font-size; + color: white; + padding: 2px 10px; + margin: 0 5px 0 0; + border-radius: 3px; + display: inline-flex; + background-color: $base-color; + } + } + + .article-title { + margin: 0; + padding: 0 $main-spacing; + + a { + text-decoration: none; + color: black; + transition: color 0.3s; + font-size: 22px; + + &:hover { + color: $base-color; + } + } + } + + .date-add { + color: gray; + font-size: $small-font-size; + padding: $main-spacing; + + i { + margin-right: 5px; + } + } + + .entry { + padding: 0 $main-spacing; + + p { + strong { + font-weight: 400 !important; + } + } + } + + .more { + text-decoration: none; + padding: 3px 10px; + background-color: $base-color; + color: white; + font-size: $small-font-size; + border-radius: 3px; + display: inline-block; + margin: 0 20px 20px; + transition: background-color 0.3s; + + &:hover { + background-color: darken($color: $base-color, $amount: 30%); + } + } + } + + .article-entry.first { + width: 100%; + padding: 0; + margin-left: 0; + } + } + + //article + .article { + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + margin-bottom: 20px; + width: 100%; + + .main-image { + margin-bottom: 40px; + margin-top: 20px; + + img { + width: 100%; + height: auto; + } + } + + .article-title { + margin: 0; + padding: 20px 10px 0; + font-size: 30px; + font-family: "Roboto"; + font-weight: 600; + + @include respond-above(md) { + font-size: 40px; + } + } + + .social-icons { + display: flex; + flex-direction: row; + margin-top: 10px; + padding-left: 10px; + + .social-icons-text { + font-size: 15px; + font-weight: 600; + text-transform: uppercase; + margin-right: 25px; + margin-bottom: 0; + line-height: 30px; + text-align: center; + } + + a { + padding: 0 5px; + + img { + width: 100%; + height: auto; + object-fit: cover; + } + } + } + + .wrapper { + display: flex; + justify-content: flex-start; + padding: $small-spacing 0; + + .date-add, + .views { + font-size: 13px; + color: #888888; + padding: 0 10px; + + i { + margin-right: 5px; + } + } + + .article-tags { + ul { + display: flex; + flex-wrap: wrap; + list-style: none; + font-size: $small-font-size; + + i { + color: gray; + margin-right: 5px; + } + + li { + padding-right: 3px; + + a { + text-decoration: none; + color: black; + } + } + } + } + } + + .text { + padding: 0 10px; + + blockquote { + border-left: 5px solid $base-color; + padding-left: 25px; + } + + p { + img { + width: 100%; + height: auto; + } + } + } + + h2 { + font-size: 20px; + } + } +} + +//pager + +.pager { + margin-top: 20px; + width: 100%; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + list-style: none; + + li { + margin: 0 10px; + padding: 5px 10px; + border: 1px solid gray; + background-color: transparent; + transition: background-color 0.3s; + + &:hover { + background-color: $base-color; + + a { + color: white; + } + } + + a { + text-decoration: none; + color: black; + } + } + + li:nth-child(5), + li:nth-child(1) { + display: none; + } + + li:nth-child(3) { + &:hover { + background-color: transparent; + } + } +} + +.articles { + .article-list { + border: 1px solid #eee; + padding: 20px; + margin-bottom: 20px; + width: 100%; + + h3 { + a { + font-size: 1.25rem; + color: $base-color; + line-height: 1.5; + } + } + + .date-add { + font-size: 0.9rem; + color: rgba(0, 0, 0, 0.75); + } + } +} + +/* NADPISYWANE KLASY*/ + +//title +.title { + background-color: $gray-color; + border-bottom: none !important; + position: relative; + height: 40px; + + span { + position: absolute; + top: 50%; + left: 0; + transform: translateY(-50%); + height: 100% !important; + font-size: 14px !important; + text-align: center; + line-height: 40px; + padding: 0 12px !important; + font-weight: 600; + text-transform: uppercase; + } +} + +//articles__big-article +.articles__big-article { + position: relative; + box-shadow: none !important; + border-bottom: 3px solid $gray-color; + + .article__category { + position: absolute; + top: 0; + left: -10px; + border-radius: 0 !important; + transition: background-color 0.3s; + + &:hover { + background-color: $gray-color !important; + } + } + + #article-main { + width: 80%; + margin: 0 auto; + margin-top: -40px; + padding: 0 !important; + + .article-title { + background-color: white; + padding: 15px 20px 0 20px; + text-overflow: ellipsis; + overflow: hidden; + height: 74px; + font-size: 16px; + font-weight: 600; + line-height: 1.3; + + a { + font-family: "Roboto"; + } + } + + .date-add { + padding: 0 20px; + } + + .entry { + padding: 0 20px; + } + } +} + +//entry +.articles__big-article { + #article-main { + .entry { + padding-bottom: 20px; + + p { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 4; + overflow: hidden; + font-size: 16px; + } + } + } +} + +//chronicle last post +// .chronicle { +// .articles--chronicle { +// .small-article:nth-last-child(1) { +// display: none; +// } +// } +// } + +//li parent + +li.parent { + ul { + background-color: lighten($color: #19232d, $amount: 5%) !important; + } +} + +//popular-post +.popular-post-section { + .news-list { + list-style: none; + + li { + padding-bottom: 15px; + display: grid; + grid-template-columns: 80px 1fr; + grid-template-areas: + "img txt" + "img date"; + column-gap: 20px; + row-gap: 10px; + + .date-add { + grid-area: date; + color: #888888; + font-size: 12px; + + i { + margin-right: 5px; + } + } + + .news-list-img { + grid-area: img; + width: 100%; + height: 80px; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + a { + text-decoration: none; + color: black; + font-family: "Roboto"; + font-size: 15px; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + transition: color 0.3s; + grid-area: txt; + + &:hover { + color: $base-color; + } + } + } + } + + .title--sport { + span { + background-color: $sport-color !important; + } + } + + .title--journalism { + span { + background-color: $journalism-color !important; + } + } + + .title--policy { + span { + background-color: $news-color !important; + } + } + + .title--moto { + span { + background-color: $moto-color; + } + } + + .title--culture { + span { + background-color: $culture-color; + } + } + + .title--business { + span { + background-color: $business-color; + } + } +} + +//form-group--newsletter +.form-group--newsletter { + display: grid; + grid-template-columns: 1fr 50px; + grid-template-rows: 1fr 1fr; + grid-template-areas: + "title title" + "email btn"; + border: 1px solid #e7e8e8; + padding: 20px 20px 30px 20px; + background-color: #f2f2f2; + + label { + grid-area: title; + font-size: 13px; + } + + .form-control { + grid-area: email; + display: table-cell; + width: 100%; + margin-bottom: 0; + background: #333946; + border: none; + color: #f2f2f2; + vertical-align: middle; + outline: 0; + padding: 12px 15px; + margin: 0; + font-family: "roboto"; + font-size: 14px; + border-radius: 0; + height: 44px; + + &::placeholder { + color: white; + } + + &:focus { + outline: none; + } + + &:active { + outline: none; + } + } + + .form-group--button { + grid-area: btn; + background-color: #333946; + padding: 10px; + position: relative; + transition: background-color 0.3s; + border-radius: 0; + + &:hover { + background-color: $base-color; + } + + i { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: white; + } + } +} + +//search-form +.header__navigation { + #menu-container-1 { + display: flex; + justify-content: space-between; + align-items: center; + + .search--button { + background-color: transparent; + border: none; + + i { + font-size: 19px; + color: white; + cursor: pointer; + padding: 10px; + } + } + } +} + +#search-form { + background-color: white; + + form { + display: flex; + justify-content: flex-end; + height: 50px; + // margin-top: 1px; + + // @include respond-above(lg) { + // margin-top: 0px; + // } + + input { + background-color: lighten($color: #333946, $amount: 5%); + border: none; + color: white; + font-size: 14px; + padding: 0 12px; + height: 0; + transition: height 0.3s; + width: calc(30% - 5px); + } + + input:focus { + border: none; + outline: none; + } + + input::placeholder { + color: white; + } + + .search-input--active { + height: 100%; + padding: 8px 12px; + } + } +} + +//navigation-mobile + +.header__navigation { + position: relative; + width: 100%; + height: 50px; + + #menu-container-1 { + @include respond-above(md) { + height: 50px !important; + + ul { + height: 100%; + + li { + height: 100%; + + a { + line-height: 34px; + } + } + } + } + } + + #main-menu-btn { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + #main-menu-btn.active { + position: fixed; + top: 5%; + left: 90%; + + i { + font-size: 24px !important; + } + } +} + +#main-menu.visible { + #search-form { + display: none; + } + + #menu-container-1 { + .search--button { + display: none; + } + } +} + +//search-results +#search-results { + ul { + list-style: none; + } + + li { + display: grid; + grid-template-columns: 100px 1fr; + grid-template-areas: "img txt"; + gap: 15px; + margin-bottom: 20px; + + @include respond-above(xs) { + grid-template-columns: 250px 1fr; + grid-template-areas: "img txt"; + gap: 20px; + } + + .search-results-img { + grid-area: img; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .article-title { + grid-area: txt; + line-height: 0.6; + + @include respond-above(xs) { + line-height: 1; + } + + a { + text-decoration: none; + color: black; + transition: color 0.3s; + font-size: 14px; + + @include respond-above(xs) { + font-size: 18px; + } + + &:hover { + color: $base-color; + } + } + } + } +} + +//image-source +.image-source { + padding: 0 10px; + margin-bottom: 10px; + font-style: italic; + + span { + font-weight: 600; + font-style: normal; + } +} + +//author + +.author { + padding: 20px; + background-color: #f8f8f8; + + @include respond-below(sm) { + .author-row { + justify-content: center; + } + } + + .author-img { + width: 100px; + height: 100px; + + img { + height: 100%; + width: 100%; + object-fit: cover; + } + } + + .author-description { + .author-name { + color: $base-color; + font-weight: 600; + margin-bottom: 10px; + display: block; + + @include respond-below(sm) { + margin-top: 10px; + text-align: center; + } + } + + .author-text { + font-size: 14px; + + @include respond-below(sm) { + text-align: center; + } + } + } +} + +//navigation li + +#menu-container-1 { + ul { + li { + ul { + li { + background-color: #22303d !important; + + &:hover { + background-color: $base-color !important; + } + } + } + } + } +} + +//colors +.aktualności, +.bukowno, +.jaroszowiec, +.klucze, +.łobzów, +.olkusz, +.rabsztyn, +.wolbrom { + background-color: $news-color !important; +} + +.biznes { + background-color: $business-color !important; +} + +.kultura { + background-color: $culture-color !important; +} + +.motoryzacja { + background-color: $moto-color !important; +} + +.publicystyka { + background-color: $journalism-color !important; +} + +.policja { + background-color: $base-color !important; +} + +.polityka { + background-color: $news-color !important; +} + +.sport, +.piłkanożna, +.piłkaręczna, +.fitnessizdrowie, +.sportywalki { + background-color: $sport-color !important; +} + +.table-of-contents { + margin: 20px 20px 30px 20px; + box-shadow: 0 0px 3px 0 rgba(0, 0, 0, 0.1); + border-radius: 5px; + padding: 5px; + + .title { + background-color: transparent; + color: black; + font-weight: 600; + margin-bottom: 5px; + + span { + font-size: 18px !important; + text-transform: initial; + font-weight: 400; + } + } + + ol { + li { + &:before { + content: counters(item, ".") ". "; + counter-increment: item; + } + } + } + + ul { + li { + &:before { + content: counters(item, ".") ". "; + counter-increment: item; + } + } + } + + ol, + ul { + list-style: none; + counter-reset: item; + padding-left: 20px; + + li { + position: relative; + + a { + // color: black; + color: #269eae; + // text-decoration: none; + text-decoration: underline; + + &:hover { + // color: $base-color; + color: #1e7e8b; + } + } + } + } +} + +.main { + .left-section { + .kitchen.articles { + display: flex; + flex-direction: column; + + .articles__big-article { + display: flex; + width: 100%; + border-bottom: none; + + @include respond-below(xs) { + flex-direction: column; + } + + img { + width: 60%; + + @include respond-below(xs) { + width: 100%; + } + } + + #article-main { + width: 40%; + margin-top: 0; + border-bottom: 3px solid $gray-color; + border-top: 3px solid $gray-color; + + @include respond-below(xs) { + border-top: none; + width: 100%; + // margin: 0 auto; + // margin-top: -40px; + // padding: 0 !important; + } + } + } + + .articles__small-articles { + display: flex; + width: 100%; + gap: 30px; + + @include respond-below(xs) { + flex-wrap: wrap; + } + + .small-article { + display: flex; + flex-direction: column; + width: 25%; + margin-top: 0; + + @include respond-below(xs) { + width: calc(50% - 15px); + } + + &__img { + width: 100%; + } + + #article-main { + margin-top: 10px; + width: 100%; + flex-direction: column-reverse; + + .article-title { + height: 60px; + } + } + } + } + } + } +} + +//gallery +.gallery { + padding: $main-spacing; + + .gallery-title { + font-size: 20px; + font-weight: 600; + } + + .gallery-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: $small-spacing; + + .gallery-list-item { + width: calc(25% - 7.5px); + height: 160px; + margin: 0; + padding: 0; + + a { + width: 100%; + height: 100%; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + } + } +} \ No newline at end of file diff --git a/libraries/.htaccess b/libraries/.htaccess new file mode 100644 index 0000000..bb3a3b2 --- /dev/null +++ b/libraries/.htaccess @@ -0,0 +1,30 @@ +# /libraries/.htaccess +Options -Indexes + + + RewriteEngine On + + # 1) PRZEPUŚĆ cały katalog grid/ do jego własnego .htaccess + # (tu zatrzymujemy przetwarzanie reguł w tym pliku) + RewriteRule ^grid/ - [L] + RewriteRule ^filemanager-9.14.1/ - [L] + + # 2) POZWÓL na pliki statyczne w całym /libraries + RewriteRule ^.*\.(css|js|map|mjs|png|jpe?g|gif|svgz?|webp|ico|woff2?|woff|ttf|eot)$ - [L,NC] + + # 3) ZABLOKUJ wszystkie pliki wykonywalne w /libraries (poza grid/, bo już wyszliśmy [L]) + RewriteRule ^.*\.(php|phtml|phar|pht|cgi|pl|py|sh)$ - [F,NC] + + # 4) WSZYSTKO inne → 403 + RewriteRule ^ - [F] + + +# Ukryte pliki (.env itp.) – nie serwuj + + Require all denied + + +# Bezpieczeństwo MIME + + Header always set X-Content-Type-Options "nosniff" + diff --git a/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.css b/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.css new file mode 100644 index 0000000..6b8ff08 --- /dev/null +++ b/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.css @@ -0,0 +1,41 @@ +/** + * jQuery MotionCAPTCHA Plugin CSS + * josscrowcroft.com/projects/motioncaptcha-jquery-plugin/ + * + * Only these rules are absolutely necessary for the plugin. + * NB. The width & height of the canvas can be flexible to fit your layout but there's a recommended min/max + * - if you need it much bigger/smaller, you could tweak the background-positions of the shape classes. + */ + +/* The canvas: */ +#mc-canvas { + width:220px; /* For best results, set width to between 210px and 240px */ + height:154px; /* For best results, set height to between 140px and 170px */ + background:#fff -9999px -9999px no-repeat; + background-image: url('motionCaptcha-shapes.jpg') !important; +} + +/* The shapes: */ +#mc-canvas.triangle { background-position: 10px 10px } +#mc-canvas.x { background-position:-200px 10px } +#mc-canvas.rectangle { background-position:-400px 10px } +#mc-canvas.circle { background-position:-600px 10px } +#mc-canvas.check { background-position: 10px -150px } +#mc-canvas.caret { background-position:-200px -150px } +#mc-canvas.zigzag { background-position:-400px -150px } +#mc-canvas.arrow { background-position:-600px -150px } +#mc-canvas.leftbracket { background-position: 10px -300px } +#mc-canvas.rightbracket { background-position:-200px -300px } +#mc-canvas.v { background-position:-400px -300px } +#mc-canvas.delete { background-position:-600px -300px } +#mc-canvas.leftbrace { background-position: 10px -450px } +#mc-canvas.rightbrace { background-position:-200px -450px } +#mc-canvas.star { background-position:-400px -450px } +#mc-canvas.pigtail { background-position:-600px -450px } + +/* Disable mouse-selection on the page (only while user is actively drawing on the canvas): */ +.mc-noselect { + -webkit-user-select: none, + -moz-user-select: none, + user-select: none +} \ No newline at end of file diff --git a/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.js b/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.js new file mode 100644 index 0000000..99d044d --- /dev/null +++ b/libraries/MotionCAPTCHA/jquery.motionCaptcha.0.2.js @@ -0,0 +1,654 @@ +/*! + * jQuery MotionCAPTCHA v0.2 + * + * Proof of concept only for now, check the roadmap to see when it will be ready for wider use! + * + * http://josscrowcroft.com/projects/motioncaptcha-jquery-plugin/ + * + * DEMO: http://josscrowcroft.com/demos/motioncaptcha/ + * CODE: https://github.com/josscrowcroft/MotionCAPTCHA + * + * Copyright (c) 2011 Joss Crowcroft - joss[at]josscrowcroftcom | http://www.josscrowcroft.com + * + * Incoporates other open source projects, attributed below. + */ +jQuery.fn.motionCaptcha || (function($) { + + /** + * Main plugin function definition + */ + $.fn.motionCaptcha = function(options) { + + /** + * Act on matched form element: + * This could be set up to iterate over multiple elements, but tbh would it ever be useful? + */ + return this.each(function() { + + // Build main options before element iteration: + var opts = $.extend({}, $.fn.motionCaptcha.defaults, options); + + // Ensure option ID params are valid #selectors: + opts.actionId = '#' + opts.actionId.replace(/\#/g, ''); + opts.canvasId = '#' + opts.canvasId.replace(/\#/g, ''); + opts.divId = '#' + opts.divId.replace(/\#/g, ''); + opts.submitId = ( opts.submitId ) ? '#' + opts.submitId.replace(/\#/g, '') : false; + + // Plugin setup: + + // Set up Harmony vars: + var brush, + locked = false; + + // Set up MotionCAPTCHA form and jQuery elements: + var $body = $('body'), + $form = $(this), + $container = $(opts.divId), + $canvas = $(opts.canvasId); + + // Set up MotionCAPTCHA canvas vars: + var canvasWidth = $canvas.width(), + canvasHeight = $canvas.height(), + borderLeftWidth = 1 * $canvas.css('borderLeftWidth').replace('px', ''), + borderTopWidth = 1 * $canvas.css('borderTopWidth').replace('px', ''); + + // Canvas setup: + + // Set the canvas DOM element's dimensions to match the display width/height (pretty important): + $canvas[0].width = canvasWidth; + $canvas[0].height = canvasHeight; + + // Get DOM reference to canvas context: + var ctx = $canvas[0].getContext("2d"); + + // Add canvasWidth and canvasHeight values to context, for Ribbon brush: + ctx.canvasWidth = canvasWidth; + ctx.canvasHeight = canvasHeight; + + // Set canvas context font and fillStyle: + ctx.font = opts.canvasFont; + ctx.fillStyle = opts.canvasTextColor; + + // Set random shape + $canvas.addClass( opts.shapes[Math.floor(Math.random() * (opts.shapes.length) )] ); + + // Set up Dollar Recognizer and drawing vars: + var _isDown = false, + _holdStill = false, + _points = [], + _r = new DollarRecognizer(); + + // Create the Harmony Ribbon brush: + brush = new Ribbon(ctx); + + + + + // Mousedown event + // Start Harmony brushstroke and begin recording DR points: + var touchStartEvent = function(event) { + if ( locked ) + return false; + + // Prevent default action: + event.preventDefault(); + + // Get mouse position inside the canvas: + var pos = getPos(event), + x = pos[0], + y = pos[1]; + + // Internal drawing var + _isDown = true; + + // Prevent jumpy-touch bug on android, no effect on other platforms: + _holdStill = true; + + // Disable text selection: + $('body').addClass('mc-noselect'); + + // Clear canvas: + ctx.clearRect(0, 0, canvasWidth, canvasHeight); + + // Start brushstroke: + brush.strokeStart(x, y); + + // Remove 'mc-invalid' and 'mc-valid' classes from canvas: + $canvas.removeClass('mc-invalid mc-valid'); + + // Add the first point to the points array: + _points = [NewPoint(x, y)]; + + return false; + }; // mousedown/touchstart event + + // Mousemove event: + var touchMoveEvent = function(event) { + if ( _holdStill ) { + return _holdStill = 0; + } + // If mouse is down and canvas not locked: + if ( !locked && _isDown ) { + + // Prevent default action: + event.preventDefault(); + + // Get mouse position inside the canvas: + var pos = getPos(event), + x = pos[0], + y = pos[1]; + + // Append point to points array: + _points[_points.length] = NewPoint(x, y); + + // Do brushstroke: + brush.stroke(x, y); + } + return false; + }; // mousemove/touchmove event + + + // Mouseup event: + var touchEndEvent = function(event) { + // If mouse is down and canvas not locked: + if ( !locked && _isDown ) { + _isDown = false; + + // Allow text-selection again: + $('body').removeClass('mc-noselect'); + + // Dollar Recognizer result: + if (_points.length >= 10) { + var result = _r.Recognize(_points); + // Check result: + if ( $canvas.attr('class').match(result.Name) && result.Score > 0.7 ) { + + // Lock the canvas: + locked = 1; + + // Destroy the Harmony brush (give it time to finish drawing) + setTimeout( brush.destroy, 500 ); + + // Add 'mc-valid' class to canvas: + $canvas.addClass('mc-valid'); + + // Write success message into canvas: + ctx.fillText(opts.successMsg, 10, 24); + + // Call the onSuccess function to handle the rest of the business: + // Pass in the form, the canvas, the canvas context: + opts.onSuccess($form, $canvas, ctx); + + } else { + + // Add 'mc-invalid' class to canvas: + $canvas.addClass('mc-invalid'); + + // Write error message into canvas: + ctx.fillText(opts.errorMsg, 10, 24); + + // Pass off to the error callback to finish up: + opts.onError($form, $canvas, ctx); + } + + } else { // fewer than 10 points were recorded: + + // Add 'mc-invalid' class to canvas: + $canvas.addClass('mc-invalid'); + + // Write error message into canvas: + ctx.fillText(opts.errorMsg, 10, 24); + + // Pass off to the error callback to finish up: + opts.onError($form, $canvas, ctx); + } + } + return false; + }; // mouseup/touchend event + + // Bind events to canvas: + $canvas.bind({ + mousedown: touchStartEvent, + mousemove: touchMoveEvent, + mouseup: touchEndEvent, + }); + + // Mobile touch events: + $canvas[0].addEventListener('touchstart', touchStartEvent, false); + $canvas[0].addEventListener('touchmove', touchMoveEvent, false); + $canvas[0].addEventListener('touchend', touchEndEvent, false); + + // Add active CSS class to form: + $form.addClass(opts.cssClass.replace(/\./, '')) + + + /** + * Get X/Y mouse position, relative to (/inside) the canvas + * + * Handles cross-browser quirks rather nicely, I feel. + * + * @todo For 1.0, if no way to obtain coordinates, don't activate MotionCAPTCHA. + */ + function getPos(event) { + var x, y; + + // Check for mobile first to avoid android jumpy-touch bug (iOS / Android): + if ( event.touches && event.touches.length > 0 ) { + // iOS/android uses event.touches, relative to entire page: + x = event.touches[0].pageX - $canvas.offset().left + borderLeftWidth; + y = event.touches[0].pageY - $canvas.offset().top + borderTopWidth; + } else if ( event.offsetX ) { + // Chrome/Safari give the event offset relative to the target event: + x = event.offsetX - borderLeftWidth; + y = event.offsetY - borderTopWidth; + } else { + // Otherwise, subtract page click from canvas offset (Firefox uses this): + x = event.pageX - $canvas.offset().left - borderLeftWidth; + y = event.pageY - $canvas.offset().top - borderTopWidth; + } + return [x,y]; + } + + }); // this.each + + } // end main plugin function + + + /** + * Exposed default plugin settings, which can be overridden in plugin call. + */ + $.fn.motionCaptcha.defaults = { + actionId: '#mc-action', // The ID of the input containing the form action + divId: '#mc', // If you use an ID other than '#mc' for the placeholder, pass it in here + canvasId: '#mc-canvas', // The ID of the MotionCAPTCHA canvas element + submitId: false, // If your form has multiple submit buttons, give the ID of the main one here + cssClass: '.mc-active', // This CSS class is applied to the form, when the plugin is active + + // An array of shape names that you want MotionCAPTCHA to use: + shapes: ['triangle', 'x', 'rectangle', 'circle', 'check', 'caret', 'zigzag', 'arrow', 'leftbracket', 'rightbracket', 'v', 'delete', 'star', 'pigtail'], + + // Canvas vars: + canvasFont: '15px "Lucida Grande"', + canvasTextColor: '#111', + + // These messages are displayed inside the canvas after a user finishes drawing: + errorMsg: 'Please try again.', + successMsg: 'Captcha passed!', + + // This message is displayed if the user's browser doesn't support canvas: + noCanvasMsg: "Your browser doesn't support - try Chrome, FF4, Safari or IE9.", + + // This could be any HTML string (eg. ''): + label: '

Please draw the shape in the box to submit the form:

', + + // Callback function to execute when a user successfully draws the shape + // Passed in the form, the canvas and the canvas context + // Scope (this) is active plugin options object (opts) + // NB: The default onSuccess callback function enables the submit button, and adds the form action attribute: + onSuccess: function($form, $canvas, ctx) { + var opts = this, + $submit = opts.submitId ? $form.find(opts.submitId) : $form.find('input[type=submit]:disabled'); + + // Set the form action: + $form.attr( 'action', $(opts.actionId).val() ); + + // Enable the submit button: + $submit.prop('disabled', false); + $( '#contact-form-send' ).removeAttr( 'disabled' ); + + return; + }, + + // Callback function to execute when a user successfully draws the shape + // Passed in the form, the canvas and the canvas context + // Scope (this) is active plugin options object (opts) + onError: function($form, $canvas, ctx) { + var opts = this; + return; + } + }; + + + + + + /*! + * Harmony | mrdoob | Ribbon Brush class + * http://mrdoob.com/projects/harmony/ + */ + + function Ribbon( ctx ) { + this.init( ctx ); + } + + Ribbon.prototype = { + ctx: null, + X: null, + Y: null, + painters: null, + interval: null, + init: function( ctx ) { + var scope = this, + userAgent = navigator.userAgent.toLowerCase(), + brushSize = ( userAgent.search("android") > -1 || userAgent.search("iphone") > -1 ) ? 2 : 1, + strokeColor = [0, 0, 0]; + + this.ctx = ctx; + this.ctx.globalCompositeOperation = 'source-over'; + + this.X = this.ctx.canvasWidth / 2; + this.Y = this.ctx.canvasHeight / 2; + + this.painters = []; + + // Draw each of the lines: + for ( var i = 0; i < 38; i++ ) { + this.painters.push({ + dx: this.ctx.canvasWidth / 2, + dy: this.ctx.canvasHeight / 2, + ax: 0, + ay: 0, + div: 0.1, + ease: Math.random() * 0.18 + 0.60 + }); + } + + // Set the ticker: + this.interval = setInterval( update, 1000/60 ); + + function update() { + var i; + + scope.ctx.lineWidth = brushSize; + scope.ctx.strokeStyle = "rgba(" + strokeColor[0] + ", " + strokeColor[1] + ", " + strokeColor[2] + ", " + 0.06 + ")"; + + for ( i = 0; i < scope.painters.length; i++ ) { + scope.ctx.beginPath(); + scope.ctx.moveTo(scope.painters[i].dx, scope.painters[i].dy); + + scope.painters[i].dx -= scope.painters[i].ax = (scope.painters[i].ax + (scope.painters[i].dx - scope.X) * scope.painters[i].div) * scope.painters[i].ease; + scope.painters[i].dy -= scope.painters[i].ay = (scope.painters[i].ay + (scope.painters[i].dy - scope.Y) * scope.painters[i].div) * scope.painters[i].ease; + scope.ctx.lineTo(scope.painters[i].dx, scope.painters[i].dy); + scope.ctx.stroke(); + } + } + }, + destroy: function() { + clearInterval(this.interval); + }, + strokeStart: function( X, Y ) { + this.X = X; + this.Y = Y + + for (var i = 0; i < this.painters.length; i++) { + this.painters[i].dx = X; + this.painters[i].dy = Y; + } + + this.shouldDraw = true; + }, + stroke: function( X, Y ) { + this.X = X; + this.Y = Y; + } + }; + + + + /*! + * The $1 Unistroke Recognizer + * http://depts.washington.edu/aimgroup/proj/dollar/ + * + * Jacob O. Wobbrock, Ph.D. | wobbrock@u.washington.edu + * Andrew D. Wilson, Ph.D. | awilson@microsoft.com + * Yang Li, Ph.D. | yangli@cs.washington.edu + * + * Modified to include the Protractor gesture recognizing algorithm + * http://www.yangl.org/pdf/protractor-chi2010.pdf + * + * Adapted and modified for purpose by Joss Crowcroft + * http://www.josscrowcroft.com + * + * The original software is distributed under the "New BSD License" agreement + * + * Copyright (c) 2007-2011, Jacob O. Wobbrock, Andrew D. Wilson and Yang Li. All rights reserved. + **/ + + // Point class + function Point(x, y) { + this.X = x; + this.Y = y; + } + + // Wrapper for Point class (saves mega kb when compressing the template definitions): + function NewPoint(x, y) { + return new Point(x, y) + } + + // Rectangle class + function Rectangle(x, y, width, height) { + this.X = x; + this.Y = y; + this.Width = width; + this.Height = height; + } + + // Template class: a unistroke template + function Template(name, points) { + this.Name = name; + this.Points = Resample(points, NumPoints); + var radians = IndicativeAngle(this.Points); + this.Points = RotateBy(this.Points, -radians); + this.Points = ScaleTo(this.Points, SquareSize); + this.Points = TranslateTo(this.Points, Origin); + this.Vector = Vectorize(this.Points); // for Protractor + } + + // Result class + function Result(name, score) { + this.Name = name; + this.Score = score; + } + + // DollarRecognizer class constants + var NumTemplates = 16, + NumPoints = 64, + SquareSize = 250.0, + Origin = NewPoint(0,0); + + // DollarRecognizer class + function DollarRecognizer() { + + // Predefined templates for each gesture type: + this.Templates = []; + + this.Templates.push( new Template("triangle", [NewPoint(137,139),NewPoint(135,141),NewPoint(133,144),NewPoint(132,146),NewPoint(130,149),NewPoint(128,151),NewPoint(126,155),NewPoint(123,160),NewPoint(120,166),NewPoint(116,171),NewPoint(112,177),NewPoint(107,183),NewPoint(102,188),NewPoint(100,191),NewPoint(95,195),NewPoint(90,199),NewPoint(86,203),NewPoint(82,206),NewPoint(80,209),NewPoint(75,213),NewPoint(73,213),NewPoint(70,216),NewPoint(67,219),NewPoint(64,221),NewPoint(61,223),NewPoint(60,225),NewPoint(62,226),NewPoint(65,225),NewPoint(67,226),NewPoint(74,226),NewPoint(77,227),NewPoint(85,229),NewPoint(91,230),NewPoint(99,231),NewPoint(108,232),NewPoint(116,233),NewPoint(125,233),NewPoint(134,234),NewPoint(145,233),NewPoint(153,232),NewPoint(160,233),NewPoint(170,234),NewPoint(177,235),NewPoint(179,236),NewPoint(186,237),NewPoint(193,238),NewPoint(198,239),NewPoint(200,237),NewPoint(202,239),NewPoint(204,238),NewPoint(206,234),NewPoint(205,230),NewPoint(202,222),NewPoint(197,216),NewPoint(192,207),NewPoint(186,198),NewPoint(179,189),NewPoint(174,183),NewPoint(170,178),NewPoint(164,171),NewPoint(161,168),NewPoint(154,160),NewPoint(148,155),NewPoint(143,150),NewPoint(138,148),NewPoint(136,148)]) ); + + this.Templates.push( new Template("x", [NewPoint(87,142),NewPoint(89,145),NewPoint(91,148),NewPoint(93,151),NewPoint(96,155),NewPoint(98,157),NewPoint(100,160),NewPoint(102,162),NewPoint(106,167),NewPoint(108,169),NewPoint(110,171),NewPoint(115,177),NewPoint(119,183),NewPoint(123,189),NewPoint(127,193),NewPoint(129,196),NewPoint(133,200),NewPoint(137,206),NewPoint(140,209),NewPoint(143,212),NewPoint(146,215),NewPoint(151,220),NewPoint(153,222),NewPoint(155,223),NewPoint(157,225),NewPoint(158,223),NewPoint(157,218),NewPoint(155,211),NewPoint(154,208),NewPoint(152,200),NewPoint(150,189),NewPoint(148,179),NewPoint(147,170),NewPoint(147,158),NewPoint(147,148),NewPoint(147,141),NewPoint(147,136),NewPoint(144,135),NewPoint(142,137),NewPoint(140,139),NewPoint(135,145),NewPoint(131,152),NewPoint(124,163),NewPoint(116,177),NewPoint(108,191),NewPoint(100,206),NewPoint(94,217),NewPoint(91,222),NewPoint(89,225),NewPoint(87,226),NewPoint(87,224)]) ); + + this.Templates.push( new Template("rectangle", [NewPoint(78,149),NewPoint(78,153),NewPoint(78,157),NewPoint(78,160),NewPoint(79,162),NewPoint(79,164),NewPoint(79,167),NewPoint(79,169),NewPoint(79,173),NewPoint(79,178),NewPoint(79,183),NewPoint(80,189),NewPoint(80,193),NewPoint(80,198),NewPoint(80,202),NewPoint(81,208),NewPoint(81,210),NewPoint(81,216),NewPoint(82,222),NewPoint(82,224),NewPoint(82,227),NewPoint(83,229),NewPoint(83,231),NewPoint(85,230),NewPoint(88,232),NewPoint(90,233),NewPoint(92,232),NewPoint(94,233),NewPoint(99,232),NewPoint(102,233),NewPoint(106,233),NewPoint(109,234),NewPoint(117,235),NewPoint(123,236),NewPoint(126,236),NewPoint(135,237),NewPoint(142,238),NewPoint(145,238),NewPoint(152,238),NewPoint(154,239),NewPoint(165,238),NewPoint(174,237),NewPoint(179,236),NewPoint(186,235),NewPoint(191,235),NewPoint(195,233),NewPoint(197,233),NewPoint(200,233),NewPoint(201,235),NewPoint(201,233),NewPoint(199,231),NewPoint(198,226),NewPoint(198,220),NewPoint(196,207),NewPoint(195,195),NewPoint(195,181),NewPoint(195,173),NewPoint(195,163),NewPoint(194,155),NewPoint(192,145),NewPoint(192,143),NewPoint(192,138),NewPoint(191,135),NewPoint(191,133),NewPoint(191,130),NewPoint(190,128),NewPoint(188,129),NewPoint(186,129),NewPoint(181,132),NewPoint(173,131),NewPoint(162,131),NewPoint(151,132),NewPoint(149,132),NewPoint(138,132),NewPoint(136,132),NewPoint(122,131),NewPoint(120,131),NewPoint(109,130),NewPoint(107,130),NewPoint(90,132),NewPoint(81,133),NewPoint(76,133)]) ); + + this.Templates.push( new Template("circle", [NewPoint(127,141),NewPoint(124,140),NewPoint(120,139),NewPoint(118,139),NewPoint(116,139),NewPoint(111,140),NewPoint(109,141),NewPoint(104,144),NewPoint(100,147),NewPoint(96,152),NewPoint(93,157),NewPoint(90,163),NewPoint(87,169),NewPoint(85,175),NewPoint(83,181),NewPoint(82,190),NewPoint(82,195),NewPoint(83,200),NewPoint(84,205),NewPoint(88,213),NewPoint(91,216),NewPoint(96,219),NewPoint(103,222),NewPoint(108,224),NewPoint(111,224),NewPoint(120,224),NewPoint(133,223),NewPoint(142,222),NewPoint(152,218),NewPoint(160,214),NewPoint(167,210),NewPoint(173,204),NewPoint(178,198),NewPoint(179,196),NewPoint(182,188),NewPoint(182,177),NewPoint(178,167),NewPoint(170,150),NewPoint(163,138),NewPoint(152,130),NewPoint(143,129),NewPoint(140,131),NewPoint(129,136),NewPoint(126,139)]) ); + + this.Templates.push( new Template("check", [NewPoint(91,185),NewPoint(93,185),NewPoint(95,185),NewPoint(97,185),NewPoint(100,188),NewPoint(102,189),NewPoint(104,190),NewPoint(106,193),NewPoint(108,195),NewPoint(110,198),NewPoint(112,201),NewPoint(114,204),NewPoint(115,207),NewPoint(117,210),NewPoint(118,212),NewPoint(120,214),NewPoint(121,217),NewPoint(122,219),NewPoint(123,222),NewPoint(124,224),NewPoint(126,226),NewPoint(127,229),NewPoint(129,231),NewPoint(130,233),NewPoint(129,231),NewPoint(129,228),NewPoint(129,226),NewPoint(129,224),NewPoint(129,221),NewPoint(129,218),NewPoint(129,212),NewPoint(129,208),NewPoint(130,198),NewPoint(132,189),NewPoint(134,182),NewPoint(137,173),NewPoint(143,164),NewPoint(147,157),NewPoint(151,151),NewPoint(155,144),NewPoint(161,137),NewPoint(165,131),NewPoint(171,122),NewPoint(174,118),NewPoint(176,114),NewPoint(177,112),NewPoint(177,114),NewPoint(175,116),NewPoint(173,118)]) ); + + this.Templates.push( new Template("caret", [NewPoint(79,245),NewPoint(79,242),NewPoint(79,239),NewPoint(80,237),NewPoint(80,234),NewPoint(81,232),NewPoint(82,230),NewPoint(84,224),NewPoint(86,220),NewPoint(86,218),NewPoint(87,216),NewPoint(88,213),NewPoint(90,207),NewPoint(91,202),NewPoint(92,200),NewPoint(93,194),NewPoint(94,192),NewPoint(96,189),NewPoint(97,186),NewPoint(100,179),NewPoint(102,173),NewPoint(105,165),NewPoint(107,160),NewPoint(109,158),NewPoint(112,151),NewPoint(115,144),NewPoint(117,139),NewPoint(119,136),NewPoint(119,134),NewPoint(120,132),NewPoint(121,129),NewPoint(122,127),NewPoint(124,125),NewPoint(126,124),NewPoint(129,125),NewPoint(131,127),NewPoint(132,130),NewPoint(136,139),NewPoint(141,154),NewPoint(145,166),NewPoint(151,182),NewPoint(156,193),NewPoint(157,196),NewPoint(161,209),NewPoint(162,211),NewPoint(167,223),NewPoint(169,229),NewPoint(170,231),NewPoint(173,237),NewPoint(176,242),NewPoint(177,244),NewPoint(179,250),NewPoint(181,255),NewPoint(182,257)]) ); + + this.Templates.push( new Template("zigzag", [NewPoint(307,216),NewPoint(333,186),NewPoint(356,215),NewPoint(375,186),NewPoint(399,216),NewPoint(418,186)]) ); + + this.Templates.push( new Template("arrow", [NewPoint(68,222),NewPoint(70,220),NewPoint(73,218),NewPoint(75,217),NewPoint(77,215),NewPoint(80,213),NewPoint(82,212),NewPoint(84,210),NewPoint(87,209),NewPoint(89,208),NewPoint(92,206),NewPoint(95,204),NewPoint(101,201),NewPoint(106,198),NewPoint(112,194),NewPoint(118,191),NewPoint(124,187),NewPoint(127,186),NewPoint(132,183),NewPoint(138,181),NewPoint(141,180),NewPoint(146,178),NewPoint(154,173),NewPoint(159,171),NewPoint(161,170),NewPoint(166,167),NewPoint(168,167),NewPoint(171,166),NewPoint(174,164),NewPoint(177,162),NewPoint(180,160),NewPoint(182,158),NewPoint(183,156),NewPoint(181,154),NewPoint(178,153),NewPoint(171,153),NewPoint(164,153),NewPoint(160,153),NewPoint(150,154),NewPoint(147,155),NewPoint(141,157),NewPoint(137,158),NewPoint(135,158),NewPoint(137,158),NewPoint(140,157),NewPoint(143,156),NewPoint(151,154),NewPoint(160,152),NewPoint(170,149),NewPoint(179,147),NewPoint(185,145),NewPoint(192,144),NewPoint(196,144),NewPoint(198,144),NewPoint(200,144),NewPoint(201,147),NewPoint(199,149),NewPoint(194,157),NewPoint(191,160),NewPoint(186,167),NewPoint(180,176),NewPoint(177,179),NewPoint(171,187),NewPoint(169,189),NewPoint(165,194),NewPoint(164,196)]) ); + + this.Templates.push( new Template("leftbracket", [NewPoint(140,124),NewPoint(138,123),NewPoint(135,122),NewPoint(133,123),NewPoint(130,123),NewPoint(128,124),NewPoint(125,125),NewPoint(122,124),NewPoint(120,124),NewPoint(118,124),NewPoint(116,125),NewPoint(113,125),NewPoint(111,125),NewPoint(108,124),NewPoint(106,125),NewPoint(104,125),NewPoint(102,124),NewPoint(100,123),NewPoint(98,123),NewPoint(95,124),NewPoint(93,123),NewPoint(90,124),NewPoint(88,124),NewPoint(85,125),NewPoint(83,126),NewPoint(81,127),NewPoint(81,129),NewPoint(82,131),NewPoint(82,134),NewPoint(83,138),NewPoint(84,141),NewPoint(84,144),NewPoint(85,148),NewPoint(85,151),NewPoint(86,156),NewPoint(86,160),NewPoint(86,164),NewPoint(86,168),NewPoint(87,171),NewPoint(87,175),NewPoint(87,179),NewPoint(87,182),NewPoint(87,186),NewPoint(88,188),NewPoint(88,195),NewPoint(88,198),NewPoint(88,201),NewPoint(88,207),NewPoint(89,211),NewPoint(89,213),NewPoint(89,217),NewPoint(89,222),NewPoint(88,225),NewPoint(88,229),NewPoint(88,231),NewPoint(88,233),NewPoint(88,235),NewPoint(89,237),NewPoint(89,240),NewPoint(89,242),NewPoint(91,241),NewPoint(94,241),NewPoint(96,240),NewPoint(98,239),NewPoint(105,240),NewPoint(109,240),NewPoint(113,239),NewPoint(116,240),NewPoint(121,239),NewPoint(130,240),NewPoint(136,237),NewPoint(139,237),NewPoint(144,238),NewPoint(151,237),NewPoint(157,236),NewPoint(159,237)]) ); + + this.Templates.push( new Template("rightbracket", [NewPoint(112,138),NewPoint(112,136),NewPoint(115,136),NewPoint(118,137),NewPoint(120,136),NewPoint(123,136),NewPoint(125,136),NewPoint(128,136),NewPoint(131,136),NewPoint(134,135),NewPoint(137,135),NewPoint(140,134),NewPoint(143,133),NewPoint(145,132),NewPoint(147,132),NewPoint(149,132),NewPoint(152,132),NewPoint(153,134),NewPoint(154,137),NewPoint(155,141),NewPoint(156,144),NewPoint(157,152),NewPoint(158,161),NewPoint(160,170),NewPoint(162,182),NewPoint(164,192),NewPoint(166,200),NewPoint(167,209),NewPoint(168,214),NewPoint(168,216),NewPoint(169,221),NewPoint(169,223),NewPoint(169,228),NewPoint(169,231),NewPoint(166,233),NewPoint(164,234),NewPoint(161,235),NewPoint(155,236),NewPoint(147,235),NewPoint(140,233),NewPoint(131,233),NewPoint(124,233),NewPoint(117,235),NewPoint(114,238),NewPoint(112,238)]) ); + + this.Templates.push( new Template("v", [NewPoint(89,164),NewPoint(90,162),NewPoint(92,162),NewPoint(94,164),NewPoint(95,166),NewPoint(96,169),NewPoint(97,171),NewPoint(99,175),NewPoint(101,178),NewPoint(103,182),NewPoint(106,189),NewPoint(108,194),NewPoint(111,199),NewPoint(114,204),NewPoint(117,209),NewPoint(119,214),NewPoint(122,218),NewPoint(124,222),NewPoint(126,225),NewPoint(128,228),NewPoint(130,229),NewPoint(133,233),NewPoint(134,236),NewPoint(136,239),NewPoint(138,240),NewPoint(139,242),NewPoint(140,244),NewPoint(142,242),NewPoint(142,240),NewPoint(142,237),NewPoint(143,235),NewPoint(143,233),NewPoint(145,229),NewPoint(146,226),NewPoint(148,217),NewPoint(149,208),NewPoint(149,205),NewPoint(151,196),NewPoint(151,193),NewPoint(153,182),NewPoint(155,172),NewPoint(157,165),NewPoint(159,160),NewPoint(162,155),NewPoint(164,150),NewPoint(165,148),NewPoint(166,146)]) ); + + this.Templates.push( new Template("delete", [NewPoint(123,129),NewPoint(123,131),NewPoint(124,133),NewPoint(125,136),NewPoint(127,140),NewPoint(129,142),NewPoint(133,148),NewPoint(137,154),NewPoint(143,158),NewPoint(145,161),NewPoint(148,164),NewPoint(153,170),NewPoint(158,176),NewPoint(160,178),NewPoint(164,183),NewPoint(168,188),NewPoint(171,191),NewPoint(175,196),NewPoint(178,200),NewPoint(180,202),NewPoint(181,205),NewPoint(184,208),NewPoint(186,210),NewPoint(187,213),NewPoint(188,215),NewPoint(186,212),NewPoint(183,211),NewPoint(177,208),NewPoint(169,206),NewPoint(162,205),NewPoint(154,207),NewPoint(145,209),NewPoint(137,210),NewPoint(129,214),NewPoint(122,217),NewPoint(118,218),NewPoint(111,221),NewPoint(109,222),NewPoint(110,219),NewPoint(112,217),NewPoint(118,209),NewPoint(120,207),NewPoint(128,196),NewPoint(135,187),NewPoint(138,183),NewPoint(148,167),NewPoint(157,153),NewPoint(163,145),NewPoint(165,142),NewPoint(172,133),NewPoint(177,127),NewPoint(179,127),NewPoint(180,125)]) ); + + this.Templates.push( new Template("star", [NewPoint(75,250),NewPoint(75,247),NewPoint(77,244),NewPoint(78,242),NewPoint(79,239),NewPoint(80,237),NewPoint(82,234),NewPoint(82,232),NewPoint(84,229),NewPoint(85,225),NewPoint(87,222),NewPoint(88,219),NewPoint(89,216),NewPoint(91,212),NewPoint(92,208),NewPoint(94,204),NewPoint(95,201),NewPoint(96,196),NewPoint(97,194),NewPoint(98,191),NewPoint(100,185),NewPoint(102,178),NewPoint(104,173),NewPoint(104,171),NewPoint(105,164),NewPoint(106,158),NewPoint(107,156),NewPoint(107,152),NewPoint(108,145),NewPoint(109,141),NewPoint(110,139),NewPoint(112,133),NewPoint(113,131),NewPoint(116,127),NewPoint(117,125),NewPoint(119,122),NewPoint(121,121),NewPoint(123,120),NewPoint(125,122),NewPoint(125,125),NewPoint(127,130),NewPoint(128,133),NewPoint(131,143),NewPoint(136,153),NewPoint(140,163),NewPoint(144,172),NewPoint(145,175),NewPoint(151,189),NewPoint(156,201),NewPoint(161,213),NewPoint(166,225),NewPoint(169,233),NewPoint(171,236),NewPoint(174,243),NewPoint(177,247),NewPoint(178,249),NewPoint(179,251),NewPoint(180,253),NewPoint(180,255),NewPoint(179,257),NewPoint(177,257),NewPoint(174,255),NewPoint(169,250),NewPoint(164,247),NewPoint(160,245),NewPoint(149,238),NewPoint(138,230),NewPoint(127,221),NewPoint(124,220),NewPoint(112,212),NewPoint(110,210),NewPoint(96,201),NewPoint(84,195),NewPoint(74,190),NewPoint(64,182),NewPoint(55,175),NewPoint(51,172),NewPoint(49,170),NewPoint(51,169),NewPoint(56,169),NewPoint(66,169),NewPoint(78,168),NewPoint(92,166),NewPoint(107,164),NewPoint(123,161),NewPoint(140,162),NewPoint(156,162),NewPoint(171,160),NewPoint(173,160),NewPoint(186,160),NewPoint(195,160),NewPoint(198,161),NewPoint(203,163),NewPoint(208,163),NewPoint(206,164),NewPoint(200,167),NewPoint(187,172),NewPoint(174,179),NewPoint(172,181),NewPoint(153,192),NewPoint(137,201),NewPoint(123,211),NewPoint(112,220),NewPoint(99,229),NewPoint(90,237),NewPoint(80,244),NewPoint(73,250),NewPoint(69,254),NewPoint(69,252)]) ); + + this.Templates.push( new Template("pigtail", [NewPoint(81,219),NewPoint(84,218),NewPoint(86,220),NewPoint(88,220),NewPoint(90,220),NewPoint(92,219),NewPoint(95,220),NewPoint(97,219),NewPoint(99,220),NewPoint(102,218),NewPoint(105,217),NewPoint(107,216),NewPoint(110,216),NewPoint(113,214),NewPoint(116,212),NewPoint(118,210),NewPoint(121,208),NewPoint(124,205),NewPoint(126,202),NewPoint(129,199),NewPoint(132,196),NewPoint(136,191),NewPoint(139,187),NewPoint(142,182),NewPoint(144,179),NewPoint(146,174),NewPoint(148,170),NewPoint(149,168),NewPoint(151,162),NewPoint(152,160),NewPoint(152,157),NewPoint(152,155),NewPoint(152,151),NewPoint(152,149),NewPoint(152,146),NewPoint(149,142),NewPoint(148,139),NewPoint(145,137),NewPoint(141,135),NewPoint(139,135),NewPoint(134,136),NewPoint(130,140),NewPoint(128,142),NewPoint(126,145),NewPoint(122,150),NewPoint(119,158),NewPoint(117,163),NewPoint(115,170),NewPoint(114,175),NewPoint(117,184),NewPoint(120,190),NewPoint(125,199),NewPoint(129,203),NewPoint(133,208),NewPoint(138,213),NewPoint(145,215),NewPoint(155,218),NewPoint(164,219),NewPoint(166,219),NewPoint(177,219),NewPoint(182,218),NewPoint(192,216),NewPoint(196,213),NewPoint(199,212),NewPoint(201,211)]) ); + + + // $1 Gesture Recognizer API (now using Protractor instead) + this.Recognize = function(points) { + var b = +Infinity, + t = 0, + radians, + i, + score, + vector; + + points = Resample(points, NumPoints); + radians = IndicativeAngle(points); + points = RotateBy(points, -radians); + vector = Vectorize(points); // for Protractor + + for (i = 0; i < this.Templates.length; i++) { + var d = OptimalCosineDistance(this.Templates[i].Vector, vector); + if (d < b) { + b = d; // best (least) distance + t = i; // unistroke template + } + } + return new Result(this.Templates[t].Name, 1 / b); + }; + + } + + // Helper functions: + function Resample(points, n) { + var I = PathLength(points) / (n - 1), // interval length + D = 0.0, + newpoints = new Array(points[0]), + i; + for (i = 1; i < points.length; i++) { + var d = Distance(points[i - 1], points[i]); + if ((D + d) >= I) { + var qx = points[i - 1].X + ((I - D) / d) * (points[i].X - points[i - 1].X), + qy = points[i - 1].Y + ((I - D) / d) * (points[i].Y - points[i - 1].Y), + q = NewPoint(qx, qy); + newpoints[newpoints.length] = q; // append new point 'q' + points.splice(i, 0, q); // insert 'q' at position i in points s.t. 'q' will be the next i + D = 0.0; + } + else D += d; + } + // somtimes we fall a rounding-error short of adding the last point, so add it if so + if (newpoints.length == n - 1) { + newpoints[newpoints.length] = NewPoint(points[points.length - 1].X, points[points.length - 1].Y); + } + return newpoints; + } + function IndicativeAngle(points) { + var c = Centroid(points); + return Math.atan2(c.Y - points[0].Y, c.X - points[0].X); + } + function RotateBy(points, radians) { + var c = Centroid(points), + cos = Math.cos(radians), + sin = Math.sin(radians), + newpoints = [], + i; + for (i = 0; i < points.length; i++) { + var qx = (points[i].X - c.X) * cos - (points[i].Y - c.Y) * sin + c.X, + qy = (points[i].X - c.X) * sin + (points[i].Y - c.Y) * cos + c.Y; + newpoints[newpoints.length] = NewPoint(qx, qy); + } + return newpoints; + } + function ScaleTo(points, size) { + var B = BoundingBox(points), + newpoints = [], + i; + for (i = 0; i < points.length; i++) { + var qx = points[i].X * (size / B.Width), + qy = points[i].Y * (size / B.Height); + newpoints[newpoints.length] = NewPoint(qx, qy); + } + return newpoints; + } + function TranslateTo(points, pt) { + var c = Centroid(points), + newpoints = [], + i; + for (i = 0; i < points.length; i++) { + var qx = points[i].X + pt.X - c.X, + qy = points[i].Y + pt.Y - c.Y; + newpoints[newpoints.length] = NewPoint(qx, qy); + } + return newpoints; + } + function Vectorize(points) { // for Protractor + var sum = 0.0, + vector = [], + i, + magnitude; + for ( i = 0; i < points.length; i++) { + vector[vector.length] = points[i].X; + vector[vector.length] = points[i].Y; + sum += points[i].X * points[i].X + points[i].Y * points[i].Y; + } + magnitude = Math.sqrt(sum); + for ( i = 0; i < vector.length; i++ ) + vector[i] /= magnitude; + return vector; + } + function OptimalCosineDistance(v1, v2) { // for Protractor + var a = 0.0, + b = 0.0, + i, + angle; + for (i = 0; i < v1.length; i += 2) { + a += v1[i] * v2[i] + v1[i + 1] * v2[i + 1]; + b += v1[i] * v2[i + 1] - v1[i + 1] * v2[i]; + } + angle = Math.atan(b / a); + return Math.acos(a * Math.cos(angle) + b * Math.sin(angle)); + } + function Centroid(points) { + var x = 0.0, + y = 0.0, + i; + for (i = 0; i < points.length; i++) { + x += points[i].X; + y += points[i].Y; + } + x /= points.length; + y /= points.length; + return NewPoint(x, y); + } + function BoundingBox(points) { + var minX = +Infinity, + maxX = -Infinity, + minY = +Infinity, + maxY = -Infinity, + i; + for (i = 0; i < points.length; i++) { + if (points[i].X < minX) + minX = points[i].X; + if (points[i].X > maxX) + maxX = points[i].X; + if (points[i].Y < minY) + minY = points[i].Y; + if (points[i].Y > maxY) + maxY = points[i].Y; + } + return new Rectangle(minX, minY, maxX - minX, maxY - minY); + } + function PathLength(points) { + var d = 0.0, + i; + for (i = 1; i < points.length; i++) { + d += Distance(points[i - 1], points[i]); + } + return d; + } + function Distance(p1, p2) { + var dx = p2.X - p1.X, + dy = p2.Y - p1.Y; + return Math.sqrt(dx * dx + dy * dy); + } + +})(jQuery); \ No newline at end of file diff --git a/libraries/MotionCAPTCHA/motionCaptcha-shapes.jpg b/libraries/MotionCAPTCHA/motionCaptcha-shapes.jpg new file mode 100644 index 0000000..a07f780 Binary files /dev/null and b/libraries/MotionCAPTCHA/motionCaptcha-shapes.jpg differ diff --git a/libraries/MySQLDump.php b/libraries/MySQLDump.php new file mode 100644 index 0000000..45b3204 --- /dev/null +++ b/libraries/MySQLDump.php @@ -0,0 +1,209 @@ + self::ALL, + ); + + /** @var mysqli */ + private $connection; + + + /** + * Connects to database. + * @param mysqli connection + */ + public function __construct(mysqli $connection, $charset = 'utf8') + { + $this->connection = $connection; + + if ($connection->connect_errno) { + throw new Exception($connection->connect_error); + + } elseif (!$connection->set_charset($charset)) { // was added in MySQL 5.0.7 and PHP 5.0.5, fixed in PHP 5.1.5) + throw new Exception($connection->error); + } + } + + + /** + * Saves dump to the file. + * @param string filename + * @return void + */ + public function save($file) + { + $handle = strcasecmp(substr($file, -3), '.gz') ? fopen($file, 'wb') : gzopen($file, 'wb'); + if (!$handle) { + throw new Exception("ERROR: Cannot write file '$file'."); + } + $this->write($handle); + } + + + /** + * Writes dump to logical file. + * @param resource + * @return void + */ + public function write($handle = null) + { + if ($handle === null) { + $handle = fopen('php://output', 'wb'); + } elseif (!is_resource($handle) || get_resource_type($handle) !== 'stream') { + throw new Exception('Argument must be stream resource.'); + } + + $tables = $views = array(); + + $res = $this->connection->query('SHOW FULL TABLES'); + while ($row = $res->fetch_row()) { + if ($row[1] === 'VIEW') { + $views[] = $row[0]; + } else { + $tables[] = $row[0]; + } + } + $res->close(); + + $tables = array_merge($tables, $views); // views must be last + + $this->connection->query('LOCK TABLES `' . implode('` READ, `', $tables) . '` READ'); + + $db = $this->connection->query('SELECT DATABASE()')->fetch_row(); + fwrite($handle, '-- Created at ' . date('j.n.Y G:i') . " using David Grudl MySQL Dump Utility\n" + . (isset($_SERVER['HTTP_HOST']) ? "-- Host: $_SERVER[HTTP_HOST]\n" : '') + . '-- MySQL Server: ' . $this->connection->server_info . "\n" + . '-- Database: ' . $db[0] . "\n" + . "\n" + . "SET NAMES utf8;\n" + . "SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';\n" + . "SET FOREIGN_KEY_CHECKS=0;\n" + ); + + foreach ($tables as $table) { + $this->dumpTable($handle, $table); + } + + fwrite($handle, "-- THE END\n"); + + $this->connection->query('UNLOCK TABLES'); + } + + + /** + * Dumps table to logical file. + * @param resource + * @return void + */ + public function dumpTable($handle, $table) + { + $delTable = $this->delimite($table); + $res = $this->connection->query("SHOW CREATE TABLE $delTable"); + $row = $res->fetch_assoc(); + $res->close(); + + fwrite($handle, "-- --------------------------------------------------------\n\n"); + + $mode = isset($this->tables[$table]) ? $this->tables[$table] : $this->tables['*']; + $view = isset($row['Create View']); + + if ($mode & self::DROP) { + fwrite($handle, 'DROP ' . ($view ? 'VIEW' : 'TABLE') . " IF EXISTS $delTable;\n\n"); + } + + if ($mode & self::CREATE) { + fwrite($handle, $row[$view ? 'Create View' : 'Create Table'] . ";\n\n"); + } + + if (!$view && ($mode & self::DATA)) { + $numeric = array(); + $res = $this->connection->query("SHOW COLUMNS FROM $delTable"); + $cols = array(); + while ($row = $res->fetch_assoc()) { + $col = $row['Field']; + $cols[] = $this->delimite($col); + $numeric[$col] = (bool) preg_match('#^[^(]*(BYTE|COUNTER|SERIAL|INT|LONG$|CURRENCY|REAL|MONEY|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER)#i', $row['Type']); + } + $cols = '(' . implode(', ', $cols) . ')'; + $res->close(); + + + $size = 0; + $res = $this->connection->query("SELECT * FROM $delTable", MYSQLI_USE_RESULT); + while ($row = $res->fetch_assoc()) { + $s = '('; + foreach ($row as $key => $value) { + if ($value === null) { + $s .= "NULL,\t"; + } elseif ($numeric[$key]) { + $s .= $value . ",\t"; + } else { + $s .= "'" . $this->connection->real_escape_string($value) . "',\t"; + } + } + + if ($size == 0) { + $s = "INSERT INTO $delTable $cols VALUES\n$s"; + } else { + $s = ",\n$s"; + } + + $len = strlen($s) - 1; + $s[$len - 1] = ')'; + fwrite($handle, $s, $len); + + $size += $len; + if ($size > self::MAX_SQL_SIZE) { + fwrite($handle, ";\n"); + $size = 0; + } + } + + $res->close(); + if ($size) { + fwrite($handle, ";\n"); + } + fwrite($handle, "\n"); + } + + if ($mode & self::TRIGGERS) { + $res = $this->connection->query("SHOW TRIGGERS LIKE '" . $this->connection->real_escape_string($table) . "'"); + if ($res->num_rows) { + fwrite($handle, "DELIMITER ;;\n\n"); + while ($row = $res->fetch_assoc()) { + fwrite($handle, "CREATE TRIGGER {$this->delimite($row['Trigger'])} $row[Timing] $row[Event] ON $delTable FOR EACH ROW\n$row[Statement];;\n\n"); + } + fwrite($handle, "DELIMITER ;\n\n"); + } + $res->close(); + } + + fwrite($handle, "\n"); + } + + + private function delimite($s) + { + return '`' . str_replace('`', '``', $s) . '`'; + } +} \ No newline at end of file diff --git a/libraries/additional-classes.ini b/libraries/additional-classes.ini new file mode 100644 index 0000000..e69de29 diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-grid.css b/libraries/bootstrap-4.1.3/css/bootstrap-grid.css new file mode 100644 index 0000000..a36cd32 --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-grid.css @@ -0,0 +1,1912 @@ +/*! + * Bootstrap Grid v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +@-ms-viewport { + width: device-width; +} + +html { + box-sizing: border-box; + -ms-overflow-style: scrollbar; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-grid.css.map b/libraries/bootstrap-4.1.3/css/bootstrap-grid.css.map new file mode 100644 index 0000000..a636cce --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGD;EAAgB,oBAAmB;CCApC;;ADGD;EACE,uBAAsB;EACtB,8BAA6B;CAC9B;;AAED;;;EAGE,oBAAmB;CACpB;;AEfC;ECAA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDDhB;;AEoDC;EFvDF;ICYI,iBEwLK;GHjMR;CDyBF;;AG2BG;EFvDF;ICYI,iBEyLK;GHlMR;CD+BF;;AGqBG;EFvDF;ICYI,iBE0LK;GHnMR;CDqCF;;AGeG;EFvDF;ICYI,kBE2LM;GHpMT;CD2CF;;AClCC;ECZA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDUhB;;AAQD;ECJA,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,oBAAuC;EACvC,mBAAsC;CDGrC;;AAID;EACE,gBAAe;EACf,eAAc;CAOf;;AATD;;EAMI,iBAAgB;EAChB,gBAAe;CAChB;;AIlCH;;;;;;EACE,mBAAkB;EAClB,YAAW;EACX,gBAAe;EACf,oBAA4B;EAC5B,mBAA2B;CAC5B;;AAkBG;EACE,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,gBAAe;CAChB;;AACD;EACE,mBAAc;EAAd,eAAc;EACd,YAAW;EACX,gBAAe;CAChB;;AAGC;EHFN,wBAAsC;EAAtC,oBAAsC;EAItC,qBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CGAhC;;AAFD;EHFN,mBAAsC;EAAtC,eAAsC;EAItC,gBAAuC;CGAhC;;AAGH;EAAwB,mBAAS;EAAT,UAAS;CAAI;;AAErC;EAAuB,mBDoKG;ECpKH,UDoKG;CCpKoB;;AAG5C;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAMnC;EHTR,uBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,iBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AAFD;EHTR,wBAA8C;CGWrC;;AFDP;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBDoKG;ICpKH,UDoKG;GCpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CL2VV;;AG5VG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBDoKG;ICpKH,UDoKG;GCpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLyeV;;AG1eG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBDoKG;ICpKH,UDoKG;GCpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLunBV;;AGxnBG;EE7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IHFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GGAhC;EAFD;IHFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GGAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBDoKG;ICpKH,UDoKG;GCpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IHTR,eAA4B;GGWnB;EAFD;IHTR,uBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,iBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;EAFD;IHTR,wBAA8C;GGWrC;CLqwBV;;AMxzBG;EAA2B,yBAAwB;CAAI;;AACvD;EAA2B,2BAA0B;CAAI;;AACzD;EAA2B,iCAAgC;CAAI;;AAC/D;EAA2B,0BAAyB;CAAI;;AACxD;EAA2B,0BAAyB;CAAI;;AACxD;EAA2B,8BAA6B;CAAI;;AAC5D;EAA2B,+BAA8B;CAAI;;AAC7D;EAA2B,gCAAwB;EAAxB,yBAAwB;CAAI;;AACvD;EAA2B,uCAA+B;EAA/B,gCAA+B;CAAI;;AH0C9D;EGlDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CNk3BjE;;AGx0BG;EGlDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CNg5BjE;;AGt2BG;EGlDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CN86BjE;;AGp4BG;EGlDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CN48BjE;;AMn8BD;EACE;IAAwB,yBAAwB;GAAI;EACpD;IAAwB,2BAA0B;GAAI;EACtD;IAAwB,iCAAgC;GAAI;EAC5D;IAAwB,0BAAyB;GAAI;EACrD;IAAwB,0BAAyB;GAAI;EACrD;IAAwB,8BAA6B;GAAI;EACzD;IAAwB,+BAA8B;GAAI;EAC1D;IAAwB,gCAAwB;IAAxB,yBAAwB;GAAI;EACpD;IAAwB,uCAA+B;IAA/B,gCAA+B;GAAI;CNw9B5D;;AOl/BG;EAAgC,mCAA8B;EAA9B,+BAA8B;CAAI;;AAClE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAI;;AACrE;EAAgC,2CAAsC;EAAtC,uCAAsC;CAAI;;AAC1E;EAAgC,8CAAyC;EAAzC,0CAAyC;CAAI;;AAE7E;EAA8B,+BAA0B;EAA1B,2BAA0B;CAAI;;AAC5D;EAA8B,iCAA4B;EAA5B,6BAA4B;CAAI;;AAC9D;EAA8B,uCAAkC;EAAlC,mCAAkC;CAAI;;AACpE;EAA8B,8BAAyB;EAAzB,0BAAyB;CAAI;;AAC3D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAI;;AACzD;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAI;;AACzD;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAI;;AAC3D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAI;;AAE3D;EAAoC,gCAAsC;EAAtC,uCAAsC;CAAI;;AAC9E;EAAoC,8BAAoC;EAApC,qCAAoC;CAAI;;AAC5E;EAAoC,iCAAkC;EAAlC,mCAAkC;CAAI;;AAC1E;EAAoC,kCAAyC;EAAzC,0CAAyC;CAAI;;AACjF;EAAoC,qCAAwC;EAAxC,yCAAwC;CAAI;;AAEhF;EAAiC,iCAAkC;EAAlC,mCAAkC;CAAI;;AACvE;EAAiC,+BAAgC;EAAhC,iCAAgC;CAAI;;AACrE;EAAiC,kCAA8B;EAA9B,+BAA8B;CAAI;;AACnE;EAAiC,oCAAgC;EAAhC,iCAAgC;CAAI;;AACrE;EAAiC,mCAA+B;EAA/B,gCAA+B;CAAI;;AAEpE;EAAkC,qCAAoC;EAApC,qCAAoC;CAAI;;AAC1E;EAAkC,mCAAkC;EAAlC,mCAAkC;CAAI;;AACxE;EAAkC,sCAAgC;EAAhC,iCAAgC;CAAI;;AACtE;EAAkC,uCAAuC;EAAvC,wCAAuC;CAAI;;AAC7E;EAAkC,0CAAsC;EAAtC,uCAAsC;CAAI;;AAC5E;EAAkC,uCAAiC;EAAjC,kCAAiC;CAAI;;AAEvE;EAAgC,qCAA2B;EAA3B,4BAA2B;CAAI;;AAC/D;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAI;;AACrE;EAAgC,oCAA+B;EAA/B,gCAA+B;CAAI;;AACnE;EAAgC,uCAA6B;EAA7B,8BAA6B;CAAI;;AACjE;EAAgC,yCAA+B;EAA/B,gCAA+B;CAAI;;AACnE;EAAgC,wCAA8B;EAA9B,+BAA8B;CAAI;;AJYlE;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CP6rCrE;;AGjrCG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CPsyCrE;;AG1xCG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CP+4CrE;;AGn4CG;EIlDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CPw/CrE","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-btn-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-btn-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css b/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css new file mode 100644 index 0000000..63e1bc6 --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */@-ms-viewport{width:device-width}html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css.map b/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..4cc3aa6 --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"AAAA;;;;;AAQE,cAAgB,MAAA,aAGlB,KACE,WAAA,WACA,mBAAA,UAGF,ECCA,QADA,SDGE,WAAA,QEdA,WCAA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KCmDE,yBFvDF,WCYI,UAAA,OC2CF,yBFvDF,WCYI,UAAA,OC2CF,yBFvDF,WCYI,UAAA,OC2CF,0BFvDF,WCYI,UAAA,QDAJ,iBCZA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KDkBA,KCJA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDOA,YACE,aAAA,EACA,YAAA,EAFF,iBD2CF,0BCrCM,cAAA,EACA,aAAA,EGjCJ,KAAA,OAAA,QAAA,QAAA,QAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OJ2EF,UAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFkJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,aAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aI9EI,SAAA,SACA,MAAA,KACA,WAAA,IACA,cAAA,KACA,aAAA,KAmBE,KACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,UACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,OFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,OFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,QFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,QFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,QFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,aAAwB,eAAA,GAAA,MAAA,GAExB,YAAuB,eAAA,GAAA,MAAA,GAGrB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAMtB,UFTR,YAAA,UESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,UFTR,YAAA,WESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,UFTR,YAAA,WESQ,UFTR,YAAA,WESQ,UFTR,YAAA,IESQ,WFTR,YAAA,WESQ,WFTR,YAAA,WCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,yBC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YCUE,0BC7BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAEF,aACE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KAIA,UFFN,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,UFFN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WEFM,WFFN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEGI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAMtB,aFTR,YAAA,EESQ,aFTR,YAAA,UESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,aFTR,YAAA,WESQ,aFTR,YAAA,WESQ,aFTR,YAAA,IESQ,cFTR,YAAA,WESQ,cFTR,YAAA,YGxCE,QAA2B,QAAA,eAC3B,UAA2B,QAAA,iBAC3B,gBAA2B,QAAA,uBAC3B,SAA2B,QAAA,gBAC3B,SAA2B,QAAA,gBAC3B,aAA2B,QAAA,oBAC3B,cAA2B,QAAA,qBAC3B,QAA2B,QAAA,sBAAA,QAAA,eAC3B,eAA2B,QAAA,6BAAA,QAAA,sBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,yBElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBF0C3B,0BElDA,WAA2B,QAAA,eAC3B,aAA2B,QAAA,iBAC3B,mBAA2B,QAAA,uBAC3B,YAA2B,QAAA,gBAC3B,YAA2B,QAAA,gBAC3B,gBAA2B,QAAA,oBAC3B,iBAA2B,QAAA,qBAC3B,WAA2B,QAAA,sBAAA,QAAA,eAC3B,kBAA2B,QAAA,6BAAA,QAAA,uBAS/B,aACE,cAAwB,QAAA,eACxB,gBAAwB,QAAA,iBACxB,sBAAwB,QAAA,uBACxB,eAAwB,QAAA,gBACxB,eAAwB,QAAA,gBACxB,mBAAwB,QAAA,oBACxB,oBAAwB,QAAA,qBACxB,cAAwB,QAAA,sBAAA,QAAA,eACxB,qBAAwB,QAAA,6BAAA,QAAA,uBC1BtB,UAAgC,mBAAA,cAAA,eAAA,cAChC,aAAgC,mBAAA,iBAAA,eAAA,iBAChC,kBAAgC,mBAAA,sBAAA,eAAA,sBAChC,qBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,WAA8B,cAAA,eAAA,UAAA,eAC9B,aAA8B,cAAA,iBAAA,UAAA,iBAC9B,mBAA8B,cAAA,uBAAA,UAAA,uBAC9B,WAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAE9B,uBAAoC,cAAA,gBAAA,gBAAA,qBACpC,qBAAoC,cAAA,cAAA,gBAAA,mBACpC,wBAAoC,cAAA,iBAAA,gBAAA,iBACpC,yBAAoC,cAAA,kBAAA,gBAAA,wBACpC,wBAAoC,cAAA,qBAAA,gBAAA,uBAEpC,mBAAiC,eAAA,gBAAA,YAAA,qBACjC,iBAAiC,eAAA,cAAA,YAAA,mBACjC,oBAAiC,eAAA,iBAAA,YAAA,iBACjC,sBAAiC,eAAA,mBAAA,YAAA,mBACjC,qBAAiC,eAAA,kBAAA,YAAA,kBAEjC,qBAAkC,mBAAA,gBAAA,cAAA,qBAClC,mBAAkC,mBAAA,cAAA,cAAA,mBAClC,sBAAkC,mBAAA,iBAAA,cAAA,iBAClC,uBAAkC,mBAAA,kBAAA,cAAA,wBAClC,sBAAkC,mBAAA,qBAAA,cAAA,uBAClC,uBAAkC,mBAAA,kBAAA,cAAA,kBAElC,iBAAgC,oBAAA,eAAA,WAAA,eAChC,kBAAgC,oBAAA,gBAAA,WAAA,qBAChC,gBAAgC,oBAAA,cAAA,WAAA,mBAChC,mBAAgC,oBAAA,iBAAA,WAAA,iBAChC,qBAAgC,oBAAA,mBAAA,WAAA,mBAChC,oBAAgC,oBAAA,kBAAA,WAAA,kBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,0BGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA","sourcesContent":["/*!\n * Bootstrap Grid v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css new file mode 100644 index 0000000..b3d7f4c --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css @@ -0,0 +1,331 @@ +/*! + * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +@-ms-viewport { + width: device-width; +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css.map b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..3a17ed9 --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","../../scss/_variables.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;GAMG;ACcH;;;EAGE,uBAAsB;CACvB;;AAED;EACE,wBAAuB;EACvB,kBAAiB;EACjB,+BAA8B;EAC9B,2BAA0B;EAC1B,8BAA6B;EAC7B,8CCZa;CDad;;AAIC;EACE,oBAAmB;CEdtB;;AFoBD;EACE,eAAc;CACf;;AAUD;EACE,UAAS;EACT,sLCgMoM;ED/LpM,gBCoMgC;EDnMhC,iBCwM+B;EDvM/B,iBC2M+B;ED1M/B,eC3CgB;ED4ChB,iBAAgB;EAChB,uBCtDa;CDuDd;;AExBD;EFgCE,sBAAqB;CACtB;;AAQD;EACE,wBAAuB;EACvB,UAAS;EACT,kBAAiB;CAClB;;AAYD;EACE,cAAa;EACb,sBC6KyC;CD5K1C;;AAOD;EACE,cAAa;EACb,oBCkE8B;CDjE/B;;AASD;;EAEE,2BAA0B;EAC1B,0CAAiC;EAAjC,kCAAiC;EACjC,aAAY;EACZ,iBAAgB;CACjB;;AAED;EACE,oBAAmB;EACnB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;;EAGE,cAAa;EACb,oBAAmB;CACpB;;AAED;;;;EAIE,iBAAgB;CACjB;;AAED;EACE,iBCgH+B;CD/GhC;;AAED;EACE,qBAAoB;EACpB,eAAc;CACf;;AAED;EACE,iBAAgB;CACjB;;AAED;EACE,mBAAkB;CACnB;;AAGD;;EAEE,oBAAmB;CACpB;;AAGD;EACE,eAAc;CACf;;AAOD;;EAEE,mBAAkB;EAClB,eAAc;EACd,eAAc;EACd,yBAAwB;CACzB;;AAED;EAAM,eAAc;CAAI;;AACxB;EAAM,WAAU;CAAI;;AAOpB;EACE,eC9Je;ED+Jf,sBC/B8B;EDgC9B,8BAA6B;EAC7B,sCAAqC;CAMtC;;AGnMC;EHgME,eCnCgD;EDoChD,2BCnCiC;CE9Jb;;AH2MxB;EACE,eAAc;EACd,sBAAqB;CAUtB;;AGnNC;EH4ME,eAAc;EACd,sBAAqB;CG1MtB;;AHoMH;EAUI,WAAU;CACX;;AAQH;;;;EAIE,kGCagH;EDZhH,eAAc;CACf;;AAED;EAEE,cAAa;EAEb,oBAAmB;EAEnB,eAAc;EAGd,8BAA6B;CAC9B;;AAOD;EAEE,iBAAgB;CACjB;;AAOD;EACE,uBAAsB;EACtB,mBAAkB;CACnB;;AAED;EAGE,iBAAgB;EAChB,uBAAsB;CACvB;;AAOD;EACE,0BAAyB;CAC1B;;AAED;EACE,qBC8BkC;ED7BlC,wBC6BkC;ED5BlC,eCrRgB;EDsRhB,iBAAgB;EAChB,qBAAoB;CACrB;;AAED;EAGE,oBAAmB;CACpB;;AAOD;EAEE,sBAAqB;EACrB,sBC+F2C;CD9F5C;;AAKD;EACE,iBAAgB;CACjB;;AAMD;EACE,oBAAmB;EACnB,2CAA0C;CAC3C;;AAED;;;;;EAKE,UAAS;EACT,qBAAoB;EACpB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;EAEE,kBAAiB;CAClB;;AAED;;EAEE,qBAAoB;CACrB;;AAKD;;;;EAIE,2BAA0B;CAC3B;;AAGD;;;;EAIE,WAAU;EACV,mBAAkB;CACnB;;AAED;;EAEE,uBAAsB;EACtB,WAAU;CACX;;AAGD;;;;EASE,4BAA2B;CAC5B;;AAED;EACE,eAAc;EAEd,iBAAgB;CACjB;;AAED;EAME,aAAY;EAEZ,WAAU;EACV,UAAS;EACT,UAAS;CACV;;AAID;EACE,eAAc;EACd,YAAW;EACX,gBAAe;EACf,WAAU;EACV,qBAAoB;EACpB,kBAAiB;EACjB,qBAAoB;EACpB,eAAc;EACd,oBAAmB;CACpB;;AAED;EACE,yBAAwB;CACzB;;AEpID;;EFyIE,aAAY;CACb;;AErID;EF4IE,qBAAoB;EACpB,yBAAwB;CACzB;;AEzID;;EFiJE,yBAAwB;CACzB;;AAOD;EACE,cAAa;EACb,2BAA0B;CAC3B;;AAMD;EACE,sBAAqB;CACtB;;AAED;EACE,mBAAkB;EAClB,gBAAe;CAChB;;AAED;EACE,cAAa;CACd;;AEtJD;EF2JE,yBAAwB;CACzB","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-btn-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-btn-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","/*!\n * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css new file mode 100644 index 0000000..402715d --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css @@ -0,0 +1,8 @@ +/*! + * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} +/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map new file mode 100644 index 0000000..2d7932c --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;ACoBA,ECXA,QADA,SDeE,WAAA,WAGF,KACE,YAAA,WACA,YAAA,KACA,yBAAA,KACA,qBAAA,KACA,mBAAA,UACA,4BAAA,YAKA,cACE,MAAA,aAMJ,QAAA,MAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,IAAA,QACE,QAAA,MAWF,KACE,OAAA,EACA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,UAAA,KACA,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,KACA,iBAAA,KEvBF,sBFgCE,QAAA,YASF,GACE,WAAA,YACA,OAAA,EACA,SAAA,QAaF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAQF,EACE,WAAA,EACA,cAAA,KChDF,0BD0DA,YAEE,gBAAA,UACA,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,cAAA,EAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QCrDF,GDwDA,GCzDA,GD4DE,WAAA,EACA,cAAA,KAGF,MCxDA,MACA,MAFA,MD6DE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAGF,IACE,WAAA,OAIF,EC1DA,OD4DE,YAAA,OAIF,MACE,UAAA,IAQF,IChEA,IDkEE,SAAA,SACA,UAAA,IACA,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAON,EACE,MAAA,QACA,gBAAA,KACA,iBAAA,YACA,6BAAA,QG7LA,QHgME,MAAA,QACA,gBAAA,UAUJ,8BACE,MAAA,QACA,gBAAA,KGzMA,oCAAA,oCH4ME,MAAA,QACA,gBAAA,KANJ,oCAUI,QAAA,EClEJ,KACA,ID0EA,ICzEA,KD6EE,YAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,UAAA,IAGF,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAGA,mBAAA,UAQF,OAEE,OAAA,EAAA,EAAA,KAQF,IACE,eAAA,OACA,aAAA,KAGF,IAGE,SAAA,OACA,eAAA,OAQF,MACE,gBAAA,SAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAGE,WAAA,QAQF,MAEE,QAAA,aACA,cAAA,MAMF,OACE,cAAA,EAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBC9GF,ODiHA,MC/GA,SADA,OAEA,SDmHE,OAAA,EACA,YAAA,QACA,UAAA,QACA,YAAA,QAGF,OCjHA,MDmHE,SAAA,QAGF,OCjHA,ODmHE,eAAA,KC7GF,aACA,cDkHA,OCpHA,mBDwHE,mBAAA,OCjHF,gCACA,+BACA,gCDmHA,yBAIE,QAAA,EACA,aAAA,KClHF,qBDqHA,kBAEE,WAAA,WACA,QAAA,EAIF,iBCrHA,2BACA,kBAFA,iBD+HE,mBAAA,QAGF,SACE,SAAA,KAEA,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAKF,OACE,QAAA,MACA,MAAA,KACA,UAAA,KACA,QAAA,EACA,cAAA,MACA,UAAA,OACA,YAAA,QACA,MAAA,QACA,YAAA,OAGF,SACE,eAAA,SEnIF,yCDEA,yCDuIE,OAAA,KEpIF,cF4IE,eAAA,KACA,mBAAA,KExIF,4CDEA,yCD+IE,mBAAA,KAQF,6BACE,KAAA,QACA,mBAAA,OAOF,OACE,QAAA,aAGF,QACE,QAAA,UACA,OAAA,QAGF,SACE,QAAA,KErJF,SF2JE,QAAA","sourcesContent":["/*!\n * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","/*!\n * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap.css b/libraries/bootstrap-4.1.3/css/bootstrap.css new file mode 100644 index 0000000..943532d --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap.css @@ -0,0 +1,9030 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +@-ms-viewport { + width: device-width; +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #c8cbcf; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #212529; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #32383e; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.8125rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.form-control-lg { + height: calc(2.875rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:valid, .form-control.is-valid, .was-validated +.custom-select:valid, +.custom-select.is-valid { + border-color: #28a745; +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated +.custom-select:valid:focus, +.custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .form-control:valid ~ .valid-feedback, +.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, +.form-control.is-valid ~ .valid-tooltip, .was-validated +.custom-select:valid ~ .valid-feedback, +.was-validated +.custom-select:valid ~ .valid-tooltip, +.custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + background-color: #71dd8a; +} + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + background-color: #34ce57; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after { + border-color: inherit; +} + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated +.custom-select:invalid, +.custom-select.is-invalid { + border-color: #dc3545; +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated +.custom-select:invalid:focus, +.custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control:invalid ~ .invalid-feedback, +.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, +.form-control.is-invalid ~ .invalid-tooltip, .was-validated +.custom-select:invalid ~ .invalid-feedback, +.was-validated +.custom-select:invalid ~ .invalid-tooltip, +.custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + background-color: #efa2a9; +} + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + background-color: #e4606d; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after { + border-color: inherit; +} + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover, .btn:focus { + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} + +.btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + background-image: none; + border-color: #6c757d; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-link { + font-weight: 400; + color: #007bff; + background-color: transparent; +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent; + border-color: transparent; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + border-color: transparent; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media screen and (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + width: 0; + height: 0; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .form-control:not(:last-child), +.input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .form-control:not(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + height: calc(2.875rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + height: calc(1.8125rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #dee2e6; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-select-lg { + height: calc(2.875rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 125%; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(2.25rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-file-input:focus ~ .custom-file-label::after { + border-color: #80bdff; +} + +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: 2.25rem; + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: 1px solid #ced4da; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + padding-left: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar > .container, +.navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:first-child .card-img-top, + .card-group > .card:first-child .card-header { + border-top-right-radius: 0; + } + .card-group > .card:first-child .card-img-bottom, + .card-group > .card:first-child .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:last-child .card-img-top, + .card-group > .card:last-child .card-header { + border-top-left-radius: 0; + } + .card-group > .card:last-child .card-img-bottom, + .card-group > .card:last-child .card-footer { + border-bottom-left-radius: 0; + } + .card-group > .card:only-child { + border-radius: 0.25rem; + } + .card-group > .card:only-child .card-img-top, + .card-group > .card:only-child .card-header { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + .card-group > .card:only-child .card-img-bottom, + .card-group > .card:only-child .card-footer { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0; + } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { + border-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; +} + +.accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.page-link:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-primary { + color: #fff; + background-color: #007bff; +} + +.badge-primary[href]:hover, .badge-primary[href]:focus { + color: #fff; + text-decoration: none; + background-color: #0062cc; +} + +.badge-secondary { + color: #fff; + background-color: #6c757d; +} + +.badge-secondary[href]:hover, .badge-secondary[href]:focus { + color: #fff; + text-decoration: none; + background-color: #545b62; +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +.badge-success[href]:hover, .badge-success[href]:focus { + color: #fff; + text-decoration: none; + background-color: #1e7e34; +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +.badge-info[href]:hover, .badge-info[href]:focus { + color: #fff; + text-decoration: none; + background-color: #117a8b; +} + +.badge-warning { + color: #212529; + background-color: #ffc107; +} + +.badge-warning[href]:hover, .badge-warning[href]:focus { + color: #212529; + text-decoration: none; + background-color: #d39e00; +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +.badge-danger[href]:hover, .badge-danger[href]:focus { + color: #fff; + text-decoration: none; + background-color: #bd2130; +} + +.badge-light { + color: #212529; + background-color: #f8f9fa; +} + +.badge-light[href]:hover, .badge-light[href]:focus { + color: #212529; + text-decoration: none; + background-color: #dae0e5; +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +.badge-dark[href]:hover, .badge-dark[href]:focus { + color: #fff; + text-decoration: none; + background-color: #1d2124; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-primary hr { + border-top-color: #9fcdff; +} + +.alert-primary .alert-link { + color: #002752; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-secondary hr { + border-top-color: #c8cbcf; +} + +.alert-secondary .alert-link { + color: #202326; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-success hr { + border-top-color: #b1dfbb; +} + +.alert-success .alert-link { + color: #0b2e13; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-info hr { + border-top-color: #abdde5; +} + +.alert-info .alert-link { + color: #062c33; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-warning hr { + border-top-color: #ffe8a1; +} + +.alert-warning .alert-link { + color: #533f03; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-danger hr { + border-top-color: #f1b0b7; +} + +.alert-danger .alert-link { + color: #491217; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686868; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} + +.alert-dark hr { + border-top-color: #b9bbbe; +} + +.alert-dark .alert-link { + color: #040505; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -ms-flex: 1; + flex: 1; +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item:hover, .list-group-item:focus { + z-index: 1; + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + color: #000; + text-decoration: none; + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +@media screen and (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (0.5rem * 2)); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - (0.5rem * 2)); + content: ""; +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #e9ecef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)); + } + .modal-dialog-centered::before { + height: calc(100vh - (1.75rem * 2)); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + bottom: calc((0.5rem + 1px) * -1); +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, +.bs-popover-top .arrow::after, +.bs-popover-auto[x-placement^="top"] .arrow::after { + border-width: 0.5rem 0.5rem 0; +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-top .arrow::after, +.bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: 1px; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, +.bs-popover-right .arrow::after, +.bs-popover-auto[x-placement^="right"] .arrow::after { + border-width: 0.5rem 0.5rem 0.5rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-right .arrow::after, +.bs-popover-auto[x-placement^="right"] .arrow::after { + left: 1px; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + top: calc((0.5rem + 1px) * -1); +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, +.bs-popover-bottom .arrow::after, +.bs-popover-auto[x-placement^="bottom"] .arrow::after { + border-width: 0 0.5rem 0.5rem 0.5rem; +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-bottom .arrow::after, +.bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: 1px; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, +.bs-popover-left .arrow::after, +.bs-popover-auto[x-placement^="left"] .arrow::after { + border-width: 0.5rem 0 0.5rem 0.5rem; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, 0.25); +} + + +.bs-popover-left .arrow::after, +.bs-popover-auto[x-placement^="left"] .arrow::after { + right: 1px; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-item.active, + .carousel-item-next, + .carousel-item-prev { + transition: none; + } +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-item-next, +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.carousel-item-prev, +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-duration: .6s; + transition-property: opacity; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + opacity: 0; +} + +.carousel-fade .carousel-item-next, +.carousel-fade .carousel-item-prev, +.carousel-fade .carousel-item.active, +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-prev { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active, + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #007bff !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #007bff !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #0062cc !important; +} + +.text-secondary { + color: #6c757d !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #545b62 !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #1e7e34 !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #117a8b !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #d39e00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #bd2130 !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:hover, a.text-light:focus { + color: #dae0e5 !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #1d2124 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/libraries/bootstrap-4.1.3/css/bootstrap.css.map b/libraries/bootstrap-4.1.3/css/bootstrap.css.map new file mode 100644 index 0000000..cd35b27 --- /dev/null +++ b/libraries/bootstrap-4.1.3/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/mixins/_clearfix.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/mixins/_float.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/mixins/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"AAAA;;;;;GAKG;ACLH;EAGI,gBAAc;EAAd,kBAAc;EAAd,kBAAc;EAAd,gBAAc;EAAd,eAAc;EAAd,kBAAc;EAAd,kBAAc;EAAd,iBAAc;EAAd,gBAAc;EAAd,gBAAc;EAAd,cAAc;EAAd,gBAAc;EAAd,qBAAc;EAId,mBAAc;EAAd,qBAAc;EAAd,mBAAc;EAAd,gBAAc;EAAd,mBAAc;EAAd,kBAAc;EAAd,iBAAc;EAAd,gBAAc;EAId,mBAAiC;EAAjC,uBAAiC;EAAjC,uBAAiC;EAAjC,uBAAiC;EAAjC,wBAAiC;EAKnC,mMAAyB;EACzB,8GAAwB;CACzB;;ACED;;;EAGE,uBAAsB;CACvB;;AAED;EACE,wBAAuB;EACvB,kBAAiB;EACjB,+BAA8B;EAC9B,2BAA0B;EAC1B,8BAA6B;EAC7B,8CCZa;CDad;;AAIC;EACE,oBAAmB;CEgBtB;;AFVD;EACE,eAAc;CACf;;AAUD;EACE,UAAS;EACT,sLCgMoM;ED/LpM,gBCoMgC;EDnMhC,iBCwM+B;EDvM/B,iBC2M+B;ED1M/B,eC3CgB;ED4ChB,iBAAgB;EAChB,uBCtDa;CDuDd;;AEMD;EFEE,sBAAqB;CACtB;;AAQD;EACE,wBAAuB;EACvB,UAAS;EACT,kBAAiB;CAClB;;AAYD;EACE,cAAa;EACb,sBC6KyC;CD5K1C;;AAOD;EACE,cAAa;EACb,oBCkE8B;CDjE/B;;AASD;;EAEE,2BAA0B;EAC1B,0CAAiC;EAAjC,kCAAiC;EACjC,aAAY;EACZ,iBAAgB;CACjB;;AAED;EACE,oBAAmB;EACnB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;;EAGE,cAAa;EACb,oBAAmB;CACpB;;AAED;;;;EAIE,iBAAgB;CACjB;;AAED;EACE,iBCgH+B;CD/GhC;;AAED;EACE,qBAAoB;EACpB,eAAc;CACf;;AAED;EACE,iBAAgB;CACjB;;AAED;EACE,mBAAkB;CACnB;;AAGD;;EAEE,oBAAmB;CACpB;;AAGD;EACE,eAAc;CACf;;AAOD;;EAEE,mBAAkB;EAClB,eAAc;EACd,eAAc;EACd,yBAAwB;CACzB;;AAED;EAAM,eAAc;CAAI;;AACxB;EAAM,WAAU;CAAI;;AAOpB;EACE,eC9Je;ED+Jf,sBC/B8B;EDgC9B,8BAA6B;EAC7B,sCAAqC;CAMtC;;AGnMC;EHgME,eCnCgD;EDoChD,2BCnCiC;CE9Jb;;AH2MxB;EACE,eAAc;EACd,sBAAqB;CAUtB;;AGnNC;EH4ME,eAAc;EACd,sBAAqB;CG1MtB;;AHoMH;EAUI,WAAU;CACX;;AAQH;;;;EAIE,kGCagH;EDZhH,eAAc;CACf;;AAED;EAEE,cAAa;EAEb,oBAAmB;EAEnB,eAAc;EAGd,8BAA6B;CAC9B;;AAOD;EAEE,iBAAgB;CACjB;;AAOD;EACE,uBAAsB;EACtB,mBAAkB;CACnB;;AAED;EAGE,iBAAgB;EAChB,uBAAsB;CACvB;;AAOD;EACE,0BAAyB;CAC1B;;AAED;EACE,qBC8BkC;ED7BlC,wBC6BkC;ED5BlC,eCrRgB;EDsRhB,iBAAgB;EAChB,qBAAoB;CACrB;;AAED;EAGE,oBAAmB;CACpB;;AAOD;EAEE,sBAAqB;EACrB,sBC+F2C;CD9F5C;;AAKD;EACE,iBAAgB;CACjB;;AAMD;EACE,oBAAmB;EACnB,2CAA0C;CAC3C;;AAED;;;;;EAKE,UAAS;EACT,qBAAoB;EACpB,mBAAkB;EAClB,qBAAoB;CACrB;;AAED;;EAEE,kBAAiB;CAClB;;AAED;;EAEE,qBAAoB;CACrB;;AAKD;;;;EAIE,2BAA0B;CAC3B;;AAGD;;;;EAIE,WAAU;EACV,mBAAkB;CACnB;;AAED;;EAEE,uBAAsB;EACtB,WAAU;CACX;;AAGD;;;;EASE,4BAA2B;CAC5B;;AAED;EACE,eAAc;EAEd,iBAAgB;CACjB;;AAED;EAME,aAAY;EAEZ,WAAU;EACV,UAAS;EACT,UAAS;CACV;;AAID;EACE,eAAc;EACd,YAAW;EACX,gBAAe;EACf,WAAU;EACV,qBAAoB;EACpB,kBAAiB;EACjB,qBAAoB;EACpB,eAAc;EACd,oBAAmB;CACpB;;AAED;EACE,yBAAwB;CACzB;;AEtGD;;EF2GE,aAAY;CACb;;AEvGD;EF8GE,qBAAoB;EACpB,yBAAwB;CACzB;;AE3GD;;EFmHE,yBAAwB;CACzB;;AAOD;EACE,cAAa;EACb,2BAA0B;CAC3B;;AAMD;EACE,sBAAqB;CACtB;;AAED;EACE,mBAAkB;EAClB,gBAAe;CAChB;;AAED;EACE,cAAa;CACd;;AExHD;EF6HE,yBAAwB;CACzB;;AI5dD;;EAEE,sBHyQyC;EGxQzC,qBHyQmC;EGxQnC,iBHyQ+B;EGxQ/B,iBHyQ+B;EGxQ/B,eHyQmC;CGxQpC;;AAED;EAAU,kBH2PyC;CG3Pb;;AACtC;EAAU,gBH2PuC;CG3PX;;AACtC;EAAU,mBH2P0C;CG3Pd;;AACtC;EAAU,kBH2PyC;CG3Pb;;AACtC;EAAU,mBH2P0C;CG3Pd;;AACtC;EAAU,gBH2OwB;CG3OI;;AAEtC;EACE,mBH2QoD;EG1QpD,iBH2Q+B;CG1QhC;;AAGD;EACE,gBH0PgC;EGzPhC,iBH8P+B;EG7P/B,iBHqP+B;CGpPhC;;AACD;EACE,kBHsPkC;EGrPlC,iBH0P+B;EGzP/B,iBHgP+B;CG/OhC;;AACD;EACE,kBHkPkC;EGjPlC,iBHsP+B;EGrP/B,iBH2O+B;CG1OhC;;AACD;EACE,kBH8OkC;EG7OlC,iBHkP+B;EGjP/B,iBHsO+B;CGrOhC;;AJmCD;EI3BE,iBHwEW;EGvEX,oBHuEW;EGtEX,UAAS;EACT,yCHtCa;CGuCd;;AAOD;;EAEE,eHiO+B;EGhO/B,iBH+L+B;CG9LhC;;AAED;;EAEE,eHqOgC;EGpOhC,0BH6OmC;CG5OpC;;AAOD;EC/EE,gBAAe;EACf,iBAAgB;CDgFjB;;AAGD;ECpFE,gBAAe;EACf,iBAAgB;CDqFjB;;AACD;EACE,sBAAqB;CAKtB;;AAND;EAII,qBHuN+B;CGtNhC;;AASH;EACE,eAAc;EACd,0BAAyB;CAC1B;;AAGD;EACE,oBHeW;EGdX,mBHyLoD;CGxLrD;;AAED;EACE,eAAc;EACd,eAAc;EACd,eHvGgB;CG4GjB;;AARD;EAMI,uBAAsB;CACvB;;AEpHH;ECIE,gBAAe;EAGf,aAAY;CDLb;;AAID;EACE,iBL61BwC;EK51BxC,uBLLa;EKMb,0BLHgB;EOTd,uBP+NgC;EMxNlC,gBAAe;EAGf,aAAY;CDQb;;AAMD;EAEE,sBAAqB;CACtB;;AAED;EACE,sBAA4B;EAC5B,eAAc;CACf;;AAED;EACE,eL80BqC;EK70BrC,eLxBgB;CKyBjB;;AGxCD;EACE,iBRs6BuC;EQr6BvC,eRwCe;EQvCf,uBAAsB;CAMvB;;AAHC;EACE,eAAc;CACf;;AAIH;EACE,uBR85BuC;EQ75BvC,iBRy5BuC;EQx5BvC,YRNa;EQOb,0BREgB;EOfd,sBPiO+B;CQ1MlC;;AAdD;EASI,WAAU;EACV,gBAAe;EACf,iBR6O6B;CQ3O9B;;ATwNH;ESnNE,eAAc;EACd,iBRw4BuC;EQv4BvC,eRdgB;CQsBjB;;AAXD;EAOI,mBAAkB;EAClB,eAAc;EACd,mBAAkB;CACnB;;AAIH;EACE,kBRq4BuC;EQp4BvC,mBAAkB;CACnB;;AC1CC;ECAA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDDhB;;AEoDC;EFvDF;ICYI,iBVwLK;GSjMR;CRwiBF;;AUpfG;EFvDF;ICYI,iBVyLK;GSlMR;CR8iBF;;AU1fG;EFvDF;ICYI,iBV0LK;GSnMR;CRojBF;;AUhgBG;EFvDF;ICYI,kBV2LM;GSpMT;CR0jBF;;AQjjBC;ECZA,YAAW;EACX,oBAAuC;EACvC,mBAAsC;EACtC,mBAAkB;EAClB,kBAAiB;CDUhB;;AAQD;ECJA,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,oBAAuC;EACvC,mBAAsC;CDGrC;;AAID;EACE,gBAAe;EACf,eAAc;CAOf;;AATD;;EAMI,iBAAgB;EAChB,gBAAe;CAChB;;AGlCH;;;;;;EACE,mBAAkB;EAClB,YAAW;EACX,gBAAe;EACf,oBAA4B;EAC5B,mBAA2B;CAC5B;;AAkBG;EACE,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,gBAAe;CAChB;;AACD;EACE,mBAAc;EAAd,eAAc;EACd,YAAW;EACX,gBAAe;CAChB;;AAGC;EFFN,wBAAsC;EAAtC,oBAAsC;EAItC,qBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,kBAAsC;EAAtC,cAAsC;EAItC,eAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,yBAAsC;EAAtC,qBAAsC;EAItC,sBAAuC;CEAhC;;AAFD;EFFN,mBAAsC;EAAtC,eAAsC;EAItC,gBAAuC;CEAhC;;AAGH;EAAwB,mBAAS;EAAT,UAAS;CAAI;;AAErC;EAAuB,mBZoKG;EYpKH,UZoKG;CYpKoB;;AAG5C;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,kBADZ;EACY,SADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAArC;EAAwB,mBADZ;EACY,UADZ;CACyB;;AAMnC;EFTR,uBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,iBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;AAFD;EFTR,wBAA8C;CEWrC;;ADDP;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBZoKG;IYpKH,UZoKG;GYpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CX02BV;;AU32BG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBZoKG;IYpKH,UZoKG;GYpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CXw/BV;;AUz/BG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBZoKG;IYpKH,UZoKG;GYpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CXsoCV;;AUvoCG;EC7BE;IACE,2BAAa;IAAb,cAAa;IACb,qBAAY;IAAZ,aAAY;IACZ,gBAAe;GAChB;EACD;IACE,mBAAc;IAAd,eAAc;IACd,YAAW;IACX,gBAAe;GAChB;EAGC;IFFN,wBAAsC;IAAtC,oBAAsC;IAItC,qBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,kBAAsC;IAAtC,cAAsC;IAItC,eAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,yBAAsC;IAAtC,qBAAsC;IAItC,sBAAuC;GEAhC;EAFD;IFFN,mBAAsC;IAAtC,eAAsC;IAItC,gBAAuC;GEAhC;EAGH;IAAwB,mBAAS;IAAT,UAAS;GAAI;EAErC;IAAuB,mBZoKG;IYpKH,UZoKG;GYpKoB;EAG5C;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,kBADZ;IACY,SADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAArC;IAAwB,mBADZ;IACY,UADZ;GACyB;EAMnC;IFTR,eAA4B;GEWnB;EAFD;IFTR,uBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,iBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;EAFD;IFTR,wBAA8C;GEWrC;CXoxCV;;AY70CD;EACE,YAAW;EACX,oBbyHW;EaxHX,8Bb6TuC;CaxSxC;;AAxBD;;EAOI,iBbsTgC;EarThC,oBAAmB;EACnB,8BbAc;CaCf;;AAVH;EAaI,uBAAsB;EACtB,iCbLc;CaMf;;AAfH;EAkBI,8BbTc;CaUf;;AAnBH;EAsBI,uBbhBW;CaiBZ;;AAQH;;EAGI,gBb4R+B;Ca3RhC;;AAQH;EACE,0BbnCgB;CagDjB;;AAdD;;EAKI,0BbvCc;CawCf;;AANH;;EAWM,yBAA8C;CAC/C;;AAIL;;;;EAKI,UAAS;CACV;;AAOH;EAEI,sCb1DW;Ca2DZ;;AXnED;EW8EI,uCbtES;CERS;;AYPtB;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,0BC2E4D;CD1E7D;;AZEH;EYQM,0BAJsC;CZJtB;;AYGtB;;EASQ,0BARoC;CASrC;;AApBP;;;EAII,uCdWS;CcVV;;AZEH;EYQM,uCAJsC;CZJtB;;AYGtB;;EASQ,uCARoC;CASrC;;ADwFT;EAGM,Yb1GS;Ea2GT,0BblGY;EamGZ,sBb4NgD;Ca3NjD;;AANL;EAWM,eb3GY;Ea4GZ,0BbjHY;EakHZ,sBbjHY;CakHb;;AAIL;EACE,Yb1Ha;Ea2Hb,0BblHgB;Ca2IjB;;AA3BD;;;EAOI,sBbwMkD;CavMnD;;AARH;EAWI,UAAS;CACV;;AAZH;EAgBM,4CbzIS;Ca0IV;;AXxIH;EW8IM,6CbhJO;CEES;;AS6DpB;EEkGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbA;IAUK,UAAS;GACV;CZ84CR;;AU3/CG;EEkGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbA;IAUK,UAAS;GACV;CZ25CR;;AUxgDG;EEkGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbA;IAUK,UAAS;GACV;CZw6CR;;AUrhDG;EEkGA;IAEI,eAAc;IACd,YAAW;IACX,iBAAgB;IAChB,kCAAiC;IACjC,6CAA4C;GAO/C;EAbA;IAUK,UAAS;GACV;CZq7CR;;AYr8CD;EAOQ,eAAc;EACd,YAAW;EACX,iBAAgB;EAChB,kCAAiC;EACjC,6CAA4C;CAO/C;;AAlBL;EAeU,UAAS;CACV;;AGhLT;EACE,eAAc;EACd,YAAW;EACX,4BhBob4F;EgBnb5F,0BhBoVkC;EgBnVlC,gBhBoPgC;EgBnPhC,iBhB4P+B;EgB3P/B,ehBIgB;EgBHhB,uBhBJa;EgBKb,6BAA4B;EAC5B,0BhBFgB;EgBOd,uBhB8MgC;EiB9N9B,yEjBgc4F;CgB5YjG;;AChDC;EDHF;ICII,iBAAgB;GD+CnB;CfmlDA;;AetoDD;EA0BI,8BAA6B;EAC7B,UAAS;CACV;;AErBD;EACE,elBGc;EkBFd,uBlBLW;EkBMX,sBlBkasE;EkBjatE,WAAU;EAKR,iDlBkBW;CkBhBd;;AFlBH;EAmCI,ehBzBc;EgB2Bd,WAAU;CACX;;AAtCH;EAmCI,ehBzBc;EgB2Bd,WAAU;CACX;;AAtCH;EAmCI,ehBzBc;EgB2Bd,WAAU;CACX;;AAtCH;EAmCI,ehBzBc;EgB2Bd,WAAU;CACX;;AAtCH;EAmCI,ehBzBc;EgB2Bd,WAAU;CACX;;AAtCH;EA+CI,0BhBzCc;EgB2Cd,WAAU;CACX;;AAGH;EAOI,ehBjDc;EgBkDd,uBhBzDW;CgB0DZ;;AAIH;;EAEE,eAAc;EACd,YAAW;CACZ;;AASD;EACE,kCAA+D;EAC/D,qCAAkE;EAClE,iBAAgB;EAChB,mBAAkB;EAClB,iBhB8K+B;CgB7KhC;;AAED;EACE,gCAAkE;EAClE,mCAAqE;EACrE,mBhBgKoD;EgB/JpD,iBhB4H+B;CgB3HhC;;AAED;EACE,iCAAkE;EAClE,oCAAqE;EACrE,oBhB0JoD;EgBzJpD,iBhBsH+B;CgBrHhC;;AAQD;EACE,eAAc;EACd,YAAW;EACX,sBhByOmC;EgBxOnC,yBhBwOmC;EgBvOnC,iBAAgB;EAChB,iBhBiJ+B;EgBhJ/B,ehBrGgB;EgBsGhB,8BAA6B;EAC7B,0BAAyB;EACzB,oBAAmC;CAOpC;;AAjBD;EAcI,iBAAgB;EAChB,gBAAe;CAChB;;AAWH;EACE,8BhBmT+F;EgBlT/F,wBhBwNiC;EgBvNjC,oBhBkHoD;EgBjHpD,iBhB8E+B;EO1N7B,sBPiO+B;CgBnFlC;;AAED;EACE,6BhB8S+F;EgB7S/F,qBhBoNgC;EgBnNhC,mBhByGoD;EgBxGpD,iBhBqE+B;EOzN7B,sBPgO+B;CgB1ElC;;AAGD;EAGI,aAAY;CACb;;AAGH;EACE,aAAY;CACb;;AAQD;EACE,oBhBiS0C;CgBhS3C;;AAED;EACE,eAAc;EACd,oBhBmR4C;CgBlR7C;;AAOD;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,mBAAkB;EAClB,kBAAiB;CAOlB;;AAXD;;EAQI,mBAAkB;EAClB,kBAAiB;CAClB;;AAQH;EACE,mBAAkB;EAClB,eAAc;EACd,sBhBwP6C;CgBvP9C;;AAED;EACE,mBAAkB;EAClB,mBhBoP2C;EgBnP3C,sBhBkP6C;CgB7O9C;;AARD;EAMI,ehB1Mc;CgB2Mf;;AAGH;EACE,iBAAgB;CACjB;;AAED;EACE,4BAAoB;EAApB,qBAAoB;EACpB,uBAAmB;EAAnB,oBAAmB;EACnB,gBAAe;EACf,sBhBuO4C;CgB9N7C;;AAbD;EAQI,iBAAgB;EAChB,cAAa;EACb,wBhBkO4C;EgBjO5C,eAAc;CACf;;AEjND;EACE,cAAa;EACb,YAAW;EACX,oBlBua0C;EkBta1C,elBoQ6B;EkBnQ7B,elBaa;CkBZd;;AAED;EACE,mBAAkB;EAClB,UAAS;EACT,WAAU;EACV,cAAa;EACb,gBAAe;EACf,wBlByrBqC;EkBxrBrC,kBAAiB;EACjB,oBlBoNkD;EkBnNlD,iBlB0N6B;EkBzN7B,YlBrCW;EkBsCX,yClBDa;EO3Cb,uBP+NgC;CkBjLjC;;AAIC;;;EAEE,sBlBTW;CkBoBZ;;AAbD;;;EAKI,sBlBZS;EkBaT,iDlBbS;CkBcV;;AAPH;;;;;;;;EAWI,eAAc;CACf;;AAKH;;;EAII,eAAc;CACf;;AAKH;EAGI,elBrCS;CkBsCV;;AAJH;;;EAQI,eAAc;CACf;;AAKH;EAGI,elBnDS;CkBwDV;;AARH;EAMM,0BAAsC;CACvC;;AAPL;;;EAYI,eAAc;CACf;;AAbH;ECzFA,0BD0G+C;CAC1C;;AAlBL;EAuBM,iElBvEO;CkBwER;;AAOL;EAGI,sBlBlFS;CkBqFV;;AANH;EAKe,sBAAqB;CAAI;;AALxC;;;EAUI,eAAc;CACf;;AAXH;EAeM,iDlB9FO;CkB+FR;;AAjHP;EACE,cAAa;EACb,YAAW;EACX,oBlBua0C;EkBta1C,elBoQ6B;EkBnQ7B,elBUa;CkBTd;;AAED;EACE,mBAAkB;EAClB,UAAS;EACT,WAAU;EACV,cAAa;EACb,gBAAe;EACf,wBlByrBqC;EkBxrBrC,kBAAiB;EACjB,oBlBoNkD;EkBnNlD,iBlB0N6B;EkBzN7B,YlBrCW;EkBsCX,yClBJa;EOxCb,uBP+NgC;CkBjLjC;;AAIC;;;EAEE,sBlBZW;CkBuBZ;;AAbD;;;EAKI,sBlBfS;EkBgBT,iDlBhBS;CkBiBV;;AAPH;;;;;;;;EAWI,eAAc;CACf;;AAKH;;;EAII,eAAc;CACf;;AAKH;EAGI,elBxCS;CkByCV;;AAJH;;;EAQI,eAAc;CACf;;AAKH;EAGI,elBtDS;CkB2DV;;AARH;EAMM,0BAAsC;CACvC;;AAPL;;;EAYI,eAAc;CACf;;AAbH;ECzFA,0BD0G+C;CAC1C;;AAlBL;EAuBM,iElB1EO;CkB2ER;;AAOL;EAGI,sBlBrFS;CkBwFV;;AANH;EAKe,sBAAqB;CAAI;;AALxC;;;EAUI,eAAc;CACf;;AAXH;EAeM,iDlBjGO;CkBkGR;;AFuHT;EACE,qBAAa;EAAb,cAAa;EACb,wBAAmB;EAAnB,oBAAmB;EACnB,uBAAmB;EAAnB,oBAAmB;CAoEpB;;AAvED;EASI,YAAW;CACZ;;ALnNC;EKyMJ;IAeM,qBAAa;IAAb,cAAa;IACb,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;IACvB,iBAAgB;GACjB;EAnBL;IAuBM,qBAAa;IAAb,cAAa;IACb,mBAAc;IAAd,eAAc;IACd,wBAAmB;IAAnB,oBAAmB;IACnB,uBAAmB;IAAnB,oBAAmB;IACnB,iBAAgB;GACjB;EA5BL;IAgCM,sBAAqB;IACrB,YAAW;IACX,uBAAsB;GACvB;EAnCL;IAuCM,sBAAqB;GACtB;EAxCL;;IA4CM,YAAW;GACZ;EA7CL;IAkDM,qBAAa;IAAb,cAAa;IACb,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;IACvB,YAAW;IACX,gBAAe;GAChB;EAvDL;IAyDM,mBAAkB;IAClB,cAAa;IACb,sBhB2IwC;IgB1IxC,eAAc;GACf;EA7DL;IAgEM,uBAAmB;IAAnB,oBAAmB;IACnB,sBAAuB;IAAvB,wBAAuB;GACxB;EAlEL;IAoEM,iBAAgB;GACjB;CfouDJ;;AmBxiED;EACE,sBAAqB;EACrB,iBpB4P+B;EoB3P/B,mBAAkB;EAClB,oBAAmB;EACnB,uBAAsB;EACtB,0BAAiB;EAAjB,uBAAiB;EAAjB,sBAAiB;EAAjB,kBAAiB;EACjB,8BAA2C;ECsF3C,0BrB2PkC;EqB1PlC,gBrB2JgC;EqB1JhC,iBrBmK+B;EqBhK7B,uBrB2HgC;EiB9N9B,sIjB6Y6I;CoBlWlJ;;AHvCC;EGHF;IHII,iBAAgB;GGsCnB;CnBmhEA;;ACnjEC;EkBGE,sBAAqB;ClBAtB;;AkBbH;EAkBI,WAAU;EACV,iDpBea;CoBdd;;AApBH;EAyBI,cpBuW6B;CoBrW9B;;AA3BH;EA+BI,gBAAe;CAChB;;AAaH;;EAEE,qBAAoB;CACrB;;AAQC;ECxDA,YrBIa;EmBJX,0BnBkCa;EqBhCf,sBrBgCe;CoBwBd;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBiBW;CqBfd;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBSa;EqBRb,sBrBQa;CqBPd;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBVS;CqBYZ;;ADUH;ECxDA,YrBIa;EmBJX,0BnBUc;EqBRhB,sBrBQgB;CoBgDf;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,kDrBPY;CqBSf;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBfc;EqBgBd,sBrBhBc;CqBiBf;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,kDrBlCU;CqBoCb;;ADUH;ECxDA,YrBIa;EmBJX,0BnByCa;EqBvCf,sBrBuCe;CoBiBd;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBwBW;CqBtBd;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBgBa;EqBfb,sBrBea;CqBdd;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBHS;CqBKZ;;ADUH;ECxDA,YrBIa;EmBJX,0BnB2Ca;EqBzCf,sBrByCe;CoBed;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,iDrB0BW;CqBxBd;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBkBa;EqBjBb,sBrBiBa;CqBhBd;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,iDrBDS;CqBGZ;;ADUH;ECxDA,erBagB;EmBbd,0BnBwCa;EqBtCf,sBrBsCe;CoBkBd;;AlBpDD;EmBAE,erBOc;EmBbd,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBuBW;CqBrBd;;AAGD;EAEE,erBXc;EqBYd,0BrBea;EqBdb,sBrBca;CqBbd;;AAED;;EAGE,erBnBc;EqBoBd,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBJS;CqBMZ;;ADUH;ECxDA,YrBIa;EmBJX,0BnBsCa;EqBpCf,sBrBoCe;CoBoBd;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,gDrBqBW;CqBnBd;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBaa;EqBZb,sBrBYa;CqBXd;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,gDrBNS;CqBQZ;;ADUH;ECxDA,erBagB;EmBbd,0BnBKc;EqBHhB,sBrBGgB;CoBqDf;;AlBpDD;EmBAE,erBOc;EmBbd,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,kDrBZY;CqBcf;;AAGD;EAEE,erBXc;EqBYd,0BrBpBc;EqBqBd,sBrBrBc;CqBsBf;;AAED;;EAGE,erBnBc;EqBoBd,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,kDrBvCU;CqByCb;;ADUH;ECxDA,YrBIa;EmBJX,0BnBYc;EqBVhB,sBrBUgB;CoB8Cf;;AlBpDD;EmBAE,YrBFW;EmBJX,0BEDoF;EASpF,sBATyH;CnBOrG;;AmBKtB;EAMI,+CrBLY;CqBOf;;AAGD;EAEE,YrBpBW;EqBqBX,0BrBbc;EqBcd,sBrBdc;CqBef;;AAED;;EAGE,YrB5BW;EqB6BX,0BAlCuK;EAsCvK,sBAtC+M;CAgDhN;;AARC;;EAKI,+CrBhCU;CqBkCb;;ADgBH;ECXA,erBjBe;EqBkBf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBpBe;CoB8Bd;;ACRD;EACE,YrBrDW;EqBsDX,0BrBxBa;EqByBb,sBrBzBa;CqB0Bd;;AAED;EAEE,gDrB9Ba;CqB+Bd;;AAED;EAEE,erBnCa;EqBoCb,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrB3Ca;EqB4Cb,sBrB5Ca;CqBsDd;;AARC;;EAKI,gDrBnDS;CqBqDZ;;ADzBH;ECXA,erBzCgB;EqB0ChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrB5CgB;CoBsDf;;ACRD;EACE,YrBrDW;EqBsDX,0BrBhDc;EqBiDd,sBrBjDc;CqBkDf;;AAED;EAEE,kDrBtDc;CqBuDf;;AAED;EAEE,erB3Dc;EqB4Dd,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrBnEc;EqBoEd,sBrBpEc;CqB8Ef;;AARC;;EAKI,kDrB3EU;CqB6Eb;;ADzBH;ECXA,erBVe;EqBWf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBbe;CoBuBd;;ACRD;EACE,YrBrDW;EqBsDX,0BrBjBa;EqBkBb,sBrBlBa;CqBmBd;;AAED;EAEE,gDrBvBa;CqBwBd;;AAED;EAEE,erB5Ba;EqB6Bb,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrBpCa;EqBqCb,sBrBrCa;CqB+Cd;;AARC;;EAKI,gDrB5CS;CqB8CZ;;ADzBH;ECXA,erBRe;EqBSf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBXe;CoBqBd;;ACRD;EACE,YrBrDW;EqBsDX,0BrBfa;EqBgBb,sBrBhBa;CqBiBd;;AAED;EAEE,iDrBrBa;CqBsBd;;AAED;EAEE,erB1Ba;EqB2Bb,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrBlCa;EqBmCb,sBrBnCa;CqB6Cd;;AARC;;EAKI,iDrB1CS;CqB4CZ;;ADzBH;ECXA,erBXe;EqBYf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBde;CoBwBd;;ACRD;EACE,erB5Cc;EqB6Cd,0BrBlBa;EqBmBb,sBrBnBa;CqBoBd;;AAED;EAEE,gDrBxBa;CqByBd;;AAED;EAEE,erB7Ba;EqB8Bb,8BAA6B;CAC9B;;AAED;;EAGE,erB/Dc;EqBgEd,0BrBrCa;EqBsCb,sBrBtCa;CqBgDd;;AARC;;EAKI,gDrB7CS;CqB+CZ;;ADzBH;ECXA,erBbe;EqBcf,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBhBe;CoB0Bd;;ACRD;EACE,YrBrDW;EqBsDX,0BrBpBa;EqBqBb,sBrBrBa;CqBsBd;;AAED;EAEE,gDrB1Ba;CqB2Bd;;AAED;EAEE,erB/Ba;EqBgCb,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrBvCa;EqBwCb,sBrBxCa;CqBkDd;;AARC;;EAKI,gDrB/CS;CqBiDZ;;ADzBH;ECXA,erB9CgB;EqB+ChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrBjDgB;CoB2Df;;ACRD;EACE,erB5Cc;EqB6Cd,0BrBrDc;EqBsDd,sBrBtDc;CqBuDf;;AAED;EAEE,kDrB3Dc;CqB4Df;;AAED;EAEE,erBhEc;EqBiEd,8BAA6B;CAC9B;;AAED;;EAGE,erB/Dc;EqBgEd,0BrBxEc;EqByEd,sBrBzEc;CqBmFf;;AARC;;EAKI,kDrBhFU;CqBkFb;;ADzBH;ECXA,erBvCgB;EqBwChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBrB1CgB;CoBoDf;;ACRD;EACE,YrBrDW;EqBsDX,0BrB9Cc;EqB+Cd,sBrB/Cc;CqBgDf;;AAED;EAEE,+CrBpDc;CqBqDf;;AAED;EAEE,erBzDc;EqB0Dd,8BAA6B;CAC9B;;AAED;;EAGE,YrBxEW;EqByEX,0BrBjEc;EqBkEd,sBrBlEc;CqB4Ef;;AARC;;EAKI,+CrBzEU;CqB2Eb;;ADdL;EACE,iBpBoL+B;EoBnL/B,epBzCe;EoB0Cf,8BAA6B;CAuB9B;;AlB7FC;EkByEE,epBoFgD;EoBnFhD,2BpBoFiC;EoBnFjC,8BAA6B;EAC7B,0BAAyB;ClB5EL;;AkBmExB;EAcI,2BpB6EiC;EoB5EjC,0BAAyB;EACzB,iBAAgB;CACjB;;AAjBH;EAqBI,epBpFc;EoBqFd,qBAAoB;CACrB;;AAUH;ECbE,qBrBuQgC;EqBtQhC,mBrB4JoD;EqB3JpD,iBrBwH+B;EqBrH7B,sBrB4H+B;CoBlHlC;;AAED;ECjBE,wBrBmQiC;EqBlQjC,oBrB6JoD;EqB5JpD,iBrByH+B;EqBtH7B,sBrB6H+B;CoB/GlC;;AAOD;EACE,eAAc;EACd,YAAW;CAMZ;;AARD;EAMI,mBpBwQ+B;CoBvQhC;;AAIH;;;EAII,YAAW;CACZ;;AE3IH;ELGM,iCjB4O2C;CsBzOhD;;ALCC;EKPF;ILQI,iBAAgB;GKFnB;CrBgrFA;;AqBtrFD;EAII,WAAU;CACX;;AAGH;EAEI,cAAa;CACd;;AAGH;EACE,mBAAkB;EAClB,UAAS;EACT,iBAAgB;ELdZ,8BjB6OwC;CsB7N7C;;ALZC;EKOF;ILNI,iBAAgB;GKWnB;CrBwrFA;;AsB5sFD;;;;EAIE,mBAAkB;CACnB;;ACuBG;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EAlCf,wBAA8B;EAC9B,sCAA4C;EAC5C,iBAAgB;EAChB,qCAA2C;CAuCxC;;AAkBD;EACE,eAAc;CACf;;ADjDL;EACE,mBAAkB;EAClB,UAAS;EACT,QAAO;EACP,cvBklBsC;EuBjlBtC,cAAa;EACb,YAAW;EACX,iBvBijBuC;EuBhjBvC,kBAA8B;EAC9B,qBAA4B;EAC5B,gBvBuOgC;EuBtOhC,evBNgB;EuBOhB,iBAAgB;EAChB,iBAAgB;EAChB,uBvBlBa;EuBmBb,6BAA4B;EAC5B,sCvBVa;EOhBX,uBP+NgC;CuBlMnC;;AAED;EACE,SAAQ;EACR,WAAU;CACX;;AAID;EAEI,UAAS;EACT,aAAY;EACZ,cAAa;EACb,wBvByhBuC;CuBxhBxC;;ACnBC;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EA3Bf,cAAa;EACb,sCAA4C;EAC5C,2BAAiC;EACjC,qCAA2C;CAgCxC;;AAkBD;EACE,eAAc;CACf;;ADRL;EAEI,OAAM;EACN,YAAW;EACX,WAAU;EACV,cAAa;EACb,sBvB2gBuC;CuB1gBxC;;ACjCC;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;EApBf,oCAA0C;EAC1C,gBAAe;EACf,uCAA6C;EAC7C,yBAA+B;CAyB5B;;AAkBD;EACE,eAAc;CACf;;AAlCD;EDsCE,kBAAiB;CAClB;;AAIL;EAEI,OAAM;EACN,YAAW;EACX,WAAU;EACV,cAAa;EACb,uBvB0fuC;CuBzfxC;;AClDC;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,qBAA+B;EAC/B,wBAAkC;EAClC,YAAW;CAQZ;;AAdD;EAkBI,cAAa;CACd;;AAED;EACE,sBAAqB;EACrB,SAAQ;EACR,UAAS;EACT,sBAAgC;EAChC,wBAAkC;EAClC,YAAW;EAlCjB,oCAA0C;EAC1C,0BAAgC;EAChC,uCAA6C;CAkCxC;;AAGH;EACE,eAAc;CACf;;AAbC;EDkCA,kBAAiB;CAClB;;AAML;EAKI,YAAW;EACX,aAAY;CACb;;AAKH;EElGE,UAAS;EACT,iBAAmB;EACnB,iBAAgB;EAChB,8BzBIgB;CuB6FjB;;AAKD;EACE,eAAc;EACd,YAAW;EACX,wBvByewC;EuBxexC,YAAW;EACX,iBvBiJ+B;EuBhJ/B,evBjGgB;EuBkGhB,oBAAmB;EACnB,oBAAmB;EACnB,8BAA6B;EAC7B,UAAS;CAwBV;;ArBhIC;EqB2GE,evBsdqD;EuBrdrD,sBAAqB;EJtHrB,0BnBKc;CEQf;;AqB2FH;EAoBI,YvBxHW;EuByHX,sBAAqB;EJ7HrB,0BnBkCa;CuB6Fd;;AAvBH;EA2BI,evBzHc;EuB0Hd,8BAA6B;CAK9B;;AAGH;EACE,eAAc;CACf;;AAGD;EACE,eAAc;EACd,uBvBicwC;EuBhcxC,iBAAgB;EAChB,oBvBsGoD;EuBrGpD,evB5IgB;EuB6IhB,oBAAmB;CACpB;;AAGD;EACE,eAAc;EACd,wBvBubwC;EuBtbxC,evBjJgB;CuBkJjB;;AGlKD;;EAEE,mBAAkB;EAClB,4BAAoB;EAApB,qBAAoB;EACpB,uBAAsB;CAyBvB;;AA7BD;;EAOI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;CAYf;;AxBXD;;EwBII,WAAU;CxBJQ;;AwBTxB;;;;EAkBM,WAAU;CACX;;AAnBL;;;;;;;;EA2BI,kB1BkM6B;C0BjM9B;;AAIH;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,qBAA2B;EAA3B,4BAA2B;CAK5B;;AARD;EAMI,YAAW;CACZ;;AAGH;EAEI,eAAc;CACf;;AAHH;;EnB5BI,2BmBoC8B;EnBnC9B,8BmBmC8B;CAC/B;;AATH;;EnBdI,0BmB2B6B;EnB1B7B,6BmB0B6B;CAC9B;;AAeH;EACE,yBAAmC;EACnC,wBAAkC;CAWnC;;AAbD;;;EAOI,eAAc;CACf;;AAED;EACE,gBAAe;CAChB;;AAGH;EACE,wBAAsC;EACtC,uBAAqC;CACtC;;AAED;EACE,uBAAsC;EACtC,sBAAqC;CACtC;;AAmBD;EACE,2BAAsB;EAAtB,uBAAsB;EACtB,sBAAuB;EAAvB,wBAAuB;EACvB,sBAAuB;EAAvB,wBAAuB;CAyBxB;;AA5BD;;EAOI,YAAW;CACZ;;AARH;;;;EAcI,iB1B8F6B;E0B7F7B,eAAc;CACf;;AAhBH;;EnB5FI,8BmBiH+B;EnBhH/B,6BmBgH+B;CAChC;;AAtBH;;EnB1GI,0BmBoI4B;EnBnI5B,2BmBmI4B;CAC7B;;AAgBH;;EAGI,iBAAgB;CAQjB;;AAXH;;;;EAOM,mBAAkB;EAClB,uBAAsB;EACtB,qBAAoB;CACrB;;ACnKL;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,wBAAoB;EAApB,qBAAoB;EACpB,YAAW;CA+CZ;;AApDD;;;EAUI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;EAGd,UAAS;EACT,iBAAgB;CAOjB;;AAtBH;;;;;;;;;EAoBM,kB3BsM2B;C2BrM5B;;AArBL;;;EA4BI,WAAU;CACX;;AA7BH;EAiCI,WAAU;CACX;;AAlCH;;EpBWI,2BoB2BmD;EpB1BnD,8BoB0BmD;CAAK;;AAtC5D;;EpByBI,0BoBcmD;EpBbnD,6BoBamD;CAAK;;AAvC5D;EA6CI,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;CAKpB;;AAnDH;;EpBWI,2BoBsC6E;EpBrC7E,8BoBqC6E;CAAK;;AAjDtF;EpByBI,0BoByBsE;EpBxBtE,6BoBwBsE;CAAK;;AAW/E;;EAEE,qBAAa;EAAb,cAAa;CAgBd;;AAlBD;;EAQI,mBAAkB;EAClB,WAAU;CACX;;AAVH;;;;;;;;EAgBI,kB3B6I6B;C2B5I9B;;AAGH;EAAuB,mB3ByIU;C2BzI4B;;AAC7D;EAAsB,kB3BwIW;C2BxI0B;;AAQ3D;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,0B3B2PkC;E2B1PlC,iBAAgB;EAChB,gB3B0JgC;E2BzJhC,iB3B8J+B;E2B7J/B,iB3BiK+B;E2BhK/B,e3BvFgB;E2BwFhB,mBAAkB;EAClB,oBAAmB;EACnB,0B3B/FgB;E2BgGhB,0B3B9FgB;EOVd,uBP+NgC;C2B/GnC;;AApBD;;EAkBI,cAAa;CACd;;AASH;;;;;EAKE,6B3BkU+F;E2BjU/F,qB3BwOgC;E2BvOhC,mB3B6HoD;E2B5HpD,iB3ByF+B;EOzN7B,sBPgO+B;C2B9FlC;;AAED;;;;;EAKE,8B3BmT+F;E2BlT/F,wB3BwNiC;E2BvNjC,oB3BkHoD;E2BjHpD,iB3B8E+B;EO1N7B,sBPiO+B;C2BnFlC;;AAUD;;;;;;EpB3II,2BoBiJ4B;EpBhJ5B,8BoBgJ4B;CAC/B;;AAED;;;;;;EpBtII,0BoB4I2B;EpB3I3B,6BoB2I2B;CAC9B;;ACnKD;EACE,mBAAkB;EAClB,eAAc;EACd,mBAAiD;EACjD,qB5B2c4C;C4B1c7C;;AAED;EACE,4BAAoB;EAApB,qBAAoB;EACpB,mB5Buc0C;C4Btc3C;;AAED;EACE,mBAAkB;EAClB,YAAW;EACX,WAAU;CA4BX;;AA/BD;EAMI,Y5BjBW;EmBJX,0BnBkCa;C4BVd;;AATH;EAaI,iE5BMa;C4BLd;;AAdH;EAiBI,Y5B5BW;E4B6BX,0B5Boc8E;C4Blc/E;;AApBH;EAwBM,e5B7BY;C4BkCb;;AA7BL;EA2BQ,0B5BpCU;C4BqCX;;AASP;EACE,mBAAkB;EAClB,iBAAgB;CA8BjB;;AAhCD;EAMI,mBAAkB;EAClB,aAAiF;EACjF,c5BsZ0C;E4BrZ1C,eAAc;EACd,Y5BuZwC;E4BtZxC,a5BsZwC;E4BrZxC,qBAAoB;EACpB,YAAW;EACX,0BAAiB;EAAjB,uBAAiB;EAAjB,sBAAiB;EAAjB,kBAAiB;EACjB,0B5B5Dc;C4B8Df;;AAjBH;EAqBI,mBAAkB;EAClB,aAAiF;EACjF,c5BuY0C;E4BtY1C,eAAc;EACd,Y5BwYwC;E4BvYxC,a5BuYwC;E4BtYxC,YAAW;EACX,6BAA4B;EAC5B,mCAAkC;EAClC,yB5BqY2C;C4BpY5C;;AAQH;ErB7FI,uBP+NgC;C4B/HjC;;AAHH;ET3FI,0BnBkCa;C4BiEZ;;AARL;EAUM,2Nb/DqI;CagEtI;;AAXL;ET3FI,0BnBkCa;C4B2EZ;;AAlBL;EAoBM,wKbzEqI;Ca0EtI;;AArBL;EA0BM,yC5BnFW;C4BoFZ;;AA3BL;EA6BM,yC5BtFW;C4BuFZ;;AAQL;EAEI,mB5B6W+C;C4B5WhD;;AAHH;ETjII,0BnBkCa;C4BuGZ;;AARL;EAUM,qKbrGqI;CasGtI;;AAXL;EAgBM,yC5B/GW;C4BgHZ;;AAWL;EACE,sBAAqB;EACrB,YAAW;EACX,4B5BuR4F;E4BtR5F,2C5BmVwC;E4BlVxC,iB5BgG+B;E4B/F/B,e5BxJgB;E4ByJhB,uBAAsB;EACtB,uNAAsG;EACtG,0B5BsV0C;E4BrV1C,0B5B/JgB;E4BiKd,uB5BoDgC;E4B/ClC,yBAAgB;EAAhB,sBAAgB;EAAhB,iBAAgB;CAsCjB;;AAvDD;EAoBI,sB5B2PsE;E4B1PtE,WAAU;EAIR,kD5BsPoE;C4B1OvE;;AArCH;EAkCM,e5BpLY;E4BqLZ,uB5B5LS;C4B6LV;;AApCL;EAyCI,aAAY;EACZ,uB5B6SsC;E4B5StC,uBAAsB;CACvB;;AA5CH;EA+CI,e5BlMc;E4BmMd,0B5BvMc;C4BwMf;;AAjDH;EAqDI,WAAU;CACX;;AAGH;EACE,8B5BmO+F;E4BlO/F,sB5B2RyC;E4B1RzC,yB5B0RyC;E4BzRzC,e5B8SqC;C4B7StC;;AAED;EACE,6B5B+N+F;E4B9N/F,sB5BoRyC;E4BnRzC,yB5BmRyC;E4BlRzC,gB5B0SsC;C4BzSvC;;AAOD;EACE,mBAAkB;EAClB,sBAAqB;EACrB,YAAW;EACX,4B5B0M4F;E4BzM5F,iBAAgB;CACjB;;AAED;EACE,mBAAkB;EAClB,WAAU;EACV,YAAW;EACX,4B5BkM4F;E4BjM5F,UAAS;EACT,WAAU;CAoBX;;AA1BD;EASI,sB5BkLsE;E4BjLtE,iD5BzNa;C4B8Nd;;AAfH;EAaM,sB5B8KoE;C4B7KrE;;AAdL;EAkBI,0B5B7Pc;C4B8Pf;;AAnBH;EAuBM,kB5BySQ;C4BxST;;AAIL;EACE,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,QAAO;EACP,WAAU;EACV,4B5BoK4F;E4BnK5F,0B5BoEkC;E4BnElC,iB5BnB+B;E4BoB/B,e5B3QgB;E4B4QhB,uB5BnRa;E4BoRb,0B5BhRgB;EOVd,uBP+NgC;C4B+EnC;;AA/BD;EAgBI,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,UAAS;EACT,WAAU;EACV,eAAc;EACd,gB5BmJ2G;E4BlJ3G,0B5BoDgC;E4BnDhC,iB5BnC6B;E4BoC7B,e5B3Rc;E4B4Rd,kBAAiB;ETvSjB,0BnBMc;E4BmSd,+B5BjSc;EOVd,mCqB4SgF;CACjF;;AASH;EACE,YAAW;EACX,gBAAe;EACf,8BAA6B;EAC7B,yBAAgB;EAAhB,sBAAgB;EAAhB,iBAAgB;CA4GjB;;AAhHD;EAOI,cAAa;CAOd;;AAdH;EAW8B,iE5B7Rb;C4B6RiE;;AAXlF;EAY8B,iE5B9Rb;C4B8RiE;;AAZlF;EAa8B,iE5B/Rb;C4B+RiE;;AAblF;EAiBI,UAAS;CACV;;AAlBH;EAqBI,Y5B4M6C;E4B3M7C,a5B2M6C;E4B1M7C,qBAA2E;ET3U3E,0BnBkCa;E4B2Sb,U5B2M0C;EO1hB1C,oBP2hB6C;EiB1hB3C,6GjBid+H;E4B/HjI,yBAAgB;EAAhB,iBAAgB;CAKjB;;AXnVD;EWiTF;IXhTI,iBAAgB;GWkVjB;C3B2nGF;;A2B7pGD;ETpTI,0BnB6hB2E;C4BxM1E;;AAjCL;EAqCI,Y5BqLoC;E4BpLpC,e5BqLqC;E4BpLrC,mBAAkB;EAClB,gB5BoLuC;E4BnLvC,0B5BtVc;E4BuVd,0BAAyB;ErBhWzB,oBPohBoC;C4BjLrC;;AA7CH;EAgDI,Y5BiL6C;E4BhL7C,a5BgL6C;EmBrhB7C,0BnBkCa;E4BqUb,U5BiL0C;EO1hB1C,oBP2hB6C;EiB1hB3C,6GjBid+H;E4BrGjI,sBAAgB;EAAhB,iBAAgB;CAKjB;;AX7WD;EWiTF;IXhTI,iBAAgB;GW4WjB;C3B+nGF;;A2B3rGD;ETpTI,0BnB6hB2E;C4B9K1E;;AA3DL;EA+DI,Y5B2JoC;E4B1JpC,e5B2JqC;E4B1JrC,mBAAkB;EAClB,gB5B0JuC;E4BzJvC,0B5BhXc;E4BiXd,0BAAyB;ErB1XzB,oBPohBoC;C4BvJrC;;AAvEH;EA0EI,Y5BuJ6C;E4BtJ7C,a5BsJ6C;E4BrJ7C,cAAa;EACb,qB5BtC+B;E4BuC/B,oB5BvC+B;EmB3V/B,0BnBkCa;E4BkWb,U5BoJ0C;EO1hB1C,oBP2hB6C;EiB1hB3C,6GjBid+H;E4BxEjI,iBAAgB;CAKjB;;AX1YD;EWiTF;IXhTI,iBAAgB;GWyYjB;C3BmoGF;;A2B5tGD;ETpTI,0BnB6hB2E;C4BjJ1E;;AAxFL;EA4FI,Y5B8HoC;E4B7HpC,e5B8HqC;E4B7HrC,mBAAkB;EAClB,gB5B6HuC;E4B5HvC,8BAA6B;EAC7B,0BAAyB;EACzB,qBAA+C;CAEhD;;AApGH;EAuGI,0B5BpZc;EOTd,oBPohBoC;C4BrHrC;;AAzGH;EA4GI,mBAAkB;EAClB,0B5B1Zc;EOTd,oBPohBoC;C4B/GrC;;AAGH;;;EXvaM,6GjBid+H;C4BtCpI;;AXvaC;EWmaF;;;IXlaI,iBAAgB;GWsanB;C3B6oGA;;A4BxjHD;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,gBAAe;EACf,iBAAgB;EAChB,iBAAgB;CACjB;;AAED;EACE,eAAc;EACd,qB7BgmBsC;C6BtlBvC;;A3BTC;E2BEE,sBAAqB;C3BCtB;;A2BNH;EAUI,e7BPc;C6BQf;;AAOH;EACE,iC7BnBgB;C6BqDjB;;AAnCD;EAII,oB7B6L6B;C6B5L9B;;AALH;EAQI,8BAAgD;EtB7BhD,gCPyNgC;EOxNhC,iCPwNgC;C6BhLjC;;A3BnCD;E2B2BI,sC7B9BY;CEMf;;A2BYH;EAgBM,e7B/BY;E6BgCZ,8BAA6B;EAC7B,0BAAyB;CAC1B;;AAnBL;;EAwBI,e7BtCc;E6BuCd,uB7B9CW;E6B+CX,mC7B/CW;C6BgDZ;;AA3BH;EA+BI,iB7BkK6B;EOtN7B,0BsBsD4B;EtBrD5B,2BsBqD4B;CAC7B;;AAQH;EtBrEI,uBP+NgC;C6BvJjC;;AAHH;;EAOI,Y7BtEW;E6BuEX,0B7BzCa;C6B0Cd;;AAQH;EAEI,mBAAc;EAAd,eAAc;EACd,mBAAkB;CACnB;;AAGH;EAEI,2BAAa;EAAb,cAAa;EACb,qBAAY;EAAZ,aAAY;EACZ,mBAAkB;CACnB;;AAQH;EAEI,cAAa;CACd;;AAHH;EAKI,eAAc;CACf;;ACnGH;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,uBAAmB;EAAnB,oBAAmB;EACnB,uBAA8B;EAA9B,+BAA8B;EAC9B,qB9BwGW;C8B7FZ;;AAjBD;;EAYI,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,uBAAmB;EAAnB,oBAAmB;EACnB,uBAA8B;EAA9B,+BAA8B;CAC/B;;AAQH;EACE,sBAAqB;EACrB,uB9BimB+E;E8BhmB/E,0B9BgmB+E;E8B/lB/E,mB9BkFW;E8BjFX,mB9BkNoD;E8BjNpD,qBAAoB;EACpB,oBAAmB;CAKpB;;A5BrCC;E4BmCE,sBAAqB;C5BhCtB;;A4ByCH;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,gBAAe;EACf,iBAAgB;EAChB,iBAAgB;CAWjB;;AAhBD;EAQI,iBAAgB;EAChB,gBAAe;CAChB;;AAVH;EAaI,iBAAgB;EAChB,YAAW;CACZ;;AAQH;EACE,sBAAqB;EACrB,oB9ByhBuC;E8BxhBvC,uB9BwhBuC;C8BvhBxC;;AAWD;EACE,8BAAgB;EAAhB,iBAAgB;EAChB,qBAAY;EAAZ,aAAY;EAGZ,uBAAmB;EAAnB,oBAAmB;CACpB;;AAGD;EACE,yB9BmiBwC;E8BliBxC,mB9BmJoD;E8BlJpD,eAAc;EACd,8BAA6B;EAC7B,8BAAuC;EvB5GrC,uBP+NgC;C8BxGnC;;A5B3GC;E4BoGE,sBAAqB;C5BjGtB;;A4BwFH;EAcI,gBAAe;CAChB;;AAKH;EACE,sBAAqB;EACrB,aAAY;EACZ,cAAa;EACb,uBAAsB;EACtB,YAAW;EACX,oCAAmC;EACnC,2BAA0B;CAC3B;;AnB9DG;EmBuEC;;IAIK,iBAAgB;IAChB,gBAAe;GAChB;C7B8lHR;;AUxrHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CA;IAcK,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBJ;IAiBO,mBAAkB;GACnB;EAlBN;IAqBO,sB9Bie6B;I8Bhe7B,qB9Bge6B;G8B/d9B;EAvBN;;IA6BK,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BJ;IAiCK,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCJ;IAwCK,cAAa;GACd;C7BulHR;;AUvsHG;EmBuEC;;IAIK,iBAAgB;IAChB,gBAAe;GAChB;C7BkoHR;;AU5tHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CA;IAcK,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBJ;IAiBO,mBAAkB;GACnB;EAlBN;IAqBO,sB9Bie6B;I8Bhe7B,qB9Bge6B;G8B/d9B;EAvBN;;IA6BK,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BJ;IAiCK,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCJ;IAwCK,cAAa;GACd;C7B2nHR;;AU3uHG;EmBuEC;;IAIK,iBAAgB;IAChB,gBAAe;GAChB;C7BsqHR;;AUhwHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CA;IAcK,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBJ;IAiBO,mBAAkB;GACnB;EAlBN;IAqBO,sB9Bie6B;I8Bhe7B,qB9Bge6B;G8B/d9B;EAvBN;;IA6BK,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BJ;IAiCK,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCJ;IAwCK,cAAa;GACd;C7B+pHR;;AU/wHG;EmBuEC;;IAIK,iBAAgB;IAChB,gBAAe;GAChB;C7B0sHR;;AUpyHG;EmBoFA;IAUI,0BAAqB;IAArB,sBAAqB;IACrB,qBAA2B;IAA3B,4BAA2B;GAgC9B;EA3CA;IAcK,wBAAmB;IAAnB,oBAAmB;GAUpB;EAxBJ;IAiBO,mBAAkB;GACnB;EAlBN;IAqBO,sB9Bie6B;I8Bhe7B,qB9Bge6B;G8B/d9B;EAvBN;;IA6BK,sBAAiB;IAAjB,kBAAiB;GAClB;EA9BJ;IAiCK,gCAAwB;IAAxB,yBAAwB;IAGxB,8BAAgB;IAAhB,iBAAgB;GACjB;EArCJ;IAwCK,cAAa;GACd;C7BmsHR;;A6BjvHD;EAeQ,0BAAqB;EAArB,sBAAqB;EACrB,qBAA2B;EAA3B,4BAA2B;CAgC9B;;AAhDL;;EASU,iBAAgB;EAChB,gBAAe;CAChB;;AAXT;EAmBU,wBAAmB;EAAnB,oBAAmB;CAUpB;;AA7BT;EAsBY,mBAAkB;CACnB;;AAvBX;EA0BY,sB9Bie6B;E8Bhe7B,qB9Bge6B;C8B/d9B;;AA5BX;;EAkCU,sBAAiB;EAAjB,kBAAiB;CAClB;;AAnCT;EAsCU,gCAAwB;EAAxB,yBAAwB;EAGxB,8BAAgB;EAAhB,iBAAgB;CACjB;;AA1CT;EA6CU,cAAa;CACd;;AAYT;EAEI,0B9BnLW;C8BwLZ;;A5B5LD;E4B0LI,0B9BtLS;CEDZ;;A4BkLH;EAWM,0B9B5LS;C8BqMV;;A5BzMH;E4BmMM,0B9B/LO;CEDZ;;A4BkLH;EAkBQ,0B9BnMO;C8BoMR;;AAnBP;;;;EA0BM,0B9B3MS;C8B4MV;;AA3BL;EA+BI,0B9BhNW;E8BiNX,iC9BjNW;C8BkNZ;;AAjCH;EAoCI,sQ9BqbmS;C8BpbpS;;AArCH;EAwCI,0B9BzNW;C8BiOZ;;AAhDH;EA0CM,0B9B3NS;C8BgOV;;A5BpOH;E4BkOM,0B9B9NO;CEDZ;;A4BsOH;EAEI,Y9BjPW;C8BsPZ;;A5BhPD;E4B8OI,Y9BpPS;CESZ;;A4BsOH;EAWM,gC9B1PS;C8BmQV;;A5B7PH;E4BuPM,iC9B7PO;CESZ;;A4BsOH;EAkBQ,iC9BjQO;C8BkQR;;AAnBP;;;;EA0BM,Y9BzQS;C8B0QV;;AA3BL;EA+BI,gC9B9QW;E8B+QX,uC9B/QW;C8BgRZ;;AAjCH;EAoCI,4Q9B0XkS;C8BzXnS;;AArCH;EAwCI,gC9BvRW;C8B+RZ;;AAhDH;EA0CM,Y9BzRS;C8B8RV;;A5BxRH;E4BsRM,Y9B5RO;CESZ;;A6BfH;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,aAAY;EACZ,sBAAqB;EACrB,uB/BAa;E+BCb,4BAA2B;EAC3B,uC/BQa;EOhBX,uBP+NgC;C+BpMnC;;AA3BD;EAYI,gBAAe;EACf,eAAc;CACf;;AAdH;ExBMI,gCPyNgC;EOxNhC,iCPwNgC;C+B5M/B;;AAnBL;ExBoBI,oCP2MgC;EO1MhC,mCP0MgC;C+BtM/B;;AAIL;EAGE,mBAAc;EAAd,eAAc;EACd,iB/BoqByC;C+BnqB1C;;AAED;EACE,uB/B+pBwC;C+B9pBzC;;AAED;EACE,sBAAgC;EAChC,iBAAgB;CACjB;;AAED;EACE,iBAAgB;CACjB;;A7BvCC;E6B2CE,sBAAqB;C7B3CD;;A6ByCxB;EAMI,qB/B8oBuC;C+B7oBxC;;AAOH;EACE,yB/BqoByC;E+BpoBzC,iBAAgB;EAChB,sC/BlDa;E+BmDb,8C/BnDa;C+B8Dd;;AAfD;ExB/DI,2DwBsE8E;CAC/E;;AARH;EAYM,cAAa;CACd;;AAIL;EACE,yB/BonByC;E+BnnBzC,sC/BlEa;E+BmEb,2C/BnEa;C+BwEd;;AARD;ExBhFI,2DPysBoF;C+BlnBrF;;AAQH;EACE,wBAAkC;EAClC,wB/BmmBwC;E+BlmBxC,uBAAiC;EACjC,iBAAgB;CACjB;;AAED;EACE,wBAAkC;EAClC,uBAAiC;CAClC;;AAGD;EACE,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,iB/B2lByC;C+B1lB1C;;AAED;EACE,YAAW;ExBtHT,mCPysBoF;C+BjlBvF;;AAGD;EACE,YAAW;ExBtHT,4CPmsBoF;EOlsBpF,6CPksBoF;C+B3kBvF;;AAED;EACE,YAAW;ExB7GT,gDPqrBoF;EOprBpF,+CPorBoF;C+BtkBvF;;AAKD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;CAqBvB;;AAvBD;EAKI,oB/BkkBwD;C+BjkBzD;;ApBtFC;EoBgFJ;IASI,wBAAmB;IAAnB,oBAAmB;IACnB,oB/B6jBwD;I+B5jBxD,mB/B4jBwD;G+BhjB3D;EAvBD;IAcM,qBAAa;IAAb,cAAa;IAEb,iBAAY;IAAZ,aAAY;IACZ,2BAAsB;IAAtB,uBAAsB;IACtB,mB/BqjBsD;I+BpjBtD,iBAAgB;IAChB,kB/BmjBsD;G+BljBvD;C9B8+HJ;;A8Br+HD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;CA4EvB;;AA9ED;EAOI,oB/BkiBwD;C+BjiBzD;;ApBtHC;EoB8GJ;IAWI,wBAAmB;IAAnB,oBAAmB;GAmEtB;EA9ED;IAgBM,iBAAY;IAAZ,aAAY;IACZ,iBAAgB;GA2DjB;EA5EL;IAoBQ,eAAc;IACd,eAAc;GACf;EAtBP;IxBzJI,2BwBoLoC;IxBnLpC,8BwBmLoC;GAU/B;EArCT;;IA+BY,2BAA0B;GAC3B;EAhCX;;IAmCY,8BAA6B;GAC9B;EApCX;IxB3II,0BwBmLmC;IxBlLnC,6BwBkLmC;GAU9B;EAlDT;;IA4CY,0BAAyB;GAC1B;EA7CX;;IAgDY,6BAA4B;GAC7B;EAjDX;IxBtKI,uBP+NgC;G+BM3B;EA/DT;;IxBhKI,gCPyNgC;IOxNhC,iCPwNgC;G+BCzB;EA1DX;;IxBlJI,oCP2MgC;IO1MhC,mCP0MgC;G+BKzB;EA9DX;IxBtKI,iBwBwO8B;GAQzB;EA1ET;;;;IxBtKI,iBwB8OgC;GACzB;C9Bi+HV;;A8Br9HD;EAEI,uB/BucsC;C+BtcvC;;ApBtMC;EoBmMJ;IAMI,wB/BidiC;I+BjdjC,qB/BidiC;I+BjdjC,gB/BidiC;I+BhdjC,4B/BiduC;I+BjdvC,yB/BiduC;I+BjdvC,oB/BiduC;I+BhdvC,WAAU;IACV,UAAS;GAOZ;EAhBD;IAYM,sBAAqB;IACrB,YAAW;GACZ;C9Bw9HJ;;A8B/8HD;EAEI,iBAAgB;EAChB,iBAAgB;CACjB;;AAJH;EAQM,iBAAgB;CACjB;;AATL;EAaI,iBAAgB;EAChB,8BAA6B;EAC7B,6BAA4B;CAC7B;;AAhBH;EAmBI,0BAAyB;EACzB,2BAA0B;CAC3B;;AC3SH;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;EAAf,gBAAe;EACf,sBhCy3BsC;EgCx3BtC,oBhC23BsC;EgC13BtC,iBAAgB;EAChB,0BhCMgB;EORd,uBP+NgC;CgC3NnC;;AAED;EAGI,qBhCg3BqC;CgCx2BtC;;AAXH;EAMM,sBAAqB;EACrB,sBhC42BmC;EgC32BnC,ehCFY;EgCGZ,ahCi3BuC;CgCh3BxC;;AAVL;EAoBI,2BAA0B;CAC3B;;AArBH;EAwBI,sBAAqB;CACtB;;AAzBH;EA4BI,ehCtBc;CgCuBf;;ACvCH;EACE,qBAAa;EAAb,cAAa;E7BGb,gBAAe;EACf,iBAAgB;EGDd,uBP+NgC;CiC/NnC;;AAED;EACE,mBAAkB;EAClB,eAAc;EACd,wBjC2pBwC;EiC1pBxC,kBjCsN+B;EiCrN/B,kBjC8pBsC;EiC7pBtC,ejC4Be;EiC3Bf,uBjCHa;EiCIb,0BjCDgB;CiCqBjB;;AA5BD;EAWI,WAAU;EACV,ejCuJgD;EiCtJhD,sBAAqB;EACrB,0BjCRc;EiCSd,sBjCRc;CiCSf;;AAhBH;EAmBI,WAAU;EACV,WjCupBiC;EiCtpBjC,iDjCaa;CiCZd;;AAtBH;EA0BI,gBAAe;CAChB;;AAGH;EAGM,eAAc;E1BRhB,gCPoMgC;EOnMhC,mCPmMgC;CiC1L/B;;AALL;E1BnBI,iCPkNgC;EOjNhC,oCPiNgC;CiCrL/B;;AAVL;EAcI,WAAU;EACV,YjCzCW;EiC0CX,0BjCZa;EiCab,sBjCba;CiCcd;;AAlBH;EAqBI,ejCzCc;EiC0Cd,qBAAoB;EAEpB,aAAY;EACZ,uBjCnDW;EiCoDX,sBjCjDc;CiCkDf;;AC5DD;EACE,wBlCoqBsC;EkCnqBtC,mBlC2PkD;EkC1PlD,iBlCuN6B;CkCtN9B;;AAIG;E3BoBF,+BPqM+B;EOpM/B,kCPoM+B;CkCvN5B;;AAGD;E3BCF,gCPmN+B;EOlN/B,mCPkN+B;CkClN5B;;AAfL;EACE,wBlCkqBqC;EkCjqBrC,oBlC4PkD;EkC3PlD,iBlCwN6B;CkCvN9B;;AAIG;E3BoBF,+BPsM+B;EOrM/B,kCPqM+B;CkCxN5B;;AAGD;E3BCF,gCPoN+B;EOnN/B,mCPmN+B;CkCnN5B;;ACbP;EACE,sBAAqB;EACrB,sBnCowBsC;EmCnwBtC,enCgwBqC;EmC/vBrC,iBnC4P+B;EmC3P/B,eAAc;EACd,mBAAkB;EAClB,oBAAmB;EACnB,yBAAwB;E5BTtB,uBP+NgC;CmC/MnC;;AAfD;EAaI,cAAa;CACd;;AAIH;EACE,mBAAkB;EAClB,UAAS;CACV;;AAMD;EACE,qBnC6uBsC;EmC5uBtC,oBnC4uBsC;EO1wBpC,qBP6wBqC;CmC7uBxC;;AAOC;EC1CA,YpCSa;EoCRb,0BpCsCe;CmCKd;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCSa;EoCRb,0BpCcgB;CmC6Bf;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCSa;EoCRb,0BpC6Ce;CmCFd;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCSa;EoCRb,0BpC+Ce;CmCJd;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,epCkBgB;EoCjBhB,0BpC4Ce;CmCDd;;AjC7BD;EkCVI,epCaY;EoCZZ,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCSa;EoCRb,0BpC0Ce;CmCCd;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,epCkBgB;EoCjBhB,0BpCSgB;CmCkCf;;AjC7BD;EkCVI,epCaY;EoCZZ,sBAAqB;EACrB,0BAAkC;ClCWrC;;AiCwBD;EC1CA,YpCSa;EoCRb,0BpCgBgB;CmC2Bf;;AjC7BD;EkCVI,YpCIS;EoCHT,sBAAqB;EACrB,0BAAkC;ClCWrC;;AmCnBH;EACE,mBAAoD;EACpD,oBrCgsBsC;EqC/rBtC,0BrCSgB;EORd,sBPgO+B;CqC3NlC;;A1BmDG;E0B5DJ;IAOI,mBrC2rBoC;GqCzrBvC;CpC++IA;;AoC7+ID;EACE,iBAAgB;EAChB,gBAAe;E9BTb,iB8BUsB;CACzB;;ACXD;EACE,mBAAkB;EAClB,yBtCmzByC;EsClzBzC,oBtCmzBsC;EsClzBtC,8BAA6C;E/BJ3C,uBP+NgC;CsCzNnC;;AAGD;EAEE,eAAc;CACf;;AAGD;EACE,iBtCiP+B;CsChPhC;;AAOD;EACE,oBAAwD;CAUzD;;AAXD;EAKI,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,yBtCqxBuC;EsCpxBvC,eAAc;CACf;;AASD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADoCD;EC9CA,exBmFgE;EI9E9D,0BJ8E8D;EwBjFhE,sBxBiFgE;CuBnC/D;;AC5CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ACXH;EACE;IAAO,4BAAuC;GvC8oJ7C;EuC7oJD;IAAK,yBAAwB;GvCgpJ5B;CACF;;AuCnpJD;EACE;IAAO,4BAAuC;GvC8oJ7C;EuC7oJD;IAAK,yBAAwB;GvCgpJ5B;CACF;;AuC9oJD;EACE,qBAAa;EAAb,cAAa;EACb,axC+zBsC;EwC9zBtC,iBAAgB;EAChB,mBxC8zByD;EwC7zBzD,0BxCEgB;EORd,uBP+NgC;CwCtNnC;;AAED;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,sBAAuB;EAAvB,wBAAuB;EACvB,YxCTa;EwCUb,mBAAkB;EAClB,oBAAmB;EACnB,0BxCkBe;EiBnCX,4BjBy0B4C;CwCtzBjD;;AvBfC;EuBMF;IvBLI,iBAAgB;GuBcnB;CvCqpJA;;AuCnpJD;ErBiBE,sMAA6I;EqBf7I,2BxC0yBsC;CwCzyBvC;;AAED;EACE,2DxC6yBoD;EwC7yBpD,mDxC6yBoD;CwC5yBrD;;ACjCD;EACE,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;CACxB;;AAED;EACE,YAAO;EAAP,QAAO;CACR;;ACHD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EAGtB,gBAAe;EACf,iBAAgB;CACjB;;AAQD;EACE,YAAW;EACX,e1CJgB;E0CKhB,oBAAmB;CAapB;;AxCnBC;EwCUE,e1CTc;E0CUd,sBAAqB;EACrB,0B1CjBc;CEQf;;AwCAH;EAaI,e1Cbc;E0Ccd,0B1CrBc;C0CsBf;;AAQH;EACE,mBAAkB;EAClB,eAAc;EACd,yB1C2yByC;E0CzyBzC,oB1CiL+B;E0ChL/B,uB1CtCa;E0CuCb,uC1C7Ba;C0C0Dd;;AApCD;EnChCI,gCPyNgC;EOxNhC,iCPwNgC;C0C9KjC;;AAXH;EAcI,iBAAgB;EnChChB,oCP2MgC;EO1MhC,mCP0MgC;C0CzKjC;;AxC1CD;EwC6CE,WAAU;EACV,sBAAqB;CxC3CtB;;AwCuBH;EAyBI,e1CnDc;E0CoDd,uB1C1DW;C0C2DZ;;AA3BH;EA+BI,WAAU;EACV,Y1ChEW;E0CiEX,0B1CnCa;E0CoCb,sB1CpCa;C0CqCd;;AASH;EAEI,gBAAe;EACf,eAAc;EnCrFd,iBmCsFwB;CACzB;;AALH;EASM,cAAa;CACd;;AAVL;EAeM,iBAAgB;CACjB;;ACnGH;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;AAdL;EACE,e5BgF8D;E4B/E9D,0B5B+E8D;C4BjE/D;;AzCHD;EyCPM,e5B2E0D;E4B1E1D,0BAAyC;CzCS9C;;AyChBD;EAWM,Y3CJO;E2CKP,0B5BqE0D;E4BpE1D,sB5BoE0D;C4BnE3D;;ACjBP;EACE,aAAY;EACZ,kB5C+5BuD;E4C95BvD,iB5CkQ+B;E4CjQ/B,eAAc;EACd,Y5Cea;E4Cdb,0B5CIa;E4CHb,YAAW;CAaZ;;AApBD;EAkBI,gBAAe;CAChB;;A1CHD;E0CJI,Y5CQS;E4CPT,sBAAqB;EACrB,aAAY;C1CKf;;A0CSH;EACE,WAAU;EACV,8BAA6B;EAC7B,UAAS;EACT,yBAAwB;CACzB;;AC3BD;EAEE,iBAAgB;CAMjB;;AARD;EAKI,mBAAkB;EAClB,iBAAgB;CACjB;;AAIH;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c7CilBsC;E6ChlBtC,cAAa;EACb,iBAAgB;EAGhB,WAAU;CAIX;;AAGD;EACE,mBAAkB;EAClB,YAAW;EACX,e7CmvBuC;E6CjvBvC,qBAAoB;CAUrB;;AAPC;E5BtCI,4CjB4yBoD;EiB5yBpD,oCjB4yBoD;EiB5yBpD,qEjB4yBoD;E6CpwBtD,sCAA6B;EAA7B,8BAA6B;CAC9B;;A5BrCD;E4BkCA;I5BjCE,iBAAgB;G4BoCjB;C5C85JF;;A4C75JC;EACE,mCAA0B;EAA1B,2BAA0B;CAC3B;;AAGH;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,sCAAsD;CAQvD;;AAXD;EAOI,eAAc;EACd,mCAAmD;EACnD,YAAW;CACZ;;AAIH;EACE,mBAAkB;EAClB,qBAAa;EAAb,cAAa;EACb,2BAAsB;EAAtB,uBAAsB;EACtB,YAAW;EAEX,qBAAoB;EACpB,uB7C/Da;E6CgEb,6BAA4B;EAC5B,qC7CvDa;EOhBX,sBPgO+B;E6CrJjC,WAAU;CACX;;AAGD;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c7C8gBsC;E6C7gBtC,uB7CtEa;C6C2Ed;;AAZD;EAUW,WAAU;CAAI;;AAVzB;EAWW,a7CwsB2B;C6CxsBS;;AAK/C;EACE,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;EACvB,uBAA8B;EAA9B,+BAA8B;EAC9B,c7CosBsC;E6CnsBtC,iC7C5FgB;EOFd,+BP0N+B;EOzN/B,gCPyN+B;C6CpHlC;;AAbD;EASI,c7C+rBoC;E6C7rBpC,+BAAuF;CACxF;;AAIH;EACE,iBAAgB;EAChB,iB7CmJ+B;C6ClJhC;;AAID;EACE,mBAAkB;EAGlB,mBAAc;EAAd,eAAc;EACd,c7CwpBsC;C6CvpBvC;;AAGD;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,mBAAyB;EAAzB,0BAAyB;EACzB,c7CgpBsC;E6C/oBtC,8B7C5HgB;C6CiIjB;;AAVD;EAQyB,oBAAmB;CAAI;;AARhD;EASwB,qBAAoB;CAAI;;AAIhD;EACE,mBAAkB;EAClB,aAAY;EACZ,YAAW;EACX,aAAY;EACZ,iBAAgB;CACjB;;AlC1FG;EkCzBJ;IAyHI,iB7CkpBqC;I6CjpBrC,qBAAyC;GAC1C;EA1GH;IA6GI,uCAA8D;GAM/D;EAnHH;IAgHM,oCAA2D;GAC5D;EAQH;IAAY,iB7CkoB2B;G6CloBH;C5Cg5JrC;;AUjgKG;EkCsHF;IAAY,iB7C2nB2B;G6C3nBH;C5Ci5JrC;;A6ClkKD;EACE,mBAAkB;EAClB,c9CumBsC;E8CtmBtC,eAAc;EACd,U9CguBmC;E+CpuBnC,sL/CyPoM;E+CvPpM,mBAAkB;EAClB,iB/CgQ+B;E+C/P/B,iB/CmQ+B;E+ClQ/B,iBAAgB;EAChB,kBAAiB;EACjB,sBAAqB;EACrB,kBAAiB;EACjB,qBAAoB;EACpB,uBAAsB;EACtB,mBAAkB;EAClB,qBAAoB;EACpB,oBAAmB;EACnB,iBAAgB;EDNhB,oB9CwPoD;E8CtPpD,sBAAqB;EACrB,WAAU;CAiBX;;AA5BD;EAaW,a9CotB2B;C8CptBE;;AAbxC;EAgBI,mBAAkB;EAClB,eAAc;EACd,c9CotBqC;E8CntBrC,e9CotBqC;C8C5sBtC;;AA3BH;EAsBM,mBAAkB;EAClB,YAAW;EACX,0BAAyB;EACzB,oBAAmB;CACpB;;AAIL;EACE,kBAAgC;CAWjC;;AAZD;EAII,UAAS;CAOV;;AAXH;EAOM,OAAM;EACN,8BAAgE;EAChE,uB9CpBS;C8CqBV;;AAIL;EACE,kB9C0rBuC;C8C7qBxC;;AAdD;EAII,QAAO;EACP,c9CsrBqC;E8CrrBrC,e9CorBqC;C8C7qBtC;;AAbH;EASM,SAAQ;EACR,qCAA2F;EAC3F,yB9CpCS;C8CqCV;;AAIL;EACE,kBAAgC;CAWjC;;AAZD;EAII,OAAM;CAOP;;AAXH;EAOM,UAAS;EACT,8B9CmqBmC;E8ClqBnC,0B9ClDS;C8CmDV;;AAIL;EACE,kB9C4pBuC;C8C/oBxC;;AAdD;EAII,SAAQ;EACR,c9CwpBqC;E8CvpBrC,e9CspBqC;C8C/oBtC;;AAbH;EASM,QAAO;EACP,qC9CmpBmC;E8ClpBnC,wB9ClES;C8CmEV;;AAoBL;EACE,iB9CknBuC;E8CjnBvC,wB9CunBuC;E8CtnBvC,Y9CpGa;E8CqGb,mBAAkB;EAClB,uB9C5Fa;EOhBX,uBP+NgC;C8CjHnC;;AElHD;EACE,mBAAkB;EAClB,OAAM;EACN,QAAO;EACP,chDqmBsC;EgDpmBtC,eAAc;EACd,iBhD0uBuC;E+C/uBvC,sL/CyPoM;E+CvPpM,mBAAkB;EAClB,iB/CgQ+B;E+C/P/B,iB/CmQ+B;E+ClQ/B,iBAAgB;EAChB,kBAAiB;EACjB,sBAAqB;EACrB,kBAAiB;EACjB,qBAAoB;EACpB,uBAAsB;EACtB,mBAAkB;EAClB,qBAAoB;EACpB,oBAAmB;EACnB,iBAAgB;ECLhB,oBhDuPoD;EgDrPpD,sBAAqB;EACrB,uBhDHa;EgDIb,6BAA4B;EAC5B,qChDKa;EOhBX,sBPgO+B;CgDjMlC;;AAnCD;EAoBI,mBAAkB;EAClB,eAAc;EACd,YhDyuBoC;EgDxuBpC,ehDyuBqC;EgDxuBrC,iBhD4M+B;CgDlMhC;;AAlCH;EA4BM,mBAAkB;EAClB,eAAc;EACd,YAAW;EACX,0BAAyB;EACzB,oBAAmB;CACpB;;AAIL;EACE,sBhD0tBuC;CgDtsBxC;;AArBD;EAII,kCAAwE;CACzE;;AALH;;;EASI,8BAAgE;CACjE;;AAVH;EAaI,UAAS;EACT,sChDgtBmE;CgD/sBpE;;;AAfH;;EAkBI,YhDyK6B;EgDxK7B,uBhD9CW;CgD+CZ;;AAGH;EACE,oBhDmsBuC;CgD5qBxC;;AAxBD;EAII,gCAAsE;EACtE,chD+rBqC;EgD9rBrC,ahD6rBoC;EgD5rBpC,iBAA2B;CAC5B;;AARH;;;EAYI,qCAA2F;CAC5F;;AAbH;EAgBI,QAAO;EACP,wChDsrBmE;CgDrrBpE;;;AAlBH;;EAqBI,UhD+I6B;EgD9I7B,yBhDxEW;CgDyEZ;;AAGH;EACE,mBhDyqBuC;CgDzoBxC;;AAjCD;EAII,+BAAqE;CACtE;;AALH;;;EASI,qCAA2F;CAC5F;;AAVH;EAaI,OAAM;EACN,yChD+pBmE;CgD9pBpE;;;AAfH;;EAkBI,ShDwH6B;EgDvH7B,0BhD/FW;CgDgGZ;;AApBH;EAwBI,mBAAkB;EAClB,OAAM;EACN,UAAS;EACT,eAAc;EACd,YhD6oBoC;EgD5oBpC,qBAAwC;EACxC,YAAW;EACX,iChDioBuD;CgDhoBxD;;AAGH;EACE,qBhDsoBuC;CgD/mBxC;;AAxBD;EAII,iCAAuE;EACvE,chDkoBqC;EgDjoBrC,ahDgoBoC;EgD/nBpC,iBAA2B;CAC5B;;AARH;;;EAYI,qChD2nBqC;CgD1nBtC;;AAbH;EAgBI,SAAQ;EACR,uChDynBmE;CgDxnBpE;;;AAlBH;;EAqBI,WhDkF6B;EgDjF7B,wBhDrIW;CgDsIZ;;AAoBH;EACE,wBhDolBwC;EgDnlBxC,iBAAgB;EAChB,gBhDwFgC;EgDvFhC,ehD6GmC;EgD5GnC,0BhD6kByD;EgD5kBzD,iCAAyE;EzChKvE,2CyCiKyE;EzChKzE,4CyCgKyE;CAM5E;;AAbD;EAWI,cAAa;CACd;;AAGH;EACE,wBhDqkBwC;EgDpkBxC,ehDlKgB;CgDmKjB;;AC5KD;EACE,mBAAkB;CACnB;;AAED;EACE,mBAAkB;EAClB,YAAW;EACX,iBAAgB;CACjB;;AAED;EACE,mBAAkB;EAClB,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,YAAW;EACX,oCAA2B;EAA3B,4BAA2B;EAC3B,4BAAmB;EAAnB,oBAAmB;CACpB;;AAED;;;EAGE,eAAc;EhC3BV,wCjBu5BgD;EiBv5BhD,gCjBu5BgD;EiBv5BhD,6DjBu5BgD;CiD13BrD;;AhCzBC;EgCoBF;;;IhCnBI,iBAAgB;GgCwBnB;ChD42KA;;AgD12KD;;EAEE,mBAAkB;EAClB,OAAM;CACP;;AAED;;EAEE,iCAAwB;EAAxB,yBAAwB;CAKzB;;AAHyC;EAJ1C;;IAKI,wCAA+B;IAA/B,gCAA+B;GAElC;ChD+2KA;;AgD72KD;;EAEE,oCAA2B;EAA3B,4BAA2B;CAK5B;;AAHyC;EAJ1C;;IAKI,2CAAkC;IAAlC,mCAAkC;GAErC;ChDk3KA;;AgDh3KD;;EAEE,qCAA4B;EAA5B,6BAA4B;CAK7B;;AAHyC;EAJ1C;;IAKI,4CAAmC;IAAnC,oCAAmC;GAEtC;ChDq3KA;;AgD92KD;EAEI,WAAU;EACV,yBAAwB;EACxB,6BAA4B;CAC7B;;AALH;;;EAUI,WAAU;CACX;;AAXH;;EAeI,WAAU;CACX;;AAhBH;;;;;EAuBI,iCAAwB;EAAxB,yBAAwB;CAKzB;;AAHyC;EAzB5C;;;;;IA0BM,wCAA+B;IAA/B,gCAA+B;GAElC;ChDq3KF;;AgD72KD;;EAEE,mBAAkB;EAClB,OAAM;EACN,UAAS;EAET,qBAAa;EAAb,cAAa;EACb,uBAAmB;EAAnB,oBAAmB;EACnB,sBAAuB;EAAvB,wBAAuB;EACvB,WjDqxBqC;EiDpxBrC,YjD9Ga;EiD+Gb,mBAAkB;EAClB,ajDmxBoC;CiDxwBrC;;A/CrHC;;;E+CgHE,YjDtHW;EiDuHX,sBAAqB;EACrB,WAAU;EACV,YAAW;C/ChHZ;;A+CmHH;EACE,QAAO;CAIR;;AACD;EACE,SAAQ;CAIT;;AAGD;;EAEE,sBAAqB;EACrB,YjDgwBsC;EiD/vBtC,ajD+vBsC;EiD9vBtC,gDAA+C;EAC/C,2BAA0B;CAC3B;;AACD;EACE,iNlCjHyI;CkCkH1I;;AACD;EACE,iNlCpHyI;CkCqH1I;;AAQD;EACE,mBAAkB;EAClB,SAAQ;EACR,aAAY;EACZ,QAAO;EACP,YAAW;EACX,qBAAa;EAAb,cAAa;EACb,sBAAuB;EAAvB,wBAAuB;EACvB,gBAAe;EAEf,kBjDytBqC;EiDxtBrC,iBjDwtBqC;EiDvtBrC,iBAAgB;CAqCjB;;AAjDD;EAeI,mBAAkB;EAClB,mBAAc;EAAd,eAAc;EACd,YjDqtBoC;EiDptBpC,YjDqtBmC;EiDptBnC,kBjDqtBmC;EiDptBnC,iBjDotBmC;EiDntBnC,oBAAmB;EACnB,gBAAe;EACf,2CjDtLW;CiD2MZ;;AA5CH;EA2BM,mBAAkB;EAClB,WAAU;EACV,QAAO;EACP,sBAAqB;EACrB,YAAW;EACX,aAAY;EACZ,YAAW;CACZ;;AAlCL;EAoCM,mBAAkB;EAClB,cAAa;EACb,QAAO;EACP,sBAAqB;EACrB,YAAW;EACX,aAAY;EACZ,YAAW;CACZ;;AA3CL;EA+CI,uBjD9MW;CiD+MZ;;AAQH;EACE,mBAAkB;EAClB,WAA6C;EAC7C,aAAY;EACZ,UAA4C;EAC5C,YAAW;EACX,kBAAiB;EACjB,qBAAoB;EACpB,YjD/Na;EiDgOb,mBAAkB;CACnB;;ACzOD;EAAqB,oCAAmC;CAAI;;AAC5D;EAAqB,+BAA8B;CAAI;;AACvD;EAAqB,kCAAiC;CAAI;;AAC1D;EAAqB,kCAAiC;CAAI;;AAC1D;EAAqB,uCAAsC;CAAI;;AAC/D;EAAqB,oCAAmC;CAAI;;ACF1D;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AiDdD;EACE,qCAAmC;CACpC;;AjDSD;;;EiDLI,qCAAgD;CjDQnD;;AkDPH;EACE,kCAAmC;CACpC;;AAED;EACE,yCAAwC;CACzC;;ACZD;EAAkB,qCAAoD;CAAI;;AAC1E;EAAkB,yCAAwD;CAAI;;AAC9E;EAAkB,2CAA0D;CAAI;;AAChF;EAAkB,4CAA2D;CAAI;;AACjF;EAAkB,0CAAyD;CAAI;;AAE/E;EAAmB,qBAAoB;CAAI;;AAC3C;EAAmB,yBAAwB;CAAI;;AAC/C;EAAmB,2BAA0B;CAAI;;AACjD;EAAmB,4BAA2B;CAAI;;AAClD;EAAmB,0BAAyB;CAAI;;AAG9C;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAFD;EACE,iCAA+B;CAChC;;AAGH;EACE,8BAA+B;CAChC;;AAMD;EACE,kCAAwC;CACzC;;AACD;EACE,2CAAiD;EACjD,4CAAkD;CACnD;;AACD;EACE,4CAAkD;EAClD,+CAAqD;CACtD;;AACD;EACE,+CAAqD;EACrD,8CAAoD;CACrD;;AACD;EACE,2CAAiD;EACjD,8CAAoD;CACrD;;AAED;EACE,8BAA6B;CAC9B;;AAED;EACE,4BAA2B;CAC5B;;ACzDC;EACE,eAAc;EACd,YAAW;EACX,YAAW;CACZ;;ACKC;EAA2B,yBAAwB;CAAI;;AACvD;EAA2B,2BAA0B;CAAI;;AACzD;EAA2B,iCAAgC;CAAI;;AAC/D;EAA2B,0BAAyB;CAAI;;AACxD;EAA2B,0BAAyB;CAAI;;AACxD;EAA2B,8BAA6B;CAAI;;AAC5D;EAA2B,+BAA8B;CAAI;;AAC7D;EAA2B,gCAAwB;EAAxB,yBAAwB;CAAI;;AACvD;EAA2B,uCAA+B;EAA/B,gCAA+B;CAAI;;A5C0C9D;E4ClDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CtD21LjE;;AUjzLG;E4ClDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CtDy3LjE;;AU/0LG;E4ClDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CtDu5LjE;;AU72LG;E4ClDA;IAA2B,yBAAwB;GAAI;EACvD;IAA2B,2BAA0B;GAAI;EACzD;IAA2B,iCAAgC;GAAI;EAC/D;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,0BAAyB;GAAI;EACxD;IAA2B,8BAA6B;GAAI;EAC5D;IAA2B,+BAA8B;GAAI;EAC7D;IAA2B,gCAAwB;IAAxB,yBAAwB;GAAI;EACvD;IAA2B,uCAA+B;IAA/B,gCAA+B;GAAI;CtDq7LjE;;AsD56LD;EACE;IAAwB,yBAAwB;GAAI;EACpD;IAAwB,2BAA0B;GAAI;EACtD;IAAwB,iCAAgC;GAAI;EAC5D;IAAwB,0BAAyB;GAAI;EACrD;IAAwB,0BAAyB;GAAI;EACrD;IAAwB,8BAA6B;GAAI;EACzD;IAAwB,+BAA8B;GAAI;EAC1D;IAAwB,gCAAwB;IAAxB,yBAAwB;GAAI;EACpD;IAAwB,uCAA+B;IAA/B,gCAA+B;GAAI;CtDi8L5D;;AuDn+LD;EACE,mBAAkB;EAClB,eAAc;EACd,YAAW;EACX,WAAU;EACV,iBAAgB;CAoBjB;;AAzBD;EAQI,eAAc;EACd,YAAW;CACZ;;AAVH;;;;;EAiBI,mBAAkB;EAClB,OAAM;EACN,UAAS;EACT,QAAO;EACP,YAAW;EACX,aAAY;EACZ,UAAS;CACV;;AAGH;EAEI,wBAA+B;CAChC;;AAGH;EAEI,oBAA+B;CAChC;;AAGH;EAEI,iBAA8B;CAC/B;;AAGH;EAEI,kBAA8B;CAC/B;;ACxCC;EAAgC,mCAA8B;EAA9B,+BAA8B;CAAI;;AAClE;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAI;;AACrE;EAAgC,2CAAsC;EAAtC,uCAAsC;CAAI;;AAC1E;EAAgC,8CAAyC;EAAzC,0CAAyC;CAAI;;AAE7E;EAA8B,+BAA0B;EAA1B,2BAA0B;CAAI;;AAC5D;EAA8B,iCAA4B;EAA5B,6BAA4B;CAAI;;AAC9D;EAA8B,uCAAkC;EAAlC,mCAAkC;CAAI;;AACpE;EAA8B,8BAAyB;EAAzB,0BAAyB;CAAI;;AAC3D;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAI;;AACzD;EAA8B,gCAAuB;EAAvB,wBAAuB;CAAI;;AACzD;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAI;;AAC3D;EAA8B,gCAAyB;EAAzB,0BAAyB;CAAI;;AAE3D;EAAoC,gCAAsC;EAAtC,uCAAsC;CAAI;;AAC9E;EAAoC,8BAAoC;EAApC,qCAAoC;CAAI;;AAC5E;EAAoC,iCAAkC;EAAlC,mCAAkC;CAAI;;AAC1E;EAAoC,kCAAyC;EAAzC,0CAAyC;CAAI;;AACjF;EAAoC,qCAAwC;EAAxC,yCAAwC;CAAI;;AAEhF;EAAiC,iCAAkC;EAAlC,mCAAkC;CAAI;;AACvE;EAAiC,+BAAgC;EAAhC,iCAAgC;CAAI;;AACrE;EAAiC,kCAA8B;EAA9B,+BAA8B;CAAI;;AACnE;EAAiC,oCAAgC;EAAhC,iCAAgC;CAAI;;AACrE;EAAiC,mCAA+B;EAA/B,gCAA+B;CAAI;;AAEpE;EAAkC,qCAAoC;EAApC,qCAAoC;CAAI;;AAC1E;EAAkC,mCAAkC;EAAlC,mCAAkC;CAAI;;AACxE;EAAkC,sCAAgC;EAAhC,iCAAgC;CAAI;;AACtE;EAAkC,uCAAuC;EAAvC,wCAAuC;CAAI;;AAC7E;EAAkC,0CAAsC;EAAtC,uCAAsC;CAAI;;AAC5E;EAAkC,uCAAiC;EAAjC,kCAAiC;CAAI;;AAEvE;EAAgC,qCAA2B;EAA3B,4BAA2B;CAAI;;AAC/D;EAAgC,sCAAiC;EAAjC,kCAAiC;CAAI;;AACrE;EAAgC,oCAA+B;EAA/B,gCAA+B;CAAI;;AACnE;EAAgC,uCAA6B;EAA7B,8BAA6B;CAAI;;AACjE;EAAgC,yCAA+B;EAA/B,gCAA+B;CAAI;;AACnE;EAAgC,wCAA8B;EAA9B,+BAA8B;CAAI;;A9CYlE;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CxDitMrE;;AUrsMG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CxD0zMrE;;AU9yMG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CxDm6MrE;;AUv5MG;E8ClDA;IAAgC,mCAA8B;IAA9B,+BAA8B;GAAI;EAClE;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,2CAAsC;IAAtC,uCAAsC;GAAI;EAC1E;IAAgC,8CAAyC;IAAzC,0CAAyC;GAAI;EAE7E;IAA8B,+BAA0B;IAA1B,2BAA0B;GAAI;EAC5D;IAA8B,iCAA4B;IAA5B,6BAA4B;GAAI;EAC9D;IAA8B,uCAAkC;IAAlC,mCAAkC;GAAI;EACpE;IAA8B,8BAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAuB;IAAvB,wBAAuB;GAAI;EACzD;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAC3D;IAA8B,gCAAyB;IAAzB,0BAAyB;GAAI;EAE3D;IAAoC,gCAAsC;IAAtC,uCAAsC;GAAI;EAC9E;IAAoC,8BAAoC;IAApC,qCAAoC;GAAI;EAC5E;IAAoC,iCAAkC;IAAlC,mCAAkC;GAAI;EAC1E;IAAoC,kCAAyC;IAAzC,0CAAyC;GAAI;EACjF;IAAoC,qCAAwC;IAAxC,yCAAwC;GAAI;EAEhF;IAAiC,iCAAkC;IAAlC,mCAAkC;GAAI;EACvE;IAAiC,+BAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,kCAA8B;IAA9B,+BAA8B;GAAI;EACnE;IAAiC,oCAAgC;IAAhC,iCAAgC;GAAI;EACrE;IAAiC,mCAA+B;IAA/B,gCAA+B;GAAI;EAEpE;IAAkC,qCAAoC;IAApC,qCAAoC;GAAI;EAC1E;IAAkC,mCAAkC;IAAlC,mCAAkC;GAAI;EACxE;IAAkC,sCAAgC;IAAhC,iCAAgC;GAAI;EACtE;IAAkC,uCAAuC;IAAvC,wCAAuC;GAAI;EAC7E;IAAkC,0CAAsC;IAAtC,uCAAsC;GAAI;EAC5E;IAAkC,uCAAiC;IAAjC,kCAAiC;GAAI;EAEvE;IAAgC,qCAA2B;IAA3B,4BAA2B;GAAI;EAC/D;IAAgC,sCAAiC;IAAjC,kCAAiC;GAAI;EACrE;IAAgC,oCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,uCAA6B;IAA7B,8BAA6B;GAAI;EACjE;IAAgC,yCAA+B;IAA/B,gCAA+B;GAAI;EACnE;IAAgC,wCAA8B;IAA9B,+BAA8B;GAAI;CxD4gNrE;;AyDxjNG;ECDF,uBAAsB;CDC2B;;AAC/C;ECCF,wBAAuB;CDD2B;;AAChD;ECGF,uBAAsB;CDH2B;;A/CsD/C;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzD8kNlD;;AUxhNG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzD0lNlD;;AUpiNG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzDsmNlD;;AUhjNG;E+CxDA;ICDF,uBAAsB;GDC2B;EAC/C;ICCF,wBAAuB;GDD2B;EAChD;ICGF,uBAAsB;GDH2B;CzDknNlD;;A2D/mNC;EAAyB,4BAA8B;CAAI;;AAA3D;EAAyB,8BAA8B;CAAI;;AAA3D;EAAyB,8BAA8B;CAAI;;AAA3D;EAAyB,2BAA8B;CAAI;;AAA3D;EAAyB,oCAA8B;EAA9B,4BAA8B;CAAI;;AAK7D;EACE,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,QAAO;EACP,c5DmlBsC;C4DllBvC;;AAED;EACE,gBAAe;EACf,SAAQ;EACR,UAAS;EACT,QAAO;EACP,c5D2kBsC;C4D1kBvC;;AAG6B;EAD9B;IAEI,yBAAgB;IAAhB,iBAAgB;IAChB,OAAM;IACN,c5DmkBoC;G4DjkBvC;C3DgoNA;;A4DhqND;ECEE,mBAAkB;EAClB,WAAU;EACV,YAAW;EACX,WAAU;EACV,iBAAgB;EAChB,uBAAsB;EACtB,oBAAmB;EACnB,UAAS;CDPV;;ACiBC;EAEE,iBAAgB;EAChB,YAAW;EACX,aAAY;EACZ,kBAAiB;EACjB,WAAU;EACV,oBAAmB;CACpB;;AC7BH;EAAa,+DAAqC;CAAI;;AACtD;EAAU,yDAAkC;CAAI;;AAChD;EAAa,wDAAqC;CAAI;;AACtD;EAAe,4BAA2B;CAAI;;ACC1C;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,sBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,uBAA4B;CAAI;;AAAvD;EAAuB,wBAA4B;CAAI;;AAAvD;EAAuB,wBAA4B;CAAI;;AAI3D;EAAU,2BAA0B;CAAI;;AACxC;EAAU,4BAA2B;CAAI;;ACAjC;EAAgC,qBAA4B;CAAI;;AAChE;;EAEE,yBAAoC;CACrC;;AACD;;EAEE,2BAAwC;CACzC;;AACD;;EAEE,4BAA0C;CAC3C;;AACD;;EAEE,0BAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,0BAA4B;CAAI;;AAChE;;EAEE,8BAAoC;CACrC;;AACD;;EAEE,gCAAwC;CACzC;;AACD;;EAEE,iCAA0C;CAC3C;;AACD;;EAEE,+BAAsC;CACvC;;AAhBD;EAAgC,wBAA4B;CAAI;;AAChE;;EAEE,4BAAoC;CACrC;;AACD;;EAEE,8BAAwC;CACzC;;AACD;;EAEE,+BAA0C;CAC3C;;AACD;;EAEE,6BAAsC;CACvC;;AAhBD;EAAgC,0BAA4B;CAAI;;AAChE;;EAEE,8BAAoC;CACrC;;AACD;;EAEE,gCAAwC;CACzC;;AACD;;EAEE,iCAA0C;CAC3C;;AACD;;EAEE,+BAAsC;CACvC;;AAhBD;EAAgC,wBAA4B;CAAI;;AAChE;;EAEE,4BAAoC;CACrC;;AACD;;EAEE,8BAAwC;CACzC;;AACD;;EAEE,+BAA0C;CAC3C;;AACD;;EAEE,6BAAsC;CACvC;;AAhBD;EAAgC,sBAA4B;CAAI;;AAChE;;EAEE,0BAAoC;CACrC;;AACD;;EAEE,4BAAwC;CACzC;;AACD;;EAEE,6BAA0C;CAC3C;;AACD;;EAEE,2BAAsC;CACvC;;AAhBD;EAAgC,4BAA4B;CAAI;;AAChE;;EAEE,gCAAoC;CACrC;;AACD;;EAEE,kCAAwC;CACzC;;AACD;;EAEE,mCAA0C;CAC3C;;AACD;;EAEE,iCAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,yBAA4B;CAAI;;AAChE;;EAEE,6BAAoC;CACrC;;AACD;;EAEE,+BAAwC;CACzC;;AACD;;EAEE,gCAA0C;CAC3C;;AACD;;EAEE,8BAAsC;CACvC;;AAhBD;EAAgC,2BAA4B;CAAI;;AAChE;;EAEE,+BAAoC;CACrC;;AACD;;EAEE,iCAAwC;CACzC;;AACD;;EAEE,kCAA0C;CAC3C;;AACD;;EAEE,gCAAsC;CACvC;;AAhBD;EAAgC,yBAA4B;CAAI;;AAChE;;EAEE,6BAAoC;CACrC;;AACD;;EAEE,+BAAwC;CACzC;;AACD;;EAEE,gCAA0C;CAC3C;;AACD;;EAEE,8BAAsC;CACvC;;AAKL;EAAmB,wBAAuB;CAAI;;AAC9C;;EAEE,4BAA2B;CAC5B;;AACD;;EAEE,8BAA6B;CAC9B;;AACD;;EAEE,+BAA8B;CAC/B;;AACD;;EAEE,6BAA4B;CAC7B;;AtDYD;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAI;EAC9C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChE0vOJ;;AU9uOG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAI;EAC9C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChEo/OJ;;AUx+OG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAI;EAC9C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChE8uPJ;;AUluPG;EsDjDI;IAAgC,qBAA4B;GAAI;EAChE;;IAEE,yBAAoC;GACrC;EACD;;IAEE,2BAAwC;GACzC;EACD;;IAEE,4BAA0C;GAC3C;EACD;;IAEE,0BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,0BAA4B;GAAI;EAChE;;IAEE,8BAAoC;GACrC;EACD;;IAEE,gCAAwC;GACzC;EACD;;IAEE,iCAA0C;GAC3C;EACD;;IAEE,+BAAsC;GACvC;EAhBD;IAAgC,wBAA4B;GAAI;EAChE;;IAEE,4BAAoC;GACrC;EACD;;IAEE,8BAAwC;GACzC;EACD;;IAEE,+BAA0C;GAC3C;EACD;;IAEE,6BAAsC;GACvC;EAhBD;IAAgC,sBAA4B;GAAI;EAChE;;IAEE,0BAAoC;GACrC;EACD;;IAEE,4BAAwC;GACzC;EACD;;IAEE,6BAA0C;GAC3C;EACD;;IAEE,2BAAsC;GACvC;EAhBD;IAAgC,4BAA4B;GAAI;EAChE;;IAEE,gCAAoC;GACrC;EACD;;IAEE,kCAAwC;GACzC;EACD;;IAEE,mCAA0C;GAC3C;EACD;;IAEE,iCAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAhBD;IAAgC,2BAA4B;GAAI;EAChE;;IAEE,+BAAoC;GACrC;EACD;;IAEE,iCAAwC;GACzC;EACD;;IAEE,kCAA0C;GAC3C;EACD;;IAEE,gCAAsC;GACvC;EAhBD;IAAgC,yBAA4B;GAAI;EAChE;;IAEE,6BAAoC;GACrC;EACD;;IAEE,+BAAwC;GACzC;EACD;;IAEE,gCAA0C;GAC3C;EACD;;IAEE,8BAAsC;GACvC;EAKL;IAAmB,wBAAuB;GAAI;EAC9C;;IAEE,4BAA2B;GAC5B;EACD;;IAEE,8BAA6B;GAC9B;EACD;;IAEE,+BAA8B;GAC/B;EACD;;IAEE,6BAA4B;GAC7B;ChEw+PJ;;AiElhQD;EAAkB,kGlEqPgG;CkErPzD;;AAIzD;EAAiB,+BAA8B;CAAI;;AACnD;EAAiB,+BAA8B;CAAI;;AACnD;ECRE,iBAAgB;EAChB,wBAAuB;EACvB,oBAAmB;CDMsB;;AAQvC;EAAwB,4BAA2B;CAAI;;AACvD;EAAwB,6BAA4B;CAAI;;AACxD;EAAwB,8BAA6B;CAAI;;AvDsCzD;EuDxCA;IAAwB,4BAA2B;GAAI;EACvD;IAAwB,6BAA4B;GAAI;EACxD;IAAwB,8BAA6B;GAAI;CjE4iQ5D;;AUtgQG;EuDxCA;IAAwB,4BAA2B;GAAI;EACvD;IAAwB,6BAA4B;GAAI;EACxD;IAAwB,8BAA6B;GAAI;CjEwjQ5D;;AUlhQG;EuDxCA;IAAwB,4BAA2B;GAAI;EACvD;IAAwB,6BAA4B;GAAI;EACxD;IAAwB,8BAA6B;GAAI;CjEokQ5D;;AU9hQG;EuDxCA;IAAwB,4BAA2B;GAAI;EACvD;IAAwB,6BAA4B;GAAI;EACxD;IAAwB,8BAA6B;GAAI;CjEglQ5D;;AiE1kQD;EAAmB,qCAAoC;CAAI;;AAC3D;EAAmB,qCAAoC;CAAI;;AAC3D;EAAmB,sCAAqC;CAAI;;AAI5D;EAAsB,4BAA0C;CAAI;;AACpE;EAAsB,4BAA2C;CAAI;;AACrE;EAAsB,4BAAyC;CAAI;;AACnE;EAAsB,8BAA6B;CAAI;;AAIvD;EAAc,uBAAwB;CAAI;;AEpCxC;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AkEdD;EACE,0BAAwB;CACzB;;AlESD;EkENI,0BAAqC;ClESxC;;AgE4BH;EAAa,0BAA6B;CAAI;;AAC9C;EAAc,0BAA6B;CAAI;;AAE/C;EAAiB,qCAAkC;CAAI;;AACvD;EAAiB,2CAAkC;CAAI;;AAIvD;EGpDE,YAAW;EACX,mBAAkB;EAClB,kBAAiB;EACjB,8BAA6B;EAC7B,UAAS;CHkDV;;AIrDD;ECCE,+BAAkC;CDCnC;;AAED;ECHE,8BAAkC;CDKnC;;AECC;EzESF;;;IyEHM,6BAA4B;IAE5B,4BAA2B;GAC5B;EAED;IAEI,2BAA0B;GAC3B;EAQH;IACE,8BAA6B;GAC9B;EzE+ML;IyEjMM,iCAAgC;GACjC;EACD;;IAEE,0BxEtCY;IwEuCZ,yBAAwB;GACzB;EAOD;IACE,4BAA2B;GAC5B;EAED;;IAEE,yBAAwB;GACzB;EAED;;;IAGE,WAAU;IACV,UAAS;GACV;EAED;;IAEE,wBAAuB;GACxB;EAOD;IACE,SxE61BgC;GC01OnC;EFxtQH;IyEoCM,4BAA2C;GAC5C;E/DxFH;I+D0FI,4BAA2C;GAC5C;E1C/EL;I0CmFM,cAAa;GACd;ErChGL;IqCkGM,uBxEnFS;GwEoFV;E3DpGL;I2DuGM,qCAAoC;GAMrC;EAPD;;IAKI,kCAAmC;GACpC;E3DjEP;;I2DuEQ,qCAAsC;GACvC;E3DYP;I2DRM,eAAc;GAQf;EATD;;;;IAOI,sBxEpHU;GwEqHX;E3DjBP;I2DqBM,eAAc;IACd,sBxE1HY;GwE2Hb;CvE6qQJ","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-btn-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-btn-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","/*!\n * Bootstrap v4.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n color: inherit;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n background-color: transparent;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table .table {\n background-color: #fff;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #212529;\n border-color: #32383e;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.8125rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(2.875rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip, .was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n background-color: #71dd8a;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label::after, .custom-file-input.is-valid ~ .custom-file-label::after {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n background-color: #efa2a9;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label::after, .custom-file-input.is-invalid ~ .custom-file-label::after {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover, .btn:focus {\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n background-color: transparent;\n background-image: none;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n background-color: transparent;\n background-image: none;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n background-color: transparent;\n background-image: none;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n background-color: transparent;\n background-image: none;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n background-color: transparent;\n background-image: none;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n background-color: transparent;\n background-image: none;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n background-color: transparent;\n background-image: none;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n background-color: transparent;\n background-image: none;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n background-color: transparent;\n border-color: transparent;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n border-color: transparent;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n margin-left: -1px;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n height: calc(2.875rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n height: calc(1.8125rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n user-select: none;\n background-color: #dee2e6;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #007bff;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n background-size: 8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(128, 189, 255, 0.5);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n opacity: 0;\n}\n\n.custom-select-sm {\n height: calc(1.8125rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 75%;\n}\n\n.custom-select-lg {\n height: calc(2.875rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 125%;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(2.25rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(2.25rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:focus ~ .custom-file-label::after {\n border-color: #80bdff;\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: 2.25rem;\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: 1px solid #ced4da;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n padding-left: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:first-child .card-img-top,\n .card-group > .card:first-child .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:first-child .card-img-bottom,\n .card-group > .card:first-child .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:last-child .card-img-top,\n .card-group > .card:last-child .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:last-child .card-img-bottom,\n .card-group > .card:last-child .card-footer {\n border-bottom-left-radius: 0;\n }\n .card-group > .card:only-child {\n border-radius: 0.25rem;\n }\n .card-group > .card:only-child .card-img-top,\n .card-group > .card:only-child .card-header {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n .card-group > .card:only-child .card-img-bottom,\n .card-group > .card:only-child .card-footer {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {\n border-radius: 0;\n }\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,\n .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {\n border-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-link:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\n.badge-primary[href]:hover, .badge-primary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #0062cc;\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\n.badge-secondary[href]:hover, .badge-secondary[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #545b62;\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\n.badge-success[href]:hover, .badge-success[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1e7e34;\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.badge-info[href]:hover, .badge-info[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #117a8b;\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\n.badge-warning[href]:hover, .badge-warning[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #d39e00;\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\n.badge-danger[href]:hover, .badge-danger[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #bd2130;\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.badge-light[href]:hover, .badge-light[href]:focus {\n color: #212529;\n text-decoration: none;\n background-color: #dae0e5;\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.badge-dark[href]:hover, .badge-dark[href]:focus {\n color: #fff;\n text-decoration: none;\n background-color: #1d2124;\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:hover, .list-group-item:focus {\n z-index: 1;\n text-decoration: none;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n color: #000;\n text-decoration: none;\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -25%);\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: translate(0, 0);\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - (0.5rem * 2));\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - (0.5rem * 2));\n content: \"\";\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem;\n border-bottom: 1px solid #e9ecef;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-centered {\n min-height: calc(100% - (1.75rem * 2));\n }\n .modal-dialog-centered::before {\n height: calc(100vh - (1.75rem * 2));\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg {\n max-width: 800px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top .arrow, .bs-popover-auto[x-placement^=\"top\"] .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.bs-popover-top .arrow::after,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0;\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n bottom: 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n\n.bs-popover-top .arrow::after,\n.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n bottom: 1px;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right .arrow, .bs-popover-auto[x-placement^=\"right\"] .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.bs-popover-right .arrow::after,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n border-width: 0.5rem 0.5rem 0.5rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n left: 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n\n.bs-popover-right .arrow::after,\n.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n left: 1px;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.bs-popover-bottom .arrow::after,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n border-width: 0 0.5rem 0.5rem 0.5rem;\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n top: 0;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n\n.bs-popover-bottom .arrow::after,\n.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n top: 1px;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left .arrow, .bs-popover-auto[x-placement^=\"left\"] .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.bs-popover-left .arrow::after,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n border-width: 0.5rem 0 0.5rem 0.5rem;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n right: 0;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n\n.bs-popover-left .arrow::after,\n.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n right: 1px;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n color: inherit;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-item {\n position: relative;\n display: none;\n align-items: center;\n width: 100%;\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n transition: transform 0.6s ease;\n}\n\n@media screen and (prefers-reduced-motion: reduce) {\n .carousel-item.active,\n .carousel-item-next,\n .carousel-item-prev {\n transition: none;\n }\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n position: absolute;\n top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next,\n .active.carousel-item-right {\n transform: translate3d(100%, 0, 0);\n }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-prev,\n .active.carousel-item-left {\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-duration: .6s;\n transition-property: opacity;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n opacity: 0;\n}\n\n.carousel-fade .carousel-item-next,\n.carousel-fade .carousel-item-prev,\n.carousel-fade .carousel-item.active,\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-prev {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-fade .carousel-item-next,\n .carousel-fade .carousel-item-prev,\n .carousel-fade .carousel-item.active,\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-prev {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: .9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: transparent no-repeat center center;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 10px;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n position: relative;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n position: absolute;\n top: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators li::after {\n position: absolute;\n bottom: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators .active {\n background-color: #fff;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0062cc !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #545b62 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #1e7e34 !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #117a8b !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #d39e00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #bd2130 !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #dae0e5 !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #1d2124 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { font-size: $h1-font-size; }\nh2, .h2 { font-size: $h2-font-size; }\nh3, .h3 { font-size: $h3-font-size; }\nh4, .h4 { font-size: $h4-font-size; }\nh5, .h5 { font-size: $h5-font-size; }\nh6, .h6 { font-size: $h6-font-size; }\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n font-size: $display1-size;\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n font-size: $display2-size;\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n font-size: $display3-size;\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n font-size: $display4-size;\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n font-size: $small-font-size;\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n font-size: $blockquote-font-size;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%; // back to default font-size\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: ($spacer / 2);\n line-height: 1;\n}\n\n.figure-caption {\n font-size: $figure-caption-font-size;\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n// stylelint-disable indentation, media-query-list-comma-newline-after\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n}\n","// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n font-size: $code-font-size;\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n font-size: $kbd-font-size;\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n font-size: $code-font-size;\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n\n .table {\n background-color: $body-bg;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: (2 * $table-border-width);\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, -9));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map) {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $yiq-text-dark;\n } @else {\n @return $yiq-text-light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-size: $font-size-base;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @if $enable-rounded {\n // Manually use the if/else instead of the mixin to account for iOS override\n border-radius: $input-border-radius;\n } @else {\n // Otherwise undo the iOS default\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t {\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n const TRANSITION_END = 'transitionend'\n const MAX_UID = 1000000\n const MILLISECONDS_MULTIPLIER = 1000\n\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n const floatTransitionDuration = parseFloat(transitionDuration)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => elem.getAttribute('data-parent') === this._config.parent)\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n }\n\n const Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets) || {}\n }\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: offsetConf,\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(document).find(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this.element).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n }\n\n const DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.1.3'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
    and
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),i.isInStateTrue()?void 0:(clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide())},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-cu.width?"left":"left"==r&&d.left-pa.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.6",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.6",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.6",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>n?"top":!1;if("bottom"==this.affixed)return null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.6",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l]); +}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.6",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||ef.getListenerIndex(d)){f=f.listeners;g||(g=this);isNaN(k)&&(k=10);var D=this;n.fn=d;n.priority=k;for(var w=f.length-1;0<=w;w--)if(f[w].priority<=k)return f.splice(w+1,0,n),{removeListener:q};f.unshift(n)}return{removeListener:q}}, +once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,h=function(){g=1};return function(k,n,q){var f=d(this)[k];k=a;var D=g;a=g=0;if(f){var w=f.listeners;if(w.length)for(var w=w.slice(0),A,G=0;Gdocument.documentMode),mobile:-1c||b.quirks);b.gecko&&(d=a.match(/rv:([\d\.]+)/))&&(d=d[1].split("."),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1])); +b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&7>c)&&!(b.gecko&&4E4>c)&&!(b.webkit&&534>c);b.hidpi=2<=window.devicePixelRatio;b.needsBrFiller=b.gecko||b.webkit||b.ie&&10c;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");b.quirks&&(b.cssClass+=" cke_browser_quirks");b.ie&&(b.cssClass+=" cke_browser_ie"+(b.quirks?"6 cke_browser_iequirks":b.version));b.air&&(b.cssClass+=" cke_browser_air"); +b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");return b}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if("basic_ready"!=CKEDITOR.status)CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_ready",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:a,additionalData:d})}; +CKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:a,additionalData:d})}; +CKEDITOR.on("log",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:"log",b=a.data.errorCode;if(a=a.data.additionalData)console[d]("[CKEDITOR] Error code: "+b+".",a);else console[d]("[CKEDITOR] Error code: "+b+".");console[d]("[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-"+b)}},null,null,999);CKEDITOR.dom={}; +(function(){var a=[],d=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/|\s) /g, +function(a,f){return f+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",f=0;8>f;f++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,f){var b=f(a);b.prototype=a.prototype;return b},setTimeout:function(a,f,b,c,k){k||(k=window);b||(b=k);return k.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)}, +f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if("function"==typeof f)for(var b=0,c=a.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2); +return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,c,k){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+k})},parseCssText:function(a,f,b){var c={};b&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, +function(a,b,k){f&&(b=b.toLowerCase(),"font-family"==b&&(k=k.replace(/\s*,\s*/g,",")),k=CKEDITOR.tools.trim(k));c[b]=k});return c},writeCssText:function(a,f){var b,c=[];for(b in a)c.push(b+":"+a[b]);f&&c.sort();return c.join("; ")},objectCompare:function(a,f,b){var c;if(!a&&!f)return!0;if(!a||!f)return!1;for(c in a)if(a[c]!=f[c])return!1;if(!b)for(c in f)if(a[c]!=f[c])return!1;return!0},objectKeys:function(a){var f=[],b;for(b in a)f.push(b);return f},convertArrayToObject:function(a,f){var b={};1== +arguments.length&&(f=!0);for(var c=0,k=a.length;cc;c++)a.push(Math.floor(256*Math.random()));for(c=0;cCKEDITOR.env.version?4=== +b.button?CKEDITOR.MOUSE_BUTTON_MIDDLE:1===b.button?CKEDITOR.MOUSE_BUTTON_LEFT:CKEDITOR.MOUSE_BUTTON_RIGHT:b.button:!1},style:{parse:{_colors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC", +crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969", +dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2", +lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A", +mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399", +red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"}, +_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(a){var b={},c=this._findColor(a);c.length&&(b.color=c[0],CKEDITOR.tools.array.forEach(c,function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed= +a;return b},margin:function(a){function b(a){c.top=k[a[0]];c.right=k[a[1]];c.bottom=k[a[2]];c.left=k[a[3]]}var c={},k=a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g)||["0px"];switch(k.length){case 1:b([0,0,0,0]);break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}return c},border:function(a){var b={};a=a.split(/\s+/);CKEDITOR.tools.array.forEach(a,function(a){if(!b.color){var c=CKEDITOR.tools.style.parse._findColor(a);if(c.length){b.color=c[0];return}}b.style|| +-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle,a)?!b.width&&CKEDITOR.tools.style.parse._widthRegExp.test(a)&&(b.width=a):b.style=a});return b},_findColor:function(a){var b=[],c=CKEDITOR.tools.array,b=b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(c.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,b,c){var k= +[];this.forEach(a,function(d,n){b.call(c,d,n,a)&&k.push(d)});return k},forEach:function(a,b,c){var k=a.length,d;for(d=0;dCKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&c(e);return e},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$, +a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var n=c?a.nextSibling:a.previousSibling;return n&&n.nodeType==CKEDITOR.NODE_TEXT?b(n)?d(n, +c):n:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,e=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(e++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return e},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var e;if(!a){if(this.type== +CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===b(e,!0))return null;a=e.getNext()}return!a||b&&!1===b(a)?null:d&&d!=a.type?a.getNextSourceNode(!1,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getLast&&this.getLast();var e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getPrevious()}for(;!a&&(e=(e||this).getParent());){if(b&&!1=== +b(e,!0))return null;a=e.getPrevious()}return!a||b&&!1===b(a)?null:d&&a.type!=d?a.getPreviousSourceNode(!1,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&10!=d.nodeType&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT||a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)? +new CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?"push":"unshift"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type== +CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(d.contains){if(d.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(d))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in d)return 0>d.sourceIndex||0>b.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+ +CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(a){return new CKEDITOR.dom.node(a)})}};CKEDITOR.dom.element=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)}; +CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,d,b,c){var e=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),g=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=d;g[b]=1;return d.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),e=d.getCustomData("list_marker_id"),g;for(g in c)d.removeCustomData(g);d.removeCustomData("list_marker_names");b&&(d.removeCustomData("list_marker_id"),delete a[e])}; +(function(){function a(a,b){return-1<(" "+a+" ").replace(g," ").indexOf(" "+b+" ")}function d(a){var b=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute("id")}}function b(a,b){var c=CKEDITOR.tools.escapeCss(a.$.id);return"#"+c+" "+b.split(/,\s*/).join(", #"+c+" ")}function c(a){for(var b=0,c=0,f=h[a].length;cCKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a); +var f=c.extractContents(!1,b||!1),d;c.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(c=new CKEDITOR.dom.element("div");d=f.getFirst();)d.$.style.backgroundColor&&(d.$.style.backgroundColor=d.$.style.backgroundColor),c.append(d);c.insertAfter(this);c.remove(!0)}else f.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$): +b!=a.$&&b.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(b){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({}, +this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(f){this.$.innerHTML="";b=new CKEDITOR.dom.element("body",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));return a}}: +function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(b){this.$[a?"textContent":"innerText"]=b}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":return a=this.$.getAttribute(a, +2),0!==a&&0===this.$.tabIndex&&(a=null),a;case "checked":return a=this.$.attributes.getNamedItem(a),(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getAttributes:function(a){var b={},c=this.$.attributes,f;a=CKEDITOR.tools.isArray(a)? +a:[];for(f=0;f=document.documentMode){var b=this.$.scopeName;"HTML"!=b&&(a=b.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]}, +is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var b=0;bCKEDITOR.env.version&&this.is("a")){var c=this.getParent();c.type==CKEDITOR.NODE_ELEMENT&&(c=c.clone(),c.setHtml(b),b=c.getHtml(),c.setHtml(a),a=c.getHtml())}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),b,c;a&&CKEDITOR.env.webkit&&(b=this.getWindow(),!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement)&&(a=(new CKEDITOR.dom.element(c)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1; +for(var a=this.getChildren(),b=0,c=a.count();bCKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var f;if(b)for(;f=c.lastChild;)a.insertBefore(c.removeChild(f),a.firstChild);else for(;f=c.firstChild;)a.appendChild(c.removeChild(f))}},mergeSiblings:function(){function a(b,c,f){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d= +[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var k=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&&k.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", +visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){"class"==b?this.$.className=c:"style"==b?this.$.style.cssText=c:"tabindex"==b?this.$.tabIndex=c:"checked"==b?this.$.checked=c:"contenteditable"==b?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if("src"==b&&c.match(/^http:\/\//))try{a.apply(this, +arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b= +0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();ce||0e?e:d);c&&(0>w||0w?w:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+ +"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}}, +getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){var c=this.$.attributes;b=b||{};for(var f=0;f=J.getChildCount()?(J=J.getChild(E-1),y=!0):J=J.getChild(E):B=y=!0;r.type==CKEDITOR.NODE_TEXT?l?L=!0:r.split(H):0ea)for(;U;)U=g(U,N,!0);N=X}l||k()}} +function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||b(e)?!0:d(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&h(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}} +function e(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&q(a)&&(b=a);return n(a)&&!(h(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),k=/^[\t\r\n ]*(?: |\xa0)$/,n=CKEDITOR.dom.walker.editable(),q=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a= +new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| +d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,e,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id", +d+(g?"C":"S")));g||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),e=this.clone(),e.collapse(),e.insertNode(c));e=this.clone();e.collapse(!0);e.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(g?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:g}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()? +0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d-1),d=f.getLength());if(f.type==CKEDITOR.NODE_ELEMENT&&0=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},m={container:this.endContainer,offset:this.endOffset};c&&(a(e), +b(e,this.root),d||(a(m),b(m,this.root)));return{start:e.container.getAddress(c),end:d?null:m.container.getAddress(c),startOffset:e.offset,endOffset:m.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode, +a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>c)a=a.getChild(c);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(e=b.getChildCount(), +e>d)b=b.getChild(d).getPreviousSourceNode(!0);else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a= +this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)}, +trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(g,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset; +b||e||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var g=function(a,b){var c=new CKEDITOR.dom.range(k);c.setStart(a,b);c.setEndAt(k,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c), +f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;u=f!=a?f.getText():f.substring(b);if(d.test(u))return!1}return!0};if(this.collapsed)break;var m=this.getCommonAncestor(),k=this.root,h,q,l,r,J,H=!1,E,u;E=this.startContainer;var y=this.startOffset;E.type==CKEDITOR.NODE_TEXT?(y&&(E=!CKEDITOR.tools.trim(E.substring(0,y)).length&&E,H=!!E),E&&((r=E.getPrevious())||(l=E.getParent()))):(y&&(r=E.getChild(y-1)||E.getLast()), +r||(l=E));for(l=c(l);l||r;){if(l&&!r){!J&&l.equals(m)&&(J=!0);if(e?l.isBlockBoundary():!k.contains(l))break;H&&"inline"==l.getComputedStyle("display")||(H=!1,J?h=l:this.setStartBefore(l));r=l.getPrevious()}for(;r;)if(E=!1,r.type==CKEDITOR.NODE_COMMENT)r=r.getPrevious();else{if(r.type==CKEDITOR.NODE_TEXT)u=r.getText(),d.test(u)&&(r=null),E=/[\s\ufeff]$/.test(u);else if((r.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&r.is("br"))&&!r.data("cke-bookmark"))if(H&&CKEDITOR.dtd.$removeEmpty[r.getName()]){u= +r.getText();if(d.test(u))r=null;else for(var y=r.$.getElementsByTagName("*"),v=0,B;B=y[v++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){r=null;break}r&&(E=!!u.length)}else r=null;E&&(H?J?h=l:l&&this.setStartBefore(l):H=!0);if(r){E=r.getPrevious();if(!l&&!E){l=r;r=null;break}r=E}else l=null}l&&(l=c(l.getParent()))}E=this.endContainer;y=this.endOffset;l=r=null;J=H=!1;E.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(E.substring(y)).length?H=!0:(H=!E.getLength(),y==E.getLength()?(r=E.getNext())|| +(l=E.getParent()):g(E,y)&&(l=E.getParent())):(r=E.getChild(y))||(l=E);for(;l||r;){if(l&&!r){!J&&l.equals(m)&&(J=!0);if(e?l.isBlockBoundary():!k.contains(l))break;H&&"inline"==l.getComputedStyle("display")||(H=!1,J?q=l:l&&this.setEndAfter(l));r=l.getNext()}for(;r;){E=!1;if(r.type==CKEDITOR.NODE_TEXT)u=r.getText(),g(r,0)||(r=null),E=/^[\s\ufeff]/.test(u);else if(r.type==CKEDITOR.NODE_ELEMENT){if((0=m.getLength()?g.setStartAfter(m):(g.setStartBefore(m),c=0):g.setStartBefore(m));k&&k.type==CKEDITOR.NODE_TEXT&&(q?q>=k.getLength()?g.setEndAfter(k):(g.setEndAfter(k),l=0):g.setEndBefore(k));var g=new CKEDITOR.dom.walker(g),r=CKEDITOR.dom.walker.bookmark(),J=CKEDITOR.dom.walker.bogus();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var H;g.guard=function(b,c){if(e&&J(b)||r(b))return!0; +if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||c&&b.equals(H)||!1===d&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(H=b);return!0};c&&(m=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(m,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);l&&(g.reset(),(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END: +CKEDITOR.POSITION_AFTER_END));return!(!c&&!l)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a, +0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer|| +(this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b, +b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)}, +fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,g=d.block,m=null;if(!c.blockLimit.equals(d.blockLimit))return null; +"br"!=a&&(e||(e=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),g||(g=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=g&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(g)&&(d?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),g=null):c?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(g=this.splitElement(e, +b||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:g,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:m}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()|| +d.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer, +this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),k.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),k.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END); +a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== +CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")||"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START), +!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,e=c,g=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(g=d[b?"getLast":"getFirst"](q));e||g||(g=d[b?"getPrevious":"getNext"](q));a=g}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,g,m=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,m[b?0:1])):c=this.clone();if(a&& +!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(g=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,m[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, +moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer; +return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var b=this.startContainer,c=this.endContainer,d=b.getAscendant("table",!0),e=c.getAscendant("table",!0);return CKEDITOR.env.safari&&d&&c.equals(this.root)? +b.getAscendant(a,!0):this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):d&&e&&(d.equals(e)||d.contains(e)||e.contains(d))?b.getAscendant(a,!0):null},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView(); +d&&(e.startContainer.setText(c),b.remove());a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a,b){var c=this.getCommonAncestor(),d=this.getBoundaryNodes(),e=[],g,m,k,h;if(c&&c.find)for(m=c.find(a),g=0;garguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,e,g){a:{null==g&&(g=d(e));for(var k;k=g.shift();)if(k.getDtd().p){g={element:k,remaining:g};break a}g=null}if(!g)return 0;if((k=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!k.check(c))return b(a, +c,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=k;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),h=CKEDITOR.dom.walker.whitespaces(!0), +k=function(a){return g(a)&&h(a)},n={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,h,w,A,G;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var x=this.range.clone();h=x.startPath();var m=x.endPath(),K=!x.collapsed&&c(x,h.block),z=!x.collapsed&&c(x,m.block,1);x.shrink(CKEDITOR.SHRINK_ELEMENT,!0);K&&x.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);z&&x.setEndAt(m.block,CKEDITOR.POSITION_AFTER_START);h=x.endContainer.hasAscendant("pre",!0)||x.startContainer.hasAscendant("pre",!0);x.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS); +x.collapsed||(h=new CKEDITOR.dom.walker(x.clone()),m=CKEDITOR.dom.walker.bookmark(!0,!0),h.evaluator=m,this._.nextNode=h.next(),h=new CKEDITOR.dom.walker(x.clone()),h.evaluator=m,h=h.previous(),this._.lastNode=h.getNextSourceNode(!0,null,x.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(m=this.range.clone(),m.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),m.checkEndOfBlock()&& +(m=new CKEDITOR.dom.elementPath(m.endContainer,m.root),this._.lastNode=(m.block||m.blockLimit).getNextSourceNode(!0))),this._.lastNode&&x.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=x.document.createText(""),this._.lastNode.insertAfter(h)),x=null);this._.started=1;h=x}m=this._.nextNode;x=this._.lastNode;for(this._.nextNode=null;m;){var K=0,z=m.hasAscendant("pre"),I=m.type!=CKEDITOR.NODE_ELEMENT,l=0;if(I)m.type==CKEDITOR.NODE_TEXT&&e.test(m.getText())&&(I=0);else{var r=m.getName(); +if(CKEDITOR.dtd.$block[r]&&"false"==m.getAttribute("contenteditable")){d=m;b(this,a,d);break}else if(m.isBlockBoundary(this.forceBrBreak&&!z&&{br:1})){if("br"==r)I=1;else if(!h&&!m.getChildCount()&&"hr"!=r){d=m;w=m.equals(x);break}h&&(h.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),"br"!=r&&(this._.nextNode=m));K=1}else{if(m.getFirst()){h||(h=this.range.clone(),h.setStartAt(m,CKEDITOR.POSITION_BEFORE_START));m=m.getFirst();continue}I=1}}I&&!h&&(h=this.range.clone(),h.setStartAt(m,CKEDITOR.POSITION_BEFORE_START)); +w=(!K||I)&&m.equals(x);if(h&&!K)for(;!m.getNext(k)&&!w;){r=m.getParent();if(r.isBlockBoundary(this.forceBrBreak&&!z&&{br:1})){K=1;I=0;w||r.equals(x);h.setEndAt(r,CKEDITOR.POSITION_BEFORE_END);break}m=r;I=1;w=m.equals(x);l=1}I&&h.setEndAt(m,CKEDITOR.POSITION_AFTER_END);m=this._getNextSourceNode(m,l,x);if((w=!m)||K&&h)break}if(!d){if(!h)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(h.startContainer,h.root);m=d.blockLimit;K={div:1,th:1,td:1}; +d=d.block;!d&&m&&!this.enforceRealBlocks&&K[m.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!m.equals(h.root)?d=m:!d||this.enforceRealBlocks&&d.is(n)?(d=this.range.document.createElement(a),h.extractContents().appendTo(d),d.trim(),h.insertNode(d),A=G=!0):"li"!=d.getName()?h.checkStartOfBlock()&&h.checkEndOfBlock()||(d=d.clone(!1),h.extractContents().appendTo(d),d.trim(),G=h.splitBlock(),A=!G.wasStartOfBlock,G=!G.wasEndOfBlock,h.insertNode(d)):w||(this._.nextNode=d.equals(x)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode, +1,x))}A&&(A=d.getPrevious())&&A.type==CKEDITOR.NODE_ELEMENT&&("br"==A.getName()?A.remove():A.getLast()&&"br"==A.getLast().$.nodeName.toLowerCase()&&A.getLast().remove());G&&(A=d.getLast())&&A.type==CKEDITOR.NODE_ELEMENT&&"br"==A.getName()&&(!CKEDITOR.env.needsBrFiller||A.getPrevious(g)||A.getNext(g))&&A.remove();this._.nextNode||(this._.nextNode=w||d.equals(x)||!x?null:this._getNextSourceNode(d,1,x));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}var e= +this.range.root;for(a=a.getNextSourceNode(b,null,d);!g(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh", +{editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||"boolean"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,e){var f,l;a=[];for(f in b){l=b[f];l="boolean"==typeof l?{}:"function"==typeof l?{match:l}:v(l);"$"!=f.charAt(0)&&(l.elements=f);c&&(l.featureName=c.toLowerCase());var t=l;t.elements=h(t.elements,/\s+/)||null;t.propertiesOnly=t.propertiesOnly||!0===t.elements;var u=/\s*,\s*/,g=void 0;for(g in V){t[g]=h(t[g],u)||null;var p=t,r=O[g],m=h(t[O[g]],u),F=t[g],y=[],B=!0,C=void 0;m?B=!1:m={};for(C in F)"!"==C.charAt(0)&&(C=C.slice(1),y.push(C),m[C]=!0,B=!1);for(;C=y.pop();)F[C]= +F["!"+C],delete F["!"+C];p[r]=(B?!1:m)||null}t.match=t.match||null;d.push(l);a.push(l)}b=e.elements;e=e.generic;var k;c=0;for(d=a.length;c=--k&&(g&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),f(b))},w=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?f.$.onreadystatechange=function(){if("loaded"==f.$.readyState||"complete"==f.$.readyState)f.$.onreadystatechange=null,w(b,!0)}:(f.$.onload=function(){setTimeout(function(){w(b,!0)},0)},f.$.onerror=function(){w(b,!1)}));f.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var G=0;G]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,g=0,h;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>g)if(g=b.substring(g,e),h)h.push(g);else this.onText(g); +g=this._.htmlPartsRegex.lastIndex;if(e=c[1])if(e=e.toLowerCase(),h&&CKEDITOR.dtd.$cdata[e]&&(this.onCDATA(h.join("")),h=null),!h){this.onTagClose(e);continue}if(h)h.push(c[0]);else if(e=c[3]){if(e=e.toLowerCase(),!/="/.test(e)){var k={},n,q=c[4];c=!!c[5];if(q)for(;n=a.exec(q);){var f=n[1].toLowerCase();n=n[2]||n[3]||n[4]||"";k[f]=!n&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(n)}this.onTagOpen(e,k,c);!h&&CKEDITOR.dtd.$cdata[e]&&(h=[])}}else if(e=c[2])this.onComment(e)}if(b.length>g)this.onText(b.substring(g, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("\x3c",a)},openTagClose:function(a,d){d?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(a,d){"string"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'\x3d"',d,'"')},closeTag:function(a){this._.output.push("\x3c/",a,"\x3e")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("\x3c!--",a, +"--\x3e")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,d=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(d,1);this.parent=null},replaceWith:function(a){var d=this.parent.children,b=CKEDITOR.tools.indexOf(d,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);d[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var d=a.parent.children, +b=CKEDITOR.tools.indexOf(d,a),c=a.next;d.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var d=a.parent.children,b=CKEDITOR.tools.indexOf(d,a);d.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var d="function"==typeof a?a:"string"==typeof a?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(d(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:!1}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,d){var b=this.value;if(!(b=a.onComment(d,b,this)))return this.remove(),!1;if("string"!=typeof b)return this.replaceWith(b),!1;this.value=b;return!0},writeHtml:function(a,d){d&&this.filter(d);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(g,h,k){function n(a){var b;if(0h;h++)if(g=d[h]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,g){return(d=this.attributesRules[d])?d.exec(a,g,c,this):g}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, +c,d){for(var g=[this.findIndex(c),0],h=0,k=a.length;h/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function D(a){return a.replace(V,function(a,b){return decodeURIComponent(b)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, +function(a){return"\x3c!--"+K+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function A(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function G(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function x(a,b){var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore= +{id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/|$)/gi,//gi,//gi].concat(d);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var l=0;l]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"\x3c"+c+d+"\x3e"+G(A(e),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c, +e,l=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(r);c.addRules(J,{applyToAll:!0});c.addRules(a(b,"data"),{applyToAll:!0});e.addRules(H);e.addRules(E,{applyToAll:!0});e.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,e,c=x(c,b),c=f(c,L),c=q(c),c=f(c,B),c=c.replace(O,"$1cke:$2"),c=c.replace(C,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"), +c=c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=a.context||b.editable().getName();var l;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==e&&(e="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",l=1);e=b.document.createElement(e);e.setHtml("a"+c);c=e.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");l&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(p,"$1$2");c=D(c);c=A(c);e=!1===a.fixForBody?!1:
+d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,e);e&&(l=c,!l.children.length&&CKEDITOR.dtd[l.name][e]&&(e=new CKEDITOR.htmlParser.element(e),l.add(e)));a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(l.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,
+c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=w(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(l.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue, +!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=l.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=A(c);c=G(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var e=this.editor,f,l,v,g;b&&"object"==typeof b?(f=b.context,c=b.fixForBody,d=b.dontFilter,l=b.filter,v=b.enterMode,g=b.protectedWhitespaces):f=b;f||null===f||(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d, +filter:l||e.filter,enterMode:v||e.enterMode,protectedWhitespaces:g}).dataValue},toDataFormat:function(a,b){var c,d,e;b&&(c=b.context,d=b.filter,e=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var m=/(?: |\xa0)$/,K="{cke_protected}",z=CKEDITOR.dtd,I="caption colgroup col thead tfoot tbody".split(" "),l=CKEDITOR.tools.extend({},z.$blockLimit, +z.$block),r={elements:{input:k,textarea:k}},J={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},H={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height; +c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},E={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,e=0;ed?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck; +delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:n,textarea:n},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(E.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g, +function(a){return a.toLowerCase()})});var u=/<(a|area|img|input|source)\b([^>]*)>/gi,y=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,v=/^(href|src|name)$/i,B=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,L=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,V=/([^<]*)<\/cke:encoded>/gi,O=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,p=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,C=/]*?)\/?>(?!\s*<\/cke:\1)/gi})(); +"use strict";CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||"br"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){"font-family"==c&&(e=e.replace(/["']/g,""));d[c.toLowerCase()]=e});return{rules:d,populate:function(a){var c=this.toString();c&&(a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c)},toString:function(){var a=[],c; +for(c in d)d[c]&&a.push(c,":",d[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof a?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return ab?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,h,k;b=d.getFilterContext(b);if(b.off)return!0; +if(!d.parent)a.onRoot(b,d);for(;;){h=d.name;if(!(k=a.onElementName(b,h)))return this.remove(),!1;d.name=k;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==h)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}h=d.attributes;var n,q;for(n in h){for(k=h[n];;)if(q=a.onAttributeName(b,n))if(q!=n)delete h[n],n=q;else break;else{delete h[n];break}q&&(!1===(k=a.onAttribute(b,d,q,k))?delete h[q]: +h[q]=k)}d.isEmpty||this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,h=[],k=this.attributes,n,q;a.openTag(g,k);for(n in k)h.push([n,k[n]]);a.sortAttributes&&h.sort(d);n=0;for(q=h.length;nCKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus", +function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};z.eol.detect(a,this);z.bogus.exclude(a);z.cell.shrink(a);a.fragment=a.range.cloneContents();z.tree.rebuild(a,this);z.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=I,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize(); +c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!D(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),w(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings(); +return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(G,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a, +"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&"Control"==b.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"): +a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null, +null,-1);if(CKEDITOR.env.edge&&14CKEDITOR.env.version?u.$.styleSheet.cssText=h:u.setText(h)):(h=e.appendStyleText(h),h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement),k.setCustomData("stylesheet", +h),h.data("cke-temp",1))}k=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",k+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var y={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;b=a.getSelection();if(0!==b.getRanges().length){if(c in +y){var e,u=b.getRanges()[0],p=u.startPath(),C,t,k,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=g(b))?(a.fire("saveSnapshot"),u.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),u.select(),a.fire("saveSnapshot"),d=1):u.collapsed&&((C=p.block)&&(k=C[c?"getPrevious":"getNext"](f))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("table")&&u[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),u[c?"checkEndOfBlock":"checkStartOfBlock"]()&&C.remove(),u["moveToElementEdit"+ +(c?"End":"Start")](k),u.select(),a.fire("saveSnapshot"),d=1):p.blockLimit&&p.blockLimit.is("td")&&(t=p.blockLimit.getAscendant("table"))&&u.checkBoundaryOfElement(t,c?CKEDITOR.START:CKEDITOR.END)&&(k=t[c?"getPrevious":"getNext"](f))?(a.fire("saveSnapshot"),u["moveToElementEdit"+(c?"End":"Start")](k),u.checkStartOfBlock()&&u.checkEndOfBlock()?k.remove():u.select(),a.fire("saveSnapshot"),d=1):(t=p.contains(["td","th","caption"]))&&u.checkBoundaryOfElement(t,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}}); +a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in y&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown", +function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(G,""))){var c=a.createRange(); +c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey();if(c in y&&(b=a.getSelection(),0!==b.getRanges().length)){var c=8==c,d=b.getRanges()[0];b=d.startPath(); +if(d.collapsed)a:{var e=b.block;if(e&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(e,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(c?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))b=void 0;else{a.fire("saveSnapshot");var p;(p=(c?d:e).getBogus())&&p.remove();p=a.getSelection();f=p.createBookmarks(); +(c?e:d).moveChildren(c?d:e,!1);b.lastElement.mergeSiblings();q(e,d,!c);p.selectBookmarks(f);b=!0}}else b=!1}else c=d,p=b.block,d=c.endPath().block,p&&d&&!p.equals(d)?(a.fire("saveSnapshot"),(e=p.getBogus())&&e.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(p,!1),b.lastElement.mergeSiblings(),q(p,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(),c.select(),b=!0):b=!1;if(!b)return; +a.getSelection().scrollIntoView();a.fire("saveSnapshot");return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");--c?a.setCustomData("stylesheet_ref",c):(a.removeCustomData("stylesheet_ref"),b.removeCustomData("stylesheet").remove())}}this.editor.fire("contentDomUnload"); +delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")? +"true":"1"),a.setAttribute("contentEditable",!1))});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),a(b),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label; +if(d&&(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");f=CKEDITOR.dom.walker.whitespaces(!0);D=CKEDITOR.dom.walker.bookmark(!1,!0);w=CKEDITOR.dom.walker.empty(); +A=CKEDITOR.dom.walker.bogus();G=/(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;x=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,u,g,y=[],k=d.range.startContainer;e=d.range.startPath();for(var k=v[k.getName()],h=0,B=c.getChildren(),n=B.count(),L=-1,q=-1,E=0,H=e.contains(v.$list);hCKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=!1;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is("table")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START), +d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();K=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&& +a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();z={eol:{detect:function(a,b){var c=a.range, +d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),g=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(c.setEndBefore(g.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c), +1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!A(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),g;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1, +table:1})){var v=e.contains("table").getParent();g=function(a){return!a.equals(v)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var k=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(k)}}g||(g=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,g)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e), +a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is("tr")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};I=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var f;f=e.getNext();)f.insertAfter(d),d=f;w(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode); +d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),f=d.endPath(),g=e.contains(CKEDITOR.dtd.$list),k=f.contains(CKEDITOR.dtd.$list);a.mergeList=g&&k&&g.getParent().equals(k.getParent())&&!g.equals(k);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&&f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark= +d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var k=f.contains(CKEDITOR.dtd.$list),h=g.contains(CKEDITOR.dtd.$list);k.equals(h)||(h.moveChildren(k),h.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$listItem),f.equals(g)||b(g,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a, +b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c),f=f.block,g=g.block;f&&g&&!f.equals(g)&&b(g,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e= +[],f,g=new CKEDITOR.dom.walker(c),k=c.startPath().contains(d),h=c.endPath().contains(d),p={};g.guard=function(a,g){if(a.type==CKEDITOR.NODE_ELEMENT){var F="visited_"+(g?"out":"in");if(a.getCustomData(F))return;CKEDITOR.dom.element.setMarker(p,a,F,1)}if(g&&k&&a.equals(k))f=c.clone(),f.setEndAt(k,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!g&&h&&a.equals(h))f=c.clone(),f.setStartAt(h,CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(F=!g)F=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!k||b(a,k))&&(!h|| +b(a,h));F&&(f=c.clone(),f.selectNodeContents(a),e.push(f))}};g.lastForward();CKEDITOR.dom.element.clearAllMarkers(p);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e}; +c.checkForward();if(1f&&e&&e.intersectsNode(c.$)){var g=[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==c.$&&d.anchorOffset>f&&(g[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(g[1].offset-=f)}}c.setText(D(c.getText(),1));g&&(c=a.getDocument().$,d=c.getSelection(), +c=c.createRange(),c.setStart(g[0].node,g[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(g[1].node,g[1].offset))}}function D(a,b){return b?a.replace(z,function(a,b){return b?" ":""}):a.replace(K,"")}function w(a,b){var c=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot"); +a.editable().append(c);var d=a.getSelection(1),e=a.createRange(),f=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(c,CKEDITOR.POSITION_AFTER_START);e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function A(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode": +"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function G(a){for(var b=0;b=d.getLength()?p.setStartAfter(d):p.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?p.setEndAfter(e):p.setEndBefore(e));d=new CKEDITOR.dom.walker(p);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(p.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+ +1,0,e));return!0}return!1};d.next()}}return a}var x="function"!=typeof window.getSelection,m=1,K=CKEDITOR.tools.repeat("​",7),z=new RegExp(K+"( )?","g"),I,l,r,J=CKEDITOR.dom.walker.invisible(1),H=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected, +!a));e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d]));c.fire("saveSnapshot");return!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=c.getSelection();a&&a.removeAllRanges()}var c=a.editor;c.on("contentDom",function(){function a(){q=new CKEDITOR.dom.selection(c.getSelection());q.lock()}function b(){p.removeListener("mouseup", +b);u.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,c=a.createRange();"None"!=a.type&&c.parentElement()&&c.parentElement().ownerDocument==k.$&&c.select()}function d(a){if(CKEDITOR.env.ie){var b=(a=a.getRanges()[0])?a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("false"==a.getAttribute("contenteditable")||"true"==a.getAttribute("contenteditable"))},!0):null;return a&&"false"==b.getAttribute("contenteditable")&&b}}var k=c.document,p=CKEDITOR.document, +h=c.editable(),t=k.getBody(),u=k.getDocumentElement(),l=h.isInline(),y,q;CKEDITOR.env.gecko&&h.attachListener(h,"focus",function(a){a.removeListener();0!==y&&(a=c.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==h.$&&(a=c.createRange(),a.moveToElementEditStart(h),a.select())},null,null,-2);h.attachListener(h,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){y&&CKEDITOR.env.webkit&&(y=c._.previousActive&&c._.previousActive.equals(k.getActive()))&&null!=c._.previousScrollTop&&c._.previousScrollTop!= +h.$.scrollTop&&(h.$.scrollTop=c._.previousScrollTop);c.unlockSelection(y);y=0},null,null,-1);h.attachListener(h,"mousedown",function(){y=0});if(CKEDITOR.env.ie||l)x?h.attachListener(h,"beforedeactivate",a,null,null,-1):h.attachListener(c,"selectionCheck",a,null,null,-1),h.attachListener(h,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){c.lockSelection(q);y=1},null,null,-1),h.attachListener(h,"mousedown",function(){y=0});if(CKEDITOR.env.ie&&!l){var n;h.attachListener(h,"mousedown",function(a){2== +a.data.$.button&&((a=c.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(n=c.window.getScrollPosition()))});h.attachListener(h,"mouseup",function(a){2==a.data.$.button&&n&&(c.document.$.documentElement.scrollLeft=n.x,c.document.$.documentElement.scrollTop=n.y);n=null});if("BackCompat"!=k.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var m,w;u.on("mousedown",function(a){function b(a){a=a.data.$;if(m){var c=t.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}m.setEndPoint(0> +w.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);m.select()}}function c(){u.removeListener("mousemove",b);p.removeListener("mouseup",c);u.removeListener("mouseup",c);m.select()}a=a.data;if(a.getTarget().is("html")&&a.$.yCKEDITOR.env.version)u.on("mousedown",function(a){a.data.getTarget().is("html")&& +(p.on("mouseup",b),u.on("mouseup",b))})}}h.attachListener(h,"selectionchange",e,c);h.attachListener(h,"keyup",g,c);h.attachListener(h,"keydown",function(a){var b=this.getSelection(1);d(b)&&(b.selectElement(d(b)),a.data.preventDefault())},c);h.attachListener(h,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){c.forceNextSelectionCheck();c.selectionChange(1)});if(l&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var r;h.attachListener(h,"mousedown",function(){r=1});h.attachListener(k.getDocumentElement(), +"mouseup",function(){r&&g.call(c);r=0})}else h.attachListener(CKEDITOR.env.ie?h:k.getDocumentElement(),"mouseup",g,c);CKEDITOR.env.webkit&&h.attachListener(k,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h.hasFocus&&f(h)}},null,null,-1);h.attachListener(h,"keydown",A(c),null,null,-1)});c.on("setData",function(){c.unlockSelection();CKEDITOR.env.webkit&&b()});c.on("contentDomUnload",function(){c.unlockSelection()});if(CKEDITOR.env.ie9Compat)c.on("beforeDestroy", +b,null,null,9);c.on("dataReady",function(){delete c._.fakeSelection;delete c._.hiddenSelectionContainer;c.selectionChange(1)});c.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=c.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&(b.remove(),CKEDITOR.env.gecko&&(a=c.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);c.on("key",function(a){if("wysiwyg"==c.mode){var b=c.getSelection();if(b.isFake){var d= +H[a.data.keyCode];if(d)return d({editor:c,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar");c&&(c.getCustomData("ready")?(f(a),a.editor.fire("selectionCheck")):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){f(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=D(a.data))}, +b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=D(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?e:g).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE? +(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection(): +new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:m++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache), +this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement= +null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var E={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:D,_createFillingCharSequenceNode:q,FILLING_CHAR_SEQUENCE:K});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel= +x?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:x?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;"Text"==d&&(b=CKEDITOR.SELECTION_TEXT);"Control"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE; +else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&E[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=x?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),k=0, +l=e.length-1,u=-1,q,n;k<=l;)if(u=Math.floor((k+l)/2),f=e[u],h.moveToElementText(f),q=h.compareEndPoints("StartToStart",b),0q)k=u+1;else return{container:d,offset:a(f)};if(-1==u||u==e.length-1&&0>q){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g, +" ");g=g.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);b=e}else g?b=w(c?[a.getHtml()]:f(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(L))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=D(k.getHtml(),/\n$/,"")+"\n\n"+D(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e": +c.setHtml(d),k.remove())}else c&&m(b)}function f(a){var b=[];D(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function D(a,b,c){var d="",e="";a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function w(a,b){var c; +1=c?(g=e.createText(""),g.insertAfter(this)):(a=e.createText(""),a.insertAfter(g),a.remove()));return g},substring:function(a, +d){return"number"!=typeof d?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}}); +(function(){function a(a,c,d){var g=a.serializable,h=c[d?"endContainer":"startContainer"],k=d?"endOffset":"startOffset",n=g?c.document.getById(a.startNode):a.startNode;a=g?c.document.getById(a.endNode):a.endNode;h.equals(n.getPrevious())?(c.startOffset=c.startOffset-h.getLength()-a.getPrevious().getLength(),h=a.getNext()):h.equals(a.getPrevious())&&(c.startOffset-=h.getLength(),h=a.getNext());h.equals(n.getParent())&&c[k]++;h.equals(a.getParent())&&c[k]++;c[d?"endContainer":"startContainer"]=h;return c} +CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],g;return{getNextRange:function(h){g=void 0===g?0:g+1;var k=a[g];if(k&&1b?-1:1}),e=0,g;eCKEDITOR.env.version? +a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var g={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,e){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+"-rtl"]), +g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;e=e||g&&g.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",g="";"function"==typeof c&&(d=c(this,"editor"),g= +c(this,"panel"));a=[[n,a]];e([b],d,a);e(k,g,a)}).call(this,a)}});var h="cke_ui_color",k=[],n=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);k.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[n,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!d||d!=b)}catch(c){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); +CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,d=0;de;e++){var f=e,c;c=parseInt(a[e],16);c=("0"+(0>d?0|c*(1+d):0|c+(255-c)*d).toString(16)).slice(-2);a[f]=c}return"#"+a.join("")}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "),panel:new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,d){var a=b(g.uiColor,.4),a={id:"."+g.id,defaultBorder:b(a,-.2),toolbarElementsBorder:b(a,-.25),defaultBackground:a,lightBackground:b(a,.8),darkBackground:b(a,-.15),ckeButtonOn:b(a,.4),ckeResizer:b(a,-.4),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTab:b(a,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-.6),menubuttonHover:b(a,.1),menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return f[d].output(a).replace(/\[/g,"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;darguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+ +"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,e,function(){var e=[],g=a.required?" cke_required":"";"horizontal"!=a.labelLayout?e.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" ',' id\x3d"'+c.labelId+'"',c.inputId?' for\x3d"'+c.inputId+'"':"",(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e",a.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"', +a.controlStyle?' style\x3d"'+a.controlStyle+'"':"",' role\x3d"presentation"\x3e',f.call(this,b,a),"\x3c/div\x3e"):(g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" id\x3d"'+c.labelId+'" for\x3d"'+c.inputId+'"'+(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(a.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+(a.controlStyle?' style\x3d"'+a.controlStyle+ +'"':"")+"\x3e"+f.call(this,b,a)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e));return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,m=!1;b.on("load",function(){e.getInputElement().on("keydown", +function(a){13==a.data.getKeystroke()&&(m=!0)});e.getInputElement().on("keyup",function(a){13==a.data.getKeystroke()&&m&&(b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0),m=!1);e.bidi&&w.call(e,a)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b=['\x3cdiv class\x3d"cke_dialog_ui_input_',a.type,'" role\x3d"presentation"'];a.width&&b.push('style\x3d"width:'+a.width+'" ');b.push("\x3e\x3cinput ");c["aria-labelledby"]=this._.labelId;this._.required&& +(c["aria-required"]=this._.required);for(var e in c)b.push(e+'\x3d"'+c[e]+'" ');b.push(" /\x3e\x3c/div\x3e");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate);e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);if(f.bidi)b.on("load", +function(){f.getInputElement().on("keyup",w)},f);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',c,'" '],b;for(b in e)a.push(b+'\x3d"'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(f._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(b, +a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};t(c);a["default"]&&(g.checked="checked");"undefined"!=typeof c.inputStyle&&(c.style=c.inputStyle); +f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' \x3clabel id\x3d"',d,'" for\x3d"',g.id,'"'+(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(a.label),"\x3c/label\x3e");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.validate);var f=[],c=this;a.role="radiogroup";a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",k=0;karguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};e.push('\x3cdiv class\x3d"cke_dialog_ui_input_', +a.type,'" role\x3d"presentation"');a.width&&e.push('style\x3d"width:'+a.width+'" ');e.push("\x3e");void 0!==a.size&&(g.size=a.size);void 0!==a.multiple&&(g.multiple=a.multiple);t(c);for(var k=0,l;karguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"', +f.frameId,'" title\x3d"',a.label,'" src\x3d"javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"\x3e\x3c/iframe\x3e');return b.join("")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];e&&!1===e.call(this,c)||(b.getContentElement(d[0],d[1]).submit(),this.disable())};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var m=[],g=c.html;"\x3c"!=g.charAt(0)&&(g="\x3cspan\x3e"+g+"\x3c/span\x3e");var k=c.focus;if(k){var l=this.focus;this.focus=function(){("function"== +typeof k?k:l).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,m,"span",null,null,"");m=m.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",m[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("\x3clegend"+ +(c.labelStyle?' style\x3d"'+c.labelStyle+'"':"")+"\x3e"+e+"\x3c/legend\x3e");for(var b=0;ba.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:r},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire("click",{dialog:this._.dialog})},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){if(this.bidi){var a=b&&b.charAt(0);(a="‪"==a?"ltr":"‫"==a?"rtl":null)&&(b=b.slice(1));this.setDirectionMarker(a)}b||(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)}, +getValue:function(){var b=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&b){var a=this.getDirectionMarker();a&&(b=("ltr"==a?"‪":"‫")+b)}return b},setDirectionMarker:function(b){var a=this.getInputElement();b?a.setAttributes({dir:b,"data-cke-dir-marker":b}):this.getDirectionMarker()&&a.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.textarea.prototype= +new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b); +return this},clear:function(){for(var b=this.getInputElement().$;0b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function A(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;ck.width-c.width-g?k.width-c.width+("rtl"==f.lang.dir?0:h[1]):d.x,d.y+h[0]k.height-c.height-g?k.height-c.height+h[2]:d.y,1);b.data.preventDefault()} +function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null,f=a.getParentEditor(),g=f.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof g&&(g=20);a.parts.title.on("mousedown",function(g){e={x:g.data.$.screenX,y:g.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup", +c);d=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=u.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",c)}g.data.preventDefault()},a)}function Z(a){function b(b){var c="rtl"==f.lang.dir,n=k.width,q=k.height,G=n+(b.data.$.screenX-m.x)*(c?-1:1)*(a._.moved?1:2),H=q+(b.data.$.screenY-m.y)*(a._.moved?1:2),B=a._.element.getFirst(),B=c&&B.getComputedStyle("right"),C=a.getPosition();C.y+H>p.height&&(H=p.height-C.y);(c?B:C.x)+G>p.width&&(G=p.width-(c?B:C.x));if(d==CKEDITOR.DIALOG_RESIZE_WIDTH|| +d==CKEDITOR.DIALOG_RESIZE_BOTH)n=Math.max(e.minWidth||0,G-g);if(d==CKEDITOR.DIALOG_RESIZE_HEIGHT||d==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(e.minHeight||0,H-h);a.resize(n,q);a._.moved||a.layout();b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mouseup",c);CKEDITOR.document.removeListener("mousemove",b);q&&(q.remove(),q=null);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener("mouseup",c);a.removeListener("mousemove",b)}}var e=a.definition,d=e.resizable; +if(d!=CKEDITOR.DIALOG_RESIZE_NONE){var f=a.getParentEditor(),g,h,p,m,k,q,n=CKEDITOR.tools.addFunction(function(d){k=a.getSize();var e=a.parts.contents;e.$.getElementsByTagName("iframe").length&&(q=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%;"\x3e\x3c/div\x3e'),e.append(q));h=k.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));g=k.width-a.parts.contents.getSize("width", +1);m={x:d.screenX,y:d.screenY};p=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);CKEDITOR.env.ie6Compat&&(e=u.getChild(0).getFrameDocument(),e.on("mousemove",b),e.on("mouseup",c));d.preventDefault&&d.preventDefault()});a.on("load",function(){var b="";d==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":d==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+ +b+" cke_resizer_"+f.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(f.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+n+', event )"\x3e'+("ltr"==f.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});f.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function I(a){a.data.preventDefault(1)}function N(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=CKEDITOR.skinName||a.config.skin,d=c.dialog_backgroundCoverColor||("moono-lisa"==e?"black":"white"),e=c.dialog_backgroundCoverOpacity, +f=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,e,f),g=z[c];g?g.show():(f=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",f,"; top: 0px; left: 0px; ",CKEDITOR.env.ie6Compat?"":"background-color: "+d,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(d="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+d+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",f.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'), +f.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())"),f.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),f.push("\x3c/div\x3e"),g=CKEDITOR.dom.element.createFromHtml(f.join("")),g.setOpacity(void 0!==e?e:.5),g.on("keydown",I),g.on("keypress",I),g.on("keyup",I),g.appendTo(CKEDITOR.document.getBody()), +z[c]=g);a.focusManager.add(g);u=g;a=function(){var a=b.getViewPaneSize();g.setStyles({width:a.width+"px",height:a.height+"px"})};var h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;g.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do a=c.getPosition(),c.move(a.x,a.y);while(c=c._.parentDialog)}};J=a;b.on("resize",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||g.focus();if(CKEDITOR.env.ie6Compat){var p=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){p.prevScrollHandler= +window.onscroll||function(){};window.onscroll=p},0);h()}}function O(a){u&&(a.focusManager.remove(u),a=CKEDITOR.document.getWindow(),u.hide(),a.removeListener("resize",J),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),J=null)}var v=CKEDITOR.tools.cssLength,W='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+ +CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"position:absolute" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e'; +CKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;cb.length)){var c=l._.currentFocusIndex;l._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(d){}var e=c,g=1c.height||b.width+(0c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(), +setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility", +"hidden");for(ba(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else O(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",Q);a.removeListener("keyup",R);var c=this._.editor; +c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents", +children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),d=this._.contents[a.id]={},f=e.getChild(),g=0;e=f.shift();)e.notAllowed||"hbox"==e.type||"vbox"==e.type||g++,d[e.id]=e,"function"==typeof e.getChild&&f.push.apply(f,e.getChild());g||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");e=CKEDITOR.env;d="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"', +0arguments.length)){var h=(e.call?e(b):e)||"div",p=["\x3c",h," "],m=(d&&d.call?d(b):d)||{},k=(f&&f.call?f(b):f)||{},q=(g&&g.call?g.call(this,a,b):g)||"",n=this.domId=k.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(m.display="none",this.notAllowed=!0);k.id=n;var r={};b.type&&(r["cke_dialog_ui_"+ +b.type]=1);b.className&&(r[b.className]=1);b.disabled&&(r.cke_disabled=1);for(var l=k["class"]&&k["class"].split?k["class"].split(" "):[],n=0;nCKEDITOR.env.version?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;t.fire("focus"); +c&&this.addClass(c)});b.on("blur",function(){t.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=t.focusIndex}))}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var f=this._.children=b,g=d&&d.widths||null,h=d&&d.height||null,p,m={role:"presentation"};d&&d.align&&(m.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this, +a,d||{type:"hbox"},e,"table",{},m,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(p=0;parguments.length)){this._||(this._={});var f=this._.children=b,g=d&&d.width||null,h=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" ']; +b.push('style\x3d"');d&&d.expand&&b.push("height:100%;");b.push("width:"+v(g||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align\x3d"',CKEDITOR.tools.htmlEncode(d&&d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("\x3e\x3ctbody\x3e");for(var e=0;earguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,e){for(var d=c.children,f,g=[],h=[],p=0;pe.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text("",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;ba||(this.notifications.splice(a,1),b.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var b=this.editor,a=b.config,c=new CKEDITOR.dom.element("div"); +c.addClass("cke_notifications_area");c.setAttribute("id","cke_notifications_area_"+b.name);c.setStyle("z-index",a.baseFloatZIndex-2);return c},_attachListeners:function(){var b=CKEDITOR.document.getWindow(),a=this.editor;b.on("scroll",this._uiBuffer.input);b.on("resize",this._uiBuffer.input);a.on("change",this._changeBuffer.input);a.on("floatingSpaceLayout",this._layout,this,null,20);a.on("blur",this._layout,this,null,20)},_removeListeners:function(){var b=CKEDITOR.document.getWindow(),a=this.editor; +b.removeListener("scroll",this._uiBuffer.input);b.removeListener("resize",this._uiBuffer.input);a.removeListener("change",this._changeBuffer.input);a.removeListener("floatingSpaceLayout",this._layout);a.removeListener("blur",this._layout)},_layout:function(){function b(){a.setStyle("left",k(n+d.width-g-h))}var a=this.element,c=this.editor,d=c.ui.contentsElement.getClientRect(),e=c.ui.contentsElement.getDocumentPosition(),f,l,r=a.getClientRect(),m,g=this._notificationWidth,h=this._notificationMargin; +m=CKEDITOR.document.getWindow();var p=m.getScrollPosition(),q=m.getViewPaneSize(),t=CKEDITOR.document.getBody(),u=t.getDocumentPosition(),k=CKEDITOR.tools.cssLength;g&&h||(m=this.element.getChild(0),g=this._notificationWidth=m.getClientRect().width,h=this._notificationMargin=parseInt(m.getComputedStyle("margin-left"),10)+parseInt(m.getComputedStyle("margin-right"),10));c.toolbar&&(f=c.ui.space("top"),l=f.getClientRect());f&&f.isVisible()&&l.bottom>d.top&&l.bottomp.y?a.setStyles({position:"fixed",top:0}):a.setStyles({position:"absolute",top:k(e.y+d.height-r.height)});var n="fixed"==a.getStyle("position")?d.left:"static"!=t.getComputedStyle("position")?e.x-u.x:e.x;d.widthp.x+q.width?b():a.setStyle("left",k(n)):e.x+g+h>p.x+q.width?a.setStyle("left",k(n)):e.x+d.width/2+g/2+h>p.x+q.width?a.setStyle("left",k(n-e.x+p.x+q.width-g-h)):0>d.left+d.width-g-h?b(): +0>d.left+d.width/2-g/2?a.setStyle("left",k(n-e.x+p.x)):a.setStyle("left",k(n+d.width/2-g/2-h/2))}};CKEDITOR.plugins.notification=Notification;(function(){var c='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(c+= +' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var c=c+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"'),c=c+'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e', +t=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),u=CKEDITOR.addTemplate("button",c);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}}; +CKEDITOR.ui.button.prototype={render:function(a,b){function c(){var f=a.mode;f&&(f=this.modes[f]?void 0!==m[f]?m[f]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,f=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:f,this.setState(f),this.refresh&&this.refresh())}var n=CKEDITOR.env,p=this._.id=CKEDITOR.tools.getNextId(),g="",d=this.command,q,k,h;this._.editor=a;var e={id:p,button:this,editor:a,focus:function(){CKEDITOR.document.getById(p).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}}, +v=CKEDITOR.tools.addFunction(function(a){if(e.onkey)return a=new CKEDITOR.dom.event(a),!1!==e.onkey(e,a.getKeystroke())}),w=CKEDITOR.tools.addFunction(function(a){var b;e.onfocus&&(b=!1!==e.onfocus(e,new CKEDITOR.dom.event(a)));return b}),r=0;e.clickFn=q=CKEDITOR.tools.addFunction(function(){r&&(a.unlockSelection(1),r=0);e.execute();n.iOS&&a.focus()});if(this.modes){var m={};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(m[a.mode]=this._.state)},this);a.on("activeFilterChange", +c,this);a.on("mode",c,this);!this.readOnly&&a.on("readOnly",c,this)}else d&&(d=a.getCommand(d))&&(d.on("state",function(){this.setState(d.state)},this),g+=d.state==CKEDITOR.TRISTATE_ON?"on":d.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst();b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(l, +"rtl"==b,this.icon,this.iconOffset))},this);d?(k=a.getCommandKeystroke(d))&&(h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,k)):g+="off";var l=k=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(l=this.icon,this.icon=null);g={id:p,name:k,iconName:l,label:this.label,cls:this.className||"",state:g,ariaDisabled:"disabled"==g?"true":"false",title:this.title+(h?" ("+h.display+")":""),ariaShortcut:h?a.lang.common.keyboardShortcut+" "+h.aria:"",titleJs:n.gecko&&!n.hc?"":(this.title|| +"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:v,focusFn:w,clickFn:q,style:CKEDITOR.skin.getIconStyle(l,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?t.output():""};u.output(g,b);if(this.onRender)this.onRender();return e},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled"), +this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;this.allowedContent||this.requiredContent||!this.command||(b=a.getCommand(this.command)||b);return this._.feature= +b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();(function(){function D(a){function d(){for(var b=f(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||v(a),n=0;na.order?-1:0>b.order?1:b.order]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&q(b,c)})}function r(){if("wysiwyg"==b.mode){var a=p("paste");b.getCommand("cut").setState(p("cut"));b.getCommand("copy").setState(p("copy")); +b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function p(a){if(w&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var c=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==c.length&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var m=CKEDITOR.plugins.clipboard,n=0,u=0,w=0;(function(){b.on("key",l);b.on("contentDom",a);b.on("selectionChange",function(b){w=b.data.selection.getRanges()[0].checkReadOnly(); +r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){w=a.getRanges()[0].checkReadOnly();return{cut:p("cut"),copy:p("copy"),paste:p("paste")}})})();(function(){function a(c,e,d,g,h){var l=b.lang.clipboard[e];b.addCommand(e,d);b.ui.addButton&&b.ui.addButton(c,{label:l,command:e,toolbar:"clipboard,"+g});b.addMenuItems&&b.addMenuItem(e,{label:l,command:e,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",d(),30,8)})();b.getClipboardData= +function(a,c){function e(b){b.removeListener();b.cancel();c(b.data)}c||(c=a,a=null);b.on("paste",e,null,null,0);!1===v()&&(b.removeListener("paste",e),c(null))}}function z(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(
<\/div>|
[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|)*$/gi)&&!b.match(/^(

([^<]|)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|)*$/gi))return"html"}else return"html"; +return"htmlifiedtext"}function A(b,a){function c(b){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(b/2))+(1==b%2?"\x3cbr\x3e":"")}a=a.replace(/\s+/g," ").replace(/> +/gi,"\x3cbr\x3e");a=a.replace(/<\/?[A-Z]+>/g,function(b){return b.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1(
|)<\/div>)(?!$|(

(
|)<\/div>))/g,"\x3cbr\x3e").replace(/^(
(
|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"), +a.match(/
(
|)<\/div>/)&&(a="\x3cp\x3e"+a.replace(/(
(
|)<\/div>)+/g,function(b){return c(b.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),a=a.replace(/<\/div>
/g,"\x3cbr\x3e"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^

$/,"\x3cbr\x3e")),-1){2,}/g,function(b){return c(b.length/4)})+"\x3c/p\x3e"));return B(b,a)}function C(){function b(){var b= +{},a;for(a in CKEDITOR.dtd)"$"!=a.charAt(0)&&"div"!=a&&"span"!=a&&(b[a]=1);return b}var a={};return{get:function(c){return"plain-text"==c?a.plainText||(a.plainText=new CKEDITOR.filter("br")):"semantic-content"==c?((c=a.semanticContent)||(c=new CKEDITOR.filter,c.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),c=a.semanticContent=c),c):c?new CKEDITOR.filter(c):null}}}function x(b,a,c){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var d=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1, +b.activeEnterMode);a.writeHtml(d);return d.getHtml()}function B(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p>

)+/g,function(b){return CKEDITOR.tools.repeat("\x3cbr\x3e",b.length/7*2)}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return a}function D(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect="none"}function E(b){var a=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(a,c,e){c.select();q(b,{dataTransfer:e, +method:"drop"},1);e.sourceEditor.fire("saveSnapshot");e.sourceEditor.editable().extractHtmlFromRange(a);e.sourceEditor.getSelection().selectRanges([a]);e.sourceEditor.fire("saveSnapshot")}function d(c,e){c.select();q(b,{dataTransfer:e,method:"drop"},1);a.resetDragDataTransfer()}function f(a,c,e){var g={$:a.data.$,target:a.data.getTarget()};c&&(g.dragRange=c);e&&(g.dropRange=e);!1===b.fire(a.name,g)&&a.data.preventDefault()}function g(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());return b.getChildCount()} +var e=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),k=b.ui.space("top"),v=b.ui.space("bottom");a.preventDefaultDropOnElement(k);a.preventDefaultDropOnElement(v);e.attachListener(h,"dragstart",f);e.attachListener(b,"dragstart",a.resetDragDataTransfer,a,null,1);e.attachListener(b,"dragstart",function(c){a.initDragDataTransfer(c,b)},null,null,2);e.attachListener(b,"dragstart",function(){var c=a.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount= +c?g(c.startContainer):null,a.dragEndContainerChildCount=c?g(c.endContainer):null)},null,null,100);e.attachListener(h,"dragend",f);e.attachListener(b,"dragend",a.initDragDataTransfer,a,null,1);e.attachListener(b,"dragend",a.resetDragDataTransfer,a,null,100);e.attachListener(h,"dragover",function(b){if(CKEDITOR.env.edge)b.data.preventDefault();else{var a=b.data.getTarget();a&&a.is&&a.is("html")?b.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&b.data.$.dataTransfer.types.contains("Files")&& +b.data.preventDefault()}});e.attachListener(h,"drop",function(c){if(!c.data.$.defaultPrevented){c.data.preventDefault();var e=c.data.getTarget();if(!e.isReadOnly()||e.type==CKEDITOR.NODE_ELEMENT&&e.is("html")){var e=a.getRangeAtDropPosition(c,b),g=a.dragRange;e&&f(c,g,e)}}},null,null,9999);e.attachListener(b,"drop",a.initDragDataTransfer,a,null,1);e.attachListener(b,"drop",function(e){if(e=e.data){var g=e.dropRange,h=e.dragRange,f=e.dataTransfer;f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL? +setTimeout(function(){a.internalDrop(h,g,f,b)},0):f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,g,f):d(g,f)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"notification,toolbar",init:function(b){var a,c=C();b.config.forcePasteAsPlainText?a="plain-text":b.config.pasteFilter?a=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(a="semantic-content");b.pasteFilter=c.get(a);y(b);E(b);if(CKEDITOR.env.gecko){var d=["image/png","image/jpeg","image/gif"], +f;b.on("paste",function(a){var c=a.data,h=c.dataTransfer;if(!c.dataValue&&"paste"==c.method&&h&&1==h.getFilesCount()&&f!=h.id&&(h=h.getFile(0),-1!=CKEDITOR.tools.indexOf(d,h.type))){var k=new FileReader;k.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+k.result+'" /\x3e';b.fire("paste",a.data)},!1);k.addEventListener("abort",function(){b.fire("paste",a.data)},!1);k.addEventListener("error",function(){b.fire("paste",a.data)},!1);k.readAsDataURL(h);f=c.dataTransfer.id;a.stop()}}, +null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,d=c.getData("text/html");if(d)a.data.dataValue=d,a.data.type="html";else if(d=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(d),a.data.type="text"}},null,null,1);b.on("paste",function(b){var a=b.data.dataValue,c=CKEDITOR.dtd.$block;-1 <\/span>/gi, +" "),"html"!=b.data.type&&(a=a.replace(/]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1/,"")),a=a.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(a.match(/^<[^<]+cke_(editable|contents)/i)){var d,f,l=new CKEDITOR.dom.element("div");for(l.setHtml(a);1==l.getChildCount()&& +(d=l.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)l=f=d;f&&(a=f.getHtml().replace(/
$/i,""))}CKEDITOR.env.ie?a=a.replace(/^ (?: |\r\n)?<(\w+)/g,function(a,e){return e.toLowerCase()in c?(b.data.preSniffing="html","\x3c"+e):a}):CKEDITOR.env.webkit?a=a.replace(/<\/(\w+)>


<\/div>$/,function(a,e){return e in c?(b.data.endsWithEOL=1,"\x3c/"+e+"\x3e"):a}):CKEDITOR.env.gecko&&(a=a.replace(/(\s)
$/,"$1"));b.data.dataValue=a},null, +null,3);b.on("paste",function(a){a=a.data;var e=b._.nextPasteType||a.type,d=a.dataValue,f,n=b.config.clipboard_defaultContentType||"html",l=a.dataTransfer.getTransferType(b);f="html"==e||"html"==a.preSniffing?"html":z(d);delete b._.nextPasteType;"htmlifiedtext"==f&&(d=A(b.config,d));"text"==e&&"html"==f?d=x(b,d,c.get("plain-text")):l==CKEDITOR.DATA_TRANSFER_EXTERNAL&&b.pasteFilter&&!a.dontFilter&&(d=x(b,d,b.pasteFilter));a.startsWithEOL&&(d='\x3cbr data-cke-eol\x3d"1"\x3e'+d);a.endsWithEOL&&(d+='\x3cbr data-cke-eol\x3d"1"\x3e'); +"auto"==e&&(e="html"==f||"html"==n?"html":"text");a.type=e;a.dataValue=d;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3)}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie||9CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b, +a,c,d){function f(b,c,d){var f=b;f.type==CKEDITOR.NODE_TEXT&&(f=b.getParent());if(f.equals(c)&&d!=c.getChildCount())return b=a.startContainer.getChild(a.startOffset-1),c=a.startContainer.getChild(a.startOffset),b&&b.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(d=b.getLength(),b.setText(b.getText()+c.getText()),c.remove(),a.setStart(b,d),a.collapse(!0)),!0}var g=a.startContainer;"number"==typeof d&&"number"==typeof c&&g.type==CKEDITOR.NODE_ELEMENT&&(f(b.startContainer,g,c)||f(b.endContainer, +g,d))},isDropRangeAffectedByDragRange:function(b,a){var c=a.startContainer,d=a.endOffset;return b.endContainer.equals(c)&&b.endOffset<=d||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,f.dragStartContainerChildCount, +f.dragEndContainerChildCount);(h=this.isDropRangeAffectedByDragRange(b,a))||(e=b.createBookmark(!1));f=a.clone().createBookmark(!1);h&&(e=b.createBookmark(!1));b=e.startNode;a=e.endNode;h=f.startNode;a&&b.getPosition(h)&CKEDITOR.POSITION_PRECEDING&&a.getPosition(h)&CKEDITOR.POSITION_FOLLOWING&&h.insertBefore(b);b=d.createRange();b.moveToBookmark(e);g.extractHtmlFromRange(b,1);a=d.createRange();a.moveToBookmark(f);q(d,{dataTransfer:c,method:"drop",range:a},1);d.fire("unlockSnapshot")},getRangeAtDropPosition:function(b, +a){var c=b.data.$,d=c.clientX,f=c.clientY,g=a.getSelection(!0).getRanges()[0],e=a.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint&&a.document.$.caretRangeFromPoint(d,f))c=a.document.$.caretRangeFromPoint(d,f),e.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),e.collapse(!0);else if(c.rangeParent)e.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),e.collapse(!0);else{if(CKEDITOR.env.ie&&8k&&!h;k++){if(!h)try{c.moveToPoint(d,f-k),h=!0}catch(n){}if(!h)try{c.moveToPoint(d,f+k),h=!0}catch(l){}}if(h){var t="cke-temp-"+(new Date).getTime();c.pasteHTML('\x3cspan id\x3d"'+t+'"\x3e​\x3c/span\x3e');var r=a.document.getById(t);e.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START);r.remove()}else{var p=a.document.$.elementFromPoint(d,f),m=new CKEDITOR.dom.element(p),q;if(m.equals(a.editable())|| +"html"==m.getName())return g&&g.startContainer&&!g.startContainer.equals(a.editable())?g:null;q=m.getClientRect();d/i,bodyRegExp:/([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(n);this.id||(this.id="Text"==n?"":"cke-"+CKEDITOR.tools.getUniqueId()); +if("Text"!=n)try{this.$.setData(n,this.id)}catch(c){}a&&(this.sourceEditor=a,this.setData("text/html",a.getSelectedHtml(1)),"Text"==n||this.getData("text/plain")||this.setData("text/plain",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b,a){b=this._.normalizeType(b);var c=this._.data[b],d;if(void 0===c||null===c||""===c)try{c=this.$.getData(b)}catch(f){}if(void 0=== +c||null===c||""===c)c="";"text/html"!=b||a?"Text"==b&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==c.substring(0,7)&&(c=""):(c=c.replace(this._.metaRegExp,""),(d=this._.bodyRegExp.exec(c))&&d.length&&(c=d[1],c=c.replace(this._.fragmentRegExp,"")));"string"===typeof c&&(d=c.indexOf("\x3c/html\x3e"),c=-1!==d?c.substring(0,d+7):c);return c},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==b||"Text"==b){"Text"==n&& +"Text"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){b=a._.normalizeType(b);var c=a.getData(b,!0);c&&(a._.data[b]=c)}if(this.$){var a=this,c,d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;cc?d+c:b.width>c?d-a.left:d-a.right+b.width): +mc?d-c:b.width>c?d-a.right+b.width:d-a.left);c=a.top;b.height-a.tope?p-e:b.height>e?p-a.bottom+b.height:p-a.top);CKEDITOR.env.ie&&(b=a=new CKEDITOR.dom.element(l.$.offsetParent),"html"==b.getName()&&(b=b.getDocument().getBody()),"rtl"==b.getComputedStyle("direction")&&(d=CKEDITOR.env.ie8Compat?d-2*l.getDocument().getDocumentElement().$.scrollLeft:d-(a.$.scrollWidth-a.$.clientWidth)));var a=l.getFirst(),f;(f=a.getCustomData("activePanel"))&&f.onHide&&f.onHide.call(this,1);a.setCustomData("activePanel", +this);l.setStyles({top:p+"px",left:d+"px"});l.setOpacity(1);g&&g()},this);n.isLoaded?a():n.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();k.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){k.markFirstDisplayed?k.markFirstDisplayed():k._.markFirstDisplayed()},0):k.markFirstDisplayed?k.markFirstDisplayed(): +k._.markFirstDisplayed();this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a= +this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams= +null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+= +""},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(d){function t(a,e,g,r,l){var n=new CKEDITOR.style(k["colorButton_"+e+"Style"]),m=CKEDITOR.tools.getNextId()+"_colorBox",p;l=l||{};d.ui.add(a,CKEDITOR.UI_PANELBUTTON,{label:g,title:g,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+r,allowedContent:n,requiredContent:n,contentTransformations:l.contentTransformations,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":h.panelTitle}},onBlock:function(a, +b){p=b;b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(y(a,e,m));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var c=b.keys,f="rtl"==d.lang.dir;c[f?37:39]="next";c[40]="next";c[9]="next";c[f?39:37]="prev";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]="click"},refresh:function(){d.activeFilter.check(n)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=d.getSelection(),b=a&&a.getStartElement(),c=d.elementPath(b); +if(c){b=c.block||c.blockLimit||d.document.getBody();do c=b&&b.getComputedStyle("back"==e?"background-color":"color")||"transparent";while("back"==e&&"transparent"==c&&b&&(b=b.getParent()));c&&"transparent"!=c||(c="#ffffff");!1!==k.colorButton_enableAutomatic&&this._.panel._.iframe.getFrameDocument().getById(m).setStyle("background-color",c);if(b=a&&a.getRanges()[0]){for(var a=new CKEDITOR.dom.walker(b),f=b.collapsed?b.startContainer:a.next(),b="";f;){f.type===CKEDITOR.NODE_TEXT&&(f=f.getParent()); +f=u(f.getComputedStyle("back"==e?"background-color":"color"));b=b||f;if(b!==f){b="";break}f=a.next()}a=b;b=p._.getItems();for(f=0;fd.group?1:a.orderd.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"'; +CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(h+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');var h=h+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e'),r=CKEDITOR.addTemplate("menuItem", +h+'\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e'),t=CKEDITOR.addTemplate("menuArrow",'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'), +n=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var d=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),m=d.block.attributes=d.attributes||{};!m.role&&(m.role="menu");this._.panelDefinition= +d},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),d=this.editor.elementPath(),m=this._.listeners;this.removeAll();for(var g=0;g <\/span>/g,""),a.replace(/<.*?>/g,"")):a.getText()}function e(a, +c){var f=a,g=/\s/g,h="p br ol ul li td th div caption body".split(" "),m=!1,k=!1,p,n;do{for(p=b(f,c);!p&&f.getParent();){f=f.getParent();if(-1!==l(h,f.getName())){k=m=!0;break}p=b(f,c)}if(p&&p.getName&&-1!==l(h,p.getName())){m=!0;break}f=p}while(f&&f.getStyle&&("none"==f.getStyle("display")||!f.getText()));for(f||(f=a);f.type!==CKEDITOR.NODE_TEXT;)f=!m||c||k?f.getChild(0):f.getChild(f.getChildCount()-1);for(h=d(f);null!=(k=g.exec(h))&&(n=k.index,c););if("number"!==typeof n&&!m)return e(f,c);if(m)c? +n=0:(g=/([\.\b]*$)/,n=(k=g.exec(h))?k.index:h.length);else if(c&&(n+=1,n>h.length))return e(f);return{node:f,offset:n}}var c=/\b\w+\b/ig,f,g,h,m,k;h=m=k=a.startContainer;for(f=d(h);null!=(g=c.exec(f));)if(g.index+g[0].length>=a.startOffset)return a=g.index,c=g.index+g[0].length,0===g.index&&(g=e(h,!0),m=g.node,a=g.offset),c>=f.length&&(f=e(h),k=f.node,c=f.offset),{startNode:m,startOffset:a,endNode:k,endOffset:c};return null},_filterStyles:function(a){var b=CKEDITOR.tools.isEmpty,d=[],e,c;for(c=0;c< +a.length;c++)e=a[c]._.definition,-1!==CKEDITOR.tools.indexOf(CKEDITOR.plugins.copyformatting.inlineBoundary,e.element)&&(e.element=a[c].element="span"),"span"===e.element&&b(e.attributes)&&b(e.styles)||d.push(a[c]);return d},_determineContext:function(a){function b(b){var e=new CKEDITOR.dom.walker(a),c;if(a.startContainer.getAscendant(b,!0)||a.endContainer.getAscendant(b,!0))return!0;for(;c=e.next();)if(c.getAscendant(b,!0))return!0}return b({ul:1,ol:1})?"list":b("table")?"table":"text"},_applyStylesToTextContext:function(a, +b,d){var e=CKEDITOR.plugins.copyformatting,c=e.excludedAttributesFromInlineTransform,f,g;CKEDITOR.env.webkit&&!CKEDITOR.env.chrome&&a.getSelection().selectRanges([b]);for(f=0;fc.width&&(a.resize_minWidth=c.width);a.resize_minHeight>c.height&&(a.resize_minHeight=c.height);CKEDITOR.document.on("mousemove",f);CKEDITOR.document.on("mouseup",k);b.document&&(b.document.on("mousemove",f),b.document.on("mouseup",k));d.preventDefault&&d.preventDefault()});b.on("destroy", +function(){CKEDITOR.tools.removeFunction(q)});b.on("uiSpace",function(a){if("bottom"==a.data.space){var e="";h&&!p&&(e=" cke_resizer_horizontal");!h&&p&&(e=" cke_resizer_vertical");var c='\x3cspan id\x3d"'+r+'" class\x3d"cke_resizer'+e+" cke_resizer_"+g+'" title\x3d"'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+q+', event)"\x3e'+("ltr"==g?"◢":"◣")+"\x3c/span\x3e";"ltr"==g&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize", +function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}});(function(){function q(a,e){function l(c){c=k.list[c];var d;c.equals(a.editable())||"true"==c.getAttribute("contenteditable")?(d=a.createRange(),d.selectNodeContents(c),d=d.select()):(d=a.getSelection(),d.selectElement(c));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:d,path:new CKEDITOR.dom.elementPath(c)});a.focus()}function m(){n&&n.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete k.list}var p=a.ui.spaceId("path"),n,k=a._.elementsPath,q=k.idBase;e.html+='\x3cspan id\x3d"'+ +p+'_label" class\x3d"cke_voice_label"\x3e'+a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+p+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+p+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var c=a.ui.space("path");c&&a.focusManager.add(c,1)});k.onClick=l;var v=CKEDITOR.tools.addFunction(l),w=CKEDITOR.tools.addFunction(function(c,d){var g=k.idBase,b;d=new CKEDITOR.dom.event(d);b="rtl"==a.lang.dir;switch(d.getKeystroke()){case b? +39:37:case 9:return(b=CKEDITOR.document.getById(g+(c+1)))||(b=CKEDITOR.document.getById(g+"0")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(c-1)))||(b=CKEDITOR.document.getById(g+(k.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return l(c),!1}return!0});a.on("selectionChange",function(){for(var c=[],d=k.list=[],g=[],b=k.filters,e=!0,l=a.elementPath().elements,f,u=l.length;u--;){var h=l[u],r=0;f=h.data("cke-display-name")?h.data("cke-display-name"): +h.data("cke-real-element-type")?h.data("cke-real-element-type"):h.getName();(e=h.hasAttribute("contenteditable")?"true"==h.getAttribute("contenteditable"):e)||h.hasAttribute("contenteditable")||(r=1);for(var t=0;tCKEDITOR.env.version?f.createText("\r"):f.createElement("br"),a.deleteContents(),a.insertNode(b),CKEDITOR.env.needsBrFiller?(f.createText("").insertAfter(b),k&&(l||m.blockLimit).appendBogus(),b.getNext().$.nodeValue="",a.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)): +a.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),a.collapse(!0),a.select(),a.scrollIntoView()):u(b,d,a,h)}}};var x=CKEDITOR.plugins.enterkey,t=x.enterBr,u=x.enterBlock,w=/^h[1-6]$/})();(function(){function k(b,f){var g={},c=[],e={nbsp:" ",shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,a){var d=f?"\x26"+a+";":e[a];g[d]=f?e[a]:"\x26"+a+";";c.push(d);return""});if(!f&&b){b=b.split(",");var a=document.createElement("div"),d;a.innerHTML="\x26"+b.join(";\x26")+";";d=a.innerHTML;a=null;for(a=0;aa&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10);d=(d||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+ +a+",height\x3d"+b+",top\x3d"+f+",left\x3d"+g;var c=window.open("",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+"\x3d"+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+d.join("\x26")}function k(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function m(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+k(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+k(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight|| +"70%",b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function n(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value&&a.getContentElement(this["for"][0],this["for"][1]).getAction()?!0:!1}function p(a,c,d){var b=d.params|| +{};b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function l(a,c,d,b){if(b&&b.length)for(var e,g=b.length;g--;)if(e=b[g],"hbox"!=e.type&&"vbox"!=e.type&&"fieldset"!=e.type||l(a,c,d,e.children),e.filebrowser)if("string"==typeof e.filebrowser&&(e.filebrowser={action:"fileButton"==e.type?"QuickUpload":"Browse",target:e.filebrowser}),"Browse"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config["filebrowser"+ +k(c)+"BrowseUrl"],void 0===f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=m,e.filebrowser.url=f,e.hidden=!1)}else if("QuickUpload"==e.filebrowser.action&&e["for"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config["filebrowser"+k(c)+"UploadUrl"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;if(h&&!1===h.call(b,a))return!1;if(n.call(b,a)){a=b.getDialog().getContentElement(this["for"][0],this["for"][1]).getInputElement();if(b=new CKEDITOR.dom.element(a.$.form))(a= +b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken());return!0}return!1};e.filebrowser.url=f;e.hidden=!1;p(a,d.getContents(e["for"][0]).get(e["for"][1]),e.filebrowser)}}function h(a,c,d){if(-1!==d.indexOf(";")){d=d.split(";");for(var b=0;bh.height-c.bottom?e("pin"):e("bottom"),d=h.width/2,d=l.floatSpacePreferRight?"right":0n.width?"rtl"==l.contentsLangDirection? +"right":"left":d-c.left>c.right-d?"left":"right",n.width>h.width?(d="left",f=0):(f="left"==d?0h.width&&(d="left"==d?"right":"left",f=0)),b.setStyle(d,w(("pin"==m?u:p)+f+("pin"==m?0:"left"==d?v:-v)))):(m="pin",e("pin"),t(d))}}}();if(p){var k=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko? +" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(k.output({content:p,id:a.id,langDir:a.lang.dir, +langCode:a.langCode,name:a.name,style:"display:none;z-index:"+(l.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),u=CKEDITOR.tools.eventsBuffer(500,t),e=CKEDITOR.tools.eventsBuffer(100,t);b.unselectable();b.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){t(b);a.on("change",u.input);g.on("scroll",e.input);g.on("resize",e.input)});a.on("blur",function(){b.hide();a.removeListener("change",u.input);g.removeListener("scroll", +e.input);g.removeListener("resize",e.input)});a.on("destroy",function(){g.removeListener("scroll",e.input);g.removeListener("resize",e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var g=CKEDITOR.document.getWindow(),w=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("loaded",function(){k(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var f=CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),g=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" href\x3d"javascript:void(\'{val}\')" {onclick}\x3d"CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'), +h=CKEDITOR.addTemplate("panel-list-group",'\x3ch1 id\x3d"{id}" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'),k=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){b=b||{};var c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&& +(c.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",c.role);c=this.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click|| +(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(k,"\\'");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a}; +this._.pendingList.push(g.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display", +"none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var b=this.element.getDocument().getById(a); +b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},markFirstDisplayed:function(){var a=this;this._.markFirstDisplayed(function(){a.multiSelect||a.unmarkAll()})},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(), +c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus(); +c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(c){c.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}}); +(function(){var c='\x3cspan id\x3d"{id}" class\x3d"cke_combo cke_combo__{name} {cls}" role\x3d"presentation"\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_combo_label"\x3e{label}\x3c/span\x3e\x3ca class\x3d"cke_combo_button" title\x3d"{title}" tabindex\x3d"-1"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\x3d"return false;"'); +CKEDITOR.env.gecko&&(c+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var c=c+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e'+ +(CKEDITOR.env.hc?"\x26#9660;":CKEDITOR.env.air?"\x26nbsp;":"")+"\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"),k=CKEDITOR.addTemplate("combo",c);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel"; +a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function f(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var b=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(b=CKEDITOR.TRISTATE_DISABLED);this.setState(b);this.setValue("");b!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var c= +CKEDITOR.env,h="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){l&&(a.unlockSelection(1),l=0);g.execute(b)},this),d=this,g={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(b){var c=d._;if(c.state!=CKEDITOR.TRISTATE_DISABLED)if(d.createPanel(a),c.on)c.panel.hide();else{d.commit();var f=d.getValue();f?c.list.mark(f):c.list.unmarkAll();c.panel.showBlock(d.id,new CKEDITOR.dom.element(b),4)}},clickFn:e};a.on("activeFilterChange",f,this);a.on("mode", +f,this);a.on("selectionChange",f,this);!this.readOnly&&a.on("readOnly",f,this);var m=CKEDITOR.tools.addFunction(function(a,b){a=new CKEDITOR.dom.event(a);var d=a.getKeystroke();switch(d){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,b);break;default:g.onkey(g,d)}a.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){g.onfocus&&g.onfocus()}),l=0;g.keyDownFn=m;c={id:h,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:c.gecko&&!c.hc?"":(this.title|| +"").replace("'",""),keydownFn:m,focusFn:n,clickFn:e};k.output(c,b);if(this.onRender)this.onRender();return g},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,c=this._.panelDefinition.block,k=b.parent||CKEDITOR.document.getBody(),h="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,k,b),b=e.addListBlock(this.id,c),d=this;e.onShow=function(){this.element.addClass(h);d.setState(CKEDITOR.TRISTATE_ON);d._.on=1;d.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(d.onOpen)d.onOpen()}; +e.onHide=function(b){this.element.removeClass(h);d.setState(d.modes&&d.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d._.on=0;if(!b&&d.onClose)d.onClose()};e.onEscape=function(){e.hide(1)};b.onClick=function(a,b){d.onClick&&d.onClick.call(d,a,b);e.hide()};this._.panel=e;this._.list=b;e.getBlock(this.id).onHide=function(){d._.on=0;d.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var c=this.document.getById("cke_"+this.id+"_text");c&& +(a||b?c.removeClass("cke_combo_inlinelabel"):(b=this.label,c.addClass("cke_combo_inlinelabel")),c.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,b,c){this._.items[a]=c||a;this._.list.add(a,b,c)},startGroup:function(a){this._.list.startGroup(a)}, +commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!= +CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();(function(){function n(a,c,h,e,q,n,u,w){var x=a.config,r=new CKEDITOR.style(u),g=q.split(";");q=[];for(var m={},d=0;dthis.$.offsetHeight){var d=b.createRange();d[33==c?"moveToElementEditStart":"moveToElementEditEnd"](this);d.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(c,"blur",function(){try{c.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(c,"touchend",function(){a.focus()});d=b.document.getElementsByTag("title").getItem(0);d.data("cke-title",d.getText());CKEDITOR.env.ie&&(b.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"== +this.status&&(this.status="ready");b.fire("contentDom");this._.isPendingFocus&&(b.focus(),this._.isPendingFocus=!1);setTimeout(function(){b.fire("dataReady")},0)},0,this)}function n(a){function f(){var c;a.editable().attachListener(a,"selectionChange",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent("onresizestart",b),c=null),d.$.attachEvent("onresizestart",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand("enableObjectResizing", +!1,!a.config.disableObjectResizing);c.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&f(a)}function p(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var f=[],b;for(b in CKEDITOR.dtd.$removeEmpty)f.push("html.CSS1Compat "+b+"[contenteditable\x3dfalse]");a.push(f.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&& +(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var l;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(f){function b(b){b&&b.removeListener(); +a.editable(new l(a,d.$.contentWindow.document.body));a.setData(a.getData(1),f)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+c+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame").addClass("cke_reset"); +c=a.ui.space("contents");c.append(d);var e=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(e)d.on("load",b);var g=a.title,h=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&h&&(g+=", "+h),d.setAttribute("title",g));if(h){var g=CKEDITOR.tools.getNextId(),k=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+h+"\x3c/span\x3e");c.append(k,1);d.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();k&&k.remove()}); +d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!e&&b();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var f=this.config,b=f.contentsCss;CKEDITOR.tools.isArray(b)||(f.contentsCss=b?[b]:[]);f.contentsCss.push(a)};l=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(m,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")}, +base:CKEDITOR.editable,proto:{setData:function(a,f){var b=this.editor;if(f)this.setHtml(a),this.fixInitialSelection(),b.fire("dataReady");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,d=c.fullPage,e=c.docType,g=CKEDITOR.tools.buildStyleHtml(p()).replace(/ + + + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/css/style.css b/libraries/ckeditor/plugins/bootstrapCarousel/css/style.css new file mode 100644 index 0000000..57dd6e3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/css/style.css @@ -0,0 +1,29 @@ +/* + Plugin : Bootstrap Carousel + Author : Michael Janea (www.michaeljanea.com) + Version : 1.9 +*/ + +#bootstrapCarousel {} + #bootstrapCarousel_Container {height:350px; overflow:auto; margin-bottom:1em;} + #bootstrapCarousel table {width:100%; border-collapse:collapse;} + #bootstrapCarousel th, #bootstrapCarousel td {padding:.5em;} + #bootstrapCarousel th {font-weight:bold;} + #bootstrapCarousel td {vertical-align:top; position:relative;} + #bootstrapCarousel td:nth-child(1) {width:40px;} + #bootstrapCarousel td:nth-child(2), #bootstrapCarousel td:nth-child(3) {width:260px;} + #bootstrapCarousel td:nth-child(4) {width:280px;} + #bootstrapCarousel input[type=text], #bootstrapCarousel textarea {padding:.3em; border:1px solid #ddd; -webkit-border-radius:3px; border-radius:3px; -webkit-box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); background:rgba(0, 0, 0, .01); outline:none;} + #bootstrapCarousel input[type=text] {width:150px;} + #bootstrapCarousel input[type=text]:focus, #bootstrapCarousel textarea:focus {border:1px solid #139ff7;} + #bootstrapCarousel textarea {resize:none; width:95%; height:100px; white-space:pre-wrap;} + #bootstrapCarousel .bootstrapCarousel_remove, #bootstrapCarousel .bootstrapCarousel_addNew, #bootstrapCarousel .bootstrapCarousel_up, #bootstrapCarousel .bootstrapCarousel_down, #bootstrapCarousel .bootstrapCarousel_browse, #bootstrapCarousel .bootstrapCarousel_move {font-weight:bold; -webkit-border-radius:3px; border-radius:3px; cursor:pointer;} + #bootstrapCarousel .bootstrapCarousel_remove {background:#A94442; padding:.3em .5em; color:#fff;} + #bootstrapCarousel .bootstrapCarousel_remove:hover {text-decoration:none;} + #bootstrapCarousel .bootstrapCarousel_addNew, #bootstrapCarousel .bootstrapCarousel_up, #bootstrapCarousel .bootstrapCarousel_down, #bootstrapCarousel .bootstrapCarousel_browse, #bootstrapCarousel .bootstrapCarousel_move {float:right; padding:.5em; background:#f3f3f3; border:1px solid #ddd;} + #bootstrapCarousel .bootstrapCarousel_browse {padding:.27em .5em; position:absolute; top:.5em; right:.5em;} + #bootstrapCarousel .bootstrapCarousel_addNew:hover {text-decoration:underline;} + #bootstrapCarousel .bootstrapCarousel_up, #bootstrapCarousel .bootstrapCarousel_down {float:none; padding:.13em .4em;} + #bootstrapCarousel .bootstrapCarousel_hidden {display:none;} + #bootstrapCarousel img {max-height:100px; max-width:250px;} + #bootstrapCarousel .bootstrapCarousel_move {background:url('../icons/move.png') center center no-repeat #f3f3f3; width:13px; height:18px; cursor:move;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/dialogs/bootstrapCarousel.js b/libraries/ckeditor/plugins/bootstrapCarousel/dialogs/bootstrapCarousel.js new file mode 100644 index 0000000..d0437c9 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/dialogs/bootstrapCarousel.js @@ -0,0 +1,7 @@ +/* + Plugin : Bootstrap Carousel + Author : Michael Janea (www.michaeljanea.com) + Version : 1.9 +*/ + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('e 11=\'31=2f,30=2f,2y=2h,2P=2h,Z=\'+(1j.Z*0.7)+\',W=\'+(1j.W*0.7)+\',2C=\'+((1j.Z-(1j.Z*0.7))/2)+\',3h=\'+((1j.W-(1j.W*0.7))/2);e b=1z=25=2D=2E=1v=1w=2I=\'\';e Y=1m;e 2M;e 24=2;r 16(1a){e n=U(1a.g.g);l(n>0){e 2e=b.5(\'f\')[0].5(\'k\')[n].d[1].L.a;e 29=b.5(\'f\')[0].5(\'k\')[R(n)-1].d[1].L.a;b.5(\'f\')[0].5(\'k\')[R(n)-1].d[1].L.a=2e;b.5(\'f\')[0].5(\'k\')[n].d[1].L.a=29;e 2i=b.5(\'f\')[0].5(\'k\')[n].d[2].L.a;e 2m=b.5(\'f\')[0].5(\'k\')[R(n)-1].d[2].L.a;b.5(\'f\')[0].5(\'k\')[R(n)-1].d[2].L.a=2i;b.5(\'f\')[0].5(\'k\')[n].d[2].L.a=2m;e 1H=b.5(\'f\')[0].5(\'k\')[n].d[3].p(\'t\')[0].a;e 1E=b.5(\'f\')[0].5(\'k\')[R(n)-1].p(\'t\')[0].a;b.5(\'f\')[0].5(\'k\')[R(n)-1].d[3].p(\'t\')[0].a=1H;b.5(\'f\')[0].5(\'k\')[n].d[3].p(\'t\')[0].a=1E;b.5(\'f\')[0].5(\'k\')[R(n)-1].d[3].5(\'M\')[0].K=1H;b.5(\'f\')[0].5(\'k\')[n].d[3].5(\'M\')[0].K=1E}1e 1m};r 13(1a){e n=U(1a.g.g);l(n \';l((/\\D 6/.H(G.F)||/\\D 7/.H(G.F)||/\\D 8/.H(G.F)||/\\D 9/.H(G.F))&&!v.20){1Y+=\' \'}P{1Y+=\'\'}1Y+=\' \';2H.2J=1Y;b.5(\'f\')[0].2Z(2H);1e 1m};r 19(1a){l(b.p(\'w\').V>1){l(4n(2D)){1a.g.g.g.2B(1a.g.g)}}P{4j(2E)}1e 1m};r 34(38,2A){1g(e i 4g 2A){l(2A[i]==38)1e 1U}1e 1m};r U(2v){e d=2v.g.4c;e 2u=0;1g(e i=0;i <2X> <2V> <1c> <1c>\'+A.1s.u.3m+\' <1c>\'+A.1s.u.3E+\' <1c>\'+A.1s.u.3F+\' <1c> \',3K:r(){e 1n=b.p(\'t\');e 2o=1m;1g(j=0;j<1n.V;j++){l(1n[j].a==\'\'){1n[j].g.d[0].1V.2l=\'2w 2x #2n\';2o=1U}P{1n[j].g.d[0].1V.2l=\'\'}}1e!2o},3N:r(C){e J=0;e 2p=z.1B.1D().1K.1o.$.p(\'w\');e 2Q=z.1B.1D().1K.1o.$.p(\'B\');e 1n=z.1B.1D().1K.1o.$.p(\'t\');1g(e j=0;j<=1n.V;j++){l(1n[j]){C.T(\'1p\'+J,2p[j].a);C.T(\'B\'+J,2Q[j].a);C.T(\'t\'+J,1n[j].a);l(J==0){C.T(\'1Q\'+J,\'2K\');C.T(\'1P\'+J,\'3e 2K\')}P{C.T(\'1Q\'+J,\'\');C.T(\'1P\'+J,\'3e\')}J++}P{C.T(\'1p\'+J,\'\');C.T(\'B\'+J,\'\');C.T(\'t\'+J,\'\');C.T(\'1Q\'+J,\'\');C.T(\'1P\'+J,\'\');J++}}C.T(\'J\',2p.V);1C.p(\'1M\')[0].1b.2B(1C.p(\'1M\')[0])},42:r(C){e 2U=A.44();1o=2U.45();e 3c=1o.$.d[0].1I.47(\' \');e 1p=\'\';l((1o.$.L.48).49()==\'I\'&&34(\'4a\',3c)){1g(e j=0;j \';l((/\\D 6/.H(G.F)||/\\D 7/.H(G.F)||/\\D 8/.H(G.F)||/\\D 9/.H(G.F))&&!v.20){1p+=\' \'}P{1p+=\'\'}1p+=\' \'+w+\' \'+B+\' \'}}b.5(\'f\')[0].2J=1p}P{e 14=\' \';l((/\\D 6/.H(G.F)||/\\D 7/.H(G.F)||/\\D 8/.H(G.F)||/\\D 9/.H(G.F))&&!v.20){14+=\' \'}P{14+=\'\'}14+=\' \';l((/\\D 6/.H(G.F)||/\\D 7/.H(G.F)||/\\D 8/.H(G.F)||/\\D 9/.H(G.F))&&!v.20){14+=\' \'}P{14+=\'\'}14+=\' \';l((/\\D 6/.H(G.F)||/\\D 7/.H(G.F)||/\\D 8/.H(G.F)||/\\D 9/.H(G.F))&&!v.20){14+=\' \'}P{14+=\'\'}14+=\' \';b.5(\'f\')[0].2J=A.12.2d&&A.12.1z!=\'23\'?\'\':14}}}]}],4f:r(){1T=1C.3g(\'4h\');1T.q=\'1F/4i\';1T.K=z.O.N(\'u\')+\'32/4k.4l.32\';1T.1I=\'1M\';1C.4m.2Z(1T);1g(e 1N=0;1N + * @license MIT + */ + + +(function (factory) { + "use strict"; + + if (typeof define === "function" && define.amd) { + define(factory); + } + else if (typeof module != "undefined" && typeof module.exports != "undefined") { + module.exports = factory(); + } + else if (typeof Package !== "undefined") { + Sortable = factory(); // export for Meteor.js + } + else { + /* jshint sub:true */ + window["Sortable"] = factory(); + } +})(function () { + "use strict"; + + var dragEl, + parentEl, + ghostEl, + cloneEl, + rootEl, + nextEl, + + scrollEl, + scrollParentEl, + + lastEl, + lastCSS, + lastParentCSS, + + oldIndex, + newIndex, + + activeGroup, + autoScroll = {}, + + tapEvt, + touchEvt, + + moved, + + /** @const */ + RSPACE = /\s+/g, + + expando = 'Sortable' + (new Date).getTime(), + + win = window, + document = win.document, + parseInt = win.parseInt, + + supportDraggable = !!('draggable' in document.createElement('div')), + supportCssPointerEvents = (function (el) { + el = document.createElement('x'); + el.style.cssText = 'pointer-events:auto'; + return el.style.pointerEvents === 'auto'; + })(), + + _silent = false, + + abs = Math.abs, + slice = [].slice, + + touchDragOverListeners = [], + + _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (rootEl && options.scroll) { + var el, + rect, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + + x = evt.clientX, + y = evt.clientY, + + winWidth = window.innerWidth, + winHeight = window.innerHeight, + + vx, + vy + ; + + // Delect scrollEl + if (scrollParentEl !== rootEl) { + scrollEl = options.scroll; + scrollParentEl = rootEl; + + if (scrollEl === true) { + scrollEl = rootEl; + + do { + if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || + (scrollEl.offsetHeight < scrollEl.scrollHeight) + ) { + break; + } + /* jshint boss:true */ + } while (scrollEl = scrollEl.parentNode); + } + } + + if (scrollEl) { + el = scrollEl; + rect = scrollEl.getBoundingClientRect(); + vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); + vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); + } + + + if (!(vx || vy)) { + vx = (winWidth - x <= sens) - (x <= sens); + vy = (winHeight - y <= sens) - (y <= sens); + + /* jshint expr:true */ + (vx || vy) && (el = win); + } + + + if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { + autoScroll.el = el; + autoScroll.vx = vx; + autoScroll.vy = vy; + + clearInterval(autoScroll.pid); + + if (el) { + autoScroll.pid = setInterval(function () { + if (el === win) { + win.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed); + } else { + vy && (el.scrollTop += vy * speed); + vx && (el.scrollLeft += vx * speed); + } + }, 24); + } + } + } + }, 30), + + _prepareGroup = function (options) { + var group = options.group; + + if (!group || typeof group != 'object') { + group = options.group = {name: group}; + } + + ['pull', 'put'].forEach(function (key) { + if (!(key in group)) { + group[key] = true; + } + }); + + options.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' '; + } + ; + + + + /** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ + function Sortable(el, options) { + if (!(el && el.nodeType && el.nodeType === 1)) { + throw 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el); + } + + this.el = el; // root element + this.options = options = _extend({}, options); + + + // Export instance + el[expando] = this; + + + // Default options + var defaults = { + group: Math.random(), + sort: true, + disabled: false, + store: null, + handle: null, + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', + ghostClass: 'sortable-ghost', + chosenClass: 'sortable-chosen', + ignore: 'a, img', + filter: null, + animation: 0, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData('Text', dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: 'data-id', + delay: 0, + forceFallback: false, + fallbackClass: 'sortable-fallback', + fallbackOnBody: false + }; + + + // Set default options + for (var name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + _prepareGroup(options); + + // Bind all private methods + for (var fn in this) { + if (fn.charAt(0) === '_') { + this[fn] = this[fn].bind(this); + } + } + + // Setup drag mode + this.nativeDraggable = options.forceFallback ? false : supportDraggable; + + // Bind events + _on(el, 'mousedown', this._onTapStart); + _on(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _on(el, 'dragover', this); + _on(el, 'dragenter', this); + } + + touchDragOverListeners.push(this._onDragOver); + + // Restore sorting + options.store && this.sort(options.store.get(this)); + } + + + Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _onTapStart: function (/** Event|TouchEvent */evt) { + var _this = this, + el = this.el, + options = this.options, + type = evt.type, + touch = evt.touches && evt.touches[0], + target = (touch || evt).target, + originalTarget = target, + filter = options.filter; + + + if (type === 'mousedown' && evt.button !== 0 || options.disabled) { + return; // only left button or enabled + } + + target = _closest(target, options.draggable, el); + + if (!target) { + return; + } + + // get the index of the dragged element within its parent + oldIndex = _index(target); + + // Check filter + if (typeof filter === 'function') { + if (filter.call(this, evt, target, this)) { + _dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex); + evt.preventDefault(); + return; // cancel dnd + } + } + else if (filter) { + filter = filter.split(',').some(function (criteria) { + criteria = _closest(originalTarget, criteria.trim(), el); + + if (criteria) { + _dispatchEvent(_this, criteria, 'filter', target, el, oldIndex); + return true; + } + }); + + if (filter) { + evt.preventDefault(); + return; // cancel dnd + } + } + + + if (options.handle && !_closest(originalTarget, options.handle, el)) { + return; + } + + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target); + }, + + _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) { + var _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && (target.parentNode === el)) { + tapEvt = evt; + + rootEl = el; + dragEl = target; + parentEl = dragEl.parentNode; + nextEl = dragEl.nextSibling; + activeGroup = options.group; + + dragStartFn = function () { + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDrag(); + + // Make the element draggable + dragEl.draggable = true; + + // Chosen item + _toggleClass(dragEl, _this.options.chosenClass, true); + + // Bind the events: dragstart/dragend + _this._triggerDragStart(touch); + }; + + // Disable "draggable" + options.ignore.split(',').forEach(function (criteria) { + _find(dragEl, criteria.trim(), _disableDraggable); + }); + + _on(ownerDocument, 'mouseup', _this._onDrop); + _on(ownerDocument, 'touchend', _this._onDrop); + _on(ownerDocument, 'touchcancel', _this._onDrop); + + if (options.delay) { + // If the user moves the pointer or let go the click or touch + // before the delay has been reached: + // disable the delayed drag + _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); + _on(ownerDocument, 'touchend', _this._disableDelayedDrag); + _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); + _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); + _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _disableDelayedDrag: function () { + var ownerDocument = this.el.ownerDocument; + + clearTimeout(this._dragStartTimer); + _off(ownerDocument, 'mouseup', this._disableDelayedDrag); + _off(ownerDocument, 'touchend', this._disableDelayedDrag); + _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); + _off(ownerDocument, 'mousemove', this._disableDelayedDrag); + _off(ownerDocument, 'touchmove', this._disableDelayedDrag); + }, + + _triggerDragStart: function (/** Touch */touch) { + if (touch) { + // Touch device support + tapEvt = { + target: dragEl, + clientX: touch.clientX, + clientY: touch.clientY + }; + + this._onDragStart(tapEvt, 'touch'); + } + else if (!this.nativeDraggable) { + this._onDragStart(tapEvt, true); + } + else { + _on(dragEl, 'dragend', this); + _on(rootEl, 'dragstart', this._onDragStart); + } + + try { + if (document.selection) { + document.selection.empty(); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) { + } + }, + + _dragStarted: function () { + if (rootEl && dragEl) { + // Apply effect + _toggleClass(dragEl, this.options.ghostClass, true); + + Sortable.active = this; + + // Drag start event + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); + } + }, + + _emulateDragOver: function () { + if (touchEvt) { + if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) { + return; + } + + this._lastX = touchEvt.clientX; + this._lastY = touchEvt.clientY; + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', 'none'); + } + + var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), + parent = target, + groupName = ' ' + this.options.group.name + '', + i = touchDragOverListeners.length; + + if (parent) { + do { + if (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) { + while (i--) { + touchDragOverListeners[i]({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent + }); + } + + break; + } + + target = parent; // store last element + } + /* jshint boss:true */ + while (parent = parent.parentNode); + } + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', ''); + } + } + }, + + + _onTouchMove: function (/**TouchEvent*/evt) { + if (tapEvt) { + // only set the status to dragging, when we are actually dragging + if (!Sortable.active) { + this._dragStarted(); + } + + // as well as creating the ghost element on the document body + this._appendGhost(); + + var touch = evt.touches ? evt.touches[0] : evt, + dx = touch.clientX - tapEvt.clientX, + dy = touch.clientY - tapEvt.clientY, + translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; + + moved = true; + touchEvt = touch; + + _css(ghostEl, 'webkitTransform', translate3d); + _css(ghostEl, 'mozTransform', translate3d); + _css(ghostEl, 'msTransform', translate3d); + _css(ghostEl, 'transform', translate3d); + + evt.preventDefault(); + } + }, + + _appendGhost: function () { + if (!ghostEl) { + var rect = dragEl.getBoundingClientRect(), + css = _css(dragEl), + options = this.options, + ghostRect; + + ghostEl = dragEl.cloneNode(true); + + _toggleClass(ghostEl, options.ghostClass, false); + _toggleClass(ghostEl, options.fallbackClass, true); + + _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); + _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); + _css(ghostEl, 'width', rect.width); + _css(ghostEl, 'height', rect.height); + _css(ghostEl, 'opacity', '0.8'); + _css(ghostEl, 'position', 'fixed'); + _css(ghostEl, 'zIndex', '100000'); + _css(ghostEl, 'pointerEvents', 'none'); + + options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); + + // Fixing dimensions. + ghostRect = ghostEl.getBoundingClientRect(); + _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); + _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); + } + }, + + _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { + var dataTransfer = evt.dataTransfer, + options = this.options; + + this._offUpEvents(); + + if (activeGroup.pull == 'clone') { + cloneEl = dragEl.cloneNode(true); + _css(cloneEl, 'display', 'none'); + rootEl.insertBefore(cloneEl, dragEl); + } + + if (useFallback) { + + if (useFallback === 'touch') { + // Bind touch events + _on(document, 'touchmove', this._onTouchMove); + _on(document, 'touchend', this._onDrop); + _on(document, 'touchcancel', this._onDrop); + } else { + // Old brwoser + _on(document, 'mousemove', this._onTouchMove); + _on(document, 'mouseup', this._onDrop); + } + + this._loopId = setInterval(this._emulateDragOver, 50); + } + else { + if (dataTransfer) { + dataTransfer.effectAllowed = 'move'; + options.setData && options.setData.call(this, dataTransfer, dragEl); + } + + _on(document, 'drop', this); + setTimeout(this._dragStarted, 0); + } + }, + + _onDragOver: function (/**Event*/evt) { + var el = this.el, + target, + dragRect, + revert, + options = this.options, + group = options.group, + groupPut = group.put, + isOwner = (activeGroup === group), + canSort = options.sort; + + if (evt.preventDefault !== void 0) { + evt.preventDefault(); + !options.dragoverBubble && evt.stopPropagation(); + } + + moved = true; + + if (activeGroup && !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : activeGroup.pull && groupPut && ( + (activeGroup.name === group.name) || // by Name + (groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array + ) + ) && + (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback + ) { + // Smart auto-scrolling + _autoScroll(evt, options, this.el); + + if (_silent) { + return; + } + + target = _closest(evt.target, options.draggable, el); + dragRect = dragEl.getBoundingClientRect(); + + if (revert) { + _cloneHide(true); + + if (cloneEl || nextEl) { + rootEl.insertBefore(dragEl, cloneEl || nextEl); + } + else if (!canSort) { + rootEl.appendChild(dragEl); + } + + return; + } + + + if ((el.children.length === 0) || (el.children[0] === ghostEl) || + (el === evt.target) && (target = _ghostIsLast(el, evt)) + ) { + + if (target) { + if (target.animated) { + return; + } + + targetRect = target.getBoundingClientRect(); + } + + _cloneHide(isOwner); + + if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) { + if (!dragEl.contains(el)) { + el.appendChild(dragEl); + parentEl = el; // actualization + } + + this._animate(dragRect, dragEl); + target && this._animate(targetRect, target); + } + } + else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { + if (lastEl !== target) { + lastEl = target; + lastCSS = _css(target); + lastParentCSS = _css(target.parentNode); + } + + + var targetRect = target.getBoundingClientRect(), + width = targetRect.right - targetRect.left, + height = targetRect.bottom - targetRect.top, + floating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display) + || (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0), + isWide = (target.offsetWidth > dragEl.offsetWidth), + isLong = (target.offsetHeight > dragEl.offsetHeight), + halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, + nextSibling = target.nextElementSibling, + moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect), + after + ; + + if (moveVector !== false) { + _silent = true; + setTimeout(_unsilent, 30); + + _cloneHide(isOwner); + + if (moveVector === 1 || moveVector === -1) { + after = (moveVector === 1); + } + else if (floating) { + var elTop = dragEl.offsetTop, + tgTop = target.offsetTop; + + if (elTop === tgTop) { + after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; + } else { + after = tgTop > elTop; + } + } else { + after = (nextSibling !== dragEl) && !isLong || halfway && isLong; + } + + if (!dragEl.contains(el)) { + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore(dragEl, after ? nextSibling : target); + } + } + + parentEl = dragEl.parentNode; // actualization + + this._animate(dragRect, dragEl); + this._animate(targetRect, target); + } + } + } + }, + + _animate: function (prevRect, target) { + var ms = this.options.animation; + + if (ms) { + var currentRect = target.getBoundingClientRect(); + + _css(target, 'transition', 'none'); + _css(target, 'transform', 'translate3d(' + + (prevRect.left - currentRect.left) + 'px,' + + (prevRect.top - currentRect.top) + 'px,0)' + ); + + target.offsetWidth; // repaint + + _css(target, 'transition', 'all ' + ms + 'ms'); + _css(target, 'transform', 'translate3d(0,0,0)'); + + clearTimeout(target.animated); + target.animated = setTimeout(function () { + _css(target, 'transition', ''); + _css(target, 'transform', ''); + target.animated = false; + }, ms); + } + }, + + _offUpEvents: function () { + var ownerDocument = this.el.ownerDocument; + + _off(document, 'touchmove', this._onTouchMove); + _off(ownerDocument, 'mouseup', this._onDrop); + _off(ownerDocument, 'touchend', this._onDrop); + _off(ownerDocument, 'touchcancel', this._onDrop); + }, + + _onDrop: function (/**Event*/evt) { + var el = this.el, + options = this.options; + + clearInterval(this._loopId); + clearInterval(autoScroll.pid); + clearTimeout(this._dragStartTimer); + + // Unbind events + _off(document, 'mousemove', this._onTouchMove); + + if (this.nativeDraggable) { + _off(document, 'drop', this); + _off(el, 'dragstart', this._onDragStart); + } + + this._offUpEvents(); + + if (evt) { + if (moved) { + evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + } + + ghostEl && ghostEl.parentNode.removeChild(ghostEl); + + if (dragEl) { + if (this.nativeDraggable) { + _off(dragEl, 'dragend', this); + } + + _disableDraggable(dragEl); + + // Remove class's + _toggleClass(dragEl, this.options.ghostClass, false); + _toggleClass(dragEl, this.options.chosenClass, false); + + if (rootEl !== parentEl) { + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag from one list and drop into another + _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + + // Add event + _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); + + // Remove event + _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); + } + } + else { + // Remove clone + cloneEl && cloneEl.parentNode.removeChild(cloneEl); + + if (dragEl.nextSibling !== nextEl) { + // Get the index of the dragged element within its parent + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag & drop within the same list + _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + } + } + } + + if (Sortable.active) { + if (newIndex === null || newIndex === -1) { + newIndex = oldIndex; + } + + _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); + + // Save sorting + this.save(); + } + } + + // Nulling + rootEl = + dragEl = + parentEl = + ghostEl = + nextEl = + cloneEl = + + scrollEl = + scrollParentEl = + + tapEvt = + touchEvt = + + moved = + newIndex = + + lastEl = + lastCSS = + + activeGroup = + Sortable.active = null; + } + }, + + + handleEvent: function (/**Event*/evt) { + var type = evt.type; + + if (type === 'dragover' || type === 'dragenter') { + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + } + else if (type === 'drop' || type === 'dragend') { + this._onDrop(evt); + } + }, + + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + var order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (_closest(el, options.draggable, this.el)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + var items = {}, rootEl = this.el; + + this.toArray().forEach(function (id, i) { + var el = rootEl.children[i]; + + if (_closest(el, this.options.draggable, rootEl)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + + /** + * Save the current sorting + */ + save: function () { + var store = this.options.store; + store && store.set(this); + }, + + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return _closest(el, selector || this.options.draggable, this.el); + }, + + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + var options = this.options; + + if (value === void 0) { + return options[name]; + } else { + options[name] = value; + + if (name === 'group') { + _prepareGroup(options); + } + } + }, + + + /** + * Destroy + */ + destroy: function () { + var el = this.el; + + el[expando] = null; + + _off(el, 'mousedown', this._onTapStart); + _off(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _off(el, 'dragover', this); + _off(el, 'dragenter', this); + } + + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { + el.removeAttribute('draggable'); + }); + + touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); + + this._onDrop(); + + this.el = el = null; + } + }; + + + function _cloneHide(state) { + if (cloneEl && (cloneEl.state !== state)) { + _css(cloneEl, 'display', state ? 'none' : ''); + !state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl); + cloneEl.state = state; + } + } + + + function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { + if (el) { + ctx = ctx || document; + selector = selector.split('.'); + + var tag = selector.shift().toUpperCase(), + re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); + + do { + if ( + (tag === '>*' && el.parentNode === ctx) || ( + (tag === '' || el.nodeName.toUpperCase() == tag) && + (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) + ) + ) { + return el; + } + } + while (el !== ctx && (el = el.parentNode)); + } + + return null; + } + + + function _globalDragOver(/**Event*/evt) { + if (evt.dataTransfer) { + evt.dataTransfer.dropEffect = 'move'; + } + evt.preventDefault(); + } + + + function _on(el, event, fn) { + el.addEventListener(event, fn, false); + } + + + function _off(el, event, fn) { + el.removeEventListener(event, fn, false); + } + + + function _toggleClass(el, name, state) { + if (el) { + if (el.classList) { + el.classList[state ? 'add' : 'remove'](name); + } + else { + var className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' '); + el.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' '); + } + } + } + + + function _css(el, prop, val) { + var style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ''); + } + else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } + else { + if (!(prop in style)) { + prop = '-webkit-' + prop; + } + + style[prop] = val + (typeof val === 'string' ? '' : 'px'); + } + } + } + + + function _find(ctx, tagName, iterator) { + if (ctx) { + var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; + } + + + + function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { + var evt = document.createEvent('Event'), + options = (sortable || rootEl[expando]).options, + onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); + + evt.initEvent(name, true, true); + + evt.to = rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = startIndex; + evt.newIndex = newIndex; + + rootEl.dispatchEvent(evt); + + if (options[onName]) { + options[onName].call(sortable, evt); + } + } + + + function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) { + var evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + + evt = document.createEvent('Event'); + evt.initEvent('move', true, true); + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + evt.relatedRect = targetRect || toEl.getBoundingClientRect(); + + fromEl.dispatchEvent(evt); + + if (onMoveFn) { + retVal = onMoveFn.call(sortable, evt); + } + + return retVal; + } + + + function _disableDraggable(el) { + el.draggable = false; + } + + + function _unsilent() { + _silent = false; + } + + + /** @returns {HTMLElement|false} */ + function _ghostIsLast(el, evt) { + var lastEl = el.lastElementChild, + rect = lastEl.getBoundingClientRect(); + + return ((evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.right + rect.width) > 5)) && lastEl; // min delta + } + + + /** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ + function _generateId(el) { + var str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); + } + + /** + * Returns the index of an element within its parent + * @param {HTMLElement} el + * @return {number} + */ + function _index(el) { + var index = 0; + + if (!el || !el.parentNode) { + return -1; + } + + while (el && (el = el.previousElementSibling)) { + if (el.nodeName.toUpperCase() !== 'TEMPLATE') { + index++; + } + } + + return index; + } + + function _throttle(callback, ms) { + var args, _this; + + return function () { + if (args === void 0) { + args = arguments; + _this = this; + + setTimeout(function () { + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + args = void 0; + }, ms); + } + }; + } + + function _extend(dst, src) { + if (dst && src) { + for (var key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; + } + + + // Export utils + Sortable.utils = { + on: _on, + off: _off, + css: _css, + find: _find, + is: function (el, selector) { + return !!_closest(el, selector, el); + }, + extend: _extend, + throttle: _throttle, + closest: _closest, + toggleClass: _toggleClass, + index: _index + }; + + + /** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ + Sortable.create = function (el, options) { + return new Sortable(el, options); + }; + + + // Export + Sortable.version = '1.4.2'; + return Sortable; +}); + +var bar = bootstrapCarousel_wrapper.children[0].children[1]; +bootstrapCarousel_sort = Sortable.create(bar, { + animation : '150', + handle : '.bootstrapCarousel_move' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/af.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/af.js new file mode 100644 index 0000000..ab1c327 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/af.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'af', {//afrikaans + plugin : 'Bootstrap Carousel', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML Word Toegelaat', + addNewItem : 'Voeg Nuwe Item', + minimum : 'Plugin moet ten minste 1 item bevat', + link : 'Link', + style : 'Style', + type : 'Tipe', + size : 'Grootte', + blockLevel : 'Blok Vlak', + active : 'Aktiewe', + enabled : 'In Staat Gestel Om', + text : 'Teks', + preview : 'Voorskou', + optional : 'Opsionele', + badge : 'Badge', + caption : 'Onderskrif', + image : 'Image', + delete : 'Is jy seker jy wil hierdie item uitvee?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ar.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ar.js new file mode 100644 index 0000000..fa9d6e3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ar.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ar', { //arabic + plugin : 'التمهيد كاروسيل', + title : 'لقب', + content : 'مضمون', + htmlIsAllowed : 'يسمح HTML', + addNewItem : 'إضافة عنصر جديد', + minimum : 'يجب أن يحتوي على البرنامج المساعد على الأقل 1 البند', + link : 'صلة', + style : 'أسلوب', + type : 'نوع', + size : 'حجم', + blockLevel : 'كتلة المستوى', + active : 'نشط', + enabled : 'تمكين', + text : 'نص', + preview : 'معاينة', + optional : 'اختياري', + badge : 'شارة', + caption : 'شرح', + image : 'صورة', + delete : 'هل أنت متأكد أنك تريد حذف هذا البند؟' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/bg.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bg.js new file mode 100644 index 0000000..4e503e4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bg.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'bg', {//bulgarian + plugin : 'Bootstrap Carousel', + title : 'заглавие', + content : 'съдържание', + htmlIsAllowed : 'HTML е позволено', + addNewItem : 'Нова позиция', + minimum : 'Plugin трябва да съдържа най-малко 1 брой', + link : 'връзка', + style : 'стил', + type : 'тип', + size : 'размер', + blockLevel : 'Block Level', + active : 'активен', + enabled : 'Enabled', + text : 'текст', + preview : 'предварителен преглед', + optional : 'по избор', + badge : 'значка', + caption : 'Надпис', + image : 'изображение', + delete : 'Сигурни ли сте, че искате да изтриете този елемент?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/bn.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bn.js new file mode 100644 index 0000000..8b215c9 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'bn', {//bengali + plugin : 'বুটস্ট্র্যাপ Carousel', + title : 'খেতাব', + content : 'বিষয়বস্তু', + htmlIsAllowed : 'এইচটিএমএল অনুমতি দেওয়া হয়', + addNewItem : 'নতুন আইটেম যোগ করুন', + minimum : 'প্লাগইন অন্তত 1 আইটেম ধারণ করতে হবে', + link : 'লিংক', + style : 'শৈলী', + type : 'আদর্শ', + size : 'আয়তন', + blockLevel : 'ব্লক শ্রেনী', + active : 'সক্রিয়', + enabled : 'সক্রিয়', + text : 'পাঠ', + preview : 'সম্পূর্ণ বিবরণের পূর্বরূপ দেখুন', + optional : 'ঐচ্ছিক', + badge : 'ব্যাজ', + caption : 'ক্যাপশন', + image : 'ভাবমূর্তি', + delete : 'আপনি এই আইটেমটি মুছে ফেলতে চান আপনি কি নিশ্চিত?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/bs.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bs.js new file mode 100644 index 0000000..6eef5ae --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/bs.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'bs', {//bosnian + plugin : 'Bootstrap Carousel', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML je dozvoljeno', + addNewItem : 'Dodaj Novi Item', + minimum : 'Plugin mora sadržavati najmanje 1 stavka', + link : 'Link', + style : 'Stil', + type : 'Tip', + size : 'Veličina', + blockLevel : 'Blok Level', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Preview', + optional : 'Neobavezan', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ca.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ca.js new file mode 100644 index 0000000..bf750e4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ca', {//catalan + plugin : 'Bootstrap Carrusel', + title : 'Títol', + content : 'Contingut', + htmlIsAllowed : 'HTML és Permès', + addNewItem : 'Afegir Nou Element', + minimum : 'Plugin ha de contenir almenys 1 membre', + link : 'Enllaç', + style : 'Estil', + type : 'Tipus', + size : 'Mida', + blockLevel : 'Nivell De Bloc', + active : 'Actiu', + enabled : 'Activat', + text : 'Text', + preview : 'Preestrena', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítol', + image : 'Imatge', + delete : 'Segur que vols esborrar aquest article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/cs.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/cs.js new file mode 100644 index 0000000..aeda2eb --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/cs.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'cs', {//czech + plugin : 'Bootstrap Carousel', + title : 'Název', + content : 'Obsah', + htmlIsAllowed : 'HTML Je Povoleno', + addNewItem : 'Přidat Novou Položku', + minimum : 'Plugin musí obsahovat alespoň 1 položka', + link : 'Odkaz', + style : 'Styl', + type : 'Typ', + size : 'Velikost', + blockLevel : 'Block Level', + active : 'Aktivní', + enabled : 'Povoleno', + text : 'Text', + preview : 'Preview', + optional : 'Volitelný', + badge : 'Odznak', + caption : 'Titulek', + image : 'Obraz', + delete : 'Jste si jisti, že chcete tuto položku smazat?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/cy.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/cy.js new file mode 100644 index 0000000..bce8f53 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/cy.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'cy', {//welsh + plugin : 'Bootstrap Carousel', + title : 'Teitl', + content : 'cynnwys', + htmlIsAllowed : 'HTML Yn Cael Ei Allowed', + addNewItem : 'Ychwanegu Eitem Newydd', + minimum : 'Rhaid ategyn gynnwys o leiaf 1 eitem', + link : 'Cyswllt', + style : 'Arddull', + type : 'Math', + size : 'Maint', + blockLevel : 'Bloc Lefel', + active : 'Active', + enabled : 'Galluogwyd', + text : 'Testun', + preview : 'Rhagolwg', + optional : 'Dewisol', + badge : 'Bathodyn', + caption : 'Geiriad', + image : 'Delwedd', + delete : 'Ydych chi\'n siŵr eich bod am ddileu\'r eitem hon?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/da.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/da.js new file mode 100644 index 0000000..f4e977c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/da.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'da', {//danish + plugin : 'Bootstrap Carousel', + title : 'Titel', + content : 'Indhold', + htmlIsAllowed : 'HTML er tilladt', + addNewItem : 'Tilføj nyt element', + minimum : 'Plugin skal indeholde mindst 1 emne', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiveret', + text : 'Tekst', + preview : 'Eksempel', + optional : 'Valgfri', + badge : 'Badge', + caption : 'Caption', + image : 'Billede', + delete : 'Er du sikker på du vil slette denne genstand?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/de.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/de.js new file mode 100644 index 0000000..1946968 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/de.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'de', {//german + plugin : 'Bootstrap Carousel', + title : 'Titel', + content : 'Inhalt', + htmlIsAllowed : 'HTML ist erlaubt', + addNewItem : 'Neues Element hinzufügen', + minimum : 'Plugin muss mindestens 1 Artikel enthalten', + link : 'Link', + style : 'Stil', + type : 'Art', + size : 'Größe', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiviert', + text : 'Text', + preview : 'Vorschau', + optional : 'Fakultativ', + badge : 'Abzeichen', + caption : 'Bildunterschrift', + image : 'Bild', + delete : 'Sind Sie sicher, Sie wollen diesen Inhalt löschen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/el.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/el.js new file mode 100644 index 0000000..4c793c0 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/el.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'el', {//greek + plugin : 'Bootstrap Carousel', + title : 'Τίτλος', + content : 'Περιεχόμενο', + htmlIsAllowed : 'Επιτρέπεται HTML κώδικας', + addNewItem : 'Προσθήκη νέου στοιχείου', + minimum : 'Το Plugin πρέπει να περιέχει τουλάχιστον 1 στοιχείο', + link : 'Σύνδεσμος', + style : 'Στυλ', + type : 'Τύπος', + size : 'Μέγεθος', + blockLevel : 'Block Επίπεδο', + active : 'Ενεργό', + enabled : 'Ενεργοποιήθηκε', + text : 'Κείμενο', + preview : 'Προεπισκόπηση', + optional : 'Προαιρετικό', + badge : 'Σήμα', + caption : 'Λεζάντα', + image : 'Εικόνα', + delete : 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το στοιχείο;' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-au.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-au.js new file mode 100644 index 0000000..5185c60 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-au.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'en-au', { + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-ca.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-ca.js new file mode 100644 index 0000000..57a2672 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'en-ca', { + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-gb.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-gb.js new file mode 100644 index 0000000..a83ee9f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en-gb.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'en-gb', { + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/en.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en.js new file mode 100644 index 0000000..8ac0859 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/en.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'en', { + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/eo.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/eo.js new file mode 100644 index 0000000..026bc47 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/eo.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'eo', {//Esperanto + plugin : 'Bootstrap Carrousel', + title : 'titolo', + content : 'Enhavo', + htmlIsAllowed : 'HTML Estas Permesitaj', + addNewItem : 'Aldoni Novan Eron', + minimum : 'Plugin devas enhavi almenaŭ 1 ero', + link : 'Ligilo', + style : 'Stilo', + type : 'Tipo', + size : 'Grandeco', + blockLevel : 'Bloko-Nivelo', + active : 'Aktivaj', + enabled : 'Enabled', + text : 'Teksto', + preview : 'Antaŭrigardo', + optional : 'Laŭvola', + badge : 'Badge', + caption : 'Apudskribo', + image : 'Dosiero', + delete : 'Ĉu vi vere volas forigi tiun artikolon?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/es.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/es.js new file mode 100644 index 0000000..e0c7f48 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/es.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'es', {//spanish + plugin : 'MJ Carrusel', + title : 'Título', + content : 'Eontenido', + htmlIsAllowed : 'HTML Es Permitido', + addNewItem : 'Agregar Nuevo Elemento', + minimum : 'Plugin debe contener al menos 1 artículo', + link : 'Enlace', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Nivel De Bloque', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Preestreno', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítulo', + image : 'Imagen', + delete : '¿Seguro que quieres borrar este artículo?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/et.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/et.js new file mode 100644 index 0000000..1926dda --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/et.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'et', {//estonian + plugin : 'Bootstrap Karusselli', + title : 'pealkiri', + content : 'sisu', + htmlIsAllowed : 'HTML on lubatud', + addNewItem : 'Lisa uus üksus', + minimum : 'Plugin peab sisaldama vähemalt 1 kirje', + link : 'Link', + style : 'Stiil', + type : 'Ttüüp', + size : 'Suurus', + blockLevel : 'Block Level', + active : 'Aktiivne', + enabled : 'Lubatud', + text : 'Tekst', + preview : 'Eelvaade', + optional : 'Vabatahtlik', + badge : 'Rinnamärk', + caption : 'Pealkiri', + image : 'Pilt', + delete : 'Olete kindel, et soovite kustutada selle kirje?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/eu.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/eu.js new file mode 100644 index 0000000..66fa4cd --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/eu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'eu', {//Basque + plugin : 'Bootstrap Kanpaina', + title : 'Izenburua', + content : 'Edukia', + htmlIsAllowed : 'HTML onartzen da', + addNewItem : 'Gehitu Elementu berria', + minimum : 'Plugin gutxienez 1 elementua eduki behar', + link : 'Link', + style : 'Style', + type : 'Mota', + size : 'Tamaina', + blockLevel : 'Bloke Maila', + active : 'Aktiboak', + enabled : 'Gaituta', + text : 'Testua', + preview : 'Aurreikusi', + optional : 'Aukerako', + badge : 'Badge', + caption : 'Argazki-oina', + image : 'Image', + delete : 'Ziur zaude elementu hau ezabatu nahi duzula?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/fa.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fa.js new file mode 100644 index 0000000..2d94703 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fa.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'fa', {//Persian + plugin : 'بوت استرپ چرخ فلک', + title : 'عنوان', + content : 'مقدار', + htmlIsAllowed : 'HTML مجاز است', + addNewItem : 'اضافه کردن آیتم جدید', + minimum : 'پلاگین باید حداقل 1 مورد شامل', + link : 'پیوند', + style : 'اندازه', + type : 'نوع', + size : 'اندازه', + blockLevel : 'بلوک سطح', + active : 'فعال', + enabled : 'فعال', + text : 'متن', + preview : 'پیش دید', + optional : 'اختیاری', + badge : 'نشان', + caption : 'عنوان', + image : 'تصویر', + delete : 'آیا شما مطمئن هستید که میخواهید این آیتم را حذف کنید؟' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/fi.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fi.js new file mode 100644 index 0000000..c2c1b6f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'fi', {//Finnish + plugin : 'Bootstrap Carousel', + title : 'Otsikko', + content : 'Pitoisuus', + htmlIsAllowed : 'HTML On Sallittu', + addNewItem : 'Lisää Uusi Osa', + minimum : 'Plugin on oltava vähintään 1 kohde', + link : 'Linkki', + style : 'Tyyli', + type : 'Tyyppi', + size : 'Koko', + blockLevel : 'Block Level', + active : 'Aktiivinen', + enabled : 'Käytössä', + text : 'Teksti', + preview : 'Preview', + optional : 'Valinnainen', + badge : 'Kunniamerkki', + caption : 'Kuvateksti', + image : 'Kuva', + delete : 'Oletko varma, että haluat poistaa tämän kohteen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/fo.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fo.js new file mode 100644 index 0000000..093b65c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fo.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'fo', {//Faroese + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Stlye', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr-ca.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr-ca.js new file mode 100644 index 0000000..caf3b10 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr-ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'fr-ca', {//french + plugin : 'Bootstrap Carousel', + title : 'titre', + content : 'content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr.js new file mode 100644 index 0000000..9b1b798 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/fr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'fr', {//french + plugin : 'Bootstrap Carousel', + title : 'titre', + content : 'content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/gl.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/gl.js new file mode 100644 index 0000000..a6783ab --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/gl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'gl', {//Galician + plugin : 'Bootstrap Carousel', + title : 'Título', + content : 'Contido', + htmlIsAllowed : 'HTML se admite', + addNewItem : 'Add New Item', + minimum : 'Plugin debe conter polo menos 1 artigo', + link : 'Ligazón', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Bloque de Nivel', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Visualización', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imaxe', + delete : 'Está seguro de que quere eliminar este elemento?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/gu.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/gu.js new file mode 100644 index 0000000..7395a29 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/gu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'gu', {//Gujarati + plugin : 'બુટસ્ટ્રેપ કેરોયુઝલ', + title : 'શીર્ષક', + content : 'સામગ્રી', + htmlIsAllowed : 'એચટીએમએલ મંજૂર થયેલ', + addNewItem : 'ન્યૂ વસ્તુ ઉમેરો', + minimum : 'પ્લગઇન ઓછામાં ઓછા 1 આઇટમ હોવો જરૂરી છે', + link : 'લિંક', + style : 'પ્રકાર', + type : 'પ્રકાર', + size : 'કદ', + blockLevel : 'બ્લોક લેવલ', + active : 'સક્રિય', + enabled : 'જો સક્રિય', + text : 'લખાણ', + preview : 'પૂર્વાવલોકન', + optional : 'વૈકલ્પિક', + badge : 'બેજ', + caption : 'કૅપ્શન', + image : 'છબી', + delete : 'તમે આ આઇટમ કાઢી નાખવા માંગો તમે ખાતરી રહ્યાં છો?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/he.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/he.js new file mode 100644 index 0000000..af6c712 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/he.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'he', {//hebrew + plugin : 'Bootstrap קרוסלה', + title : 'כותרת', + content : 'תוכן', + htmlIsAllowed : 'HTML הוא מחמד', + addNewItem : 'הוסף פריט חדש', + minimum : 'תוסף חייב לכלול לפחות פריט 1', + link : 'קישור', + style : 'סגנון', + type : 'סוג', + size : 'גודל', + blockLevel : 'בלוק רמה', + active : 'פעיל', + enabled : 'מופעל', + text : 'טקסט', + preview : 'תצוגה מקדימה', + optional : 'אופציונאלי', + badge : 'תג', + caption : 'כיתוב', + image : 'תמונה', + delete : 'האם אתה בטוח שאתה רוצה למחוק פריט זה?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/hi.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hi.js new file mode 100644 index 0000000..89ade47 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'hi', {//Hindi + plugin : 'बूटस्ट्रैप हिंडोला', + title : 'शीर्षक', + content : 'सामग्री', + htmlIsAllowed : 'एचटीएमएल अनुमति दी है', + addNewItem : 'नया आइटम जोड़ें', + minimum : 'प्लगइन कम से कम एक आइटम शामिल होना चाहिए', + link : 'लिंक', + style : 'अंदाज', + type : 'प्रकार', + size : 'आकार', + blockLevel : 'ब्लॉक स्तर', + active : 'सक्रिय', + enabled : 'सक्षम होना चाहिए', + text : 'टेक्स्ट', + preview : 'पूर्वावलोकन', + optional : 'ऐच्छिक', + badge : 'बिल्ला', + caption : 'शीर्षक', + image : 'छवि', + delete : 'क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/hr.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hr.js new file mode 100644 index 0000000..6706caa --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'hr', {//Croatian + plugin : 'Bootstrap Vrtuljak', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML Dopušteno', + addNewItem : 'Dodaj Novu Stavku', + minimum : 'Plugin mora sadržavati najmanje 1 predmet', + link : 'Link', + style : 'Stil', + type : 'Vrsta', + size : 'Veličina', + blockLevel : 'Blok Razina', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Pregled', + optional : 'Izborni', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/hu.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hu.js new file mode 100644 index 0000000..13e5545 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/hu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'hu', {//Hungarian + plugin : 'Bootstrap Carousel', + title : 'cím', + content : 'tartalom', + htmlIsAllowed : 'HTML Engedélyezett', + addNewItem : 'Új elem hozzáadása', + minimum : 'Plugin tartalmaznia kell legalább 1 db', + link : 'Link', + style : 'Stílus', + type : 'Típus', + size : 'Méret', + blockLevel : 'Blokk Szintű', + active : 'Aktív', + enabled : 'Engedélyezve', + text : 'Szöveg', + preview : 'Preview', + optional : 'Választható', + badge : 'Jelvény', + caption : 'Képaláírás', + image : 'Kép', + delete : 'Biztos, hogy törölni szeretné ezt az elemet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/id.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/id.js new file mode 100644 index 0000000..37b074a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/id.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'id', {//Indonesian + plugin : 'Bootstrap Carousel', + title : 'judul', + content : 'kadar', + htmlIsAllowed : 'HTML Diizinkan', + addNewItem : 'Add New Item', + minimum : 'Plugin harus mengandung setidaknya 1 item', + link : 'Mata Rantai', + style : 'Gaya', + type : 'Jenis', + size : 'Ukuran', + blockLevel : 'Blok Tingkat', + active : 'Aktif', + enabled : 'Diaktifkan', + text : 'Teks', + preview : 'Preview', + optional : 'Opsional', + badge : 'Badge', + caption : 'Keterangan Gambar', + image : 'Gambar', + delete : 'Apakah Anda yakin ingin menghapus item ini?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/is.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/is.js new file mode 100644 index 0000000..9e40e72 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/is.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'is', {//Icelandic + plugin : 'ræsi Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML er Leyft', + addNewItem : 'Bæta Við Nýjum Lið', + minimum : 'Plugin verður að innihalda að minnsta kosti 1 atriði', + link : 'Link', + style : 'Style', + type : 'Gerð', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Virkt', + text : 'Texti', + preview : 'Preview', + optional : 'Valfrjálst', + badge : 'Badge', + caption : 'Caption', + image : 'Mynd', + delete : 'Ert þú viss um að þú viljir eyða þessu atriði?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/it.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/it.js new file mode 100644 index 0000000..463cab8 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/it.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'it', {//Italian + plugin : 'Bootstrap Carousel', + title : 'titolo', + content : 'contenuto', + htmlIsAllowed : 'HTML è ammessi', + addNewItem : 'Aggiungi nuovo elemento', + minimum : 'Plugin deve contenere almeno 1 articolo', + link : 'Collegamento', + style : 'Stile', + type : 'Tipo', + size : 'Dimensione', + blockLevel : 'A Livello Di Blocco', + active : 'Attivo', + enabled : 'Abilitato', + text : 'Testo', + preview : 'Anteprima', + optional : 'Opzionale', + badge : 'Distintivo', + caption : 'Didascalia', + image : 'Immagine', + delete : 'Sei sicuro di voler eliminare questo articolo?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ja.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ja.js new file mode 100644 index 0000000..e3ad63a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ja.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ja', {//japanese + plugin : 'ブートストラップカルーセル', + title : 'タイトル', + content : 'コンテンツ', + htmlIsAllowed : 'HTMLが許可されます', + addNewItem : '[新しい項目の追加', + minimum : 'プラグインは、少なくとも1つのアイテムを含んでいなければなりません', + link : 'リンク', + style : 'スタイル', + type : 'タイプ', + size : 'サイズ', + blockLevel : 'ブロックレベル', + active : 'アクティブ', + enabled : '使用可能', + text : 'テキスト', + preview : 'プレビュー', + optional : 'オプショナル', + badge : 'バッジ', + caption : 'キャプション', + image : '画像', + delete : 'あなたはこの項目を削除してもよろしいていますか?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ka.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ka.js new file mode 100644 index 0000000..9a25d2f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ka.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ka', {//Georgian + plugin : 'ჩატვირთვის Carousel', + title : 'სათაური', + content : 'შინაარსი', + htmlIsAllowed : 'HTML ნებადართულია', + addNewItem : 'სანიშნეს New Item', + minimum : 'მოდული უნდა შეიცავდეს მინიმუმ 1 ცალი', + link : 'ლინკი', + style : 'სტილი', + type : 'ტიპი', + size : 'ზომა', + blockLevel : 'Block დონე', + active : 'აქტიური', + enabled : 'ჩართულია', + text : 'ტექსტი', + preview : 'Preview', + optional : 'სურვილისამებრ', + badge : 'სამკერდე', + caption : 'წარწერა', + image : 'Image', + delete : 'დარწმუნებული ხართ, რომ გსურთ წაშალოთ ეს ნივთი?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/km.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/km.js new file mode 100644 index 0000000..9c5847e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/km.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'km', {//Khmer + plugin : 'ចាប់ផ្ដើម Carousel', + title : 'ចំណងជើង', + content : 'មាតិកា', + htmlIsAllowed : 'HTML ដែលត្រូវបានអនុញ្ញាត', + addNewItem : 'បន្ថែមធាតុថ្មី', + minimum : 'កម្មវិធីជំនួយត្រូវតែមានយ៉ាងហោចណាស់ 1 ធាតុ', + link : 'តំណភ្ជាប់', + style : 'រចនាប័ទ្ម', + type : 'ប្រភេទ', + size : 'ទំហំ', + blockLevel : 'ប្លុកកម្រិត', + active : 'ដែលសកម្ម', + enabled : 'បានបើក', + text : 'អត្ថបទ', + preview : 'ការមើលជាមុន', + optional : 'ជម្រើស', + badge : 'ផ្លាកសញ្ញា', + caption : 'ចំណងជើង', + image : 'រូបភាព', + delete : 'តើអ្នកប្រាកដជាចង់លុបធាតុនេះឬ?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ko.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ko.js new file mode 100644 index 0000000..2a77eb3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ko.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ko', {//Korean + plugin : '부트 스트랩 회전 목마', + title : '이름', + content : '함유량', + htmlIsAllowed : 'HTML이 허용됩니다', + addNewItem : '새 항목 추가', + minimum : '플러그인은 적어도 1 개 항목을 포함해야', + link : '링크', + style : '스타일', + type : '유형', + size : '크기', + blockLevel : '블록 레벨', + active : '활동적인', + enabled : '사용', + text : '본문', + preview : '시사', + optional : '선택', + badge : '배지', + caption : '표제', + image : '영상', + delete : '이 항목을 삭제 하시겠습니까?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ku.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ku.js new file mode 100644 index 0000000..b89e19c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ku.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ku', {//Kurdish + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/lt.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/lt.js new file mode 100644 index 0000000..d142b3e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/lt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'lt', {//Lithuanian + plugin : 'Bootstrap Karuselė', + title : 'Pavadinimas', + content : 'Turinys', + htmlIsAllowed : 'HTML Leidžiamas', + addNewItem : 'Pridėti Naują Elementą', + minimum : 'Įskiepis turi būti bent 1 punktą', + link : 'Ryšys', + style : 'Stilius', + type : 'Tipas', + size : 'Dydis', + blockLevel : 'Blokuoti Lygis', + active : 'Aktyvus', + enabled : 'Įjungta', + text : 'Tekstas', + preview : 'Peržiūrėti', + optional : 'Neprivalomas', + badge : 'ženklelis', + caption : 'Antraštė', + image : 'Vaizdas', + delete : 'Ar tikrai norite ištrinti šį elementą?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/lv.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/lv.js new file mode 100644 index 0000000..1d7997b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/lv.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'lv', {//Latvian + plugin : 'Bootstrap Carousel', + title : 'Virsraksts', + content : 'Saturs', + htmlIsAllowed : 'HTML Ir Atļauts', + addNewItem : 'Pievienot Jaunu Elementu', + minimum : 'Plugin jābūt vismaz 1 objektu', + link : 'Saite', + style : 'Stils', + type : 'Tips', + size : 'Izmērs', + blockLevel : 'Block Level', + active : 'Aktīvs', + enabled : 'Enabled', + text : 'Teksts', + preview : 'Preview', + optional : 'Fakultatīvs', + badge : 'žetons', + caption : 'Virsraksts', + image : 'Attēls', + delete : 'Vai tiešām vēlaties dzēst šo posteni?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/mk.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/mk.js new file mode 100644 index 0000000..fb5c345 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/mk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'mk', {//Macedonian + plugin : 'Bootstrap Carousel', + title : 'Наслов', + content : 'содржина', + htmlIsAllowed : 'HTML е дозволено', + addNewItem : 'Додадете нова ставка', + minimum : 'Приклучокот мора contian најмалку 1 точка', + link : 'Линк', + style : 'стил', + type : 'тип', + size : 'големина', + blockLevel : 'блок ниво', + active : 'активни', + enabled : 'овозможено', + text : 'текст', + preview : 'преглед', + optional : 'Изборно', + badge : 'значка', + caption : 'Легенда', + image : 'слика', + delete : 'Дали сте сигурни дека сакате да ја избришете оваа точка?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/mn.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/mn.js new file mode 100644 index 0000000..c164831 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/mn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'mn', {//Mongolian + plugin : 'эхлүүлэгч тойргийн', + title : 'гарчиг', + content : 'Агуулга', + htmlIsAllowed : 'HTML зөвшөөрөл', + addNewItem : 'Шинэ Барааны нэмнэ', + minimum : 'Залгаас наад зах нь 1 дээр төстэй эд зүйлсийг contian байх ёстой', + link : 'Сэтгэгдлийн холбоос', + style : 'Style', + type : 'төрөл', + size : 'Хэмжээ', + blockLevel : 'Блок түвшин', + active : 'Идэвхтэй', + enabled : 'идэвхжсэн', + text : 'Текст', + preview : 'Урьдчилан харах', + optional : 'Нэмэлт', + badge : 'Авлаа', + caption : 'Caption', + image : 'Зургийн', + delete : 'Хэрэв та дээр төстэй эд зүйлсийг устгахыг хүсэж та итгэлтэй байна уу?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ms.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ms.js new file mode 100644 index 0000000..02a380b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ms.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ms', {//Malay + plugin : 'Bootstrap Carousel', + title : 'Tajuk', + content : 'Kandungan', + htmlIsAllowed : 'HTML Adalah Dibenarkan', + addNewItem : 'Tambah Baru Perkara', + minimum : 'Plugin mesti mengandungi sekurang-kurangnya 1 item', + link : 'Oautan', + style : 'Style', + type : 'Jenis', + size : 'Saiz', + blockLevel : 'Sekat Tahap', + active : 'Aktif', + enabled : 'Membolehkan', + text : 'Teks', + preview : 'Preview', + optional : 'Pilihan', + badge : 'Badge', + caption : 'Caption', + image : 'Imej', + delete : 'Adakah anda pasti anda mahu memadam item ini?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/nb.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/nb.js new file mode 100644 index 0000000..fb418d4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/nb.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'nb', {//Norwegian + plugin : 'Bootstrap Carousel', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/nl.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/nl.js new file mode 100644 index 0000000..4ee5300 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/nl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'nl', {//Dutch + plugin : 'Bootstrap Carousel', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML is Toegestaan', + addNewItem : 'Nieuw item toevoegen', + minimum : 'Plugin moet minstens 1 item bevatten', + link : 'Link', + style : 'Stijl', + type : 'Type', + size : 'Grootte', + blockLevel : 'Blok Niveau', + active : 'Actief', + enabled : 'Ingeschakeld', + text : 'Tekst', + preview : 'Voorbeeld', + optional : 'Facultatief', + badge : 'Insigne', + caption : 'Onderschrift', + image : 'Afbeelding', + delete : 'Bent u zeker dat u dit item wilt verwijderen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/no.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/no.js new file mode 100644 index 0000000..712aeab --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/no.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'no', {//norweigian + plugin : 'Bootstrap Carousel', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/pl.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pl.js new file mode 100644 index 0000000..ab9b733 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'pl', {//Polish + plugin : 'Bootstrap Carousel', + title : 'Tytuł', + content : 'Zawartość', + htmlIsAllowed : 'HTML jest dozwolone', + addNewItem : 'Dodaj nowy element', + minimum : 'Wtyczka musi zawierać co najmniej jeden element', + link : 'Powiązanie', + style : 'Rozmiar', + type : 'Typ', + size : 'Rozmiar', + blockLevel : 'Zablokuj Poziom', + active : 'Aktywny', + enabled : 'Włączone', + text : 'Tekst', + preview : 'Zapowiedź', + optional : 'Fakultatywny', + badge : 'Odznaka', + caption : 'Podpis', + image : 'Obraz', + delete : 'Czy na pewno chcesz usunąć ten obiekt?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt-br.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt-br.js new file mode 100644 index 0000000..c284485 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt-br.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'pt-br', { + plugin : 'Bootstrap Carousel', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt.js new file mode 100644 index 0000000..8e9f394 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/pt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'pt', {//Portuguese + plugin : 'Bootstrap Carousel', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ro.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ro.js new file mode 100644 index 0000000..106adb6 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ro.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ro', {//Romanian + plugin : 'Bootstrap Carousel', + title : 'Titlu', + content : 'Conținut', + htmlIsAllowed : 'HTML Este Permise', + addNewItem : 'Add New Item', + minimum : 'Plugin trebuie să conțină cel puțin 1 articol', + link : 'Legătură', + style : 'Stil', + type : 'Tip', + size : 'Dimensiune', + blockLevel : 'Bloc Nivel', + active : 'Activ', + enabled : 'Activat', + text : 'Text', + preview : 'Avanpremieră', + optional : 'Facultativ', + badge : 'Insignă', + caption : 'Legendă', + image : 'Imagine', + delete : 'Sunteți sigur că doriți să ștergeți acest articol?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ru.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ru.js new file mode 100644 index 0000000..7d3e70c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ru.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ru', {//Russian + plugin : 'Bootstrap карусель', + title : 'название', + content : 'содержание', + htmlIsAllowed : 'HTML разрешено', + addNewItem : 'Добавить новый элемент', + minimum : 'Плагин должен содержать, по крайней мере, 1 пункт', + link : 'ссылка', + style : 'стиль', + type : 'тип', + size : 'размер', + blockLevel : 'Блок Уровень', + active : 'активный', + enabled : 'Включено', + text : 'текст', + preview : 'предварительный просмотр', + optional : 'необязательный', + badge : 'знак', + caption : 'подпись', + image : 'изображение', + delete : 'Вы уверены, что хотите удалить этот пункт?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/si.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/si.js new file mode 100644 index 0000000..550b00e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/si.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'si', {//Sinhala + plugin : 'මෙරිගෝ රවුම බුට්ස්ට්රැප්', + title : 'දරන හිමිකම් ලියාපදිංචි කිරීෙම්', + content : 'අන්තර්ගත', + htmlIsAllowed : 'HTML අවසර දී ඇත්තේ', + addNewItem : 'නව විෂය එකතු කරන්න', + minimum : 'ප්ලගිනය අවම වශයෙන් 1 අයිතමය අඩංගු විය යුතුය', + link : 'ලින්ක්', + style : 'ස්ටයිල්', + type : 'වර්ගය', + size : 'තරම', + blockLevel : 'දරන ඉඩම් ෙකොටස්ෙලස ෙපන්නුම් ෙකොට ඇත්තා පෙළ', + active : 'ක්රියාකාරී', + enabled : 'සක්රීය', + text : 'පෙළ', + preview : 'පෙරදසුන', + optional : 'විකල්ප', + badge : 'බැජ්,', + caption : 'සිරස්තලය', + image : 'රූප', + delete : 'ඔබ මෙම අයිතමය මැකීමට අවශ්ය බව ඔබට විශ්වාසද?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sk.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sk.js new file mode 100644 index 0000000..93fdef6 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sk', {//Slovak + plugin : 'Bootstrap Carousel', + title : 'Názov', + content : 'Obsah', + htmlIsAllowed : 'HTML Je Povolené', + addNewItem : 'Pridať Novú Položku', + minimum : 'Plugin musí obsahovať aspoň 1 položka', + link : 'Odkaz', + style : 'štýl', + type : 'Typ', + size : 'Veľkosť', + blockLevel : 'Block Level', + active : 'Aktívny', + enabled : 'Povolené', + text : 'Text', + preview : 'Preview', + optional : 'Voliteľný', + badge : 'Odznak', + caption : 'Titulok', + image : 'Obraz', + delete : 'Ste si istí, že chcete túto položku odstrániť?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sl.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sl.js new file mode 100644 index 0000000..e4a5be1 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sl', {//Slovenian + plugin : 'Bootstrap Carousel', + title : 'Naslov', + content : 'vsebina', + htmlIsAllowed : 'HTML je dovoljeno', + addNewItem : 'Dodaj nov predmet', + minimum : 'Plugin mora vsebovati vsaj 1 izdelek', + link : 'Link', + style : 'Style', + type : 'Tip', + size : 'Velikost', + blockLevel : 'Block Raven', + active : 'Aktivna', + enabled : 'Omogočeno', + text : 'Besedilo', + preview : 'Predogled', + optional : 'Neobvezno', + badge : 'Značka', + caption : 'Napis', + image : 'Slika', + delete : 'Ali ste prepričani, da želite izbrisati ta element?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sq.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sq.js new file mode 100644 index 0000000..f941e7b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sq.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sq', {//Albanian + plugin : 'Bootstrap Carousel', + title : 'Titull', + content : 'Përmbajtje', + htmlIsAllowed : 'HTML është e Lejuar', + addNewItem : 'Add New Item', + minimum : 'Plugin duhet të përmbajë të paktën 1 pika', + link : 'Lidhje', + style : 'Stil', + type : 'Lloj', + size : 'Madhësi', + blockLevel : 'Block Niveli', + active : 'Aktiv', + enabled : 'Enabled', + text : 'Ttekst', + preview : 'Shikim Paraprak', + optional : 'Fakultativ', + badge : 'Distinktiv', + caption : 'Titull', + image : 'Imazh', + delete : 'A jeni i sigurt se doni të fshini këtë artikull?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr-latn.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr-latn.js new file mode 100644 index 0000000..8d37996 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr-latn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sr-latn', { + plugin : 'Боотстрап Цароусел', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr.js new file mode 100644 index 0000000..3a10d02 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sr', {//Serbian + plugin : 'Боотстрап Цароусел', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/sv.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sv.js new file mode 100644 index 0000000..e51227c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/sv.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'sv', {//Swedish + plugin : 'Bootstrap Karusell', + title : 'Titel', + content : 'Innehåll', + htmlIsAllowed : 'HTML är Tillåtet', + addNewItem : 'Add New Item', + minimum : 'Plugin måste innehålla minst 1 objekt', + link : 'länk', + style : 'Stil', + type : 'Typ', + size : 'Storlek', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktiverad', + text : 'Text', + preview : 'Förhandsgranska', + optional : 'Valfritt', + badge : 'Badge', + caption : 'Bildtext', + image : 'Bild', + delete : 'Är du säker på att du vill radera detta föremål?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/th.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/th.js new file mode 100644 index 0000000..fb2a5c8 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/th.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'th', {//Thai + plugin : 'บูตม้าหมุน', + title : 'ชื่อเรื่อง', + content : 'เนื้อหา', + htmlIsAllowed : 'อนุญาตให้ใช้ HTML', + addNewItem : 'เพิ่มรายการใหม่', + minimum : 'ปลั๊กอินต้องมีอย่างน้อย 1 รายการ', + link : 'ลิงค์', + style : 'สไตล์', + type : 'ชนิด', + size : 'ขนาด', + blockLevel : 'ระดับ Block', + active : 'กระตือรือร้น', + enabled : 'ที่เปิดใช้งาน', + text : 'ข้อความ', + preview : 'ดูก่อน', + optional : 'ไม่จำเป็น', + badge : 'สัญลักษณ์', + caption : 'คำบรรยายภาพ', + image : 'ภาพ', + delete : 'คุณแน่ใจว่าคุณต้องการลบรายการนี้ได้?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/tr.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/tr.js new file mode 100644 index 0000000..bd45f00 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/tr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'tr', {//Turkish + plugin : 'Bootstrap Carousel', + title : 'Başlık', + content : 'Içerik', + htmlIsAllowed : 'HTML İzin Edilir', + addNewItem : 'Yeni Öğe Ekle', + minimum : 'Eklenti en az 1 öğe içermelidir', + link : 'Bağlantı', + style : 'Stil', + type : 'Tip', + size : 'Boyut', + blockLevel : 'Blok Seviye', + active : 'Aktif', + enabled : 'Etkin', + text : 'Metin', + preview : 'Önizleme', + optional : 'Isteğe Bağlı', + badge : 'Rozet', + caption : 'Başlık', + image : 'Görüntü', + delete : 'Bu öğeyi silmek istediğinizden emin misiniz?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/tt.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/tt.js new file mode 100644 index 0000000..5b2cb0f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/tt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'tt', {//Tatar + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/ug.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ug.js new file mode 100644 index 0000000..7fa9f97 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/ug.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'ug', {//Uighur + plugin : 'Bootstrap Carousel', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/uk.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/uk.js new file mode 100644 index 0000000..7ffe79a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/uk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'uk', {//Ukrainian + plugin : 'Bootstrap карусель', + title : 'Назва', + content : 'зміст', + htmlIsAllowed : 'HTML дозволено', + addNewItem : 'Додати новий елемент', + minimum : 'Плагін повинен містити, принаймні, 1 пункт', + link : 'посилання', + style : 'стиль', + type : 'Тип', + size : 'Розмір', + blockLevel : 'блок Рівень', + active : 'активний', + enabled : 'включено', + text : 'текст', + preview : 'Попередній перегляд', + optional : 'необов\'язковий', + badge : 'знак', + caption : 'підпис', + image : 'зображення', + delete : 'Ви впевнені, що хочете видалити цей пункт?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/vi.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/vi.js new file mode 100644 index 0000000..feaade3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/vi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'vi', {//Vietnamese + plugin : 'Bootstrap Carousel', + title : 'Tiêu đề', + content : 'Nội Dung', + htmlIsAllowed : 'HTML đang Phép', + addNewItem : 'Add New Item', + minimum : 'Plugin phải có ít nhất 1 sản phẩm', + link : 'Liên kết', + style : 'Phong Cách', + type : 'Kiểu', + size : 'Kích Thước', + blockLevel : 'Lắc Tay', + active : 'Hoạt động', + enabled : 'Bật', + text : 'Bản Văn', + preview : 'Xem Trước', + optional : 'Không Bắt Buộc', + badge : 'Badge', + caption : 'Phụ đề', + image : 'hình ảnh', + delete : 'Bạn có chắc chắn muốn xóa ảnh này?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh-cn.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh-cn.js new file mode 100644 index 0000000..50463e4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh-cn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'zh-cn', {//Chinese Simplified + plugin : '引导旋转木马', + title : '称号', + content : '内容', + htmlIsAllowed : 'HTML是允许的', + addNewItem : '添加新项', + minimum : '插件必须至少包含1项', + link : '链接', + style : '风格', + type : '类型', + size : '尺寸', + blockLevel : '块级', + active : '积极', + enabled : '启用', + text : '文本', + preview : '预览', + optional : '自选', + badge : '徽', + caption : '字幕', + image : '图像', + delete : '你确定你要删除这个项目吗?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh.js b/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh.js new file mode 100644 index 0000000..6dce565 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/lang/zh.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'zh', {//Chinese Traditional + plugin : '引導旋轉木馬', + title : '稱號', + content : '內容', + htmlIsAllowed : 'HTML是允許的', + addNewItem : '添加新項', + minimum : '插件必須至少包含1項', + link : '鏈接', + style : '風格', + type : '類型', + size : '尺寸', + blockLevel : '塊級', + active : '積極', + enabled : '啟用', + text : '文本', + preview : '預覽', + optional : '自選', + badge : '徽章', + caption : '字幕', + image : '圖像', + delete : '你確定你要刪除這個項目嗎?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCarousel/plugin.js b/libraries/ckeditor/plugins/bootstrapCarousel/plugin.js new file mode 100644 index 0000000..191b7d6 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCarousel/plugin.js @@ -0,0 +1,14 @@ +/* + Plugin : Bootstrap Carousel + Author : Michael Janea (www.michaeljanea.com) + Version : 1.9 +*/ + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('q B(F,11){11=11||N;c 1e={"<":"&1E;",">":"&1Y;","\'":\'t;\',"\\r\\n":\'\',"\\n":\'\',"\\r":\'\'};c A=1D.28(\'5\');A.p=F;K(c 1=0;1")}F=A.p;Q 11?F.1c(/[\']/g,q(m){Q 1e[m]}):F.1c(/[<\'>]/g,q(m){Q 1e[m]})};M.17.19(\'z\',{1C:[\'12\',\'2w\',\'2K\',\'2R\',\'2T\',\'2X\',\'1I\',\'1J\',\'1d\',\'1z-1N\',\'1z\',\'1O\',\'1P\',\'1Q\',\'1R\',\'12-1S\',\'12-1d\',\'12-1T\',\'1U\',\'1V\',\'1W\',\'1X\',\'1y\',\'1y-1d\',\'1Z\',\'20\',\'21\',\'22\',\'23\',\'24\',\'25\',\'26\',\'27\',\'1i\',\'29\',\'2a\',\'2b\',\'2c\',\'2d\',\'2g\',\'1E\',\'2h\',\'2k\',\'2n\',\'2o\',\'2p\',\'2q\',\'2s\',\'1l-I\',\'1l\',\'2u\',\'2v\',\'v\',\'v-2x\',\'2y\',\'2z\',\'2A\',\'2B\',\'2E\',\'2F\',\'2G\',\'2H\',\'2I\',\'2J\',\'32\',\'2L\'],2M:\'2N\',2O:\'z\',1v:q(d){d.2U.19(\'2V\',{C:d.1C.z.31,1H:\'<5 1i="" 3="7 h" 6-1M="7">\'+\'\'+\'\'+\'\'+\'\'+\'\'+\'<5 3="7-14" y="1u">\'+\'<5 3="">\'+\'<1k 18="">\'+\'<5 3="7-1t">\'+\'\'+\'\'+\'\'+\'<9 3="k k-13-O" W-P="j">\'+\'<9 3="v-R">1r\'+\'\'+\'
\'+\'<9 3="k k-13-T" W-P="j">\'+\'<9 3="v-R">1p\'+\'\'+\'\',2e:\'5(*)[*];H(*)[*];f(*)[*];a(*)[*];1k(*)[*];9(*)[*];2f(*)[*]\',1o:\'1w\',2i:j,2j:q(8){Q 8.2l==\'5\'&&8.2m(\'7\')},1v:q(){c G=0;K(c 1=0;1<2.8.$.4.S;1++){10(2.8.$.4[1]){2r(2.8.$.4[1].1h){1m\'7-1g\':K(c E=0;E<2.8.$.4[1].4.S;E++){e("2.w(\'u"+E+"\', \'"+2.8.$.4[1].4[E].1h+"\')")}1n;1m\'7-14\':K(c b=0;b<2.8.$.4[1].4.S;b++){G++;e("2.w(\'s"+b+"\', \'"+2.8.$.4[1].4[b].1h+"\')");e("2.w(\'o"+b+"\', \'"+B(2.8.$.4[1].4[b].4[0].2C[\'18\'].2D,d.i.L)+"\')");10(2.8.$.4[1].4[b].X(\'16\')[0]!=t){e("2.w(\'D"+b+"\', \'"+B(2.8.$.4[1].4[b].X(\'16\')[0].p,d.i.L||d.i.1x?j:N)+"\')")}10(2.8.$.4[1].4[b].X(\'1f\')[0]!=t){e("2.w(\'l"+b+"\', \'"+B(2.8.$.4[1].4[b].X(\'1f\')[0].p,d.i.L||d.i.1A?j:N)+"\')")}}1n}}}2.w(\'G\',G)},6:q(){c 1B=2P 2Q();c J=1B.2S();c D=1j=\'\';c 1b=0;K(c 1=0;1<=2.6.G;1++){e("x = 2.6.D"+1);x=x==t?\'\':x;e("l = 2.6.l"+1);l=l==t?\'\':l;e("u = 2.6.u"+1);u=u==t?\'\':u;e("s = 2.6.s"+1);s=s==t?\'\':s;e("o = 2.6.o"+1);o=o==t?\'\':o;10(o){D+=\'\';1j+=\' <5 3="\'+s+\'"> <1k 18="\'+o+\'" /> <5 3="7-1t"> \'+(x!=\'\'?\'<5 3="16">\'+B(x,d.i.L||d.i.1x?j:N)+\'\':\'\')+\' \'+(l!=\'\'?\'<5 3="1f">\'+B(l,d.i.L||d.i.1A?j:N)+\'\':\'\')+\' \';1b++}}2.8.2W(\'1i\',\'7\'+J);2.8.$.p=\' \'+D+\' <5 3="7-14" y="1u"> \'+1j+\' <9 3="k k-13-O" W-P="j"> <9 3="v-R">1r <9 3="k k-13-T" W-P="j"> <9 3="v-R">1p \'}});M.1o.19(\'1w\',M.17.1F(\'z\')+\'2Y/z.2Z\');M.1D.30(M.17.1F(\'z\')+\'1G/1L.1G\')}});',62,189,'|bootstrapCarousel_i|this|class|children|div|data|carousel|element|span||bootstrapCarousel_k|var|editor|eval|li||slide|config|true|glyphicon|bootstrapCarousel_caption|||bootstrapCarousel_image|innerHTML|function||bootstrapCarousel_contentClass|undefined|bootstrapCarousel_itemClass|sr|setData|bootstrapCarousel_title|role|bootstrapCarousel|bootstrapCarousel_el|bootstrapCarousel_escapeHtml|button|bootstrapCarousel_item|bootstrapCarousel_j|bootstrapCarousel_text|bootstrapCarousel_total|ol|br|bootstrapCarousel_id|for|mj_variables_allow_html|CKEDITOR|false|left|hidden|return|only|length|right|href|control|aria|getElementsByClassName|to|target|if|bootstrapCarousel_allow_html|en|chevron|inner|getElementsByTagName|carousel_title|plugins|src|add|pre|bootstrapCarousel_target|replace|ca|map|carousel_caption|indicators|className|id|bootstrapCarousel_contents|img|pt|case|break|dialog|Next|next|Previous|prev|caption|listbox|init|bootstrapCarouselDialog|bootstrapCarousel_managePopupTitle|fr|zh|bootstrapCarousel_managePopupCaption|bootstrapCarousel_d|lang|document|lt|getPath|css|template|bs|bg|gm|style|ride|cn|hr|cs|da|nl|au|gb|eo|et|fo|fi|gt|gl|ka|de|el|gu|he|hi|hu|is|createElement|it|ja|km|ko|ku|allowedContent|h3|lv|mk|mask|upcast|ms|name|hasClass|mn|no|nb|fa|switch|pl|39|ro|ru|af|latn|si|sk|sl|es|attributes|value|sv|tt|th|tr|ug|uk|sq|cy|requires|widget|icons|new|Date|ar|getTime|eu|widgets|BootstrapCarousel|setAttribute|bn|dialogs|js|appendStyleSheet|plugin|vi'.split('|'),0,{})) + +for(var i in CKEDITOR.instances){ + CKEDITOR.instances[i].ui.addButton('BootstrapCarousel', { + command : 'bootstrapCarousel', + icon : this.path + 'icons/bootstrapCarousel.png', + }); +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/ckeditor.html b/libraries/ckeditor/plugins/bootstrapCollapse/ckeditor.html new file mode 100644 index 0000000..e3c7594 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/ckeditor.html @@ -0,0 +1,61 @@ + + + cmsPro + + + + + + + +
+ + +
+ + + + + + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/css/style.css b/libraries/ckeditor/plugins/bootstrapCollapse/css/style.css new file mode 100644 index 0000000..3b12bc3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/css/style.css @@ -0,0 +1,22 @@ +/* + Plugin : Bootstrap Collapse + Author : Michael Janea (www.michaeljanea.com) + Version : 1.5.1 +*/ +#bootstrapCollapse {} + #bootstrapCollapse_Container {height:350px; overflow:auto; margin-bottom:1em;} + #bootstrapCollapse table, #bootstrapCollapse_settings table {width:100%; border-collapse:collapse;} + #bootstrapCollapse th, #bootstrapCollapse td, #bootstrapCollapse_settings {padding:.5em;} + #bootstrapCollapse th, #bootstrapCollapse_settings th {font-weight:bold;} + #bootstrapCollapse td {vertical-align:top;} + #bootstrapCollapse input[type=text], #bootstrapCollapse textarea, #bootstrapCollapse_settings input[type=text], #bootstrapCollapse_settings textarea, #bootstrapCollapse_settings select {padding:.3em; border:1px solid #ddd; -webkit-border-radius:3px; border-radius:3px; -webkit-box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); background:rgba(0, 0, 0, .01); outline:none; -webkit-box-sizing:border-box; box-sizing:border-box;} + #bootstrapCollapse input[type=text], #bootstrapCollapse_settings input[type=text], #bootstrapCollapse_settings select {width:150px;} + #bootstrapCollapse input[type=text]:focus, #bootstrapCollapse textarea:focus, #bootstrapCollapse_settings input[type=text]:focus, #bootstrapCollapse_settings textarea:focus, #bootstrapCollapse_settings select:focus {border:1px solid #139ff7;} + #bootstrapCollapse textarea, #bootstrapCollapse_settings textarea {resize:none; width:295px; height:100px; white-space:pre-wrap;} + #bootstrapCollapse .bootstrapCollapse_remove, #bootstrapCollapse .bootstrapCollapse_addNew, #bootstrapCollapse .bootstrapCollapse_up, #bootstrapCollapse .bootstrapCollapse_down, #bootstrapCollapse .bootstrapCollapse_move {font-weight:bold; -webkit-border-radius:3px; border-radius:3px;} + #bootstrapCollapse .bootstrapCollapse_remove {background:#A94442; padding:.3em .5em; color:#fff;} + #bootstrapCollapse .bootstrapCollapse_remove:hover {text-decoration:none;} + #bootstrapCollapse .bootstrapCollapse_addNew, #bootstrapCollapse .bootstrapCollapse_up, #bootstrapCollapse .bootstrapCollapse_down, #bootstrapCollapse .bootstrapCollapse_move {float:right; padding:.5em; background:#f3f3f3; border:1px solid #ddd;} + #bootstrapCollapse .bootstrapCollapse_addNew:hover {text-decoration:underline;} + #bootstrapCollapse .bootstrapCollapse_up, #bootstrapCollapse .bootstrapCollapse_down {float:none; padding:.13em .4em;} + #bootstrapCollapse .bootstrapCollapse_move {background:url('../icons/move.png') center center no-repeat #f3f3f3; width:11px; height:9px; cursor:move;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/dialogs/bootstrapCollapse.js b/libraries/ckeditor/plugins/bootstrapCollapse/dialogs/bootstrapCollapse.js new file mode 100644 index 0000000..0401f96 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/dialogs/bootstrapCollapse.js @@ -0,0 +1,7 @@ +/* + Plugin : Bootstrap Collapse + Author : Michael Janea (www.michaeljanea.com) + Version : 1.5.1 +*/ + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('b 1i=\'2Y=1T,2W=1T,2I=27,2X=27,1c=\'+(1d.1c*0.7)+\',1N=\'+(1d.1N*0.7)+\',31=\'+((1d.1c-(1d.1c*0.7))/2)+\',23=\'+((1d.1N-(1d.1N*0.7))/2);b f=22=21=11=\'\';b 12=\'\';b 20=3;b 2G=33 3a();12=2G.3c();A O(14){b t=10(14.c.c);l(t>0){b 1H=f.a(\'p\')[0].a(\'h\')[t].d[1].C.4;b 1G=f.a(\'p\')[0].a(\'h\')[Y(t)-1].d[1].C.4;f.a(\'p\')[0].a(\'h\')[Y(t)-1].d[1].C.4=1H;f.a(\'p\')[0].a(\'h\')[t].d[1].C.4=1G;b 1K=f.a(\'p\')[0].a(\'h\')[t].d[2].C.4;b 1F=f.a(\'p\')[0].a(\'h\')[Y(t)-1].d[2].C.4;f.a(\'p\')[0].a(\'h\')[Y(t)-1].d[2].C.4=1K;f.a(\'p\')[0].a(\'h\')[t].d[2].C.4=1F}S 19};A N(14){b t=10(14.c.c);l(t \';l((/\\u 6/.s(r.v)||/\\u 7/.s(r.v)||/\\u 8/.s(r.v)||/\\u 9/.s(r.v))&&!U.1t){1x+=\' \'}J{1x+=\'\'}1x+=\' <5> <5> <5> \';1U.1X=1x;f.a(\'p\')[0].2A(1U);S 19};A P(14){l(f.K(\'D\').18>1){l(3y(22)){14.c.c.c.1Z(14.c.c)}}J{3x(21)}S 19};A 2h(2w,1W){1e(b i 1E 1W){l(1W[i]==2w)S 24}S 19};A 10(1R){b d=1R.c.3t;b 1S=0;1e(b i=0;i <2l> <2m> \'+m.y.k.2H+\' \'+m.y.k.1m+(m.2o.39?\' (\'+m.y.k.38+\')\':\'\')+\'

\',35:A(){b 1g=f.K(\'D\');b 1o=f.K(\'w\');b 1J=19;1e(b g=0;g<1g.18;g++){l(1g[g].4==\'\'){1g[g].1D.1A=\'28 29 #1Q\';1J=24}J{1g[g].1D.1A=\'\'}l(1o[g].4==\'\'){1o[g].1D.1A=\'28 29 #1Q\';1J=24}J{1o[g].1D.1A=\'\'}}S!1J},32:A(G){b 1L=0;b 1M=f.K(\'D\');b 1o=f.K(\'w\');1e(b g=0;g<=1M.18;g++){l(1M[g]){1L++;G.X(\'W\'+g,1M[g].4);G.X(\'w\'+g,1o[g].4);l(E.T.V().1f(\'17\',\'R\').1b().$.4==\'H-L L 1E\'&&g==0){G.X(\'R\'+g,\'H-L L 1E\')}J{G.X(\'R\'+g,\'H-L L\')}}J{G.X(\'W\'+g,\'\');G.X(\'w\'+g,\'\');G.X(\'R\',\'\')}}G.X(\'1h\',E.T.V().1f(\'17\',\'1h\').1b().$.4);G.X(\'1L\',1L);16.K(\'1q\')[0].2L.1Z(16.K(\'1q\')[0])},2V:A(G){b 2N=m.3e();15=2N.2Q();b 2O=15.$.d[0].1l.2R(\' \');b W=\'\';l((15.$.2S).2T()==\'z\'&&2h(\'H-2U\',2O)){1e(b g=0;g<=15.$.d[0].d.18;g++){2a("D = G.1O.W"+g);2a("w = G.1O.w"+g);2a("R = G.1O.R"+g);l(D){W+=\' <5> \';l((/\\u 6/.s(r.v)||/\\u 7/.s(r.v)||/\\u 8/.s(r.v)||/\\u 9/.s(r.v))&&!U.1t){W+=\' \'}J{W+=\'\'}W+=\' <5> <5>\'+w+\' <5> \';l(g==1){E.T.V().1f(\'17\',\'R\').1b().$.4=R}}}E.T.V().1f(\'17\',\'1h\').1b().$.4=G.1O.1h;f.a(\'p\')[0].1X=W}J{E.T.V().1f(\'17\',\'R\').1b().$.4=\'H-L L\';E.T.V().1f(\'17\',\'1h\').1b().$.4=\'H-26\';b M=\' <5> \';l((/\\u 6/.s(r.v)||/\\u 7/.s(r.v)||/\\u 8/.s(r.v)||/\\u 9/.s(r.v))&&!U.1t){M+=\' \'}J{M+=\'\'}M+=\' <5> <5> <5> <5> \';l((/\\u 6/.s(r.v)||/\\u 7/.s(r.v)||/\\u 8/.s(r.v)||/\\u 9/.s(r.v))&&!U.1t){M+=\' \'}J{M+=\'\'}M+=\' <5> <5> <5> <5> \';l((/\\u 6/.s(r.v)||/\\u 7/.s(r.v)||/\\u 8/.s(r.v)||/\\u 9/.s(r.v))&&!U.1t){M+=\' \'}J{M+=\'\'}M+=\' <5> <5> <5> \';f.a(\'p\')[0].1X=M}}}]},{1a:\'17\',1I:m.y.k.2Z,2j:[{j:\'30\',d:[{j:\'2E\',1a:\'R\',2x:\'1c:2u\',1I:m.y.k.34,2t:\'2s\',2r:\'2q:2p; 2n-2g:2f; 2e-23:.2d\',2c:[\'25%\',\'2M%\'],1V:[[m.y.k.1T,\'H-L L\'],[m.y.k.27,\'H-L L 1E\']]},{j:\'2E\',1a:\'1h\',2x:\'1c:2u\',1I:m.y.k.3i,2t:\'2s\',2r:\'2q:2p; 2n-2g:2f; 2e-23:.2d\',2c:[\'25%\',\'2M%\'],1V:[[m.y.k.26,\'H-26\'],[m.y.k.2K,\'H-2K\'],[m.y.k.2F,\'H-2F\'],[m.y.k.2D,\'H-2D\'],[m.y.k.2i,\'H-2i\'],[m.y.k.2B,\'H-2B\']]}]}]}],3o:A(){1z=16.2z(\'3q\');1z.j=\'1k/3r\';1z.3s=E.1n.1j(\'k\')+\'2J/3u.3v.2J\';1z.1l=\'1q\';16.3w.2A(1z);1e(b 1w=0;1w + * @license MIT + */ + + +(function (factory) { + "use strict"; + + if (typeof define === "function" && define.amd) { + define(factory); + } + else if (typeof module != "undefined" && typeof module.exports != "undefined") { + module.exports = factory(); + } + else if (typeof Package !== "undefined") { + Sortable = factory(); // export for Meteor.js + } + else { + /* jshint sub:true */ + window["Sortable"] = factory(); + } +})(function () { + "use strict"; + + var dragEl, + parentEl, + ghostEl, + cloneEl, + rootEl, + nextEl, + + scrollEl, + scrollParentEl, + + lastEl, + lastCSS, + lastParentCSS, + + oldIndex, + newIndex, + + activeGroup, + autoScroll = {}, + + tapEvt, + touchEvt, + + moved, + + /** @const */ + RSPACE = /\s+/g, + + expando = 'Sortable' + (new Date).getTime(), + + win = window, + document = win.document, + parseInt = win.parseInt, + + supportDraggable = !!('draggable' in document.createElement('div')), + supportCssPointerEvents = (function (el) { + el = document.createElement('x'); + el.style.cssText = 'pointer-events:auto'; + return el.style.pointerEvents === 'auto'; + })(), + + _silent = false, + + abs = Math.abs, + slice = [].slice, + + touchDragOverListeners = [], + + _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (rootEl && options.scroll) { + var el, + rect, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + + x = evt.clientX, + y = evt.clientY, + + winWidth = window.innerWidth, + winHeight = window.innerHeight, + + vx, + vy + ; + + // Delect scrollEl + if (scrollParentEl !== rootEl) { + scrollEl = options.scroll; + scrollParentEl = rootEl; + + if (scrollEl === true) { + scrollEl = rootEl; + + do { + if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || + (scrollEl.offsetHeight < scrollEl.scrollHeight) + ) { + break; + } + /* jshint boss:true */ + } while (scrollEl = scrollEl.parentNode); + } + } + + if (scrollEl) { + el = scrollEl; + rect = scrollEl.getBoundingClientRect(); + vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); + vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); + } + + + if (!(vx || vy)) { + vx = (winWidth - x <= sens) - (x <= sens); + vy = (winHeight - y <= sens) - (y <= sens); + + /* jshint expr:true */ + (vx || vy) && (el = win); + } + + + if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { + autoScroll.el = el; + autoScroll.vx = vx; + autoScroll.vy = vy; + + clearInterval(autoScroll.pid); + + if (el) { + autoScroll.pid = setInterval(function () { + if (el === win) { + win.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed); + } else { + vy && (el.scrollTop += vy * speed); + vx && (el.scrollLeft += vx * speed); + } + }, 24); + } + } + } + }, 30), + + _prepareGroup = function (options) { + var group = options.group; + + if (!group || typeof group != 'object') { + group = options.group = {name: group}; + } + + ['pull', 'put'].forEach(function (key) { + if (!(key in group)) { + group[key] = true; + } + }); + + options.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' '; + } + ; + + + + /** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ + function Sortable(el, options) { + if (!(el && el.nodeType && el.nodeType === 1)) { + throw 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el); + } + + this.el = el; // root element + this.options = options = _extend({}, options); + + + // Export instance + el[expando] = this; + + + // Default options + var defaults = { + group: Math.random(), + sort: true, + disabled: false, + store: null, + handle: null, + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', + ghostClass: 'sortable-ghost', + chosenClass: 'sortable-chosen', + ignore: 'a, img', + filter: null, + animation: 0, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData('Text', dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: 'data-id', + delay: 0, + forceFallback: false, + fallbackClass: 'sortable-fallback', + fallbackOnBody: false + }; + + + // Set default options + for (var name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + _prepareGroup(options); + + // Bind all private methods + for (var fn in this) { + if (fn.charAt(0) === '_') { + this[fn] = this[fn].bind(this); + } + } + + // Setup drag mode + this.nativeDraggable = options.forceFallback ? false : supportDraggable; + + // Bind events + _on(el, 'mousedown', this._onTapStart); + _on(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _on(el, 'dragover', this); + _on(el, 'dragenter', this); + } + + touchDragOverListeners.push(this._onDragOver); + + // Restore sorting + options.store && this.sort(options.store.get(this)); + } + + + Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _onTapStart: function (/** Event|TouchEvent */evt) { + var _this = this, + el = this.el, + options = this.options, + type = evt.type, + touch = evt.touches && evt.touches[0], + target = (touch || evt).target, + originalTarget = target, + filter = options.filter; + + + if (type === 'mousedown' && evt.button !== 0 || options.disabled) { + return; // only left button or enabled + } + + target = _closest(target, options.draggable, el); + + if (!target) { + return; + } + + // get the index of the dragged element within its parent + oldIndex = _index(target); + + // Check filter + if (typeof filter === 'function') { + if (filter.call(this, evt, target, this)) { + _dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex); + evt.preventDefault(); + return; // cancel dnd + } + } + else if (filter) { + filter = filter.split(',').some(function (criteria) { + criteria = _closest(originalTarget, criteria.trim(), el); + + if (criteria) { + _dispatchEvent(_this, criteria, 'filter', target, el, oldIndex); + return true; + } + }); + + if (filter) { + evt.preventDefault(); + return; // cancel dnd + } + } + + + if (options.handle && !_closest(originalTarget, options.handle, el)) { + return; + } + + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target); + }, + + _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) { + var _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && (target.parentNode === el)) { + tapEvt = evt; + + rootEl = el; + dragEl = target; + parentEl = dragEl.parentNode; + nextEl = dragEl.nextSibling; + activeGroup = options.group; + + dragStartFn = function () { + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDrag(); + + // Make the element draggable + dragEl.draggable = true; + + // Chosen item + _toggleClass(dragEl, _this.options.chosenClass, true); + + // Bind the events: dragstart/dragend + _this._triggerDragStart(touch); + }; + + // Disable "draggable" + options.ignore.split(',').forEach(function (criteria) { + _find(dragEl, criteria.trim(), _disableDraggable); + }); + + _on(ownerDocument, 'mouseup', _this._onDrop); + _on(ownerDocument, 'touchend', _this._onDrop); + _on(ownerDocument, 'touchcancel', _this._onDrop); + + if (options.delay) { + // If the user moves the pointer or let go the click or touch + // before the delay has been reached: + // disable the delayed drag + _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); + _on(ownerDocument, 'touchend', _this._disableDelayedDrag); + _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); + _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); + _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _disableDelayedDrag: function () { + var ownerDocument = this.el.ownerDocument; + + clearTimeout(this._dragStartTimer); + _off(ownerDocument, 'mouseup', this._disableDelayedDrag); + _off(ownerDocument, 'touchend', this._disableDelayedDrag); + _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); + _off(ownerDocument, 'mousemove', this._disableDelayedDrag); + _off(ownerDocument, 'touchmove', this._disableDelayedDrag); + }, + + _triggerDragStart: function (/** Touch */touch) { + if (touch) { + // Touch device support + tapEvt = { + target: dragEl, + clientX: touch.clientX, + clientY: touch.clientY + }; + + this._onDragStart(tapEvt, 'touch'); + } + else if (!this.nativeDraggable) { + this._onDragStart(tapEvt, true); + } + else { + _on(dragEl, 'dragend', this); + _on(rootEl, 'dragstart', this._onDragStart); + } + + try { + if (document.selection) { + document.selection.empty(); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) { + } + }, + + _dragStarted: function () { + if (rootEl && dragEl) { + // Apply effect + _toggleClass(dragEl, this.options.ghostClass, true); + + Sortable.active = this; + + // Drag start event + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); + } + }, + + _emulateDragOver: function () { + if (touchEvt) { + if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) { + return; + } + + this._lastX = touchEvt.clientX; + this._lastY = touchEvt.clientY; + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', 'none'); + } + + var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), + parent = target, + groupName = ' ' + this.options.group.name + '', + i = touchDragOverListeners.length; + + if (parent) { + do { + if (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) { + while (i--) { + touchDragOverListeners[i]({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent + }); + } + + break; + } + + target = parent; // store last element + } + /* jshint boss:true */ + while (parent = parent.parentNode); + } + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', ''); + } + } + }, + + + _onTouchMove: function (/**TouchEvent*/evt) { + if (tapEvt) { + // only set the status to dragging, when we are actually dragging + if (!Sortable.active) { + this._dragStarted(); + } + + // as well as creating the ghost element on the document body + this._appendGhost(); + + var touch = evt.touches ? evt.touches[0] : evt, + dx = touch.clientX - tapEvt.clientX, + dy = touch.clientY - tapEvt.clientY, + translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; + + moved = true; + touchEvt = touch; + + _css(ghostEl, 'webkitTransform', translate3d); + _css(ghostEl, 'mozTransform', translate3d); + _css(ghostEl, 'msTransform', translate3d); + _css(ghostEl, 'transform', translate3d); + + evt.preventDefault(); + } + }, + + _appendGhost: function () { + if (!ghostEl) { + var rect = dragEl.getBoundingClientRect(), + css = _css(dragEl), + options = this.options, + ghostRect; + + ghostEl = dragEl.cloneNode(true); + + _toggleClass(ghostEl, options.ghostClass, false); + _toggleClass(ghostEl, options.fallbackClass, true); + + _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); + _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); + _css(ghostEl, 'width', rect.width); + _css(ghostEl, 'height', rect.height); + _css(ghostEl, 'opacity', '0.8'); + _css(ghostEl, 'position', 'fixed'); + _css(ghostEl, 'zIndex', '100000'); + _css(ghostEl, 'pointerEvents', 'none'); + + options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); + + // Fixing dimensions. + ghostRect = ghostEl.getBoundingClientRect(); + _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); + _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); + } + }, + + _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { + var dataTransfer = evt.dataTransfer, + options = this.options; + + this._offUpEvents(); + + if (activeGroup.pull == 'clone') { + cloneEl = dragEl.cloneNode(true); + _css(cloneEl, 'display', 'none'); + rootEl.insertBefore(cloneEl, dragEl); + } + + if (useFallback) { + + if (useFallback === 'touch') { + // Bind touch events + _on(document, 'touchmove', this._onTouchMove); + _on(document, 'touchend', this._onDrop); + _on(document, 'touchcancel', this._onDrop); + } else { + // Old brwoser + _on(document, 'mousemove', this._onTouchMove); + _on(document, 'mouseup', this._onDrop); + } + + this._loopId = setInterval(this._emulateDragOver, 50); + } + else { + if (dataTransfer) { + dataTransfer.effectAllowed = 'move'; + options.setData && options.setData.call(this, dataTransfer, dragEl); + } + + _on(document, 'drop', this); + setTimeout(this._dragStarted, 0); + } + }, + + _onDragOver: function (/**Event*/evt) { + var el = this.el, + target, + dragRect, + revert, + options = this.options, + group = options.group, + groupPut = group.put, + isOwner = (activeGroup === group), + canSort = options.sort; + + if (evt.preventDefault !== void 0) { + evt.preventDefault(); + !options.dragoverBubble && evt.stopPropagation(); + } + + moved = true; + + if (activeGroup && !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : activeGroup.pull && groupPut && ( + (activeGroup.name === group.name) || // by Name + (groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array + ) + ) && + (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback + ) { + // Smart auto-scrolling + _autoScroll(evt, options, this.el); + + if (_silent) { + return; + } + + target = _closest(evt.target, options.draggable, el); + dragRect = dragEl.getBoundingClientRect(); + + if (revert) { + _cloneHide(true); + + if (cloneEl || nextEl) { + rootEl.insertBefore(dragEl, cloneEl || nextEl); + } + else if (!canSort) { + rootEl.appendChild(dragEl); + } + + return; + } + + + if ((el.children.length === 0) || (el.children[0] === ghostEl) || + (el === evt.target) && (target = _ghostIsLast(el, evt)) + ) { + + if (target) { + if (target.animated) { + return; + } + + targetRect = target.getBoundingClientRect(); + } + + _cloneHide(isOwner); + + if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) { + if (!dragEl.contains(el)) { + el.appendChild(dragEl); + parentEl = el; // actualization + } + + this._animate(dragRect, dragEl); + target && this._animate(targetRect, target); + } + } + else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { + if (lastEl !== target) { + lastEl = target; + lastCSS = _css(target); + lastParentCSS = _css(target.parentNode); + } + + + var targetRect = target.getBoundingClientRect(), + width = targetRect.right - targetRect.left, + height = targetRect.bottom - targetRect.top, + floating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display) + || (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0), + isWide = (target.offsetWidth > dragEl.offsetWidth), + isLong = (target.offsetHeight > dragEl.offsetHeight), + halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, + nextSibling = target.nextElementSibling, + moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect), + after + ; + + if (moveVector !== false) { + _silent = true; + setTimeout(_unsilent, 30); + + _cloneHide(isOwner); + + if (moveVector === 1 || moveVector === -1) { + after = (moveVector === 1); + } + else if (floating) { + var elTop = dragEl.offsetTop, + tgTop = target.offsetTop; + + if (elTop === tgTop) { + after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; + } else { + after = tgTop > elTop; + } + } else { + after = (nextSibling !== dragEl) && !isLong || halfway && isLong; + } + + if (!dragEl.contains(el)) { + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore(dragEl, after ? nextSibling : target); + } + } + + parentEl = dragEl.parentNode; // actualization + + this._animate(dragRect, dragEl); + this._animate(targetRect, target); + } + } + } + }, + + _animate: function (prevRect, target) { + var ms = this.options.animation; + + if (ms) { + var currentRect = target.getBoundingClientRect(); + + _css(target, 'transition', 'none'); + _css(target, 'transform', 'translate3d(' + + (prevRect.left - currentRect.left) + 'px,' + + (prevRect.top - currentRect.top) + 'px,0)' + ); + + target.offsetWidth; // repaint + + _css(target, 'transition', 'all ' + ms + 'ms'); + _css(target, 'transform', 'translate3d(0,0,0)'); + + clearTimeout(target.animated); + target.animated = setTimeout(function () { + _css(target, 'transition', ''); + _css(target, 'transform', ''); + target.animated = false; + }, ms); + } + }, + + _offUpEvents: function () { + var ownerDocument = this.el.ownerDocument; + + _off(document, 'touchmove', this._onTouchMove); + _off(ownerDocument, 'mouseup', this._onDrop); + _off(ownerDocument, 'touchend', this._onDrop); + _off(ownerDocument, 'touchcancel', this._onDrop); + }, + + _onDrop: function (/**Event*/evt) { + var el = this.el, + options = this.options; + + clearInterval(this._loopId); + clearInterval(autoScroll.pid); + clearTimeout(this._dragStartTimer); + + // Unbind events + _off(document, 'mousemove', this._onTouchMove); + + if (this.nativeDraggable) { + _off(document, 'drop', this); + _off(el, 'dragstart', this._onDragStart); + } + + this._offUpEvents(); + + if (evt) { + if (moved) { + evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + } + + ghostEl && ghostEl.parentNode.removeChild(ghostEl); + + if (dragEl) { + if (this.nativeDraggable) { + _off(dragEl, 'dragend', this); + } + + _disableDraggable(dragEl); + + // Remove class's + _toggleClass(dragEl, this.options.ghostClass, false); + _toggleClass(dragEl, this.options.chosenClass, false); + + if (rootEl !== parentEl) { + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag from one list and drop into another + _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + + // Add event + _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); + + // Remove event + _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); + } + } + else { + // Remove clone + cloneEl && cloneEl.parentNode.removeChild(cloneEl); + + if (dragEl.nextSibling !== nextEl) { + // Get the index of the dragged element within its parent + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag & drop within the same list + _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + } + } + } + + if (Sortable.active) { + if (newIndex === null || newIndex === -1) { + newIndex = oldIndex; + } + + _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); + + // Save sorting + this.save(); + } + } + + // Nulling + rootEl = + dragEl = + parentEl = + ghostEl = + nextEl = + cloneEl = + + scrollEl = + scrollParentEl = + + tapEvt = + touchEvt = + + moved = + newIndex = + + lastEl = + lastCSS = + + activeGroup = + Sortable.active = null; + } + }, + + + handleEvent: function (/**Event*/evt) { + var type = evt.type; + + if (type === 'dragover' || type === 'dragenter') { + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + } + else if (type === 'drop' || type === 'dragend') { + this._onDrop(evt); + } + }, + + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + var order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (_closest(el, options.draggable, this.el)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + var items = {}, rootEl = this.el; + + this.toArray().forEach(function (id, i) { + var el = rootEl.children[i]; + + if (_closest(el, this.options.draggable, rootEl)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + + /** + * Save the current sorting + */ + save: function () { + var store = this.options.store; + store && store.set(this); + }, + + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return _closest(el, selector || this.options.draggable, this.el); + }, + + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + var options = this.options; + + if (value === void 0) { + return options[name]; + } else { + options[name] = value; + + if (name === 'group') { + _prepareGroup(options); + } + } + }, + + + /** + * Destroy + */ + destroy: function () { + var el = this.el; + + el[expando] = null; + + _off(el, 'mousedown', this._onTapStart); + _off(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _off(el, 'dragover', this); + _off(el, 'dragenter', this); + } + + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { + el.removeAttribute('draggable'); + }); + + touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); + + this._onDrop(); + + this.el = el = null; + } + }; + + + function _cloneHide(state) { + if (cloneEl && (cloneEl.state !== state)) { + _css(cloneEl, 'display', state ? 'none' : ''); + !state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl); + cloneEl.state = state; + } + } + + + function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { + if (el) { + ctx = ctx || document; + selector = selector.split('.'); + + var tag = selector.shift().toUpperCase(), + re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); + + do { + if ( + (tag === '>*' && el.parentNode === ctx) || ( + (tag === '' || el.nodeName.toUpperCase() == tag) && + (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) + ) + ) { + return el; + } + } + while (el !== ctx && (el = el.parentNode)); + } + + return null; + } + + + function _globalDragOver(/**Event*/evt) { + if (evt.dataTransfer) { + evt.dataTransfer.dropEffect = 'move'; + } + evt.preventDefault(); + } + + + function _on(el, event, fn) { + el.addEventListener(event, fn, false); + } + + + function _off(el, event, fn) { + el.removeEventListener(event, fn, false); + } + + + function _toggleClass(el, name, state) { + if (el) { + if (el.classList) { + el.classList[state ? 'add' : 'remove'](name); + } + else { + var className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' '); + el.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' '); + } + } + } + + + function _css(el, prop, val) { + var style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ''); + } + else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } + else { + if (!(prop in style)) { + prop = '-webkit-' + prop; + } + + style[prop] = val + (typeof val === 'string' ? '' : 'px'); + } + } + } + + + function _find(ctx, tagName, iterator) { + if (ctx) { + var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; + } + + + + function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { + var evt = document.createEvent('Event'), + options = (sortable || rootEl[expando]).options, + onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); + + evt.initEvent(name, true, true); + + evt.to = rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = startIndex; + evt.newIndex = newIndex; + + rootEl.dispatchEvent(evt); + + if (options[onName]) { + options[onName].call(sortable, evt); + } + } + + + function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) { + var evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + + evt = document.createEvent('Event'); + evt.initEvent('move', true, true); + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + evt.relatedRect = targetRect || toEl.getBoundingClientRect(); + + fromEl.dispatchEvent(evt); + + if (onMoveFn) { + retVal = onMoveFn.call(sortable, evt); + } + + return retVal; + } + + + function _disableDraggable(el) { + el.draggable = false; + } + + + function _unsilent() { + _silent = false; + } + + + /** @returns {HTMLElement|false} */ + function _ghostIsLast(el, evt) { + var lastEl = el.lastElementChild, + rect = lastEl.getBoundingClientRect(); + + return ((evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.right + rect.width) > 5)) && lastEl; // min delta + } + + + /** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ + function _generateId(el) { + var str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); + } + + /** + * Returns the index of an element within its parent + * @param {HTMLElement} el + * @return {number} + */ + function _index(el) { + var index = 0; + + if (!el || !el.parentNode) { + return -1; + } + + while (el && (el = el.previousElementSibling)) { + if (el.nodeName.toUpperCase() !== 'TEMPLATE') { + index++; + } + } + + return index; + } + + function _throttle(callback, ms) { + var args, _this; + + return function () { + if (args === void 0) { + args = arguments; + _this = this; + + setTimeout(function () { + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + args = void 0; + }, ms); + } + }; + } + + function _extend(dst, src) { + if (dst && src) { + for (var key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; + } + + + // Export utils + Sortable.utils = { + on: _on, + off: _off, + css: _css, + find: _find, + is: function (el, selector) { + return !!_closest(el, selector, el); + }, + extend: _extend, + throttle: _throttle, + closest: _closest, + toggleClass: _toggleClass, + index: _index + }; + + + /** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ + Sortable.create = function (el, options) { + return new Sortable(el, options); + }; + + + // Export + Sortable.version = '1.4.2'; + return Sortable; +}); + +var bar = bootstrapCollapse_wrapper.children[0].children[1]; +bootstrapCollapse_sort = Sortable.create(bar, { + animation : '150', + handle : '.bootstrapCollapse_move' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/af.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/af.js new file mode 100644 index 0000000..a2fc9cd --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/af.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'af', {//afrikaans + plugin : 'Bootstrap Ineenstorting', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML Word Toegelaat', + addNewItem : 'Voeg Nuwe Item', + minimum : 'Plugin moet ten minste 1 item bevat', + link : 'Link', + style : 'Style', + type : 'Tipe', + size : 'Grootte', + blockLevel : 'Blok Vlak', + active : 'Aktiewe', + enabled : 'In Staat Gestel Om', + text : 'Teks', + preview : 'Voorskou', + optional : 'Opsionele', + badge : 'Badge', + caption : 'Onderskrif', + image : 'Image', + delete : 'Is jy seker jy wil hierdie item uitvee?', + items : 'Items', + settings : 'Instellings', + expandFirstItem : 'Uit Te Brei Eerste Punt', + yes : 'Ja', + no : 'Geen', + theme : 'Tema', + default : 'Standaard', + primary : 'primary', + success : 'Sukses', + info : 'Info', + warning : 'Waarskuwing', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ar.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ar.js new file mode 100644 index 0000000..c9ea650 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ar.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ar', { //arabic + plugin : 'التمهيد إلغاء', + title : 'لقب', + content : 'مضمون', + htmlIsAllowed : 'يسمح HTML', + addNewItem : 'إضافة عنصر جديد', + minimum : 'يجب أن يحتوي على البرنامج المساعد على الأقل 1 البند', + link : 'صلة', + style : 'أسلوب', + type : 'نوع', + size : 'حجم', + blockLevel : 'كتلة المستوى', + active : 'نشط', + enabled : 'تمكين', + text : 'نص', + preview : 'معاينة', + optional : 'اختياري', + badge : 'شارة', + caption : 'شرح', + image : 'صورة', + delete : 'هل أنت متأكد أنك تريد حذف هذا البند؟', + items : 'العناصر', + settings : 'إعدادات', + expandFirstItem : 'توسيع البند الأول', + yes : 'نعم فعلا', + no : 'لا', + theme : 'موضوع', + default : 'افتراضي', + primary : 'primary', + success : 'نجاح', + info : 'معلومات', + warning : 'تحذير', + danger : 'خطر' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/bg.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bg.js new file mode 100644 index 0000000..097870b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bg.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'bg', {//bulgarian + plugin : 'Bootstrap Collapse', + title : 'заглавие', + content : 'съдържание', + htmlIsAllowed : 'HTML е позволено', + addNewItem : 'Нова позиция', + minimum : 'Plugin трябва да съдържа най-малко 1 брой', + link : 'връзка', + style : 'стил', + type : 'тип', + size : 'размер', + blockLevel : 'Block Level', + active : 'активен', + enabled : 'Enabled', + text : 'текст', + preview : 'предварителен преглед', + optional : 'по избор', + badge : 'значка', + caption : 'Надпис', + image : 'изображение', + delete : 'Сигурни ли сте, че искате да изтриете този елемент?', + items : 'Предмети', + settings : 'Настройки', + expandFirstItem : 'Разширете Първа Точка', + yes : 'Да', + no : 'Не', + theme : 'Тема', + default : 'По Подразбиране', + primary : 'primary', + success : 'Успех', + info : 'Информация', + warning : 'Внимание', + danger : 'Опасност' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/bn.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bn.js new file mode 100644 index 0000000..4e1a4c3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bn.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'bn', {//bengali + plugin : 'বুটস্ট্র্যাপ প্রত্যুত্তর', + title : 'খেতাব', + content : 'বিষয়বস্তু', + htmlIsAllowed : 'এইচটিএমএল অনুমতি দেওয়া হয়', + addNewItem : 'নতুন আইটেম যোগ করুন', + minimum : 'প্লাগইন অন্তত 1 আইটেম ধারণ করতে হবে', + link : 'লিংক', + style : 'শৈলী', + type : 'আদর্শ', + size : 'আয়তন', + blockLevel : 'ব্লক শ্রেনী', + active : 'সক্রিয়', + enabled : 'সক্রিয়', + text : 'পাঠ', + preview : 'সম্পূর্ণ বিবরণের পূর্বরূপ দেখুন', + optional : 'ঐচ্ছিক', + badge : 'ব্যাজ', + caption : 'ক্যাপশন', + image : 'ভাবমূর্তি', + delete : 'আপনি এই আইটেমটি মুছে ফেলতে চান আপনি কি নিশ্চিত?', + items : 'আইটেম', + settings : 'সেটিংস', + expandFirstItem : 'প্রথম আইটেম সম্প্রসারণ', + yes : 'হাঁ', + no : 'না', + theme : 'বিষয়', + default : 'ডিফল্ট', + primary : 'primary', + success : 'সাফল্য', + info : 'তথ্য', + warning : 'সতর্কতা', + danger : 'ঝুঁকি' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/bs.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bs.js new file mode 100644 index 0000000..19f3a22 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/bs.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'bs', {//bosnian + plugin : 'Bootstrap Collapse', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML je dozvoljeno', + addNewItem : 'Dodaj Novi Item', + minimum : 'Plugin mora sadržavati najmanje 1 stavka', + link : 'Link', + style : 'Stil', + type : 'Tip', + size : 'Veličina', + blockLevel : 'Blok Level', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Preview', + optional : 'Neobavezan', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?', + items : 'Predmeti', + settings : 'Postavke', + expandFirstItem : 'Proširi Prva Stavka', + yes : 'Da', + no : 'Ne', + theme : 'Tema', + default : 'Uobičajeno', + primary : 'primary', + success : 'Uspjeh', + info : 'Info', + warning : 'Upozorenje', + danger : 'Opasnost' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ca.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ca.js new file mode 100644 index 0000000..dbc0cdb --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ca.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ca', {//catalan + plugin : 'Bootstrap Collapse', + title : 'Títol', + content : 'Contingut', + htmlIsAllowed : 'HTML és Permès', + addNewItem : 'Afegir Nou Element', + minimum : 'Plugin ha de contenir almenys 1 membre', + link : 'Enllaç', + style : 'Estil', + type : 'Tipus', + size : 'Mida', + blockLevel : 'Nivell De Bloc', + active : 'Actiu', + enabled : 'Activat', + text : 'Text', + preview : 'Preestrena', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítol', + image : 'Imatge', + delete : 'Segur que vols esborrar aquest article?', + items : 'Articles', + settings : 'Ajustos', + expandFirstItem : 'Ampliar El Primer Article', + yes : 'Si', + no : 'No', + theme : 'Tema', + default : 'Defecte', + primary : 'primary', + success : 'Èxit', + info : 'Informació', + warning : 'Advertència', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/cs.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/cs.js new file mode 100644 index 0000000..a3d7d74 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/cs.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'cs', {//czech + plugin : 'Bootstrap Collapse', + title : 'název', + content : 'obsah', + htmlIsAllowed : 'HTML Je Povoleno', + addNewItem : 'Přidat Novou Položku', + minimum : 'Plugin musí obsahovat alespoň 1 položka', + link : 'Odkaz', + style : 'Styl', + type : 'Typ', + size : 'Velikost', + blockLevel : 'Block Level', + active : 'Aktivní', + enabled : 'Povoleno', + text : 'Text', + preview : 'Preview', + optional : 'Volitelný', + badge : 'Odznak', + caption : 'Titulek', + image : 'Obraz', + delete : 'Jste si jisti, že chcete tuto položku smazat?', + items : 'Předměty', + settings : 'Nastavení', + expandFirstItem : 'Rozbalit První Položka', + yes : 'Ano', + no : 'Ne', + theme : 'Téma', + default : 'Standardní', + primary : 'primary', + success : 'Úspěch', + info : 'Informace', + warning : 'Varování', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/cy.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/cy.js new file mode 100644 index 0000000..d0087ac --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/cy.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'cy', {//welsh + plugin : 'Collapse Bootstrap', + title : 'Teitl', + content : 'cynnwys', + htmlIsAllowed : 'HTML Yn Cael Ei Allowed', + addNewItem : 'Ychwanegu Eitem Newydd', + minimum : 'Rhaid ategyn gynnwys o leiaf 1 eitem', + link : 'Cyswllt', + style : 'Arddull', + type : 'Math', + size : 'Maint', + blockLevel : 'Bloc Lefel', + active : 'Active', + enabled : 'Galluogwyd', + text : 'Testun', + preview : 'Rhagolwg', + optional : 'Dewisol', + badge : 'Bathodyn', + caption : 'Geiriad', + image : 'Delwedd', + delete : 'Ydych chi\'n siŵr eich bod am ddileu\'r eitem hon?', + items : 'Eitemau', + settings : 'Gosodiadau', + expandFirstItem : 'Expand Eitem Cyntaf', + yes : 'Ydw', + no : 'Nac Oes', + theme : 'Thema', + default : 'Default', + primary : 'primary', + success : 'Llwyddiant', + info : 'Gwybodaeth', + warning : 'Rhybudd', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/da.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/da.js new file mode 100644 index 0000000..fef0ea2 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/da.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'da', {//danish + plugin : 'Bootstrap Collapse', + title : 'Titel', + content : 'Indhold', + htmlIsAllowed : 'HTML er tilladt', + addNewItem : 'Tilføj nyt element', + minimum : 'Plugin skal indeholde mindst 1 emne', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiveret', + text : 'Tekst', + preview : 'Eksempel', + optional : 'Valgfri', + badge : 'Badge', + caption : 'Caption', + image : 'Billede', + delete : 'Er du sikker på du vil slette denne genstand?', + items : 'Elementer', + settings : 'Indstillinger', + expandFirstItem : 'Udvid Første Punkt', + yes : 'Ja', + no : 'Ingen', + theme : 'Tema', + default : 'Misligholdelse', + primary : 'primary', + success : 'Succes', + info : 'Info', + warning : 'Advarsel', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/de.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/de.js new file mode 100644 index 0000000..d490f2e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/de.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'de', {//german + plugin : 'Bootstrap Collapse', + title : 'Titel', + content : 'Inhalt', + htmlIsAllowed : 'HTML ist erlaubt', + addNewItem : 'Neues Element hinzufügen', + minimum : 'Plugin muss mindestens 1 Artikel enthalten', + link : 'Link', + style : 'Stil', + type : 'Art', + size : 'Größe', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiviert', + text : 'Text', + preview : 'Vorschau', + optional : 'Fakultativ', + badge : 'Abzeichen', + caption : 'Bildunterschrift', + image : 'Bild', + delete : 'Sind Sie sicher, Sie wollen diesen Inhalt löschen?', + items : 'Artikel', + settings : 'Einstellungen', + expandFirstItem : 'Erweitern Sie Erste Artikel', + yes : 'Ja', + no : 'Nein', + theme : 'Thema', + default : 'Standard', + primary : 'primary', + success : 'Erfolg', + info : 'Info', + warning : 'Warnung', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/el.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/el.js new file mode 100644 index 0000000..ad2c219 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/el.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'el', {//greek + plugin : 'Bootstrap κατάρρευση', + title : 'Τίτλος', + content : 'Περιεχόμενο', + htmlIsAllowed : 'Επιτρέπεται HTML κώδικας', + addNewItem : 'Προσθήκη νέου στοιχείου', + minimum : 'Το Plugin πρέπει να περιέχει τουλάχιστον 1 στοιχείο', + link : 'Σύνδεσμος', + style : 'Στυλ', + type : 'Τύπος', + size : 'Μέγεθος', + blockLevel : 'Block Επίπεδο', + active : 'Ενεργό', + enabled : 'Ενεργοποιήθηκε', + text : 'Κείμενο', + preview : 'Προεπισκόπηση', + optional : 'Προαιρετικό', + badge : 'Σήμα', + caption : 'Λεζάντα', + image : 'Εικόνα', + delete : 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το στοιχείο;', + items : 'Είδη', + settings : 'Ρυθμίσεις', + expandFirstItem : 'Αναπτύξτε Πρώτη Θέση', + yes : 'Ναί', + no : 'Όχι', + theme : 'Θέμα', + default : 'Αθέτηση', + primary : 'primary', + success : 'Επιτυχία', + info : 'Πληροφορίες', + warning : 'Προειδοποίηση', + danger : 'Dange' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-au.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-au.js new file mode 100644 index 0000000..18d3f17 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-au.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'en-au', { + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-ca.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-ca.js new file mode 100644 index 0000000..b000b38 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-ca.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'en-ca', { + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-gb.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-gb.js new file mode 100644 index 0000000..cfaee18 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en-gb.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'en-gb', { + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/en.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en.js new file mode 100644 index 0000000..bba309d --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/en.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'en', { + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/eo.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/eo.js new file mode 100644 index 0000000..5ce0a75 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/eo.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'eo', {//Esperanto + plugin : 'Bootstrap Kolapso', + title : 'titolo', + content : 'Enhavo', + htmlIsAllowed : 'HTML Estas Permesitaj', + addNewItem : 'Aldoni Novan Eron', + minimum : 'Plugin devas enhavi almenaŭ 1 ero', + link : 'Ligilo', + style : 'Stilo', + type : 'Tipo', + size : 'Grandeco', + blockLevel : 'Bloko-Nivelo', + active : 'Aktivaj', + enabled : 'Enabled', + text : 'Teksto', + preview : 'Antaŭrigardo', + optional : 'Laŭvola', + badge : 'Badge', + caption : 'Apudskribo', + image : 'Dosiero', + delete : 'Ĉu vi vere volas forigi tiun artikolon?', + items : 'Erojn', + settings : 'Agordoj', + expandFirstItem : 'Vastigi Unua Ero', + yes : 'Jes', + no : 'Neniu', + theme : 'Temo', + default : 'Default', + primary : 'Primaraj', + success : 'Sukceso', + info : 'Info', + warning : 'Averto', + danger : 'Danĝero' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/es.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/es.js new file mode 100644 index 0000000..d4360ad --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/es.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'es', {//spanish + plugin : 'Bootstrap Collapse', + title : 'título', + content : 'Eontenido', + htmlIsAllowed : 'HTML Es Permitido', + addNewItem : 'Agregar Nuevo Elemento', + minimum : 'Plugin debe contener al menos 1 artículo', + link : 'Enlace', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Nivel De Bloque', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Preestreno', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítulo', + image : 'Imagen', + delete : '¿Seguro que quieres borrar este artículo?', + items : 'Artículos', + settings : 'Ajustes', + expandFirstItem : 'Ampliar El Primer Artículo', + yes : 'Sí', + no : 'No', + theme : 'Tema', + default : 'Defecto', + primary : 'Primario', + success : 'Éxito', + info : 'Información', + warning : 'Advertencia', + danger : 'Peligro' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/et.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/et.js new file mode 100644 index 0000000..a1b6f3c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/et.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'et', {//estonian + plugin : 'Bootstrap Collapse', + title : 'Pealkiri', + content : 'Sisu', + htmlIsAllowed : 'HTML on lubatud', + addNewItem : 'Lisa uus üksus', + minimum : 'Plugin peab sisaldama vähemalt 1 kirje', + link : 'Link', + style : 'Stiil', + type : 'Ttüüp', + size : 'Suurus', + blockLevel : 'Block Level', + active : 'Aktiivne', + enabled : 'Lubatud', + text : 'Tekst', + preview : 'Eelvaade', + optional : 'Vabatahtlik', + badge : 'Rinnamärk', + caption : 'Pealkiri', + image : 'Pilt', + delete : 'Olete kindel, et soovite kustutada selle kirje?', + items : 'Esemed', + settings : 'Seaded', + expandFirstItem : 'Laienda Esimene Kirje', + yes : 'Jah', + no : 'Ei', + theme : 'Teema', + default : 'Vaikimisi', + primary : 'Esmane', + success : 'Edu', + info : 'Info', + warning : 'Hoiatus', + danger : 'Oht' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/eu.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/eu.js new file mode 100644 index 0000000..da65e03 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/eu.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'eu', {//Basque + plugin : 'Bootstrap Bildu', + title : 'Izenburua', + content : 'Edukia', + htmlIsAllowed : 'HTML onartzen da', + addNewItem : 'Gehitu Elementu berria', + minimum : 'Plugin gutxienez 1 elementua eduki behar', + link : 'Link', + style : 'Style', + type : 'Mota', + size : 'Tamaina', + blockLevel : 'Bloke Maila', + active : 'Aktiboak', + enabled : 'Gaituta', + text : 'Testua', + preview : 'Aurreikusi', + optional : 'Aukerako', + badge : 'Badge', + caption : 'Argazki-oina', + image : 'Image', + delete : 'Ziur zaude elementu hau ezabatu nahi duzula?', + items : 'Elementuak', + settings : 'Ezarpenak', + expandFirstItem : 'Zabaldu Lehen Elementua', + yes : 'Bai', + no : 'Ez', + theme : 'Gaia', + default : 'Default', + primary : 'Lehen', + success : 'Arrakasta', + info : 'Info', + warning : 'Abisua', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/fa.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fa.js new file mode 100644 index 0000000..0806e79 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fa.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'fa', {//Persian + plugin : 'بازتوییت بوت استرپ', + title : 'عنوان', + content : 'مقدار', + htmlIsAllowed : 'HTML مجاز است', + addNewItem : 'اضافه کردن آیتم جدید', + minimum : 'پلاگین باید حداقل 1 مورد شامل', + link : 'پیوند', + style : 'اندازه', + type : 'نوع', + size : 'اندازه', + blockLevel : 'بلوک سطح', + active : 'فعال', + enabled : 'فعال', + text : 'متن', + preview : 'پیش دید', + optional : 'اختیاری', + badge : 'نشان', + caption : 'عنوان', + image : 'تصویر', + delete : 'آیا شما مطمئن هستید که میخواهید این آیتم را حذف کنید؟', + items : 'موارد', + settings : 'تنظیمات', + expandFirstItem : 'گسترش گزینه اول', + yes : 'بله', + no : 'خیر', + theme : 'موضوع', + default : 'به طور پیش فرض', + primary : 'اولیه', + success : 'موفقیت', + info : 'اطلاعات', + warning : 'هشدار', + danger : 'خطر' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/fi.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fi.js new file mode 100644 index 0000000..19fcffe --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fi.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'fi', {//Finnish + plugin : 'Bootstrap Collapse', + title : 'Otsikko', + content : 'Pitoisuus', + htmlIsAllowed : 'HTML On Sallittu', + addNewItem : 'Lisää Uusi Osa', + minimum : 'Plugin on oltava vähintään 1 kohde', + link : 'Linkki', + style : 'Tyyli', + type : 'Tyyppi', + size : 'Koko', + blockLevel : 'Block Level', + active : 'Aktiivinen', + enabled : 'Käytössä', + text : 'Teksti', + preview : 'Preview', + optional : 'Valinnainen', + badge : 'Kunniamerkki', + caption : 'Kuvateksti', + image : 'Kuva', + delete : 'Oletko varma, että haluat poistaa tämän kohteen?', + items : 'Tuotteet', + settings : 'Asetukset', + expandFirstItem : 'Laajenna First Item', + yes : 'Kyllä', + no : 'Ei', + theme : 'Teema', + default : 'Oletusarvo', + primary : 'Ensisijainen', + success : 'Menestys', + info : 'Tiedot', + warning : 'Varoitus', + danger : 'Vaara' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/fo.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fo.js new file mode 100644 index 0000000..b722e04 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fo.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'fo', {//Faroese + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Stlye', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr-ca.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr-ca.js new file mode 100644 index 0000000..4f30818 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr-ca.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'fr-ca', {//french + plugin : 'Bootstrap Collapse', + title : 'Titre', + content : 'Content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?', + items : 'Articles', + settings : 'Paramètres', + expandFirstItem : 'Développez Premier Élément', + yes : 'Oui', + no : 'Non', + theme : 'Thème', + default : 'Défaut', + primary : 'Primaire', + success : 'Le Succès', + info : 'Info', + warning : 'Attention', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr.js new file mode 100644 index 0000000..6bcf57b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/fr.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'fr', {//french + plugin : 'Bootstrap Collapse', + title : 'Titre', + content : 'Content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?', + items : 'Articles', + settings : 'Paramètres', + expandFirstItem : 'Développez Premier Élément', + yes : 'Oui', + no : 'Non', + theme : 'Thème', + default : 'Défaut', + primary : 'Primaire', + success : 'Le Succès', + info : 'Info', + warning : 'Attention', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/gl.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/gl.js new file mode 100644 index 0000000..541624b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/gl.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'gl', {//Galician + plugin : 'Bootstrap Collapse', + title : 'Título', + content : 'Contido', + htmlIsAllowed : 'HTML se admite', + addNewItem : 'Add New Item', + minimum : 'Plugin debe conter polo menos 1 artigo', + link : 'Ligazón', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Bloque de Nivel', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Visualización', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imaxe', + delete : 'Está seguro de que quere eliminar este elemento?' + items : 'Elementos', + settings : 'Configuración', + expandFirstItem : 'Ampliar O Primeiro Elemento', + yes : 'Si', + no : 'Non', + theme : 'Tema', + default : 'Defecto', + primary : 'Fondo', + success : 'Éxito', + info : 'Información', + warning : 'Aviso', + danger : 'Perigo' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/gu.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/gu.js new file mode 100644 index 0000000..79e2afe --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/gu.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'gu', {//Gujarati + plugin : 'બુટસ્ટ્રેપ સંકુચિત', + title : 'શીર્ષક', + content : 'સામગ્રી', + htmlIsAllowed : 'એચટીએમએલ મંજૂર થયેલ', + addNewItem : 'ન્યૂ વસ્તુ ઉમેરો', + minimum : 'પ્લગઇન ઓછામાં ઓછા 1 આઇટમ હોવો જરૂરી છે', + link : 'લિંક', + style : 'પ્રકાર', + type : 'પ્રકાર', + size : 'કદ', + blockLevel : 'બ્લોક લેવલ', + active : 'સક્રિય', + enabled : 'જો સક્રિય', + text : 'લખાણ', + preview : 'પૂર્વાવલોકન', + optional : 'વૈકલ્પિક', + badge : 'બેજ', + caption : 'કૅપ્શન', + image : 'છબી', + delete : 'તમે આ આઇટમ કાઢી નાખવા માંગો તમે ખાતરી રહ્યાં છો?', + items : 'વસ્તુઓ', + settings : 'સેટિંગ્સ', + expandFirstItem : 'પ્રથમ વસ્તુ વિસ્તૃત', + yes : 'હા', + no : 'કોઈ', + theme : 'થીમ', + default : 'મૂળભૂત', + primary : 'પ્રાથમિક', + success : 'સફળતા', + info : 'માહિતી', + warning : 'ચેતવણી', + danger : 'ડેન્જર' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/he.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/he.js new file mode 100644 index 0000000..31aabd3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/he.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'he', {//hebrew + plugin : 'לצמצם Bootstrap', + title : 'כותרת', + content : 'תוכן', + htmlIsAllowed : 'HTML הוא מחמד', + addNewItem : 'הוסף פריט חדש', + minimum : 'תוסף חייב לכלול לפחות פריט 1', + link : 'קישור', + style : 'סגנון', + type : 'סוג', + size : 'גודל', + blockLevel : 'בלוק רמה', + active : 'פעיל', + enabled : 'מופעל', + text : 'טקסט', + preview : 'תצוגה מקדימה', + optional : 'אופציונאלי', + badge : 'תג', + caption : 'כיתוב', + image : 'תמונה', + delete : 'האם אתה בטוח שאתה רוצה למחוק פריט זה?', + items : 'פריטים', + settings : 'הגדרות', + expandFirstItem : 'להרחיב פריט ראשון', + yes : 'כן', + no : 'לא', + theme : 'נושא', + default : 'בְּרִירַת מֶחדָל', + primary : 'יְסוֹדִי', + success : 'הַצלָחָה', + info : 'מידע', + warning : 'אַזהָרָה', + danger : 'סַכָּנָה' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/hi.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hi.js new file mode 100644 index 0000000..a283ebd --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hi.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'hi', {//Hindi + plugin : 'बूटस्ट्रैप को संकुचित', + title : 'शीर्षक', + content : 'सामग्री', + htmlIsAllowed : 'एचटीएमएल अनुमति दी है', + addNewItem : 'नया आइटम जोड़ें', + minimum : 'प्लगइन कम से कम एक आइटम शामिल होना चाहिए', + link : 'लिंक', + style : 'अंदाज', + type : 'प्रकार', + size : 'आकार', + blockLevel : 'ब्लॉक स्तर', + active : 'सक्रिय', + enabled : 'सक्षम होना चाहिए', + text : 'टेक्स्ट', + preview : 'पूर्वावलोकन', + optional : 'ऐच्छिक', + badge : 'बिल्ला', + caption : 'शीर्षक', + image : 'छवि', + delete : 'क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?', + items : 'आइटम', + settings : 'सेटिंग्स', + expandFirstItem : 'पहले आइटम को विस्तृत', + yes : 'हाँ', + no : 'नहीं', + theme : 'विषय', + default : 'चूक', + primary : 'मुख्य', + success : 'सफलता', + info : 'जानकारी', + warning : 'चेतावनी', + danger : 'खतरा' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/hr.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hr.js new file mode 100644 index 0000000..6c2c0a4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hr.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'hr', {//Croatian + plugin : 'Bootstrap Kolaps', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML Dopušteno', + addNewItem : 'Dodaj Novu Stavku', + minimum : 'Plugin mora sadržavati najmanje 1 predmet', + link : 'Link', + style : 'Stil', + type : 'Vrsta', + size : 'Veličina', + blockLevel : 'Blok Razina', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Pregled', + optional : 'Izborni', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?', + items : 'Stavke', + settings : 'Postavke', + expandFirstItem : 'Proširite Prva Točka', + yes : 'Da', + no : 'Ne', + theme : 'Tema', + default : 'Zadano', + primary : 'Osnovni', + success : 'Uspjeh', + info : 'Info', + warning : 'Upozorenje', + danger : 'Opasnost' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/hu.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hu.js new file mode 100644 index 0000000..cb0fff7 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/hu.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'hu', {//Hungarian + plugin : 'Bootstrap Collapse', + title : 'Cím', + content : 'Tartalom', + htmlIsAllowed : 'HTML Engedélyezett', + addNewItem : 'Új elem hozzáadása', + minimum : 'Plugin tartalmaznia kell legalább 1 db', + link : 'Link', + style : 'Stílus', + type : 'Típus', + size : 'Méret', + blockLevel : 'Blokk Szintű', + active : 'Aktív', + enabled : 'Engedélyezve', + text : 'Szöveg', + preview : 'Preview', + optional : 'Választható', + badge : 'Jelvény', + caption : 'Képaláírás', + image : 'Kép', + delete : 'Biztos, hogy törölni szeretné ezt az elemet?' + items : 'Tételek', + settings : 'Beállítások', + expandFirstItem : 'Kibontása Első Elem', + yes : 'Igen', + no : 'Nem', + theme : 'Téma', + default : 'Alapértelmezett', + primary : 'Elsődleges', + success : 'Siker', + info : 'Info', + warning : 'Figyelem', + danger : 'Veszély' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/id.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/id.js new file mode 100644 index 0000000..947e9ed --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/id.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'id', {//Indonesian + plugin : 'Collapse Bootstrap', + title : 'Judul', + content : 'Kadar', + htmlIsAllowed : 'HTML Diizinkan', + addNewItem : 'Add New Item', + minimum : 'Plugin harus mengandung setidaknya 1 item', + link : 'Mata Rantai', + style : 'Gaya', + type : 'Jenis', + size : 'Ukuran', + blockLevel : 'Blok Tingkat', + active : 'Aktif', + enabled : 'Diaktifkan', + text : 'Teks', + preview : 'Preview', + optional : 'Opsional', + badge : 'Badge', + caption : 'Keterangan Gambar', + image : 'Gambar', + delete : 'Apakah Anda yakin ingin menghapus item ini?', + items : 'Item', + settings : 'Pengaturan', + expandFirstItem : 'Memperluas Barang Pertama', + yes : 'Iya Nih', + no : 'Tidak', + theme : 'Tema', + default : 'Kegagalan', + primary : 'Utama', + success : 'Keberhasilan', + info : 'Info', + warning : 'Peringatan', + danger : 'Bahaya' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/is.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/is.js new file mode 100644 index 0000000..ea5d56c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/is.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'is', {//Icelandic + plugin : 'ræsi Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML er Leyft', + addNewItem : 'Bæta Við Nýjum Lið', + minimum : 'Plugin verður að innihalda að minnsta kosti 1 atriði', + link : 'Link', + style : 'Style', + type : 'Gerð', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Virkt', + text : 'Texti', + preview : 'Preview', + optional : 'Valfrjálst', + badge : 'Badge', + caption : 'Caption', + image : 'Mynd', + delete : 'Ert þú viss um að þú viljir eyða þessu atriði?', + items : 'Atriði', + settings : 'Stillingar', + expandFirstItem : 'Stækka Fyrsta Atriðið', + yes : 'Já', + no : 'Engin', + theme : 'Þema', + default : 'Sjálfgefið', + primary : 'Primary', + success : 'Velgengni', + info : 'Upplýsingar', + warning : 'Viðvörun', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/it.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/it.js new file mode 100644 index 0000000..c2f5ab3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/it.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'it', {//Italian + plugin : 'Bootstrap Collapse', + title : 'Titolo', + content : 'Contenuto', + htmlIsAllowed : 'HTML è ammessi', + addNewItem : 'Aggiungi nuovo elemento', + minimum : 'Plugin deve contenere almeno 1 articolo', + link : 'Collegamento', + style : 'Stile', + type : 'Tipo', + size : 'Dimensione', + blockLevel : 'A Livello Di Blocco', + active : 'Attivo', + enabled : 'Abilitato', + text : 'Testo', + preview : 'Anteprima', + optional : 'Opzionale', + badge : 'Distintivo', + caption : 'Didascalia', + image : 'Immagine', + delete : 'Sei sicuro di voler eliminare questo articolo?', + items : 'Elementi', + settings : 'Impostazioni', + expandFirstItem : 'Espandere Primo Articolo', + yes : 'Sì', + no : 'No', + theme : 'Tema', + default : 'Predefinito', + primary : 'Primario', + success : 'Successo', + info : 'Informazioni', + warning : 'Avvertimento', + danger : 'Pericolo' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ja.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ja.js new file mode 100644 index 0000000..deb29e7 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ja.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ja', {//Japanese + plugin : 'ブートストラップ折りたたみます', + title : 'タイトル', + content : 'コンテンツ', + htmlIsAllowed : 'HTMLが許可されます', + addNewItem : '[新しい項目の追加', + minimum : 'プラグインは、少なくとも1つのアイテムを含んでいなければなりません', + link : 'リンク', + style : 'スタイル', + type : 'タイプ', + size : 'サイズ', + blockLevel : 'ブロックレベル', + active : 'アクティブ', + enabled : '使用可能', + text : 'テキスト', + preview : 'プレビュー', + optional : 'オプショナル', + badge : 'バッジ', + caption : 'キャプション', + image : '画像', + delete : 'あなたはこの項目を削除してもよろしいていますか?', + items : 'アイテム', + settings : '設定', + expandFirstItem : '最初のアイテムを展開', + yes : 'はい', + no : 'いいえ', + theme : 'テーマ', + default : 'デフォルト', + primary : 'プライマリー', + success : '成功', + info : 'インフォ', + warning : '警告', + danger : '危険' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ka.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ka.js new file mode 100644 index 0000000..e2d2767 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ka.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ka', {//Georgian + plugin : 'ჩატვირთვის Collapse', + title : 'სათაური', + content : 'შინაარსი', + htmlIsAllowed : 'HTML ნებადართულია', + addNewItem : 'სანიშნეს New Item', + minimum : 'მოდული უნდა შეიცავდეს მინიმუმ 1 ცალი', + link : 'ლინკი', + style : 'სტილი', + type : 'ტიპი', + size : 'ზომა', + blockLevel : 'Block დონე', + active : 'აქტიური', + enabled : 'ჩართულია', + text : 'ტექსტი', + preview : 'Preview', + optional : 'სურვილისამებრ', + badge : 'სამკერდე', + caption : 'წარწერა', + image : 'Image', + delete : 'დარწმუნებული ხართ, რომ გსურთ წაშალოთ ეს ნივთი?' + items : 'Items', + settings : 'პარამეტრები', + expandFirstItem : 'Expand პირველი პუნქტის', + yes : 'დიახ', + no : 'არარის', + theme : 'თემა', + default : 'Default', + primary : 'ძირითადი', + success : 'წარმატება', + info : 'ინფორმაცია', + warning : 'გაფრთხილება', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/km.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/km.js new file mode 100644 index 0000000..8271189 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/km.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'km', {//Khmer + plugin : 'ការដួលរលំចាប់ផ្ដើម', + title : 'ចំណងជើង', + content : 'មាតិកា', + htmlIsAllowed : 'HTML ដែលត្រូវបានអនុញ្ញាត', + addNewItem : 'បន្ថែមធាតុថ្មី', + minimum : 'កម្មវិធីជំនួយត្រូវតែមានយ៉ាងហោចណាស់ 1 ធាតុ', + link : 'តំណភ្ជាប់', + style : 'រចនាប័ទ្ម', + type : 'ប្រភេទ', + size : 'ទំហំ', + blockLevel : 'ប្លុកកម្រិត', + active : 'ដែលសកម្ម', + enabled : 'បានបើក', + text : 'អត្ថបទ', + preview : 'ការមើលជាមុន', + optional : 'ជម្រើស', + badge : 'ផ្លាកសញ្ញា', + caption : 'ចំណងជើង', + image : 'រូបភាព', + delete : 'តើអ្នកប្រាកដជាចង់លុបធាតុនេះឬ?', + items : 'ធាតុ', + settings : 'ការកំណត់', + expandFirstItem : 'ពង្រីកធាតុដំបូង', + yes : 'ចាស', + no : 'គ្មាន', + theme : 'ស្បែក', + default : 'លំនាំដើម', + primary : 'primary', + success : 'ភាពជោគជ័យ', + info : 'Info', + warning : 'ព្រមាន & ‧;', + danger : 'គ្រោះថ្នាក់' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ko.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ko.js new file mode 100644 index 0000000..97b3fdc --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ko.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ko', {//Korean + plugin : '부트 스트랩 축소', + title : '이름', + content : '함유량', + htmlIsAllowed : 'HTML이 허용됩니다', + addNewItem : '새 항목 추가', + minimum : '플러그인은 적어도 1 개 항목을 포함해야', + link : '링크', + style : '스타일', + type : '유형', + size : '크기', + blockLevel : '블록 레벨', + active : '활동적인', + enabled : '사용', + text : '본문', + preview : '시사', + optional : '선택', + badge : '배지', + caption : '표제', + image : '영상', + delete : '이 항목을 삭제 하시겠습니까?', + items : '항목', + settings : '설정', + expandFirstItem : '첫 번째 항목을 확장', + yes : '예', + no : '아니', + theme : '테마', + default : '태만', + primary : '행성', + success : '성공', + info : '정보', + warning : '경고', + danger : '위험' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ku.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ku.js new file mode 100644 index 0000000..466307a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ku.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ku', {//Kurdish + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/lt.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/lt.js new file mode 100644 index 0000000..c6353d6 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/lt.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'lt', {//Lithuanian + plugin : 'Bootstrap Nėra', + title : 'Pavadinimas', + content : 'Turinys', + htmlIsAllowed : 'HTML Leidžiamas', + addNewItem : 'Pridėti Naują Elementą', + minimum : 'Įskiepis turi būti bent 1 punktą', + link : 'Ryšys', + style : 'Stilius', + type : 'Tipas', + size : 'Dydis', + blockLevel : 'Blokuoti Lygis', + active : 'Aktyvus', + enabled : 'Įjungta', + text : 'Tekstas', + preview : 'Peržiūrėti', + optional : 'Neprivalomas', + badge : 'ženklelis', + caption : 'Antraštė', + image : 'Vaizdas', + delete : 'Ar tikrai norite ištrinti šį elementą?', + items : 'Daiktai', + settings : 'Nustatymai', + expandFirstItem : 'Išplėsti Pirmas Elementas', + yes : 'Taip', + no : 'Ne', + theme : 'Tema', + default : 'Numatytas', + primary : 'primary', + success : 'Sėkmė', + info : 'Informacija', + warning : 'Įspėjimas', + danger : 'Pavojus' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/lv.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/lv.js new file mode 100644 index 0000000..c066cad --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/lv.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'lv', {//Latvian + plugin : 'Bootstrap Collapse', + title : 'Virsraksts', + content : 'Saturs', + htmlIsAllowed : 'HTML Ir Atļauts', + addNewItem : 'Pievienot Jaunu Elementu', + minimum : 'Plugin jābūt vismaz 1 objektu', + link : 'Saite', + style : 'Stils', + type : 'Tips', + size : 'Izmērs', + blockLevel : 'Block Level', + active : 'Aktīvs', + enabled : 'Enabled', + text : 'Teksts', + preview : 'Preview', + optional : 'Fakultatīvs', + badge : 'žetons', + caption : 'Virsraksts', + image : 'Attēls', + delete : 'Vai tiešām vēlaties dzēst šo posteni?', + items : 'Priekšmeti', + settings : 'Iestatījumi', + expandFirstItem : 'Izvērst Pirmais Elements', + yes : 'Jā', + no : 'Nē', + theme : 'Tēma', + default : 'Default', + primary : 'primary', + success : 'Veiksme', + info : 'Info', + warning : 'Brīdinājums', + danger : 'Briesmas' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/mk.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/mk.js new file mode 100644 index 0000000..71ea161 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/mk.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'mk', {//Macedonian + plugin : 'Bootstrap колапс', + title : 'Наслов', + content : 'содржина', + htmlIsAllowed : 'HTML е дозволено', + addNewItem : 'Додадете нова ставка', + minimum : 'Приклучокот мора contian најмалку 1 точка', + link : 'Линк', + style : 'стил', + type : 'тип', + size : 'големина', + blockLevel : 'блок ниво', + active : 'активни', + enabled : 'овозможено', + text : 'текст', + preview : 'преглед', + optional : 'Изборно', + badge : 'значка', + caption : 'Легенда', + image : 'слика', + delete : 'Дали сте сигурни дека сакате да ја избришете оваа точка?', + items : 'Предмети', + settings : 'Подесувања', + expandFirstItem : 'Проширете Прв Елемент', + yes : 'Да', + no : 'Не', + theme : 'Тема', + default : 'Стандардно', + primary : 'Примарните', + success : 'Успех', + info : 'Инфо', + warning : 'Предупредување', + danger : 'Опасност' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/mn.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/mn.js new file mode 100644 index 0000000..7c43c6f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/mn.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'mn', {//Mongolian + plugin : 'эхлүүлэгч Нуралт', + title : 'гарчиг', + content : 'Агуулга', + htmlIsAllowed : 'HTML зөвшөөрөл', + addNewItem : 'Шинэ Барааны нэмнэ', + minimum : 'Залгаас наад зах нь 1 дээр төстэй эд зүйлсийг contian байх ёстой', + link : 'Сэтгэгдлийн холбоос', + style : 'Style', + type : 'төрөл', + size : 'Хэмжээ', + blockLevel : 'Блок түвшин', + active : 'Идэвхтэй', + enabled : 'идэвхжсэн', + text : 'Текст', + preview : 'Урьдчилан харах', + optional : 'Нэмэлт', + badge : 'Авлаа', + caption : 'Caption', + image : 'Зургийн', + delete : 'Хэрэв та дээр төстэй эд зүйлсийг устгахыг хүсэж та итгэлтэй байна уу?', + items : 'Зүйлс', + settings : 'Тохиргоо', + expandFirstItem : 'Эхний Зүйл Өргөжүүлэх', + yes : 'Тийм', + no : 'Ямар Ч', + theme : 'Сэдэв', + default : 'Default Утга Нь', + primary : 'primary', + success : 'Амжилтын', + info : 'Мэдээлэл', + warning : 'Warning', + danger : 'Аюул' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ms.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ms.js new file mode 100644 index 0000000..33b69e5 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ms.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ms', {//Malay + plugin : 'Tutup Bootstrap', + title : 'Tajuk', + content : 'Kandungan', + htmlIsAllowed : 'HTML Adalah Dibenarkan', + addNewItem : 'Tambah Baru Perkara', + minimum : 'Plugin mesti mengandungi sekurang-kurangnya 1 item', + link : 'Oautan', + style : 'Style', + type : 'Jenis', + size : 'Saiz', + blockLevel : 'Sekat Tahap', + active : 'Aktif', + enabled : 'Membolehkan', + text : 'Teks', + preview : 'Preview', + optional : 'Pilihan', + badge : 'Badge', + caption : 'Caption', + image : 'Imej', + delete : 'Adakah anda pasti anda mahu memadam item ini?', + items : 'Item', + settings : 'Tetapan', + expandFirstItem : 'Buka Perkara Pertama', + yes : 'Ya', + no : 'Tiada', + theme : 'Tema', + default : 'Lalai', + primary : 'primary', + success : 'Kejayaan', + info : 'Maklumat', + warning : 'Amaran', + danger : 'Bahaya' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/nb.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/nb.js new file mode 100644 index 0000000..6508aa5 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/nb.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'nb', {//Norwegian + plugin : 'Bootstrap Collapse', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?', + items : 'Elementer', + settings : 'Innstillinger', + expandFirstItem : 'Utvid Første Element', + yes : 'Ja', + no : 'Nei', + theme : 'Tema', + default : 'Misligholde', + primary : 'primary', + success : 'Suksess', + info : 'Info', + warning : 'Advarsel', + danger : 'Fare' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/nl.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/nl.js new file mode 100644 index 0000000..42eaf29 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/nl.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'nl', {//Dutch + plugin : 'Bootstrap Sluiten', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML is toegestaan', + addNewItem : 'Nieuw item toevoegen', + minimum : 'Plugin moet minstens 1 item bevatten', + link : 'Link', + style : 'Stijl', + type : 'Type', + size : 'Grootte', + blockLevel : 'Blok Niveau', + active : 'Actief', + enabled : 'Ingeschakeld', + text : 'Tekst', + preview : 'Voorbeeld', + optional : 'Facultatief', + badge : 'Insigne', + caption : 'Onderschrift', + image : 'Afbeelding', + delete : 'Bent u zeker dat u dit item wilt verwijderen?', + items : 'Items', + settings : 'Instellingen', + expandFirstItem : 'Expand Eerste Item', + yes : 'Ja', + no : 'Nee', + theme : 'Thema', + default : 'Standaard', + primary : 'primary', + success : 'Succes', + info : 'Info', + warning : 'Waarschuwing', + danger : 'Gevaar' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/no.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/no.js new file mode 100644 index 0000000..bc4ceec --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/no.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'no', { + plugin : 'Bootstrap Collapse', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?', + items : 'Elementer', + settings : 'Innstillinger', + expandFirstItem : 'Utvid Første Element', + yes : 'Ja', + no : 'Nei', + theme : 'Tema', + default : 'Misligholde', + primary : 'primary', + success : 'Suksess', + info : 'Info', + warning : 'Advarsel', + danger : 'Fare' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/pl.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pl.js new file mode 100644 index 0000000..cfac94c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pl.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'pl', {//Polish + plugin : 'Lista rozwijana', + title : 'Tytuł', + content : 'Zawartość', + htmlIsAllowed : 'dozwolony jest HTML', + addNewItem : 'Dodaj nowy element', + minimum : 'Lista rozwijana musi zawierać co najmniej jeden element', + link : 'Powiązanie', + style : 'Rozmiar', + type : 'Typ', + size : 'Rozmiar', + blockLevel : 'Zablokuj Poziom', + active : 'Aktywny', + enabled : 'Włączone', + text : 'Tekst', + preview : 'Zapowiedź', + optional : 'Fakultatywny', + badge : 'Odznaka', + caption : 'Podpis', + image : 'Obraz', + delete : 'Czy na pewno chcesz usunąć ten obiekt?', + items : 'Przedmiotów', + settings : 'Ustawienia', + expandFirstItem : 'Rozwiń pierwszy element', + yes : 'Tak', + no : 'Nie', + theme : 'Motyw', + default : 'Domyślny', + primary : 'Primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt-br.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt-br.js new file mode 100644 index 0000000..669eabe --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt-br.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'pt-br', { + plugin : 'Bootstrap Collapse', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?', + items : 'Unid', + settings : 'Configurações', + expandFirstItem : 'Expandir O Primeiro Item', + yes : 'Sim', + no : 'Não', + theme : 'Tema', + default : 'Padrão', + primary : 'primary', + success : 'Sucesso', + info : 'Informações', + warning : 'Atenção', + danger : 'Perigo' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt.js new file mode 100644 index 0000000..6a84447 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/pt.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'pt', {//Portuguese + plugin : 'Bootstrap Collapse', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?', + items : 'Unid', + settings : 'Configurações', + expandFirstItem : 'Expandir O Primeiro Item', + yes : 'Sim', + no : 'Não', + theme : 'Tema', + default : 'Padrão', + primary : 'primary', + success : 'Sucesso', + info : 'Informações', + warning : 'Atenção', + danger : 'Perigo' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ro.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ro.js new file mode 100644 index 0000000..f5f6d98 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ro.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ro', {//Romanian + plugin : 'Reducere Bootstrap', + title : 'Titlu', + content : 'Conținut', + htmlIsAllowed : 'HTML Este Permise', + addNewItem : 'Add New Item', + minimum : 'Plugin trebuie să conțină cel puțin 1 articol', + link : 'Legătură', + style : 'Stil', + type : 'Tip', + size : 'Dimensiune', + blockLevel : 'Bloc Nivel', + active : 'Activ', + enabled : 'Activat', + text : 'Text', + preview : 'Avanpremieră', + optional : 'Facultativ', + badge : 'Insignă', + caption : 'Legendă', + image : 'Imagine', + delete : 'Sunteți sigur că doriți să ștergeți acest articol?', + items : 'Articole', + settings : 'Setările', + expandFirstItem : 'Extinde Primul Articol', + yes : 'Da', + no : 'Nu', + theme : 'Temă', + default : 'Mod Implicit', + primary : 'primary', + success : 'Succes', + info : 'Info', + warning : 'Avertizare', + danger : 'Pericol' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ru.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ru.js new file mode 100644 index 0000000..2bc1e4f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ru.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ru', {//Russian + plugin : 'Bootstrap Свернуть', + title : 'название', + content : 'содержание', + htmlIsAllowed : 'HTML разрешено', + addNewItem : 'Добавить новый элемент', + minimum : 'Плагин должен содержать, по крайней мере, 1 пункт', + link : 'ссылка', + style : 'стиль', + type : 'тип', + size : 'размер', + blockLevel : 'Блок Уровень', + active : 'активный', + enabled : 'Включено', + text : 'текст', + preview : 'предварительный просмотр', + optional : 'необязательный', + badge : 'знак', + caption : 'подпись', + image : 'изображение', + delete : 'Вы уверены, что хотите удалить этот пункт?', + items : 'Предметы', + settings : 'Настройки', + expandFirstItem : 'Развернуть Первый Деталь', + yes : 'Да', + no : 'Нет', + theme : 'Тема', + default : 'По Умолчанию', + primary : 'primary', + success : 'Успех', + info : 'Информация', + warning : 'Предупреждение', + danger : 'Опасность' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/si.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/si.js new file mode 100644 index 0000000..2583464 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/si.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'si', {//Sinhala + plugin : 'බිඳ වැටීම බුට්ස්ට්රැප්', + title : 'දරන හිමිකම් ලියාපදිංචි කිරීෙම්', + content : 'අන්තර්ගත', + htmlIsAllowed : 'HTML අවසර දී ඇත්තේ', + addNewItem : 'නව විෂය එකතු කරන්න', + minimum : 'ප්ලගිනය අවම වශයෙන් 1 අයිතමය අඩංගු විය යුතුය', + link : 'ලින්ක්', + style : 'ස්ටයිල්', + type : 'වර්ගය', + size : 'තරම', + blockLevel : 'දරන ඉඩම් ෙකොටස්ෙලස ෙපන්නුම් ෙකොට ඇත්තා පෙළ', + active : 'ක්රියාකාරී', + enabled : 'සක්රීය', + text : 'පෙළ', + preview : 'පෙරදසුන', + optional : 'විකල්ප', + badge : 'බැජ්,', + caption : 'සිරස්තලය', + image : 'රූප', + delete : 'ඔබ මෙම අයිතමය මැකීමට අවශ්ය බව ඔබට විශ්වාසද?', + items : 'අයිතම', + settings : 'සැකසුම්', + expandFirstItem : 'පළමු අයිතමය පුළුල්', + yes : 'ඔව්', + no : 'නැත', + theme : 'තේමාව', + default : 'පෙරනිමි', + primary : 'primary', + success : 'සාර්ථකත්වය', + info : 'තොරතුරු', + warning : 'අවවාදයයි', + danger : 'අනතුර' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sk.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sk.js new file mode 100644 index 0000000..e841e4e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sk.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sk', {//Slovak + plugin : 'Bootstrap Collapse', + title : 'Názov', + content : 'Obsah', + htmlIsAllowed : 'HTML Je Povolené', + addNewItem : 'Pridať Novú Položku', + minimum : 'Plugin musí obsahovať aspoň 1 položka', + link : 'Odkaz', + style : 'štýl', + type : 'Typ', + size : 'Veľkosť', + blockLevel : 'Block Level', + active : 'Aktívny', + enabled : 'Povolené', + text : 'Text', + preview : 'Preview', + optional : 'Voliteľný', + badge : 'Odznak', + caption : 'Titulok', + image : 'Obraz', + delete : 'Ste si istí, že chcete túto položku odstrániť?', + items : 'Predmety', + settings : 'Nastavenie', + expandFirstItem : 'Rozbaliť Prvá Položka', + yes : 'Áno', + no : 'Nie', + theme : 'Téma', + default : 'Štandardné', + primary : 'Primate', + success : 'Úspech', + info : 'Info', + warning : 'Výstraha', + danger : 'Nebezpečenstvo' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sl.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sl.js new file mode 100644 index 0000000..bd37d90 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sl.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sl', {//Slovenian + plugin : 'Bootstrap Collapse', + title : 'Naslov', + content : 'Vsebina', + htmlIsAllowed : 'HTML je dovoljeno', + addNewItem : 'Dodaj nov predmet', + minimum : 'Plugin mora vsebovati vsaj 1 izdelek', + link : 'Link', + style : 'Style', + type : 'Tip', + size : 'Velikost', + blockLevel : 'Block Raven', + active : 'Aktivna', + enabled : 'Omogočeno', + text : 'Besedilo', + preview : 'Predogled', + optional : 'Neobvezno', + badge : 'Značka', + caption : 'Napis', + image : 'Slika', + delete : 'Ali ste prepričani, da želite izbrisati ta element?' + items : 'Predmeti', + settings : 'Nastavitve', + expandFirstItem : 'Razširi Prvi Element', + yes : 'Da', + no : 'No', + theme : 'Tema', + default : 'Privzeto', + primary : 'primary', + success : 'Uspeh', + info : 'Informacije', + warning : 'Opozorilo', + danger : 'Nevarnost' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sq.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sq.js new file mode 100644 index 0000000..1c998ac --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sq.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sq', {//Albanian + plugin : 'Collapse Bootstrap', + title : 'Titull', + content : 'Përmbajtje', + htmlIsAllowed : 'HTML është e Lejuar', + addNewItem : 'Add New Item', + minimum : 'Plugin duhet të përmbajë të paktën 1 pika', + link : 'Lidhje', + style : 'Stil', + type : 'Lloj', + size : 'Madhësi', + blockLevel : 'Block Niveli', + active : 'Aktiv', + enabled : 'Enabled', + text : 'Ttekst', + preview : 'Shikim Paraprak', + optional : 'Fakultativ', + badge : 'Distinktiv', + caption : 'Titull', + image : 'Imazh', + delete : 'A jeni i sigurt se doni të fshini këtë artikull?', + items : 'Artikuj', + settings : 'Cilësimet', + expandFirstItem : 'Expand Item Parë', + yes : 'Po', + no : 'Jo', + theme : 'Temë', + default : 'Default', + primary : 'primary', + success : 'Sukses', + info : 'Info', + warning : 'Paralajmërim', + danger : 'Rrezik' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr-latn.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr-latn.js new file mode 100644 index 0000000..923487d --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr-latn.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sr-latn', { + plugin : 'Боотстрап Цоллапсе', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?', + items : 'Предмети', + settings : 'Подешавања', + expandFirstItem : 'Проширити Прву Ставку', + yes : 'Да', + no : 'Не', + theme : 'Тема', + default : 'Уобичајено', + primary : 'Примаи', + success : 'Успех', + info : 'Инфо', + warning : 'Упозорење', + danger : 'Опасност' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr.js new file mode 100644 index 0000000..9b2fa5d --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sr.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sr', {//Serbian + plugin : 'Боотстрап Цоллапсе', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?', + items : 'Предмети', + settings : 'Подешавања', + expandFirstItem : 'Проширити Прву Ставку', + yes : 'Да', + no : 'Не', + theme : 'Тема', + default : 'Уобичајено', + primary : 'Примаи', + success : 'Успех', + info : 'Инфо', + warning : 'Упозорење', + danger : 'Опасност' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/sv.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sv.js new file mode 100644 index 0000000..ceff366 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/sv.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'sv', {//Swedish + plugin : 'Bootstrap Minimera', + title : 'Titel', + content : 'Innehåll', + htmlIsAllowed : 'HTML är Tillåtet', + addNewItem : 'Add New Item', + minimum : 'Plugin måste innehålla minst 1 objekt', + link : 'länk', + style : 'Stil', + type : 'Typ', + size : 'Storlek', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktiverad', + text : 'Text', + preview : 'Förhandsgranska', + optional : 'Valfritt', + badge : 'Badge', + caption : 'Bildtext', + image : 'Bild', + delete : 'Är du säker på att du vill radera detta föremål?', + items : 'Objekt', + settings : 'Inställningar', + expandFirstItem : 'Expandera Första Punkt', + yes : 'Ja', + no : 'Nej', + theme : 'Tema', + default : 'Standard', + primary : 'primary', + success : 'Framgång', + info : 'Info', + warning : 'Varning', + danger : 'Fara' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/th.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/th.js new file mode 100644 index 0000000..ae94fb8 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/th.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'th', {//Thai + plugin : 'บูตยุบ', + title : 'ชื่อเรื่อง', + content : 'เนื้อหา', + htmlIsAllowed : 'อนุญาตให้ใช้ HTML', + addNewItem : 'เพิ่มรายการใหม่', + minimum : 'ปลั๊กอินต้องมีอย่างน้อย 1 รายการ', + link : 'ลิงค์', + style : 'สไตล์', + type : 'ชนิด', + size : 'ขนาด', + blockLevel : 'ระดับ Block', + active : 'กระตือรือร้น', + enabled : 'ที่เปิดใช้งาน', + text : 'ข้อความ', + preview : 'ดูก่อน', + optional : 'ไม่จำเป็น', + badge : 'สัญลักษณ์', + caption : 'คำบรรยายภาพ', + image : 'ภาพ', + delete : 'คุณแน่ใจว่าคุณต้องการลบรายการนี้ได้?', + items : 'รายการ', + settings : 'การตั้งค่า', + expandFirstItem : 'ขยายรายการแรก', + yes : 'ใช่', + no : 'ไม่', + theme : 'กระทู้', + default : 'ค่าเริ่มต้น', + primary : 'primary', + success : 'ความสำเร็จ', + info : 'ข้อมูล', + warning : 'การเตือน', + danger : 'อันตราย' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/tr.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/tr.js new file mode 100644 index 0000000..20e361e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/tr.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'tr', {//Turkish + plugin : 'Bootstrap Çöküşü', + title : 'Başlık', + content : 'Içerik', + htmlIsAllowed : 'HTML İzin Edilir', + addNewItem : 'Yeni Öğe Ekle', + minimum : 'Eklenti en az 1 öğe içermelidir', + link : 'Bağlantı', + style : 'Stil', + type : 'Tip', + size : 'Boyut', + blockLevel : 'Blok Seviye', + active : 'Aktif', + enabled : 'Etkin', + text : 'Metin', + preview : 'Önizleme', + optional : 'Isteğe Bağlı', + badge : 'Rozet', + caption : 'Başlık', + image : 'Görüntü', + delete : 'Bu öğeyi silmek istediğinizden emin misiniz?' + items : 'Öğeler', + settings : 'Ayarlar', + expandFirstItem : 'Ilk Öğe Expand', + yes : 'Evet', + no : 'Yok Hayır', + theme : 'Tema', + default : 'Varsayılan', + primary : 'primary', + success : 'Başarı', + info : 'Bilgi', + warning : 'Uyarı', + danger : 'Tehlike' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/tt.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/tt.js new file mode 100644 index 0000000..a325638 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/tt.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'tt', {//Tatar + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/ug.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ug.js new file mode 100644 index 0000000..a32d0d3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/ug.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'ug', {//Uighur + plugin : 'Bootstrap Collapse', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?', + items : 'Items', + settings : 'Settings', + expandFirstItem : 'Expand First Item', + yes : 'Yes', + no : 'No', + theme : 'Theme', + default : 'Default', + primary : 'primary', + success : 'Success', + info : 'Info', + warning : 'Warning', + danger : 'Danger' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/uk.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/uk.js new file mode 100644 index 0000000..685ae17 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/uk.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'uk', {//Ukrainian + plugin : 'Bootstrap Згорнути', + title : 'Назва', + content : 'зміст', + htmlIsAllowed : 'HTML дозволено', + addNewItem : 'Додати новий елемент', + minimum : 'Плагін повинен містити, принаймні, 1 пункт', + link : 'посилання', + style : 'стиль', + type : 'Тип', + size : 'Розмір', + blockLevel : 'блок Рівень', + active : 'активний', + enabled : 'включено', + text : 'текст', + preview : 'Попередній перегляд', + optional : 'необов\'язковий', + badge : 'знак', + caption : 'підпис', + image : 'зображення', + delete : 'Ви впевнені, що хочете видалити цей пункт?', + items : 'Предмети', + settings : 'Настройки', + expandFirstItem : 'Розгорнути Перший Деталь', + yes : 'Так', + no : 'Немає', + theme : 'Тема', + default : 'Дефолт', + Primary : 'Primary', + success : 'Успіх', + info : 'Інформація', + warning : 'Увага', + danger : 'Небезпека' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/vi.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/vi.js new file mode 100644 index 0000000..42fe095 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/vi.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'vi', {//Vietnamese + plugin : 'Collapse Bootstrap', + title : 'Tiêu đề', + content : 'Nội Dung', + htmlIsAllowed : 'HTML đang Phép', + addNewItem : 'Add New Item', + minimum : 'Plugin phải có ít nhất 1 sản phẩm', + link : 'Liên kết', + style : 'Phong Cách', + type : 'Kiểu', + size : 'Kích Thước', + blockLevel : 'Lắc Tay', + active : 'Hoạt động', + enabled : 'Bật', + text : 'Bản Văn', + preview : 'Xem Trước', + optional : 'Không Bắt Buộc', + badge : 'Badge', + caption : 'Phụ đề', + image : 'hình ảnh', + delete : 'Bạn có chắc chắn muốn xóa ảnh này?', + items : 'Hạng Mục', + settings : 'Cài Đặt', + expandFirstItem : 'Mở Rộng Trước Mục', + yes : 'Vâng', + no : 'Không', + theme : 'Chủ Đề', + default : 'Mặc Định', + primary : 'Primary', + success : 'Sự Thành Công', + info : 'Thông Tin', + warning : 'Cảnh Báo', + danger : 'Nguy Hiểm' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh-cn.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh-cn.js new file mode 100644 index 0000000..df265ff --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh-cn.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'zh-cn', {//Chinese Simplified + plugin : '引导崩溃', + title : '称号', + content : '内容', + htmlIsAllowed : 'HTML是允许的', + addNewItem : '添加新项', + minimum : '插件必须至少包含1项', + link : '链接', + style : '风格', + type : '类型', + size : '尺寸', + blockLevel : '块级', + active : '积极', + enabled : '启用', + text : '文本', + preview : '预览', + optional : '自选', + badge : '徽', + caption : '字幕', + image : '图像', + delete : '你确定你要删除这个项目吗?', + items : '项目', + settings : '设置', + expandFirstItem : '展开第一个项目', + yes : '是', + no : '没有', + theme : '主题', + default : '默认', + primary : '主', + success : '成功', + info : '信息', + warning : '警告', + danger : '危险' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh.js b/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh.js new file mode 100644 index 0000000..26f3ebd --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/lang/zh.js @@ -0,0 +1,34 @@ +CKEDITOR.plugins.setLang('bootstrapCollapse', 'zh', {//Chinese Traditional + plugin : '引導崩潰', + title : '稱號', + content : '內容', + htmlIsAllowed : 'HTML是允許的', + addNewItem : '添加新項', + minimum : '插件必須至少包含1項', + link : '鏈接', + style : '風格', + type : '類型', + size : '尺寸', + blockLevel : '塊級', + active : '積極', + enabled : '啟用', + text : '文本', + preview : '預覽', + optional : '自選', + badge : '徽章', + caption : '字幕', + image : '圖像', + delete : '你確定你要刪除這個項目嗎?', + items : '項目', + settings : '設置', + expandFirstItem : '展開第一個項目', + yes : '是', + no : '沒有', + theme : '主題', + default : '默認', + primary : '主', + success : '成功', + info : '信息', + warning : '警告', + danger : '危險' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapCollapse/plugin.js b/libraries/ckeditor/plugins/bootstrapCollapse/plugin.js new file mode 100644 index 0000000..49ef212 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapCollapse/plugin.js @@ -0,0 +1,14 @@ +/* + Plugin : Bootstrap Collapse + Author : Michael Janea (www.michaeljanea.com) + Version : 1.5.1 +*/ + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('d p(x,q){q=q==2S?D:q;b R={"<":"&W;",">":"&2O;","\'":\'J;\',"\\r\\n":\'\',"\\n":\'\',"\\r":\'\'};b l=1r.2I(\'2\');l.f=x;H(b 3=0;3")}x=l.f;k q?x.B(/[\']/g,d(m){k R[m]}):x.B(/[<\'>]/g,d(m){k R[m]})};d Y(10,M){H(b i N M){U(M[i]==10)k P}k D};A.Q.T(\'o\',{Z:[\'I\',\'2D\',\'2C\',\'2B\',\'2A\',\'2y\',\'2x\',\'2w\',\'S\',\'1n-2v\',\'1n\',\'2t\',\'2s\',\'2r\',\'2q\',\'I-2p\',\'I-S\',\'I-2o\',\'2n\',\'2m\',\'2j\',\'2h\',\'12\',\'12-S\',\'2g\',\'2c\',\'1s\',\'2a\',\'29\',\'28\',\'27\',\'26\',\'25\',\'e\',\'24\',\'23\',\'22\',\'21\',\'20\',\'1Z\',\'W\',\'1Y\',\'1V\',\'1T\',\'1S\',\'1R\',\'1Q\',\'1K\',\'1p-z\',\'1p\',\'1J\',\'1t\',\'V\',\'V-2b\',\'1u\',\'1v\',\'1w\',\'1x\',\'1y\',\'1z\',\'1A\',\'1B\',\'1C\',\'1D\',\'1E\',\'1F\'],1G:\'1H\',1I:\'o\',1q:d(t){t.1L.T(\'1M\',{1N:t.Z.o.1O,1P:\'<2 6="5-1m" u="1U" h-1W="P" e="">\'+\'<2 6="5 5-1X">\'+\'<2 6="5-G" u="1i" e="">\'+\'<2 6="5-1h">\'+\'\'+\'\'+\'\'+\'<2 e="" 6="5-7 7" u="16" h-15="">\'+\'<2 6="5-14">\'+\'\'+\'\'+\'\',2d:P,2e:\'2(*)[*];2f(*);a(*)[*]\',13:\'11\',2i:d(9){k 9.2k==\'2\'&&9.2l(\'5-1m\')},1q:d(){H(b 3=0;3<4.9.$.j.K;3++){v("4.w(\'y"+(3+1)+"\', \'"+p(4.9.$.j[3].F.F.F.f)+"\')");v("4.w(\'E"+(3+1)+"\', \'"+p(4.9.$.j[3].2u.F.f,t.1o.1l)+"\')");b 1k=(4.9.$.j[3].j[1].1j).2z(\' \');4.w(\'C\'+(3+1),Y(\'N\',1k)?\'5-7 7 N\':\'5-7 7\')}4.w(\'1e\',4.9.$.j.K);4.w(\'1c\',(4.9.$.j[0].1j).B(\'5 \',\'\'))},8:d(){b 1b=2E 2F();b c=1b.2H();b y=\'\';H(b 3=0;3<=4.8.1e;3++){v("J = 4.8.y"+3);v("E = 4.8.E"+3);v("C = 4.8.C"+3);U(J){y+=\' <2 6="5 \'+4.8.1c+\'"> <2 6="5-G" u="1i" e="G\'+c+\'s\'+3+\'"> <2 6="5-1h"> \'+p(J)+\' <2 e="7\'+c+\'s\'+3+\'" 6="\'+C+\'" u="16" h-15="G\'+c+\'s\'+3+\'"> <2 6="5-14"> \'+p(E,t.1o.1l)+\' \'}}4.9.2N(\'e\',\'7\'+c);4.9.$.f=y}});A.13.T(\'11\',A.Q.X(\'o\')+\'2P/o.2Q\');A.1r.2R(A.Q.X(\'o\')+\'1g/2T.1g\')}});',62,180,'||div|bootstrapCollapse_i|this|panel|class|collapse|data|element||var|bootstrapCollapse_id|function|id|innerHTML||aria||children|return|bootstrapCollapse_el|||bootstrapCollapse|bootstrapCollapse_escapeHtml|bootstrapCollapse_allow_html||_|editor|role|eval|setData|bootstrapCollapse_text|bootstrapCollapse_item|br|CKEDITOR|replace|bootstrapCollapse_expandFirstItem|false|bootstrapCollapse_content|firstChild|heading|for|en|bootstrapCollapse_title|length|getElementsByTagName|bootstrapCollapse_haystack|in|pre|true|plugins|map|ca|add|if|sr|lt|getPath|bootstrapCollapse_in_array|lang|bootstrapCollapse_needle|bootstrapCollapseDialog|fr|dialog|body|labelledby|tabpanel|controls|expanded|href|parent|bootstrapCollapse_d|bootstrapCollapse_theme|toggle|bootstrapCollapse_total|collapsed|css|title|tab|className|bootstrapCollapse_first_item_classes|mj_variables_allow_html|group|zh|config|pt|init|document|de|ru|si|sk|sl|es|sv|tt|th|tr|ug|uk|vi|cy|requires|widget|icons|ro|pl|widgets|BootstrapCollapse|button|plugin|template|fa|nb|no|mn|tablist|ms|multiselectable|default|mk|lv|ku|ko|km|ja|it|is|hu|hi|he|gu|el|latn|ka|mask|allowedContent|h4|gl|fi|upcast|fo|name|hasClass|et|eo|gb|au|nl|da|cs|hr|lastChild|cn|bg|bs|bn|split|eu|ar|sq|af|new|Date|gm|getTime|createElement|39|target|javascript|void|setAttribute|gt|dialogs|js|appendStyleSheet|undefined|style'.split('|'),0,{})) + +for(var i in CKEDITOR.instances){ + CKEDITOR.instances[i].ui.addButton('BootstrapCollapse', { + command : 'bootstrapCollapse', + icon : this.path + 'icons/bootstrapCollapse.png', + }); +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/ckeditor.html b/libraries/ckeditor/plugins/bootstrapTab/ckeditor.html new file mode 100644 index 0000000..64592f3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/ckeditor.html @@ -0,0 +1,62 @@ + + + cmsPro + + + + + + + +
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/css/style.css b/libraries/ckeditor/plugins/bootstrapTab/css/style.css new file mode 100644 index 0000000..01c3015 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/css/style.css @@ -0,0 +1,23 @@ +/* + Plugin : Bootstrap Tab + Author : Michael Janea (www.michaeljanea.com) + Version : 1.5.1 +*/ + +#bootstrapTab {} + #bootstrapTab_Container {height:350px; overflow:auto; margin-bottom:1em;} + #bootstrapTab table {width:100%; border-collapse:collapse;} + #bootstrapTab th, #bootstrapTab td {padding:.5em;} + #bootstrapTab th {font-weight:bold;} + #bootstrapTab td {vertical-align:top;} + #bootstrapTab input[type=text], #bootstrapTab textarea {padding:.3em; border:1px solid #ddd; -webkit-border-radius:3px; border-radius:3px; -webkit-box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); box-shadow:inset 0 2px 2px rgba(0,0,0,0.075); background:rgba(0, 0, 0, .01); outline:none;} + #bootstrapTab input[type=text]:focus, #bootstrapTab textarea:focus {border:1px solid #139ff7;} + #bootstrapTab input[type=text] {width:150px;} + #bootstrapTab textarea {resize:none; width:295px; height:100px; white-space:pre-wrap;} + #bootstrapTab .bootstrapTab_remove, #bootstrapTab .bootstrapTab_addNew, #bootstrapTab .bootstrapTab_up, #bootstrapTab .bootstrapTab_down, #bootstrapTab .bootstrapTab_move {font-weight:bold; -webkit-border-radius:3px; border-radius:3px; cursor:pointer;} + #bootstrapTab .bootstrapTab_remove {background:#A94442; padding:.3em .5em; color:#fff;} + #bootstrapTab .bootstrapTab_remove:hover {text-decoration:none;} + #bootstrapTab .bootstrapTab_addNew, #bootstrapTab .bootstrapTab_up, #bootstrapTab .bootstrapTab_down, #bootstrapTab .bootstrapTab_move {float:right; padding:.5em; background:#f3f3f3; border:1px solid #ddd; cursor:pointer;} + #bootstrapTab .bootstrapTab_addNew:hover {text-decoration:underline;} + #bootstrapTab .bootstrapTab_up, #bootstrapTab .bootstrapTab_down {float:none; padding:.13em .4em;} + #bootstrapTab .bootstrapTab_move {background:url('../icons/move.png') center center no-repeat #f3f3f3; width:11px; height:9px; cursor:move;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/dialogs/bootstrapTab.js b/libraries/ckeditor/plugins/bootstrapTab/dialogs/bootstrapTab.js new file mode 100644 index 0000000..c129120 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/dialogs/bootstrapTab.js @@ -0,0 +1,230 @@ +var bootstrapTab_popup = 'toolbar=no,status=no,resizable=yes,dependent=yes,width=' + (screen.width * 0.7) + ',height=' + (screen.height * 0.7) + ',left=' + ((screen.width - (screen.width * 0.7)) / 2) + ',top=' + ((screen.height - (screen.height * 0.7)) / 2); +var bootstrapTab_wrapper = bootstrapTab_deleteMessage = bootstrapTab_minimum = bootstrapTab_managePopupContent = ''; +var bootstrapTab_id = ''; +var bootstrapTab_id_ctr = 3; +var bootstrapTab_d = new Date(); +bootstrapTab_id = bootstrapTab_d.getTime(); + +function bootstrapTab_up(bootstrapTab_element) { + var bootstrapTab_elementIndex = bootstrapTab_index(bootstrapTab_element.parentNode.parentNode); + if (bootstrapTab_elementIndex > 0) { + var bootstrapTab_titleSwap1 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[1].firstChild.value; + var bootstrapTab_titleSwap2 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) - 1].children[1].firstChild.value; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) - 1].children[1].firstChild.value = bootstrapTab_titleSwap1; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[1].firstChild.value = bootstrapTab_titleSwap2; + var bootstrapTab_tabSwap1 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[2].firstChild.value; + var bootstrapTab_tabSwap2 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) - 1].children[2].firstChild.value; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) - 1].children[2].firstChild.value = bootstrapTab_tabSwap1; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[2].firstChild.value = bootstrapTab_tabSwap2 + } + return false +}; + +function bootstrapTab_down(bootstrapTab_element) { + var bootstrapTab_elementIndex = bootstrapTab_index(bootstrapTab_element.parentNode.parentNode); + if (bootstrapTab_elementIndex < bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_title').length - 1) { + var bootstrapTab_titleSwap1 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[1].firstChild.value; + var bootstrapTab_titleSwap2 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) + 1].children[1].firstChild.value; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) + 1].children[1].firstChild.value = bootstrapTab_titleSwap1; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[1].firstChild.value = bootstrapTab_titleSwap2; + var bootstrapTab_tabSwap1 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[2].firstChild.value; + var bootstrapTab_tabSwap2 = bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) + 1].children[2].firstChild.value; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[parseInt(bootstrapTab_elementIndex) + 1].children[2].firstChild.value = bootstrapTab_tabSwap1; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[bootstrapTab_elementIndex].children[2].firstChild.value = bootstrapTab_tabSwap2 + } + return false +}; + +function bootstrapTab_addNewItem() { + bootstrapTab_id_ctr++; + var bootstrapTab_newItem = document.createElement('tr'); + bootstrapTab_newItem_template = ' '; + if ((/\bMSIE 6/.test(navigator.userAgent) || /\bMSIE 7/.test(navigator.userAgent) || /\bMSIE 8/.test(navigator.userAgent) || /\bMSIE 9/.test(navigator.userAgent)) && !window.opera) { + bootstrapTab_newItem_template += ' ' + } else { + bootstrapTab_newItem_template += '
' + } + bootstrapTab_newItem_template += ' '; + bootstrapTab_newItem.innerHTML = bootstrapTab_newItem_template; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].appendChild(bootstrapTab_newItem); + return false +}; + +function bootstrapTab_remove(bootstrapTab_element) { + if (bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_title').length > 1) { + if (confirm(bootstrapTab_deleteMessage)) { + bootstrapTab_element.parentNode.parentNode.parentNode.removeChild(bootstrapTab_element.parentNode.parentNode) + } + } else { + alert(bootstrapTab_minimum) + } + return false +}; + +function bootstrapTab_in_array(bootstrapTab_needle, bootstrapTab_haystack) { + for (var i in bootstrapTab_haystack) { + if (bootstrapTab_haystack[i] == bootstrapTab_needle) return true + } + return false +}; + +function bootstrapTab_index(node) { + var children = node.parentNode.childNodes; + var num = 0; + for (var i = 0; i < children.length; i++) { + if (children[i] == node) return num; + if (children[i].nodeType == 1) num++ + } + return -1 +}; + +function bootstrapTab_blur(bootstrapTab_event) { + if (bootstrapTab_event.keyCode == 9 && (bootstrapTab_event.target.className == 'bootstrapTab_title' || bootstrapTab_event.target.className == 'bootstrapTab_tab')) { + if (bootstrapTab_event.target.className == 'bootstrapTab_title') { + setTimeout(function () { + bootstrapTab_event.target.parentNode.parentNode.children[2].children[0].focus() + }, 1) + } else if (bootstrapTab_event.target.className == 'bootstrapTab_tab') { + if (bootstrapTab_event.target.parentNode.parentNode.parentNode.children[bootstrapTab_event.target.parentNode.parentNode.rowIndex]) { + setTimeout(function () { + bootstrapTab_event.target.parentNode.parentNode.parentNode.children[bootstrapTab_event.target.parentNode.parentNode.rowIndex].children[1].children[0].focus() + }, 1) + } + } + } + if (bootstrapTab_event.target) { + setTimeout(function () { + bootstrapTab_event.target.style.border = bootstrapTab_event.target.value == '' ? '1px solid #f00' : '' + }, 1) + } +}; +CKEDITOR.dialog.add('bootstrapTabDialog', function (editor) { + return { + title: editor.lang.bootstrapTab.plugin, + minWidth: 600, + minHeight: 400, + resizable: false, + contents: [{ + id: 'bootstrapTabTab', + label: 'bootstrapTabTab', + elements: [{ + type: 'html', + html: '
' + editor.lang.bootstrapTab.title + ' ' + editor.lang.bootstrapTab.content + (editor.config.mj_variables_allow_html ? ' (' + editor.lang.bootstrapTab.htmlIsAllowed + ')' : '') + '
', + validate: function () { + var bootstrapTab_titles = bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_title'); + var bootstrapTab_contents = bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_tab'); + var bootstrapTab_error = false; + for (bootstrapTab_i = 0; bootstrapTab_i < bootstrapTab_titles.length; bootstrapTab_i++) { + if (bootstrapTab_titles[bootstrapTab_i].value == '') { + bootstrapTab_titles[bootstrapTab_i].parentNode.children[0].style.border = '1px solid #f00'; + bootstrapTab_error = true + } else { + bootstrapTab_titles[bootstrapTab_i].parentNode.children[0].style.border = '' + } + if (bootstrapTab_contents[bootstrapTab_i].value == '') { + bootstrapTab_contents[bootstrapTab_i].parentNode.children[0].style.border = '1px solid #f00'; + bootstrapTab_error = true + } else { + bootstrapTab_contents[bootstrapTab_i].parentNode.children[0].style.border = '' + } + } + return !bootstrapTab_error + }, + commit: function (widget) { + var bootstrapTab_items = bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_title'); + var bootstrapTab_tabs = bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_tab'); + for (var bootstrapTab_i = 0; bootstrapTab_i <= bootstrapTab_items.length; bootstrapTab_i++) { + if (bootstrapTab_items[bootstrapTab_i]) { + widget.setData('bootstrapTab_item' + bootstrapTab_i, bootstrapTab_items[bootstrapTab_i].value); + widget.setData('bootstrapTab_content' + bootstrapTab_i, bootstrapTab_tabs[bootstrapTab_i].value); + if (bootstrapTab_i == 0) { + widget.setData('bootstrapTab_itemClass' + bootstrapTab_i, 'active'); + widget.setData('bootstrapTab_contentClass' + bootstrapTab_i, 'tab-pane active') + } else { + widget.setData('bootstrapTab_itemClass' + bootstrapTab_i, ''); + widget.setData('bootstrapTab_contentClass' + bootstrapTab_i, 'tab-pane') + } + } else { + widget.setData('bootstrapTab_item' + bootstrapTab_i, ''); + widget.setData('bootstrapTab_content' + bootstrapTab_i, '') + } + } + widget.setData('bootstrapTab_total', bootstrapTab_items.length); + document.getElementsByClassName('bootstrapTab_sortable_script')[0].parentElement.removeChild(document.getElementsByClassName('bootstrapTab_sortable_script')[0]) + }, + setup: function (widget) { + var selection = editor.getSelection(); + element = selection.getStartElement(); + var bootstrapTab_item = ''; + var bootstrapTab_attributes = false; + if (element.$.children[0]) { + for (var bootstrapTab_i = 0; bootstrapTab_i < element.$.children[0].attributes.length; bootstrapTab_i++) { + if (element.$.children[0].attributes[bootstrapTab_i].value == 'tabpanel') { + bootstrapTab_attributes = true + } + } + } + if ((element.$.tagName).toLowerCase() == 'div' && bootstrapTab_attributes) { + for (var bootstrapTab_i = 0; bootstrapTab_i < element.$.children[0].children[0].children[0].children.length; bootstrapTab_i++) { + eval("bootstrapTab_title = widget.data.bootstrapTab_item" + bootstrapTab_i); + bootstrapTab_title = bootstrapTab_title != undefined ? bootstrapTab_title : ''; + eval("bootstrapTab_tab = widget.data.bootstrapTab_content" + bootstrapTab_i); + bootstrapTab_tab = bootstrapTab_tab != undefined ? bootstrapTab_tab : ''; + bootstrapTab_item += ' '; + if ((/\bMSIE 6/.test(navigator.userAgent) || /\bMSIE 7/.test(navigator.userAgent) || /\bMSIE 8/.test(navigator.userAgent) || /\bMSIE 9/.test(navigator.userAgent)) && !window.opera) { + bootstrapTab_item += ' ' + } else { + bootstrapTab_item += '
' + } + bootstrapTab_item += ' ' + } + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].innerHTML = bootstrapTab_item + } else { + var bootstrapTab_template = ' '; + if ((/\bMSIE 6/.test(navigator.userAgent) || /\bMSIE 7/.test(navigator.userAgent) || /\bMSIE 8/.test(navigator.userAgent) || /\bMSIE 9/.test(navigator.userAgent)) && !window.opera) { + bootstrapTab_template += ' ' + } else { + bootstrapTab_template += '
' + } + bootstrapTab_template += ' '; + if ((/\bMSIE 6/.test(navigator.userAgent) || /\bMSIE 7/.test(navigator.userAgent) || /\bMSIE 8/.test(navigator.userAgent) || /\bMSIE 9/.test(navigator.userAgent)) && !window.opera) { + bootstrapTab_template += ' ' + } else { + bootstrapTab_template += '
' + } + bootstrapTab_template += ' '; + if ((/\bMSIE 6/.test(navigator.userAgent) || /\bMSIE 7/.test(navigator.userAgent) || /\bMSIE 8/.test(navigator.userAgent) || /\bMSIE 9/.test(navigator.userAgent)) && !window.opera) { + bootstrapTab_template += ' ' + } else { + bootstrapTab_template += '
' + } + bootstrapTab_template += ' '; + bootstrapTab_wrapper.getElementsByTagName('tbody')[0].innerHTML = bootstrapTab_template + } + } + }] + }], + onShow: function () { + bootstrapTab_javascript = document.createElement('script'); + bootstrapTab_javascript.type = 'text/javascript'; + bootstrapTab_javascript.src = CKEDITOR.plugins.getPath('bootstrapTab') + 'js/Sortable.min.js'; + bootstrapTab_javascript.className = 'bootstrapTab_sortable_script'; + document.body.appendChild(bootstrapTab_javascript); + for (var bootstrapTab_a = 0; bootstrapTab_a < CKEDITOR.dialog.getCurrent()._.element.$.getElementsByTagName('div').length; bootstrapTab_a++) { + if (CKEDITOR.dialog.getCurrent()._.element.$.getElementsByTagName('div')[bootstrapTab_a].id == 'bootstrapTab_Container') { + bootstrapTab_wrapper = CKEDITOR.dialog.getCurrent()._.element.$.getElementsByTagName('div')[bootstrapTab_a] + } + } + bootstrapTab_managePopupContent = editor.config.bootstrapTab_managePopupContent; + bootstrapTab_deleteMessage = editor.lang.bootstrapTab.delete; + bootstrapTab_minimum = editor.lang.bootstrapTab.minimum; + bootstrapTab_wrapper.onkeydown = bootstrapTab_blur; + setTimeout(function () { + bootstrapTab_wrapper.getElementsByClassName('bootstrapTab_title')[0].focus() + }, 1) + }, + onCancel: function () { + document.getElementsByClassName('bootstrapTab_sortable_script')[0].parentElement.removeChild(document.getElementsByClassName('bootstrapTab_sortable_script')[0]) + } + } +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/icons/bootstrapTab.png b/libraries/ckeditor/plugins/bootstrapTab/icons/bootstrapTab.png new file mode 100644 index 0000000..71efbc8 Binary files /dev/null and b/libraries/ckeditor/plugins/bootstrapTab/icons/bootstrapTab.png differ diff --git a/libraries/ckeditor/plugins/bootstrapTab/icons/move.png b/libraries/ckeditor/plugins/bootstrapTab/icons/move.png new file mode 100644 index 0000000..054eb10 Binary files /dev/null and b/libraries/ckeditor/plugins/bootstrapTab/icons/move.png differ diff --git a/libraries/ckeditor/plugins/bootstrapTab/js/Sortable.min.js b/libraries/ckeditor/plugins/bootstrapTab/js/Sortable.min.js new file mode 100644 index 0000000..90f3a27 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/js/Sortable.min.js @@ -0,0 +1,1255 @@ +/**! + * Sortable + * @author RubaXa + * @license MIT + */ + + +(function (factory) { + "use strict"; + + if (typeof define === "function" && define.amd) { + define(factory); + } + else if (typeof module != "undefined" && typeof module.exports != "undefined") { + module.exports = factory(); + } + else if (typeof Package !== "undefined") { + Sortable = factory(); // export for Meteor.js + } + else { + /* jshint sub:true */ + window["Sortable"] = factory(); + } +})(function () { + "use strict"; + + var dragEl, + parentEl, + ghostEl, + cloneEl, + rootEl, + nextEl, + + scrollEl, + scrollParentEl, + + lastEl, + lastCSS, + lastParentCSS, + + oldIndex, + newIndex, + + activeGroup, + autoScroll = {}, + + tapEvt, + touchEvt, + + moved, + + /** @const */ + RSPACE = /\s+/g, + + expando = 'Sortable' + (new Date).getTime(), + + win = window, + document = win.document, + parseInt = win.parseInt, + + supportDraggable = !!('draggable' in document.createElement('div')), + supportCssPointerEvents = (function (el) { + el = document.createElement('x'); + el.style.cssText = 'pointer-events:auto'; + return el.style.pointerEvents === 'auto'; + })(), + + _silent = false, + + abs = Math.abs, + slice = [].slice, + + touchDragOverListeners = [], + + _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (rootEl && options.scroll) { + var el, + rect, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + + x = evt.clientX, + y = evt.clientY, + + winWidth = window.innerWidth, + winHeight = window.innerHeight, + + vx, + vy + ; + + // Delect scrollEl + if (scrollParentEl !== rootEl) { + scrollEl = options.scroll; + scrollParentEl = rootEl; + + if (scrollEl === true) { + scrollEl = rootEl; + + do { + if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || + (scrollEl.offsetHeight < scrollEl.scrollHeight) + ) { + break; + } + /* jshint boss:true */ + } while (scrollEl = scrollEl.parentNode); + } + } + + if (scrollEl) { + el = scrollEl; + rect = scrollEl.getBoundingClientRect(); + vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); + vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); + } + + + if (!(vx || vy)) { + vx = (winWidth - x <= sens) - (x <= sens); + vy = (winHeight - y <= sens) - (y <= sens); + + /* jshint expr:true */ + (vx || vy) && (el = win); + } + + + if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { + autoScroll.el = el; + autoScroll.vx = vx; + autoScroll.vy = vy; + + clearInterval(autoScroll.pid); + + if (el) { + autoScroll.pid = setInterval(function () { + if (el === win) { + win.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed); + } else { + vy && (el.scrollTop += vy * speed); + vx && (el.scrollLeft += vx * speed); + } + }, 24); + } + } + } + }, 30), + + _prepareGroup = function (options) { + var group = options.group; + + if (!group || typeof group != 'object') { + group = options.group = {name: group}; + } + + ['pull', 'put'].forEach(function (key) { + if (!(key in group)) { + group[key] = true; + } + }); + + options.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' '; + } + ; + + + + /** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ + function Sortable(el, options) { + if (!(el && el.nodeType && el.nodeType === 1)) { + throw 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el); + } + + this.el = el; // root element + this.options = options = _extend({}, options); + + + // Export instance + el[expando] = this; + + + // Default options + var defaults = { + group: Math.random(), + sort: true, + disabled: false, + store: null, + handle: null, + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', + ghostClass: 'sortable-ghost', + chosenClass: 'sortable-chosen', + ignore: 'a, img', + filter: null, + animation: 0, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData('Text', dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: 'data-id', + delay: 0, + forceFallback: false, + fallbackClass: 'sortable-fallback', + fallbackOnBody: false + }; + + + // Set default options + for (var name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + _prepareGroup(options); + + // Bind all private methods + for (var fn in this) { + if (fn.charAt(0) === '_') { + this[fn] = this[fn].bind(this); + } + } + + // Setup drag mode + this.nativeDraggable = options.forceFallback ? false : supportDraggable; + + // Bind events + _on(el, 'mousedown', this._onTapStart); + _on(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _on(el, 'dragover', this); + _on(el, 'dragenter', this); + } + + touchDragOverListeners.push(this._onDragOver); + + // Restore sorting + options.store && this.sort(options.store.get(this)); + } + + + Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _onTapStart: function (/** Event|TouchEvent */evt) { + var _this = this, + el = this.el, + options = this.options, + type = evt.type, + touch = evt.touches && evt.touches[0], + target = (touch || evt).target, + originalTarget = target, + filter = options.filter; + + + if (type === 'mousedown' && evt.button !== 0 || options.disabled) { + return; // only left button or enabled + } + + target = _closest(target, options.draggable, el); + + if (!target) { + return; + } + + // get the index of the dragged element within its parent + oldIndex = _index(target); + + // Check filter + if (typeof filter === 'function') { + if (filter.call(this, evt, target, this)) { + _dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex); + evt.preventDefault(); + return; // cancel dnd + } + } + else if (filter) { + filter = filter.split(',').some(function (criteria) { + criteria = _closest(originalTarget, criteria.trim(), el); + + if (criteria) { + _dispatchEvent(_this, criteria, 'filter', target, el, oldIndex); + return true; + } + }); + + if (filter) { + evt.preventDefault(); + return; // cancel dnd + } + } + + + if (options.handle && !_closest(originalTarget, options.handle, el)) { + return; + } + + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target); + }, + + _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) { + var _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && (target.parentNode === el)) { + tapEvt = evt; + + rootEl = el; + dragEl = target; + parentEl = dragEl.parentNode; + nextEl = dragEl.nextSibling; + activeGroup = options.group; + + dragStartFn = function () { + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDrag(); + + // Make the element draggable + dragEl.draggable = true; + + // Chosen item + _toggleClass(dragEl, _this.options.chosenClass, true); + + // Bind the events: dragstart/dragend + _this._triggerDragStart(touch); + }; + + // Disable "draggable" + options.ignore.split(',').forEach(function (criteria) { + _find(dragEl, criteria.trim(), _disableDraggable); + }); + + _on(ownerDocument, 'mouseup', _this._onDrop); + _on(ownerDocument, 'touchend', _this._onDrop); + _on(ownerDocument, 'touchcancel', _this._onDrop); + + if (options.delay) { + // If the user moves the pointer or let go the click or touch + // before the delay has been reached: + // disable the delayed drag + _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); + _on(ownerDocument, 'touchend', _this._disableDelayedDrag); + _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); + _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); + _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _disableDelayedDrag: function () { + var ownerDocument = this.el.ownerDocument; + + clearTimeout(this._dragStartTimer); + _off(ownerDocument, 'mouseup', this._disableDelayedDrag); + _off(ownerDocument, 'touchend', this._disableDelayedDrag); + _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); + _off(ownerDocument, 'mousemove', this._disableDelayedDrag); + _off(ownerDocument, 'touchmove', this._disableDelayedDrag); + }, + + _triggerDragStart: function (/** Touch */touch) { + if (touch) { + // Touch device support + tapEvt = { + target: dragEl, + clientX: touch.clientX, + clientY: touch.clientY + }; + + this._onDragStart(tapEvt, 'touch'); + } + else if (!this.nativeDraggable) { + this._onDragStart(tapEvt, true); + } + else { + _on(dragEl, 'dragend', this); + _on(rootEl, 'dragstart', this._onDragStart); + } + + try { + if (document.selection) { + document.selection.empty(); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) { + } + }, + + _dragStarted: function () { + if (rootEl && dragEl) { + // Apply effect + _toggleClass(dragEl, this.options.ghostClass, true); + + Sortable.active = this; + + // Drag start event + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); + } + }, + + _emulateDragOver: function () { + if (touchEvt) { + if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) { + return; + } + + this._lastX = touchEvt.clientX; + this._lastY = touchEvt.clientY; + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', 'none'); + } + + var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), + parent = target, + groupName = ' ' + this.options.group.name + '', + i = touchDragOverListeners.length; + + if (parent) { + do { + if (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) { + while (i--) { + touchDragOverListeners[i]({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent + }); + } + + break; + } + + target = parent; // store last element + } + /* jshint boss:true */ + while (parent = parent.parentNode); + } + + if (!supportCssPointerEvents) { + _css(ghostEl, 'display', ''); + } + } + }, + + + _onTouchMove: function (/**TouchEvent*/evt) { + if (tapEvt) { + // only set the status to dragging, when we are actually dragging + if (!Sortable.active) { + this._dragStarted(); + } + + // as well as creating the ghost element on the document body + this._appendGhost(); + + var touch = evt.touches ? evt.touches[0] : evt, + dx = touch.clientX - tapEvt.clientX, + dy = touch.clientY - tapEvt.clientY, + translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; + + moved = true; + touchEvt = touch; + + _css(ghostEl, 'webkitTransform', translate3d); + _css(ghostEl, 'mozTransform', translate3d); + _css(ghostEl, 'msTransform', translate3d); + _css(ghostEl, 'transform', translate3d); + + evt.preventDefault(); + } + }, + + _appendGhost: function () { + if (!ghostEl) { + var rect = dragEl.getBoundingClientRect(), + css = _css(dragEl), + options = this.options, + ghostRect; + + ghostEl = dragEl.cloneNode(true); + + _toggleClass(ghostEl, options.ghostClass, false); + _toggleClass(ghostEl, options.fallbackClass, true); + + _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); + _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); + _css(ghostEl, 'width', rect.width); + _css(ghostEl, 'height', rect.height); + _css(ghostEl, 'opacity', '0.8'); + _css(ghostEl, 'position', 'fixed'); + _css(ghostEl, 'zIndex', '100000'); + _css(ghostEl, 'pointerEvents', 'none'); + + options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); + + // Fixing dimensions. + ghostRect = ghostEl.getBoundingClientRect(); + _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); + _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); + } + }, + + _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { + var dataTransfer = evt.dataTransfer, + options = this.options; + + this._offUpEvents(); + + if (activeGroup.pull == 'clone') { + cloneEl = dragEl.cloneNode(true); + _css(cloneEl, 'display', 'none'); + rootEl.insertBefore(cloneEl, dragEl); + } + + if (useFallback) { + + if (useFallback === 'touch') { + // Bind touch events + _on(document, 'touchmove', this._onTouchMove); + _on(document, 'touchend', this._onDrop); + _on(document, 'touchcancel', this._onDrop); + } else { + // Old brwoser + _on(document, 'mousemove', this._onTouchMove); + _on(document, 'mouseup', this._onDrop); + } + + this._loopId = setInterval(this._emulateDragOver, 50); + } + else { + if (dataTransfer) { + dataTransfer.effectAllowed = 'move'; + options.setData && options.setData.call(this, dataTransfer, dragEl); + } + + _on(document, 'drop', this); + setTimeout(this._dragStarted, 0); + } + }, + + _onDragOver: function (/**Event*/evt) { + var el = this.el, + target, + dragRect, + revert, + options = this.options, + group = options.group, + groupPut = group.put, + isOwner = (activeGroup === group), + canSort = options.sort; + + if (evt.preventDefault !== void 0) { + evt.preventDefault(); + !options.dragoverBubble && evt.stopPropagation(); + } + + moved = true; + + if (activeGroup && !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : activeGroup.pull && groupPut && ( + (activeGroup.name === group.name) || // by Name + (groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array + ) + ) && + (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback + ) { + // Smart auto-scrolling + _autoScroll(evt, options, this.el); + + if (_silent) { + return; + } + + target = _closest(evt.target, options.draggable, el); + dragRect = dragEl.getBoundingClientRect(); + + if (revert) { + _cloneHide(true); + + if (cloneEl || nextEl) { + rootEl.insertBefore(dragEl, cloneEl || nextEl); + } + else if (!canSort) { + rootEl.appendChild(dragEl); + } + + return; + } + + + if ((el.children.length === 0) || (el.children[0] === ghostEl) || + (el === evt.target) && (target = _ghostIsLast(el, evt)) + ) { + + if (target) { + if (target.animated) { + return; + } + + targetRect = target.getBoundingClientRect(); + } + + _cloneHide(isOwner); + + if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) { + if (!dragEl.contains(el)) { + el.appendChild(dragEl); + parentEl = el; // actualization + } + + this._animate(dragRect, dragEl); + target && this._animate(targetRect, target); + } + } + else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { + if (lastEl !== target) { + lastEl = target; + lastCSS = _css(target); + lastParentCSS = _css(target.parentNode); + } + + + var targetRect = target.getBoundingClientRect(), + width = targetRect.right - targetRect.left, + height = targetRect.bottom - targetRect.top, + floating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display) + || (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0), + isWide = (target.offsetWidth > dragEl.offsetWidth), + isLong = (target.offsetHeight > dragEl.offsetHeight), + halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, + nextSibling = target.nextElementSibling, + moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect), + after + ; + + if (moveVector !== false) { + _silent = true; + setTimeout(_unsilent, 30); + + _cloneHide(isOwner); + + if (moveVector === 1 || moveVector === -1) { + after = (moveVector === 1); + } + else if (floating) { + var elTop = dragEl.offsetTop, + tgTop = target.offsetTop; + + if (elTop === tgTop) { + after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; + } else { + after = tgTop > elTop; + } + } else { + after = (nextSibling !== dragEl) && !isLong || halfway && isLong; + } + + if (!dragEl.contains(el)) { + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore(dragEl, after ? nextSibling : target); + } + } + + parentEl = dragEl.parentNode; // actualization + + this._animate(dragRect, dragEl); + this._animate(targetRect, target); + } + } + } + }, + + _animate: function (prevRect, target) { + var ms = this.options.animation; + + if (ms) { + var currentRect = target.getBoundingClientRect(); + + _css(target, 'transition', 'none'); + _css(target, 'transform', 'translate3d(' + + (prevRect.left - currentRect.left) + 'px,' + + (prevRect.top - currentRect.top) + 'px,0)' + ); + + target.offsetWidth; // repaint + + _css(target, 'transition', 'all ' + ms + 'ms'); + _css(target, 'transform', 'translate3d(0,0,0)'); + + clearTimeout(target.animated); + target.animated = setTimeout(function () { + _css(target, 'transition', ''); + _css(target, 'transform', ''); + target.animated = false; + }, ms); + } + }, + + _offUpEvents: function () { + var ownerDocument = this.el.ownerDocument; + + _off(document, 'touchmove', this._onTouchMove); + _off(ownerDocument, 'mouseup', this._onDrop); + _off(ownerDocument, 'touchend', this._onDrop); + _off(ownerDocument, 'touchcancel', this._onDrop); + }, + + _onDrop: function (/**Event*/evt) { + var el = this.el, + options = this.options; + + clearInterval(this._loopId); + clearInterval(autoScroll.pid); + clearTimeout(this._dragStartTimer); + + // Unbind events + _off(document, 'mousemove', this._onTouchMove); + + if (this.nativeDraggable) { + _off(document, 'drop', this); + _off(el, 'dragstart', this._onDragStart); + } + + this._offUpEvents(); + + if (evt) { + if (moved) { + evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + } + + ghostEl && ghostEl.parentNode.removeChild(ghostEl); + + if (dragEl) { + if (this.nativeDraggable) { + _off(dragEl, 'dragend', this); + } + + _disableDraggable(dragEl); + + // Remove class's + _toggleClass(dragEl, this.options.ghostClass, false); + _toggleClass(dragEl, this.options.chosenClass, false); + + if (rootEl !== parentEl) { + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag from one list and drop into another + _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + + // Add event + _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); + + // Remove event + _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); + } + } + else { + // Remove clone + cloneEl && cloneEl.parentNode.removeChild(cloneEl); + + if (dragEl.nextSibling !== nextEl) { + // Get the index of the dragged element within its parent + newIndex = _index(dragEl); + + if (newIndex >= 0) { + // drag & drop within the same list + _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + } + } + } + + if (Sortable.active) { + if (newIndex === null || newIndex === -1) { + newIndex = oldIndex; + } + + _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); + + // Save sorting + this.save(); + } + } + + // Nulling + rootEl = + dragEl = + parentEl = + ghostEl = + nextEl = + cloneEl = + + scrollEl = + scrollParentEl = + + tapEvt = + touchEvt = + + moved = + newIndex = + + lastEl = + lastCSS = + + activeGroup = + Sortable.active = null; + } + }, + + + handleEvent: function (/**Event*/evt) { + var type = evt.type; + + if (type === 'dragover' || type === 'dragenter') { + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + } + else if (type === 'drop' || type === 'dragend') { + this._onDrop(evt); + } + }, + + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + var order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (_closest(el, options.draggable, this.el)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + var items = {}, rootEl = this.el; + + this.toArray().forEach(function (id, i) { + var el = rootEl.children[i]; + + if (_closest(el, this.options.draggable, rootEl)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + + /** + * Save the current sorting + */ + save: function () { + var store = this.options.store; + store && store.set(this); + }, + + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return _closest(el, selector || this.options.draggable, this.el); + }, + + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + var options = this.options; + + if (value === void 0) { + return options[name]; + } else { + options[name] = value; + + if (name === 'group') { + _prepareGroup(options); + } + } + }, + + + /** + * Destroy + */ + destroy: function () { + var el = this.el; + + el[expando] = null; + + _off(el, 'mousedown', this._onTapStart); + _off(el, 'touchstart', this._onTapStart); + + if (this.nativeDraggable) { + _off(el, 'dragover', this); + _off(el, 'dragenter', this); + } + + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { + el.removeAttribute('draggable'); + }); + + touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); + + this._onDrop(); + + this.el = el = null; + } + }; + + + function _cloneHide(state) { + if (cloneEl && (cloneEl.state !== state)) { + _css(cloneEl, 'display', state ? 'none' : ''); + !state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl); + cloneEl.state = state; + } + } + + + function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { + if (el) { + ctx = ctx || document; + selector = selector.split('.'); + + var tag = selector.shift().toUpperCase(), + re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); + + do { + if ( + (tag === '>*' && el.parentNode === ctx) || ( + (tag === '' || el.nodeName.toUpperCase() == tag) && + (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) + ) + ) { + return el; + } + } + while (el !== ctx && (el = el.parentNode)); + } + + return null; + } + + + function _globalDragOver(/**Event*/evt) { + if (evt.dataTransfer) { + evt.dataTransfer.dropEffect = 'move'; + } + evt.preventDefault(); + } + + + function _on(el, event, fn) { + el.addEventListener(event, fn, false); + } + + + function _off(el, event, fn) { + el.removeEventListener(event, fn, false); + } + + + function _toggleClass(el, name, state) { + if (el) { + if (el.classList) { + el.classList[state ? 'add' : 'remove'](name); + } + else { + var className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' '); + el.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' '); + } + } + } + + + function _css(el, prop, val) { + var style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ''); + } + else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } + else { + if (!(prop in style)) { + prop = '-webkit-' + prop; + } + + style[prop] = val + (typeof val === 'string' ? '' : 'px'); + } + } + } + + + function _find(ctx, tagName, iterator) { + if (ctx) { + var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; + } + + + + function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { + var evt = document.createEvent('Event'), + options = (sortable || rootEl[expando]).options, + onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); + + evt.initEvent(name, true, true); + + evt.to = rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = startIndex; + evt.newIndex = newIndex; + + rootEl.dispatchEvent(evt); + + if (options[onName]) { + options[onName].call(sortable, evt); + } + } + + + function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) { + var evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + + evt = document.createEvent('Event'); + evt.initEvent('move', true, true); + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + evt.relatedRect = targetRect || toEl.getBoundingClientRect(); + + fromEl.dispatchEvent(evt); + + if (onMoveFn) { + retVal = onMoveFn.call(sortable, evt); + } + + return retVal; + } + + + function _disableDraggable(el) { + el.draggable = false; + } + + + function _unsilent() { + _silent = false; + } + + + /** @returns {HTMLElement|false} */ + function _ghostIsLast(el, evt) { + var lastEl = el.lastElementChild, + rect = lastEl.getBoundingClientRect(); + + return ((evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.right + rect.width) > 5)) && lastEl; // min delta + } + + + /** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ + function _generateId(el) { + var str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); + } + + /** + * Returns the index of an element within its parent + * @param {HTMLElement} el + * @return {number} + */ + function _index(el) { + var index = 0; + + if (!el || !el.parentNode) { + return -1; + } + + while (el && (el = el.previousElementSibling)) { + if (el.nodeName.toUpperCase() !== 'TEMPLATE') { + index++; + } + } + + return index; + } + + function _throttle(callback, ms) { + var args, _this; + + return function () { + if (args === void 0) { + args = arguments; + _this = this; + + setTimeout(function () { + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + args = void 0; + }, ms); + } + }; + } + + function _extend(dst, src) { + if (dst && src) { + for (var key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; + } + + + // Export utils + Sortable.utils = { + on: _on, + off: _off, + css: _css, + find: _find, + is: function (el, selector) { + return !!_closest(el, selector, el); + }, + extend: _extend, + throttle: _throttle, + closest: _closest, + toggleClass: _toggleClass, + index: _index + }; + + + /** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ + Sortable.create = function (el, options) { + return new Sortable(el, options); + }; + + + // Export + Sortable.version = '1.4.2'; + return Sortable; +}); + +var bar = bootstrapTab_wrapper.children[0].children[1]; +bootstrapTab_sort = Sortable.create(bar, { + animation : '150', + handle : '.bootstrapTab_move' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/af.js b/libraries/ckeditor/plugins/bootstrapTab/lang/af.js new file mode 100644 index 0000000..ce7dd55 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/af.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'af', {//afrikaans + plugin : 'Bootstrap Tab', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML Word Toegelaat', + addNewItem : 'Voeg Nuwe Item', + minimum : 'Plugin moet ten minste 1 item bevat', + link : 'Link', + style : 'Style', + type : 'Tipe', + size : 'Grootte', + blockLevel : 'Blok Vlak', + active : 'Aktiewe', + enabled : 'In Staat Gestel Om', + text : 'Teks', + preview : 'Voorskou', + optional : 'Opsionele', + badge : 'Badge', + caption : 'Onderskrif', + image : 'Image', + delete : 'Is jy seker jy wil hierdie item uitvee?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ar.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ar.js new file mode 100644 index 0000000..c54ff11 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ar.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ar', { //arabic + plugin : 'التمهيد تبويب', + title : 'لقب', + content : 'مضمون', + htmlIsAllowed : 'يسمح HTML', + addNewItem : 'إضافة عنصر جديد', + minimum : 'يجب أن يحتوي على البرنامج المساعد على الأقل 1 البند', + link : 'صلة', + style : 'أسلوب', + type : 'نوع', + size : 'حجم', + blockLevel : 'كتلة المستوى', + active : 'نشط', + enabled : 'تمكين', + text : 'نص', + preview : 'معاينة', + optional : 'اختياري', + badge : 'شارة', + caption : 'شرح', + image : 'صورة', + delete : 'هل أنت متأكد أنك تريد حذف هذا البند؟' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/bg.js b/libraries/ckeditor/plugins/bootstrapTab/lang/bg.js new file mode 100644 index 0000000..8279eef --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/bg.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'bg', {//bulgarian + plugin : 'Bootstrap Tab', + title : 'заглавие', + content : 'съдържание', + htmlIsAllowed : 'HTML е позволено', + addNewItem : 'Нова позиция', + minimum : 'Plugin трябва да съдържа най-малко 1 брой', + link : 'връзка', + style : 'стил', + type : 'тип', + size : 'размер', + blockLevel : 'Block Level', + active : 'активен', + enabled : 'Enabled', + text : 'текст', + preview : 'предварителен преглед', + optional : 'по избор', + badge : 'значка', + caption : 'Надпис', + image : 'изображение', + delete : 'Сигурни ли сте, че искате да изтриете този елемент?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/bn.js b/libraries/ckeditor/plugins/bootstrapTab/lang/bn.js new file mode 100644 index 0000000..a9fc50a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/bn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'bn', {//bengali + plugin : 'বুটস্ট্র্যাপ ট্যাব', + title : 'খেতাব', + content : 'বিষয়বস্তু', + htmlIsAllowed : 'এইচটিএমএল অনুমতি দেওয়া হয়', + addNewItem : 'নতুন আইটেম যোগ করুন', + minimum : 'প্লাগইন অন্তত 1 আইটেম ধারণ করতে হবে', + link : 'লিংক', + style : 'শৈলী', + type : 'আদর্শ', + size : 'আয়তন', + blockLevel : 'ব্লক শ্রেনী', + active : 'সক্রিয়', + enabled : 'সক্রিয়', + text : 'পাঠ', + preview : 'সম্পূর্ণ বিবরণের পূর্বরূপ দেখুন', + optional : 'ঐচ্ছিক', + badge : 'ব্যাজ', + caption : 'ক্যাপশন', + image : 'ভাবমূর্তি', + delete : 'আপনি এই আইটেমটি মুছে ফেলতে চান আপনি কি নিশ্চিত?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/bs.js b/libraries/ckeditor/plugins/bootstrapTab/lang/bs.js new file mode 100644 index 0000000..995cff2 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/bs.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'bs', {//bosnian + plugin : 'Bootstrap Tab', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML je dozvoljeno', + addNewItem : 'Dodaj Novi Item', + minimum : 'Plugin mora sadržavati najmanje 1 stavka', + link : 'Link', + style : 'Stil', + type : 'Tip', + size : 'Veličina', + blockLevel : 'Blok Level', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Preview', + optional : 'Neobavezan', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ca.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ca.js new file mode 100644 index 0000000..109e742 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ca', {//catalan + plugin : 'Bootstrap Tab', + title : 'Títol', + content : 'Contingut', + htmlIsAllowed : 'HTML és Permès', + addNewItem : 'Afegir Nou Element', + minimum : 'Plugin ha de contenir almenys 1 membre', + link : 'Enllaç', + style : 'Estil', + type : 'Tipus', + size : 'Mida', + blockLevel : 'Nivell De Bloc', + active : 'Actiu', + enabled : 'Activat', + text : 'Text', + preview : 'Preestrena', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítol', + image : 'Imatge', + delete : 'Segur que vols esborrar aquest article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/cs.js b/libraries/ckeditor/plugins/bootstrapTab/lang/cs.js new file mode 100644 index 0000000..92ac51e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/cs.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'cs', {//czech + plugin : 'Bootstrap Tab', + title : 'Název', + content : 'Obsah', + htmlIsAllowed : 'HTML Je Povoleno', + addNewItem : 'Přidat Novou Položku', + minimum : 'Plugin musí obsahovat alespoň 1 položka', + link : 'Odkaz', + style : 'Styl', + type : 'Typ', + size : 'Velikost', + blockLevel : 'Block Level', + active : 'Aktivní', + enabled : 'Povoleno', + text : 'Text', + preview : 'Preview', + optional : 'Volitelný', + badge : 'Odznak', + caption : 'Titulek', + image : 'Obraz', + delete : 'Jste si jisti, že chcete tuto položku smazat?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/cy.js b/libraries/ckeditor/plugins/bootstrapTab/lang/cy.js new file mode 100644 index 0000000..da972cc --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/cy.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'cy', {//welsh + plugin : 'Bootstrap Tab', + title : 'Teitl', + content : 'Cynnwys', + htmlIsAllowed : 'HTML Yn Cael Ei Allowed', + addNewItem : 'Ychwanegu Eitem Newydd', + minimum : 'Rhaid ategyn gynnwys o leiaf 1 eitem', + link : 'Cyswllt', + style : 'Arddull', + type : 'Math', + size : 'Maint', + blockLevel : 'Bloc Lefel', + active : 'Active', + enabled : 'Galluogwyd', + text : 'Testun', + preview : 'Rhagolwg', + optional : 'Dewisol', + badge : 'Bathodyn', + caption : 'Geiriad', + image : 'Delwedd', + delete : 'Ydych chi\'n siŵr eich bod am ddileu\'r eitem hon?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/da.js b/libraries/ckeditor/plugins/bootstrapTab/lang/da.js new file mode 100644 index 0000000..e44db01 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/da.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'da', {//danish + plugin : 'Bootstrap Tab', + title : 'Titel', + content : 'Indhold', + htmlIsAllowed : 'HTML er tilladt', + addNewItem : 'Tilføj nyt element', + minimum : 'Plugin skal indeholde mindst 1 emne', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiveret', + text : 'Tekst', + preview : 'Eksempel', + optional : 'Valgfri', + badge : 'Badge', + caption : 'Caption', + image : 'Billede', + delete : 'Er du sikker på du vil slette denne genstand?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/de.js b/libraries/ckeditor/plugins/bootstrapTab/lang/de.js new file mode 100644 index 0000000..ec63711 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/de.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'de', {//german + plugin : 'Bootstrap Tab', + title : 'Titel', + content : 'Inhalt', + htmlIsAllowed : 'HTML ist erlaubt', + addNewItem : 'Neues Element hinzufügen', + minimum : 'Plugin muss mindestens 1 Artikel enthalten', + link : 'Link', + style : 'Stil', + type : 'Art', + size : 'Größe', + blockLevel : 'Block Level', + active : 'Aktiv', + enabled : 'Aktiviert', + text : 'Text', + preview : 'Vorschau', + optional : 'Fakultativ', + badge : 'Abzeichen', + caption : 'Bildunterschrift', + image : 'Bild', + delete : 'Sind Sie sicher, Sie wollen diesen Inhalt löschen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/el.js b/libraries/ckeditor/plugins/bootstrapTab/lang/el.js new file mode 100644 index 0000000..6b08dd6 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/el.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapCarousel', 'el', {//greek + plugin : 'Bootstrap Tab', + title : 'Τίτλος', + content : 'Περιεχόμενο', + htmlIsAllowed : 'Επιτρέπεται HTML κώδικας', + addNewItem : 'Προσθήκη νέου στοιχείου', + minimum : 'Το Plugin πρέπει να περιέχει τουλάχιστον 1 στοιχείο', + link : 'Σύνδεσμος', + style : 'Στυλ', + type : 'Τύπος', + size : 'Μέγεθος', + blockLevel : 'Block Επίπεδο', + active : 'Ενεργό', + enabled : 'Ενεργοποιήθηκε', + text : 'Κείμενο', + preview : 'Προεπισκόπηση', + optional : 'Προαιρετικό', + badge : 'Σήμα', + caption : 'Λεζάντα', + image : 'Εικόνα', + delete : 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το στοιχείο;' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/en-au.js b/libraries/ckeditor/plugins/bootstrapTab/lang/en-au.js new file mode 100644 index 0000000..ed2ccb2 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/en-au.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'en-au', { + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/en-ca.js b/libraries/ckeditor/plugins/bootstrapTab/lang/en-ca.js new file mode 100644 index 0000000..a4f2b91 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/en-ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'en-ca', { + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/en-gb.js b/libraries/ckeditor/plugins/bootstrapTab/lang/en-gb.js new file mode 100644 index 0000000..7e76128 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/en-gb.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'en-gb', { + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/en.js b/libraries/ckeditor/plugins/bootstrapTab/lang/en.js new file mode 100644 index 0000000..b5bc7b7 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/en.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'en', { + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/eo.js b/libraries/ckeditor/plugins/bootstrapTab/lang/eo.js new file mode 100644 index 0000000..909c0fb --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/eo.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'eo', {//Esperanto + plugin : 'Bootstrap Tab', + title : 'Titolo', + content : 'Enhavo', + htmlIsAllowed : 'HTML Estas Permesitaj', + addNewItem : 'Aldoni Novan Eron', + minimum : 'Plugin devas enhavi almenaŭ 1 ero', + link : 'Ligilo', + style : 'Stilo', + type : 'Tipo', + size : 'Grandeco', + blockLevel : 'Bloko-Nivelo', + active : 'Aktivaj', + enabled : 'Enabled', + text : 'Teksto', + preview : 'Antaŭrigardo', + optional : 'Laŭvola', + badge : 'Badge', + caption : 'Apudskribo', + image : 'Dosiero', + delete : 'Ĉu vi vere volas forigi tiun artikolon?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/es.js b/libraries/ckeditor/plugins/bootstrapTab/lang/es.js new file mode 100644 index 0000000..b073c72 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/es.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'es', {//spanish + plugin : 'Bootstrap Tab', + title : 'Título', + content : 'Eontenido', + htmlIsAllowed : 'HTML Es Permitido', + addNewItem : 'Agregar Nuevo Elemento', + minimum : 'Plugin debe contener al menos 1 artículo', + link : 'Enlace', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Nivel De Bloque', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Preestreno', + optional : 'Opcional', + badge : 'Divisa', + caption : 'Subtítulo', + image : 'Imagen', + delete : '¿Seguro que quieres borrar este artículo?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/et.js b/libraries/ckeditor/plugins/bootstrapTab/lang/et.js new file mode 100644 index 0000000..aede2ed --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/et.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'et', {//estonian + plugin : 'Bootstrap Tab', + title : 'Pealkiri', + content : 'Sisu', + htmlIsAllowed : 'HTML on lubatud', + addNewItem : 'Lisa uus üksus', + minimum : 'Plugin peab sisaldama vähemalt 1 kirje', + link : 'Link', + style : 'Stiil', + type : 'Ttüüp', + size : 'Suurus', + blockLevel : 'Block Level', + active : 'Aktiivne', + enabled : 'Lubatud', + text : 'Tekst', + preview : 'Eelvaade', + optional : 'Vabatahtlik', + badge : 'Rinnamärk', + caption : 'Pealkiri', + image : 'Pilt', + delete : 'Olete kindel, et soovite kustutada selle kirje?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/eu.js b/libraries/ckeditor/plugins/bootstrapTab/lang/eu.js new file mode 100644 index 0000000..1ad8b64 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/eu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'eu', {//Basque + plugin : 'Bootstrap Tab', + title : 'Izenburua', + content : 'Edukia', + htmlIsAllowed : 'HTML onartzen da', + addNewItem : 'Gehitu Elementu berria', + minimum : 'Plugin gutxienez 1 elementua eduki behar', + link : 'Link', + style : 'Style', + type : 'Mota', + size : 'Tamaina', + blockLevel : 'Bloke Maila', + active : 'Aktiboak', + enabled : 'Gaituta', + text : 'Testua', + preview : 'Aurreikusi', + optional : 'Aukerako', + badge : 'Badge', + caption : 'Argazki-oina', + image : 'Image', + delete : 'Ziur zaude elementu hau ezabatu nahi duzula?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/fa.js b/libraries/ckeditor/plugins/bootstrapTab/lang/fa.js new file mode 100644 index 0000000..723a83b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/fa.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'fa', {//Persian + plugin : 'بوت استرپ است', + title : 'عنوان', + content : 'مقدار', + htmlIsAllowed : 'HTML مجاز است', + addNewItem : 'اضافه کردن آیتم جدید', + minimum : 'پلاگین باید حداقل 1 مورد شامل', + link : 'پیوند', + style : 'اندازه', + type : 'نوع', + size : 'اندازه', + blockLevel : 'بلوک سطح', + active : 'فعال', + enabled : 'فعال', + text : 'متن', + preview : 'پیش دید', + optional : 'اختیاری', + badge : 'نشان', + caption : 'عنوان', + image : 'تصویر', + delete : 'آیا شما مطمئن هستید که میخواهید این آیتم را حذف کنید؟' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/fi.js b/libraries/ckeditor/plugins/bootstrapTab/lang/fi.js new file mode 100644 index 0000000..dbd9076 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/fi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'fi', {//Finnish + plugin : 'Bootstrap Tab', + title : 'Otsikko', + content : 'Pitoisuus', + htmlIsAllowed : 'HTML On Sallittu', + addNewItem : 'Lisää Uusi Osa', + minimum : 'Plugin on oltava vähintään 1 kohde', + link : 'Linkki', + style : 'Tyyli', + type : 'Tyyppi', + size : 'Koko', + blockLevel : 'Block Level', + active : 'Aktiivinen', + enabled : 'Käytössä', + text : 'Teksti', + preview : 'Preview', + optional : 'Valinnainen', + badge : 'Kunniamerkki', + caption : 'Kuvateksti', + image : 'Kuva', + delete : 'Oletko varma, että haluat poistaa tämän kohteen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/fo.js b/libraries/ckeditor/plugins/bootstrapTab/lang/fo.js new file mode 100644 index 0000000..df70d09 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/fo.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'fo', {//Faroese + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Stlye', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/fr-ca.js b/libraries/ckeditor/plugins/bootstrapTab/lang/fr-ca.js new file mode 100644 index 0000000..aa64d59 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/fr-ca.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'fr-ca', { + plugin : 'Bootstrap Tab', + title : 'Titre', + content : 'Content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/fr.js b/libraries/ckeditor/plugins/bootstrapTab/lang/fr.js new file mode 100644 index 0000000..86775cc --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/fr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'fr', {//French + plugin : 'Bootstrap Tab', + title : 'Titre', + content : 'Content', + htmlIsAllowed : 'HTML est autorisé', + addNewItem : 'Ajouter un nouvel élément', + minimum : 'Plugin doit contenir au moins 1 article', + link : 'Lien', + style : 'Style', + type : 'Type', + size : 'Taille', + blockLevel : 'Bloquer Niveau', + active : 'Actif', + enabled : 'Activé', + text : 'Texte', + preview : 'Avant-Première', + optional : 'En Option', + badge : 'Badge', + caption : 'Légende', + image : 'Image', + delete : 'Êtes-vous sûr de vouloir supprimer cet article?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/gl.js b/libraries/ckeditor/plugins/bootstrapTab/lang/gl.js new file mode 100644 index 0000000..1da32c3 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/gl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'gl', {//Galician + plugin : 'Tab Bootstrap', + title : 'Título', + content : 'Contido', + htmlIsAllowed : 'HTML se admite', + addNewItem : 'Add New Item', + minimum : 'Plugin debe conter polo menos 1 artigo', + link : 'Ligazón', + style : 'Estilo', + type : 'Tipo', + size : 'Tamaño', + blockLevel : 'Bloque de Nivel', + active : 'Activo', + enabled : 'Activado', + text : 'Texto', + preview : 'Visualización', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imaxe', + delete : 'Está seguro de que quere eliminar este elemento?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/gu.js b/libraries/ckeditor/plugins/bootstrapTab/lang/gu.js new file mode 100644 index 0000000..d3ef883 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/gu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'gu', {//Gujarati + plugin : 'બુટસ્ટ્રેપ ટૅબ', + title : 'શીર્ષક', + content : 'સામગ્રી', + htmlIsAllowed : 'એચટીએમએલ મંજૂર થયેલ', + addNewItem : 'ન્યૂ વસ્તુ ઉમેરો', + minimum : 'પ્લગઇન ઓછામાં ઓછા 1 આઇટમ હોવો જરૂરી છે', + link : 'લિંક', + style : 'પ્રકાર', + type : 'પ્રકાર', + size : 'કદ', + blockLevel : 'બ્લોક લેવલ', + active : 'સક્રિય', + enabled : 'જો સક્રિય', + text : 'લખાણ', + preview : 'પૂર્વાવલોકન', + optional : 'વૈકલ્પિક', + badge : 'બેજ', + caption : 'કૅપ્શન', + image : 'છબી', + delete : 'તમે આ આઇટમ કાઢી નાખવા માંગો તમે ખાતરી રહ્યાં છો?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/he.js b/libraries/ckeditor/plugins/bootstrapTab/lang/he.js new file mode 100644 index 0000000..004fd72 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/he.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'he', {//hebrew + plugin : 'Bootstrap Tab', + title : 'כותרת', + content : 'תוכן', + htmlIsAllowed : 'HTML הוא מחמד', + addNewItem : 'הוסף פריט חדש', + minimum : 'תוסף חייב לכלול לפחות פריט 1', + link : 'קישור', + style : 'סגנון', + type : 'סוג', + size : 'גודל', + blockLevel : 'בלוק רמה', + active : 'פעיל', + enabled : 'מופעל', + text : 'טקסט', + preview : 'תצוגה מקדימה', + optional : 'אופציונאלי', + badge : 'תג', + caption : 'כיתוב', + image : 'תמונה', + delete : 'האם אתה בטוח שאתה רוצה למחוק פריט זה?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/hi.js b/libraries/ckeditor/plugins/bootstrapTab/lang/hi.js new file mode 100644 index 0000000..9f66255 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/hi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'hi', {//Hindi + plugin : 'बूटस्ट्रैप टैब', + title : 'शीर्षक', + content : 'सामग्री', + htmlIsAllowed : 'एचटीएमएल अनुमति दी है', + addNewItem : 'नया आइटम जोड़ें', + minimum : 'प्लगइन कम से कम एक आइटम शामिल होना चाहिए', + link : 'लिंक', + style : 'अंदाज', + type : 'प्रकार', + size : 'आकार', + blockLevel : 'ब्लॉक स्तर', + active : 'सक्रिय', + enabled : 'सक्षम होना चाहिए', + text : 'टेक्स्ट', + preview : 'पूर्वावलोकन', + optional : 'ऐच्छिक', + badge : 'बिल्ला', + caption : 'शीर्षक', + image : 'छवि', + delete : 'क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/hr.js b/libraries/ckeditor/plugins/bootstrapTab/lang/hr.js new file mode 100644 index 0000000..927b3d9 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/hr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'hr', {//Croatian + plugin : 'Bootstrap Tab', + title : 'Naslov', + content : 'Sadržaj', + htmlIsAllowed : 'HTML Dopušteno', + addNewItem : 'Dodaj Novu Stavku', + minimum : 'Plugin mora sadržavati najmanje 1 predmet', + link : 'Link', + style : 'Stil', + type : 'Vrsta', + size : 'Veličina', + blockLevel : 'Blok Razina', + active : 'Aktivan', + enabled : 'Omogućeno', + text : 'Tekst', + preview : 'Pregled', + optional : 'Izborni', + badge : 'Značka', + caption : 'Naslov', + image : 'Slika', + delete : 'Jeste li sigurni da želite obrisati ovu stavku?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/hu.js b/libraries/ckeditor/plugins/bootstrapTab/lang/hu.js new file mode 100644 index 0000000..c2a93f9 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/hu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'hu', {//Hungarian + plugin : 'Bootstrap Tab', + title : 'Cím', + content : 'Tartalom', + htmlIsAllowed : 'HTML Engedélyezett', + addNewItem : 'Új elem hozzáadása', + minimum : 'Plugin tartalmaznia kell legalább 1 db', + link : 'Link', + style : 'Stílus', + type : 'Típus', + size : 'Méret', + blockLevel : 'Blokk Szintű', + active : 'Aktív', + enabled : 'Engedélyezve', + text : 'Szöveg', + preview : 'Preview', + optional : 'Választható', + badge : 'Jelvény', + caption : 'Képaláírás', + image : 'Kép', + delete : 'Biztos, hogy törölni szeretné ezt az elemet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/id.js b/libraries/ckeditor/plugins/bootstrapTab/lang/id.js new file mode 100644 index 0000000..d6ec5d5 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/id.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'id', {//Indonesian + plugin : 'Bootstrap Tab', + title : 'Judul', + content : 'Kadar', + htmlIsAllowed : 'HTML Diizinkan', + addNewItem : 'Add New Item', + minimum : 'Plugin harus mengandung setidaknya 1 item', + link : 'Mata Rantai', + style : 'Gaya', + type : 'Jenis', + size : 'Ukuran', + blockLevel : 'Blok Tingkat', + active : 'Aktif', + enabled : 'Diaktifkan', + text : 'Teks', + preview : 'Preview', + optional : 'Opsional', + badge : 'Badge', + caption : 'Keterangan Gambar', + image : 'Gambar', + delete : 'Apakah Anda yakin ingin menghapus item ini?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/is.js b/libraries/ckeditor/plugins/bootstrapTab/lang/is.js new file mode 100644 index 0000000..4d99959 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/is.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'is', {//Icelandic + plugin : 'ræsi Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML er Leyft', + addNewItem : 'Bæta Við Nýjum Lið', + minimum : 'Plugin verður að innihalda að minnsta kosti 1 atriði', + link : 'Link', + style : 'Style', + type : 'Gerð', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Virkt', + text : 'Texti', + preview : 'Preview', + optional : 'Valfrjálst', + badge : 'Badge', + caption : 'Caption', + image : 'Mynd', + delete : 'Ert þú viss um að þú viljir eyða þessu atriði?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/it.js b/libraries/ckeditor/plugins/bootstrapTab/lang/it.js new file mode 100644 index 0000000..b0b0a60 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/it.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'it', {//Italian + plugin : 'Bootstrap Tab', + title : 'Titolo', + content : 'Contenuto', + htmlIsAllowed : 'HTML è ammessi', + addNewItem : 'Aggiungi nuovo elemento', + minimum : 'Plugin deve contenere almeno 1 articolo', + link : 'Collegamento', + style : 'Stile', + type : 'Tipo', + size : 'Dimensione', + blockLevel : 'A Livello Di Blocco', + active : 'Attivo', + enabled : 'Abilitato', + text : 'Testo', + preview : 'Anteprima', + optional : 'Opzionale', + badge : 'Distintivo', + caption : 'Didascalia', + image : 'Immagine', + delete : 'Sei sicuro di voler eliminare questo articolo?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ja.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ja.js new file mode 100644 index 0000000..7beef88 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ja.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ja', {//Japanese + plugin : 'ブートストラップタブ', + title : 'タイトル', + content : 'コンテンツ', + htmlIsAllowed : 'HTMLが許可されます', + addNewItem : '[新しい項目の追加', + minimum : 'プラグインは、少なくとも1つのアイテムを含んでいなければなりません', + link : 'リンク', + style : 'スタイル', + type : 'タイプ', + size : 'サイズ', + blockLevel : 'ブロックレベル', + active : 'アクティブ', + enabled : '使用可能', + text : 'テキスト', + preview : 'プレビュー', + optional : 'オプショナル', + badge : 'バッジ', + caption : 'キャプション', + image : '画像', + delete : 'あなたはこの項目を削除してもよろしいていますか?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ka.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ka.js new file mode 100644 index 0000000..9f62d14 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ka.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ka', {//Georgian + plugin : 'ჩატვირთვის Tab', + title : 'სათაური', + content : 'შინაარსი', + htmlIsAllowed : 'HTML ნებადართულია', + addNewItem : 'სანიშნეს New Item', + minimum : 'მოდული უნდა შეიცავდეს მინიმუმ 1 ცალი', + link : 'ლინკი', + style : 'სტილი', + type : 'ტიპი', + size : 'ზომა', + blockLevel : 'Block დონე', + active : 'აქტიური', + enabled : 'ჩართულია', + text : 'ტექსტი', + preview : 'Preview', + optional : 'სურვილისამებრ', + badge : 'სამკერდე', + caption : 'წარწერა', + image : 'Image', + delete : 'დარწმუნებული ხართ, რომ გსურთ წაშალოთ ეს ნივთი?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/km.js b/libraries/ckeditor/plugins/bootstrapTab/lang/km.js new file mode 100644 index 0000000..b790626 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/km.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'km', {//Khmer + plugin : 'ចាប់ផ្ដើមផ្ទាំង', + title : 'ចំណងជើង', + content : 'មាតិកា', + htmlIsAllowed : 'HTML ដែលត្រូវបានអនុញ្ញាត', + addNewItem : 'បន្ថែមធាតុថ្មី', + minimum : 'កម្មវិធីជំនួយត្រូវតែមានយ៉ាងហោចណាស់ 1 ធាតុ', + link : 'តំណភ្ជាប់', + style : 'រចនាប័ទ្ម', + type : 'ប្រភេទ', + size : 'ទំហំ', + blockLevel : 'ប្លុកកម្រិត', + active : 'ដែលសកម្ម', + enabled : 'បានបើក', + text : 'អត្ថបទ', + preview : 'ការមើលជាមុន', + optional : 'ជម្រើស', + badge : 'ផ្លាកសញ្ញា', + caption : 'ចំណងជើង', + image : 'រូបភាព', + delete : 'តើអ្នកប្រាកដជាចង់លុបធាតុនេះឬ?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ko.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ko.js new file mode 100644 index 0000000..3aa4b81 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ko.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ko', {//Korean + plugin : '부트 스트랩 탭', + title : '이름', + content : '함유량', + htmlIsAllowed : 'HTML이 허용됩니다', + addNewItem : '새 항목 추가', + minimum : '플러그인은 적어도 1 개 항목을 포함해야', + link : '링크', + style : '스타일', + type : '유형', + size : '크기', + blockLevel : '블록 레벨', + active : '활동적인', + enabled : '사용', + text : '본문', + preview : '시사', + optional : '선택', + badge : '배지', + caption : '표제', + image : '영상', + delete : '이 항목을 삭제 하시겠습니까?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ku.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ku.js new file mode 100644 index 0000000..b7d1037 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ku.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ku', {//Kurdish + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/lt.js b/libraries/ckeditor/plugins/bootstrapTab/lang/lt.js new file mode 100644 index 0000000..830e045 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/lt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'lt', {//Lithuanian + plugin : 'Bootstrap Tab', + title : 'Pavadinimas', + content : 'Turinys', + htmlIsAllowed : 'HTML Leidžiamas', + addNewItem : 'Pridėti Naują Elementą', + minimum : 'Įskiepis turi būti bent 1 punktą', + link : 'Ryšys', + style : 'Stilius', + type : 'Tipas', + size : 'Dydis', + blockLevel : 'Blokuoti Lygis', + active : 'Aktyvus', + enabled : 'Įjungta', + text : 'Tekstas', + preview : 'Peržiūrėti', + optional : 'Neprivalomas', + badge : 'ženklelis', + caption : 'Antraštė', + image : 'Vaizdas', + delete : 'Ar tikrai norite ištrinti šį elementą?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/lv.js b/libraries/ckeditor/plugins/bootstrapTab/lang/lv.js new file mode 100644 index 0000000..58f668d --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/lv.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'lv', {//Latvian + plugin : 'Bootstrap Tab', + title : 'Virsraksts', + content : 'Saturs', + htmlIsAllowed : 'HTML Ir Atļauts', + addNewItem : 'Pievienot Jaunu Elementu', + minimum : 'Plugin jābūt vismaz 1 objektu', + link : 'Saite', + style : 'Stils', + type : 'Tips', + size : 'Izmērs', + blockLevel : 'Block Level', + active : 'Aktīvs', + enabled : 'Enabled', + text : 'Teksts', + preview : 'Preview', + optional : 'Fakultatīvs', + badge : 'žetons', + caption : 'Virsraksts', + image : 'Attēls', + delete : 'Vai tiešām vēlaties dzēst šo posteni?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/mk.js b/libraries/ckeditor/plugins/bootstrapTab/lang/mk.js new file mode 100644 index 0000000..dd791f2 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/mk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'mk', {//Macedonian + plugin : 'Bootstrap Tab', + title : 'Наслов', + content : 'Cодржина', + htmlIsAllowed : 'HTML е дозволено', + addNewItem : 'Додадете нова ставка', + minimum : 'Приклучокот мора contian најмалку 1 точка', + link : 'Линк', + style : 'стил', + type : 'тип', + size : 'големина', + blockLevel : 'блок ниво', + active : 'активни', + enabled : 'овозможено', + text : 'текст', + preview : 'преглед', + optional : 'Изборно', + badge : 'значка', + caption : 'Легенда', + image : 'слика', + delete : 'Дали сте сигурни дека сакате да ја избришете оваа точка?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/mn.js b/libraries/ckeditor/plugins/bootstrapTab/lang/mn.js new file mode 100644 index 0000000..d6cc7e0 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/mn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'mn', {//Mongolian + plugin : 'эхлүүлэгч Tab', + title : 'гарчиг', + content : 'Агуулга', + htmlIsAllowed : 'HTML зөвшөөрөл', + addNewItem : 'Шинэ Барааны нэмнэ', + minimum : 'Залгаас наад зах нь 1 дээр төстэй эд зүйлсийг contian байх ёстой', + link : 'Сэтгэгдлийн холбоос', + style : 'Style', + type : 'төрөл', + size : 'Хэмжээ', + blockLevel : 'Блок түвшин', + active : 'Идэвхтэй', + enabled : 'идэвхжсэн', + text : 'Текст', + preview : 'Урьдчилан харах', + optional : 'Нэмэлт', + badge : 'Авлаа', + caption : 'Caption', + image : 'Зургийн', + delete : 'Хэрэв та дээр төстэй эд зүйлсийг устгахыг хүсэж та итгэлтэй байна уу?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ms.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ms.js new file mode 100644 index 0000000..6fe392b --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ms.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ms', {//Malay + plugin : 'Bootstrap Tab', + title : 'Tajuk', + content : 'Kandungan', + htmlIsAllowed : 'HTML Adalah Dibenarkan', + addNewItem : 'Tambah Baru Perkara', + minimum : 'Plugin mesti mengandungi sekurang-kurangnya 1 item', + link : 'Oautan', + style : 'Style', + type : 'Jenis', + size : 'Saiz', + blockLevel : 'Sekat Tahap', + active : 'Aktif', + enabled : 'Membolehkan', + text : 'Teks', + preview : 'Preview', + optional : 'Pilihan', + badge : 'Badge', + caption : 'Caption', + image : 'Imej', + delete : 'Adakah anda pasti anda mahu memadam item ini?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/nb.js b/libraries/ckeditor/plugins/bootstrapTab/lang/nb.js new file mode 100644 index 0000000..b98ac8a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/nb.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'nb', {//Norwegian + plugin : 'Bootstrap Tab', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/nl.js b/libraries/ckeditor/plugins/bootstrapTab/lang/nl.js new file mode 100644 index 0000000..823d437 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/nl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'nl', {//Dutch + plugin : 'Bootstrap Tab', + title : 'Titel', + content : 'Inhoud', + htmlIsAllowed : 'HTML is toegestaan', + addNewItem : 'Nieuw item toevoegen', + minimum : 'Plugin moet minstens 1 item bevatten', + link : 'Link', + style : 'Stijl', + type : 'Type', + size : 'Grootte', + blockLevel : 'Blok Niveau', + active : 'Actief', + enabled : 'Ingeschakeld', + text : 'Tekst', + preview : 'Voorbeeld', + optional : 'Facultatief', + badge : 'Insigne', + caption : 'Onderschrift', + image : 'Afbeelding', + delete : 'Bent u zeker dat u dit item wilt verwijderen?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/no.js b/libraries/ckeditor/plugins/bootstrapTab/lang/no.js new file mode 100644 index 0000000..409142f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/no.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'no', { + plugin : 'Bootstrap Tab', + title : 'Tittel', + content : 'Innhold', + htmlIsAllowed : 'HTML er Tillatt', + addNewItem : 'Legg Ttil Nytt Element', + minimum : 'Plugin må inneholde minst ett element', + link : 'Link', + style : 'Stil', + type : 'Type', + size : 'Størrelse', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktivert', + text : 'Tekst', + preview : 'Forhåndsvisning', + optional : 'Valgfritt', + badge : 'Badge', + caption : 'Caption', + image : 'Bilde', + delete : 'Er du sikker på at du vil slette dette elementet?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/pl.js b/libraries/ckeditor/plugins/bootstrapTab/lang/pl.js new file mode 100644 index 0000000..728540f --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/pl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'pl', {//Polish + plugin : 'Bootstrap Tab', + title : 'Tytuł', + content : 'Zawartość', + htmlIsAllowed : 'HTML jest dozwolone', + addNewItem : 'Dodaj nowy element', + minimum : 'Wtyczka musi zawierać co najmniej jeden element', + link : 'Powiązanie', + style : 'Rozmiar', + type : 'Typ', + size : 'Rozmiar', + blockLevel : 'Zablokuj Poziom', + active : 'Aktywny', + enabled : 'Włączone', + text : 'Tekst', + preview : 'Zapowiedź', + optional : 'Fakultatywny', + badge : 'Odznaka', + caption : 'Podpis', + image : 'Obraz', + delete : 'Czy na pewno chcesz usunąć ten obiekt?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/pt-br.js b/libraries/ckeditor/plugins/bootstrapTab/lang/pt-br.js new file mode 100644 index 0000000..02cf930 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/pt-br.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'pt-br', { + plugin : 'Tab Bootstrap', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/pt.js b/libraries/ckeditor/plugins/bootstrapTab/lang/pt.js new file mode 100644 index 0000000..0256937 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/pt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'pt', {//Portuguese + plugin : 'Tab Bootstrap', + title : 'Título', + content : 'Conteúdo', + htmlIsAllowed : 'HTML é Permitido', + addNewItem : 'Add New Item', + minimum : 'Plugin deve conter pelo menos 1 artigo', + link : 'Link', + style : 'Estilo', + type : 'Tipo', + size : 'Tamanho', + blockLevel : 'Bloco de Nível', + active : 'Ativo', + enabled : 'Ativado', + text : 'Texto', + preview : 'Visualização', + optional : 'Opcional', + badge : 'Crachá', + caption : 'Subtítulo', + image : 'Imagem', + delete : 'Tem certeza de que deseja excluir este item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ro.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ro.js new file mode 100644 index 0000000..1520aa1 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ro.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ro', {//Romanian + plugin : 'Bootstrap Tab', + title : 'Titlu', + content : 'Conținut', + htmlIsAllowed : 'HTML Este Permise', + addNewItem : 'Add New Item', + minimum : 'Plugin trebuie să conțină cel puțin 1 articol', + link : 'Legătură', + style : 'Stil', + type : 'Tip', + size : 'Dimensiune', + blockLevel : 'Bloc Nivel', + active : 'Activ', + enabled : 'Activat', + text : 'Text', + preview : 'Avanpremieră', + optional : 'Facultativ', + badge : 'Insignă', + caption : 'Legendă', + image : 'Imagine', + delete : 'Sunteți sigur că doriți să ștergeți acest articol?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ru.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ru.js new file mode 100644 index 0000000..85234a4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ru.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ru', {//Russian + plugin : 'Bootstrap Tab', + title : 'название', + content : 'содержание', + htmlIsAllowed : 'HTML разрешено', + addNewItem : 'Добавить новый элемент', + minimum : 'Плагин должен содержать, по крайней мере, 1 пункт', + link : 'ссылка', + style : 'стиль', + type : 'тип', + size : 'размер', + blockLevel : 'Блок Уровень', + active : 'активный', + enabled : 'Включено', + text : 'текст', + preview : 'предварительный просмотр', + optional : 'необязательный', + badge : 'знак', + caption : 'подпись', + image : 'изображение', + delete : 'Вы уверены, что хотите удалить этот пункт?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/si.js b/libraries/ckeditor/plugins/bootstrapTab/lang/si.js new file mode 100644 index 0000000..2b9777d --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/si.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'si', {//Sinhala + plugin : 'ටැබ් බුට්ස්ට්රැප්', + title : 'දරන හිමිකම් ලියාපදිංචි කිරීෙම්', + content : 'අන්තර්ගත', + htmlIsAllowed : 'HTML අවසර දී ඇත්තේ', + addNewItem : 'නව විෂය එකතු කරන්න', + minimum : 'ප්ලගිනය අවම වශයෙන් 1 අයිතමය අඩංගු විය යුතුය', + link : 'ලින්ක්', + style : 'ස්ටයිල්', + type : 'වර්ගය', + size : 'තරම', + blockLevel : 'දරන ඉඩම් ෙකොටස්ෙලස ෙපන්නුම් ෙකොට ඇත්තා පෙළ', + active : 'ක්රියාකාරී', + enabled : 'සක්රීය', + text : 'පෙළ', + preview : 'පෙරදසුන', + optional : 'විකල්ප', + badge : 'බැජ්,', + caption : 'සිරස්තලය', + image : 'රූප', + delete : 'ඔබ මෙම අයිතමය මැකීමට අවශ්ය බව ඔබට විශ්වාසද?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sk.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sk.js new file mode 100644 index 0000000..c318c6e --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sk', {//Slovak + plugin : 'Bootstrap Tab', + title : 'Názov', + content : 'Obsah', + htmlIsAllowed : 'HTML Je Povolené', + addNewItem : 'Pridať Novú Položku', + minimum : 'Plugin musí obsahovať aspoň 1 položka', + link : 'Odkaz', + style : 'štýl', + type : 'Typ', + size : 'Veľkosť', + blockLevel : 'Block Level', + active : 'Aktívny', + enabled : 'Povolené', + text : 'Text', + preview : 'Preview', + optional : 'Voliteľný', + badge : 'Odznak', + caption : 'Titulok', + image : 'Obraz', + delete : 'Ste si istí, že chcete túto položku odstrániť?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sl.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sl.js new file mode 100644 index 0000000..9d455e9 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sl', {//Slovenian + plugin : 'Bootstrap Tab', + title : 'Naslov', + content : 'vsebina', + htmlIsAllowed : 'HTML je dovoljeno', + addNewItem : 'Dodaj nov predmet', + minimum : 'Plugin mora vsebovati vsaj 1 izdelek', + link : 'Link', + style : 'Style', + type : 'Tip', + size : 'Velikost', + blockLevel : 'Block Raven', + active : 'Aktivna', + enabled : 'Omogočeno', + text : 'Besedilo', + preview : 'Predogled', + optional : 'Neobvezno', + badge : 'Značka', + caption : 'Napis', + image : 'Slika', + delete : 'Ali ste prepričani, da želite izbrisati ta element?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sq.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sq.js new file mode 100644 index 0000000..cf0c073 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sq.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sq', {//Albanian + plugin : 'Bootstrap Tab', + title : 'Titull', + content : 'Përmbajtje', + htmlIsAllowed : 'HTML është e Lejuar', + addNewItem : 'Add New Item', + minimum : 'Plugin duhet të përmbajë të paktën 1 pika', + link : 'Lidhje', + style : 'Stil', + type : 'Lloj', + size : 'Madhësi', + blockLevel : 'Block Niveli', + active : 'Aktiv', + enabled : 'Enabled', + text : 'Ttekst', + preview : 'Shikim Paraprak', + optional : 'Fakultativ', + badge : 'Distinktiv', + caption : 'Titull', + image : 'Imazh', + delete : 'A jeni i sigurt se doni të fshini këtë artikull?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sr-latn.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sr-latn.js new file mode 100644 index 0000000..9191706 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sr-latn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sr-latn', { + plugin : 'Боотстрап Таб', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sr.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sr.js new file mode 100644 index 0000000..082f956 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sr', {//Serbian + plugin : 'Боотстрап Таб', + title : 'наслов', + content : 'садржина', + htmlIsAllowed : 'ХТМЛ Алловед', + addNewItem : 'Додај нову ставку', + minimum : 'Плугин мора да садржи најмање 1 итем', + link : 'линк', + style : 'стил', + type : 'тип', + size : 'величина', + blockLevel : 'блок Ниво', + active : 'активан', + enabled : 'Омогућено', + text : 'текст', + preview : 'превиев', + optional : 'оптионал', + badge : 'значка', + caption : 'натпис', + image : 'слика', + delete : 'Да ли сте сигурни да желите да избришете ову ставку?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/sv.js b/libraries/ckeditor/plugins/bootstrapTab/lang/sv.js new file mode 100644 index 0000000..754709c --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/sv.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'sv', {//Swedish + plugin : 'Bootstrap Tab', + title : 'Titel', + content : 'Innehåll', + htmlIsAllowed : 'HTML är Tillåtet', + addNewItem : 'Add New Item', + minimum : 'Plugin måste innehålla minst 1 objekt', + link : 'länk', + style : 'Stil', + type : 'Typ', + size : 'Storlek', + blockLevel : 'Block Nivå', + active : 'Aktiv', + enabled : 'Aktiverad', + text : 'Text', + preview : 'Förhandsgranska', + optional : 'Valfritt', + badge : 'Badge', + caption : 'Bildtext', + image : 'Bild', + delete : 'Är du säker på att du vill radera detta föremål?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/th.js b/libraries/ckeditor/plugins/bootstrapTab/lang/th.js new file mode 100644 index 0000000..42b7154 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/th.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'th', {//Thai + plugin : 'บูตแท็บ', + title : 'ชื่อเรื่อง', + content : 'เนื้อหา', + htmlIsAllowed : 'อนุญาตให้ใช้ HTML', + addNewItem : 'เพิ่มรายการใหม่', + minimum : 'ปลั๊กอินต้องมีอย่างน้อย 1 รายการ', + link : 'ลิงค์', + style : 'สไตล์', + type : 'ชนิด', + size : 'ขนาด', + blockLevel : 'ระดับ Block', + active : 'กระตือรือร้น', + enabled : 'ที่เปิดใช้งาน', + text : 'ข้อความ', + preview : 'ดูก่อน', + optional : 'ไม่จำเป็น', + badge : 'สัญลักษณ์', + caption : 'คำบรรยายภาพ', + image : 'ภาพ', + delete : 'คุณแน่ใจว่าคุณต้องการลบรายการนี้ได้?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/tr.js b/libraries/ckeditor/plugins/bootstrapTab/lang/tr.js new file mode 100644 index 0000000..1afbe0a --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/tr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'tr', {//Turkish + plugin : 'Bootstrap Tab', + title : 'Başlık', + content : 'Içerik', + htmlIsAllowed : 'HTML İzin Edilir', + addNewItem : 'Yeni Öğe Ekle', + minimum : 'Eklenti en az 1 öğe içermelidir', + link : 'Bağlantı', + style : 'Stil', + type : 'Tip', + size : 'Boyut', + blockLevel : 'Blok Seviye', + active : 'Aktif', + enabled : 'Etkin', + text : 'Metin', + preview : 'Önizleme', + optional : 'Isteğe Bağlı', + badge : 'Rozet', + caption : 'Başlık', + image : 'Görüntü', + delete : 'Bu öğeyi silmek istediğinizden emin misiniz?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/tt.js b/libraries/ckeditor/plugins/bootstrapTab/lang/tt.js new file mode 100644 index 0000000..46903ec --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/tt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'tt', {//Tatar + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/ug.js b/libraries/ckeditor/plugins/bootstrapTab/lang/ug.js new file mode 100644 index 0000000..c832fd2 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/ug.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'ug', {//Uighur + plugin : 'Bootstrap Tab', + title : 'Title', + content : 'Content', + htmlIsAllowed : 'HTML is Allowed', + addNewItem : 'Add New Item', + minimum : 'Plugin must contain at least 1 item', + link : 'Link', + style : 'Style', + type : 'Type', + size : 'Size', + blockLevel : 'Block Level', + active : 'Active', + enabled : 'Enabled', + text : 'Text', + preview : 'Preview', + optional : 'Optional', + badge : 'Badge', + caption : 'Caption', + image : 'Image', + delete : 'Are you sure you want to delete this item?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/uk.js b/libraries/ckeditor/plugins/bootstrapTab/lang/uk.js new file mode 100644 index 0000000..6554733 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/uk.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'uk', {//Ukrainian + plugin : 'Bootstrap Tab', + title : 'Назва', + content : 'зміст', + htmlIsAllowed : 'HTML дозволено', + addNewItem : 'Додати новий елемент', + minimum : 'Плагін повинен містити, принаймні, 1 пункт', + link : 'посилання', + style : 'стиль', + type : 'Тип', + size : 'Розмір', + blockLevel : 'блок Рівень', + active : 'активний', + enabled : 'включено', + text : 'текст', + preview : 'Попередній перегляд', + optional : 'необов\'язковий', + badge : 'знак', + caption : 'підпис', + image : 'зображення', + delete : 'Ви впевнені, що хочете видалити цей пункт?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/vi.js b/libraries/ckeditor/plugins/bootstrapTab/lang/vi.js new file mode 100644 index 0000000..ea291ee --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/vi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'vi', {//Vietnamese + plugin : 'Bootstrap Tab', + title : 'Tiêu đề', + content : 'Nội Dung', + htmlIsAllowed : 'HTML đang Phép', + addNewItem : 'Add New Item', + minimum : 'Plugin phải có ít nhất 1 sản phẩm', + link : 'Liên kết', + style : 'Phong Cách', + type : 'Kiểu', + size : 'Kích Thước', + blockLevel : 'Lắc Tay', + active : 'Hoạt động', + enabled : 'Bật', + text : 'Bản Văn', + preview : 'Xem Trước', + optional : 'Không Bắt Buộc', + badge : 'Badge', + caption : 'Phụ đề', + image : 'hình ảnh', + delete : 'Bạn có chắc chắn muốn xóa ảnh này?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/zh-cn.js b/libraries/ckeditor/plugins/bootstrapTab/lang/zh-cn.js new file mode 100644 index 0000000..0ada8d4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/zh-cn.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'zh-cn', {//Chinese Simplified + plugin : '引导标签', + title : '称号', + content : '内容', + htmlIsAllowed : 'HTML是允许的', + addNewItem : '添加新项', + minimum : '插件必须至少包含1项', + link : '链接', + style : '风格', + type : '类型', + size : '尺寸', + blockLevel : '块级', + active : '积极', + enabled : '启用', + text : '文本', + preview : '预览', + optional : '自选', + badge : '徽', + caption : '字幕', + image : '图像', + delete : '你确定你要删除这个项目吗?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/lang/zh.js b/libraries/ckeditor/plugins/bootstrapTab/lang/zh.js new file mode 100644 index 0000000..53296e4 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/lang/zh.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('bootstrapTab', 'zh', {//Chinese Traditional + plugin : '引導標籤', + title : '稱號', + content : '內容', + htmlIsAllowed : 'HTML是允許的', + addNewItem : '添加新項', + minimum : '插件必須至少包含1項', + link : '鏈接', + style : '風格', + type : '類型', + size : '尺寸', + blockLevel : '塊級', + active : '積極', + enabled : '啟用', + text : '文本', + preview : '預覽', + optional : '自選', + badge : '徽章', + caption : '字幕', + image : '圖像', + delete : '你確定你要刪除這個項目嗎?' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/bootstrapTab/plugin.js b/libraries/ckeditor/plugins/bootstrapTab/plugin.js new file mode 100644 index 0000000..5af32e7 --- /dev/null +++ b/libraries/ckeditor/plugins/bootstrapTab/plugin.js @@ -0,0 +1,114 @@ +/* + Plugin : Bootstrap Tab + Author : Michael Janea (michaeljanea.com) + Version : 1.5.1 +*/ + +function bootstrapTab_in_array(bootstrapTab_needle, bootstrapTab_haystack) { + for (var i in bootstrapTab_haystack) { + if (bootstrapTab_haystack[i] == bootstrapTab_needle) return true + } + return false +}; + +function bootstrapTab_escapeHtml(bootstrapTab_text, bootstrapTab_allow_html) { + bootstrapTab_allow_html = bootstrapTab_allow_html || false; + var map = { + "<": "<", + ">": ">", + "'": ''', + "\r\n": '
', + "\n": '
', + "\r": '
' + }; + var bootstrapTab_el = document.createElement('div'); + bootstrapTab_el.innerHTML = bootstrapTab_text; + for (var bootstrapTab_i = 0; bootstrapTab_i < bootstrapTab_el.getElementsByTagName('pre').length; bootstrapTab_i++) { + bootstrapTab_el.getElementsByTagName('pre')[bootstrapTab_i].innerHTML = (bootstrapTab_el.getElementsByTagName('pre')[bootstrapTab_i].innerHTML).replace(/(\r\n|\n|\r)/gm, "
") + } + bootstrapTab_text = bootstrapTab_el.innerHTML; + return bootstrapTab_allow_html ? bootstrapTab_text.replace(/[']/g, function (m) { + return map[m] + }) : bootstrapTab_text.replace(/[<'>]/g, function (m) { + return map[m] + }) +}; +CKEDITOR.plugins.add('bootstrapTab', { + lang: ['en', 'af', 'sq', 'ar', 'eu', 'bn', 'bs', 'bg', 'ca', 'zh-cn', 'zh', 'hr', 'cs', 'da', 'nl', 'en-au', 'en-ca', 'en-gb', 'eo', 'et', 'fo', 'fi', 'fr', 'fr-ca', 'gl', 'ka', 'de', 'el', 'gu', 'he', 'hi', 'hu', 'is', 'id', 'it', 'ja', 'km', 'ko', 'ku', 'lv', 'lt', 'mk', 'ms', 'mn', 'no', 'nb', 'fa', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sr', 'sr-latn', 'si', 'sk', 'sl', 'es', 'sv', 'tt', 'th', 'tr', 'ug', 'uk', 'vi', 'cy'], + requires: 'widget', + icons: 'bootstrapTab', + init: function (editor) { + editor.widgets.add('BootstrapTab', { + button: editor.lang.bootstrapTab.plugin, + template: '
' + '' + '
' + '
' + '
' + '
', + mask: true, + allowedContent: 'div(*)[*];ul(*)[*];li(*)[*];a(*)[*]', + dialog: 'bootstrapTabDialog', + upcast: function (element) { + return element.name == 'div' && element.attributes.role == 'tabpanel' + }, + init: function () { + var bootstrapTab_total = 0; + for (var bootstrapTab_i = 0; bootstrapTab_i < this.element.$.children[0].children.length; bootstrapTab_i++) { + for (var bootstrapTab_j = 0; bootstrapTab_j < this.element.$.children[0].children[bootstrapTab_i].childNodes.length; bootstrapTab_j++) { + switch ((this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].nodeName).toLowerCase()) { + case 'li': + if ((this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].children[0].nodeName).toLowerCase() == 'a') { + eval("this.setData('bootstrapTab_item" + bootstrapTab_j + "', '" + bootstrapTab_escapeHtml(this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].firstChild.innerHTML, false) + "')"); + var bootstrapTab_itemClass = bootstrapTab_in_array('active', this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].className.split(' ')) ? 'bootstrapTab active' : 'bootstrapTab'; + bootstrapTab_itemClass = bootstrapTab_itemClass != null ? bootstrapTab_itemClass : 'bootstrapTab'; + eval("this.setData('bootstrapTab_itemClass" + bootstrapTab_j + "', '" + bootstrapTab_itemClass + "')") + } + break; + case 'div': + if (bootstrapTab_in_array('tab-pane', this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].className.split(' '))) { + eval("this.setData('bootstrapTab_content" + bootstrapTab_j + "', '" + bootstrapTab_escapeHtml(this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].innerHTML, editor.config.mj_variables_allow_html) + "')"); + var bootstrapTab_contentClass = bootstrapTab_in_array('active', this.element.$.children[0].children[bootstrapTab_i].childNodes[bootstrapTab_j].className.split(' ')) ? 'tab-pane active' : 'tab-pane'; + eval("this.setData('bootstrapTab_contentClass" + bootstrapTab_j + "', '" + bootstrapTab_contentClass + "')") + } + break + } + bootstrapTab_total++ + } + } + this.setData('bootstrapTab_total', bootstrapTab_total) + }, + data: function () { + var bootstrapTab_d = new Date(); + var bootstrapTab_id = bootstrapTab_d.getTime(); + var bootstrapTab_item = bootstrapTab_contents = ''; + for (var bootstrapTab_i = 0; bootstrapTab_i <= this.data.bootstrapTab_total; bootstrapTab_i++) { + eval("bootstrapTab_title = this.data.bootstrapTab_item" + bootstrapTab_i); + bootstrapTab_title = bootstrapTab_title != undefined ? bootstrapTab_title : ''; + eval("bootstrapTab_content = this.data.bootstrapTab_content" + bootstrapTab_i); + bootstrapTab_content = bootstrapTab_content != undefined ? bootstrapTab_content : ''; + eval("bootstrapTab_itemClass = this.data.bootstrapTab_itemClass" + bootstrapTab_i); + bootstrapTab_itemClass = bootstrapTab_itemClass != undefined ? bootstrapTab_itemClass : ''; + eval("bootstrapTab_contentClass = this.data.bootstrapTab_contentClass" + bootstrapTab_i); + bootstrapTab_contentClass = bootstrapTab_contentClass != undefined ? bootstrapTab_contentClass : ''; + if (bootstrapTab_title) { + + if ( bootstrapTab_i == 0 ) + var a_class = 'active'; + else + var a_class = ''; + + bootstrapTab_item += ' '; + bootstrapTab_contents += '
' + bootstrapTab_escapeHtml(bootstrapTab_content, editor.config.mj_variables_allow_html) + '
' + } + } + this.element.setAttribute('id', 'collapse' + bootstrapTab_id); + this.element.$.innerHTML = '
' + bootstrapTab_contents + '
' + } + }); + CKEDITOR.dialog.add('bootstrapTabDialog', CKEDITOR.plugins.getPath('bootstrapTab') + 'dialogs/bootstrapTab.js'); + CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('bootstrapTab') + 'css/style.css') + } +}); + +for(var i in CKEDITOR.instances){ + CKEDITOR.instances[i].ui.addButton('BootstrapTab', { + command : 'bootstrapTab', + icon : this.path + 'icons/bootstrapTab.png', + }); +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.css b/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.css new file mode 100644 index 0000000..5abdf61 --- /dev/null +++ b/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.css @@ -0,0 +1,14 @@ +div.cke_dialog_ui_input_select, +.cke_dialog_ui_input_select{ + width: 100%; +} + +.select2-drop, .select2-dropdown, .select2-container{ + z-index: 100000 !important; +} + +.select2-dropdown{ + margin-left: 8px; +} + +.select2-chosen{ margin-top: 7px; } \ No newline at end of file diff --git a/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.js b/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.js new file mode 100644 index 0000000..0c388f2 --- /dev/null +++ b/libraries/ckeditor/plugins/ckawesome/dialogs/ckawesome.js @@ -0,0 +1,149 @@ + +CKEDITOR.dialog.add('ckawesomeDialog', function( editor ) { + function getCKAwesomeIcons(selectList ){ + var result = []; + var scriptUrl = editor.fontawesomePath; + + $.ajax({ + url: scriptUrl, + type: 'get', + dataType: 'html', + async: false, + success: function(response) { + var excludeStyles = [".fa.",".fa",".fa-lg",".fa-2x",".fa-3x",".fa-4x",".fa-5x",".fa-fw",".fa-ul",".fa-ul>",".fa-li",".fa-border",".fa-pull-left",".fa-pull-right",".fa-spin",".fa-pulse",".fa-rotate-90",".fa-rotate-180",".fa-rotate-270",".fa-flip-horizontal",".fa-flip-vertical",".fa-stack",".fa-stack-1x",".fa-stack-2x",".fa-inverse"]; + var regxstyles = new RegExp(/\.[a-zA-Z_][\w-_]*[^\.\s\{#:\,;]/,"g" ); + var styles = response.match(regxstyles); + styles.sort(); + $.each(styles, function( index, value ) { + var xstart=value.substring(0, 3).substring(1); + if (xstart != 'fa' || excludeStyles.indexOf(value) > 0){ return; } + value = value.substring(1); + selectList.add(value, value); + }) + + }, + error: function (jqXHR, exception) { + alert("Error loading Font Awesome css: \n" + scriptUrl); + }, + }); + } + + function getSelectionOptions(selectList, start, inc, many){ + var result = []; + var val = start; + + result.push(start); + + many = many > 0 ? many : 5; + for(var i = 0; i < many; i++){ + val += inc; + result.push(val); + } + + $.each(result, function( index, value ) { + selectList.add(value, value); + }) + } + + function formatCKAwesome (icon) { + if (!icon.id) { return icon.text; } + var text = icon.text.replace(/fa-|\.|\-/gi, " "); + var icon = $(' ' + text + ""); + return icon; + }; + + return { + title: 'Insert CKAwesome', + minWidth: 200, + minHeight: 200, + + contents: [ + { + id: 'options', + label: 'Basic Settings', + elements: [ + { + type: 'select', + id: 'ckawesomebox', + label: 'Select font Awesome', + validate: CKEDITOR.dialog.validate.notEmpty( "Font Awesome field cannot be empty." ), + items: [[ editor.lang.common.notSet, '' ]], + onLoad: function () { + getCKAwesomeIcons(this); + var selectbx = $('#' + this.getInputElement().getAttribute('id')); + $(selectbx).select2({ width: "100%", templateResult: formatCKAwesome, templateSelection: formatCKAwesome}); + }, + onShow: function(){ + var selectbx = $('#' + this.getInputElement().getAttribute('id')); + $(selectbx).val('').trigger('change') ; + } + }, + { + type: 'select', + id: 'textsize', + label: 'Select size', + items: [[ editor.lang.common.notSet, '' ]], + onLoad: function (widget) { + getSelectionOptions(this, 8, 1, 42); + } + }, + { + type: "hbox", + padding: 0, + widths: ["80%", "20%"], + children: [ + { + id: 'fontcolor', + type: 'text', + label: 'Select color', + onChange: function( element ) { + var idEl = $('#' +this.getInputElement().getAttribute('id')); + idEl.css("background-color", idEl.val()); + }, + onKeyUp: function( element ) { + var idEl = $('#' + this.getInputElement().getAttribute('id')); + idEl.css("background-color", idEl.val()); + }, + onShow: function(){ + var idEl = $('#' + this.getInputElement().getAttribute('id')); + idEl.css("background-color", ""); + } + }, + { + type: "button", + id: "fontcolorChooser", + "class": "colorChooser", + label: "Color", + style: "margin-left: 8px", + onLoad: function () { + this.getElement().getParent().setStyle("vertical-align", "bottom") + }, + onClick: function () { + editor.getColorFromDialog(function (color) { + color && this.getDialog().getContentElement("options", "fontcolor").setValue( color ); + this.focus() + }, this) + } + } + ] + } + ] + }, + ], + onOk: function() { + var dialog = this; + + var cka = editor.document.createElement( 'span' ); + var cka_size = dialog.getValueOf( 'options', 'textsize' ); + var cka_color = dialog.getValueOf( 'options', 'fontcolor' ); + var cka_class = "fa fa-fw " + dialog.getValueOf( 'options', 'ckawesomebox' ); + var cka_style = ( cka_size != '' ? 'font-size: '+cka_size+'px;' : '' ) + ( cka_color != '' ? 'color: '+cka_color+';' : '' ) ; + + cka.setAttribute( 'class', cka_class ); + if ( cka_style ) cka.setAttribute( 'style', cka_style ); + + editor.insertElement( cka ); + } + }; +}); + diff --git a/libraries/ckeditor/plugins/ckawesome/icons/ckawesome.png b/libraries/ckeditor/plugins/ckawesome/icons/ckawesome.png new file mode 100644 index 0000000..479af14 Binary files /dev/null and b/libraries/ckeditor/plugins/ckawesome/icons/ckawesome.png differ diff --git a/libraries/ckeditor/plugins/ckawesome/plugin.js b/libraries/ckeditor/plugins/ckawesome/plugin.js new file mode 100644 index 0000000..dabb9ef --- /dev/null +++ b/libraries/ckeditor/plugins/ckawesome/plugin.js @@ -0,0 +1,33 @@ +/** + * CKAwesome + * ========= + * http://blackdevelop.com/io/ckawesome/ + * + * Copyright (C) 2017 by Blackdevelop.com + * Licence under GNU GPL v3. + */ + +CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.css'); }); +CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'dialogs/ckawesome.css'); }); +CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.js'); +CKEDITOR.dtd.$removeEmpty.span = 0; +CKEDITOR.plugins.add('ckawesome', { + requires: 'colordialog', + icons: 'ckawesome', + + init: function(editor) { + var config = editor.config; + editor.fontawesomePath = config.fontawesomePath ? config.fontawesomePath : CKEDITOR.plugins.getPath('ckawesome') + 'fontawesome/css/font-awesome.min.css'; + + CKEDITOR.document.appendStyleSheet(editor.fontawesomePath); + editor.addContentsCss(editor.fontawesomePath); + + CKEDITOR.dialog.add('ckawesomeDialog', this.path + 'dialogs/ckawesome.js'); + editor.addCommand( 'ckawesome', new CKEDITOR.dialogCommand( 'ckawesomeDialog', { allowedContent: 'span[class,style]{color,font-size}(*);' })); + editor.ui.addButton( 'ckawesome', { + label: 'Insert CKAwesome', + command: 'ckawesome', + toolbar: 'insert', + }); + } +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.css b/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.css new file mode 100644 index 0000000..76de04d --- /dev/null +++ b/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.js b/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.js new file mode 100644 index 0000000..684edf3 --- /dev/null +++ b/libraries/ckeditor/plugins/ckawesome/resources/select2/select2.full.min.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
    ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
  • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
      '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
    • ×
    • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); +if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
    • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; +},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a ` + + +
      + +
      + +
      +
      + +
      +
      This folder is empty
      +
      + +
      +
      No files found
      +
      + +
      + + + + +
      +
      + + + + + + +
      + +
      + +
      +
      +
      +
      + +
      +
      +
      Loading files...
      +
      +
      + +
      +
      + + + + + + + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + OK + Cancel +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      + OK + Cancel +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      + OK +
      +
      +
      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/js/alphamanager.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/js/alphamanager.js new file mode 100644 index 0000000..e1097e0 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/js/alphamanager.js @@ -0,0 +1,35 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(c){if(!c.document){throw new Error("jQuery requires a window with a document");}return b(c);}:b(a);}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b);},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase();};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this);},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this);},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b;},each:function(a,b){return m.each(this,a,b);},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b);}));},slice:function(){return this.pushStack(d.apply(this,arguments));},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[]);},end:function(){return this.prevObject||this.constructor(null);},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++){if(null!=(e=arguments[h])){for(d in e){a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));}}}return g;},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a);},noop:function(){},isFunction:function(a){return"function"===m.type(a);},isArray:Array.isArray||function(a){return"array"===m.type(a);},isWindow:function(a){return null!=a&&a==a.window;},isNumeric:function(a){return !m.isArray(a)&&a-parseFloat(a)>=0;},isEmptyObject:function(a){var b;for(b in a){return !1;}return !0;},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a)){return !1;}try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf")){return !1;}}catch(c){return !1;}if(k.ownLast){for(b in a){return j.call(a,b);}}for(b in a){}return void 0===b||j.call(a,b);},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a;},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b);})(b);},camelCase:function(a){return a.replace(o,"ms-").replace(p,q);},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase();},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++){if(d=b.apply(a[e],c),d===!1){break;}}}else{for(e in a){if(d=b.apply(a[e],c),d===!1){break;}}}}else{if(g){for(;f>e;e++){if(d=b.call(a[e],e,a[e]),d===!1){break;}}}else{for(e in a){if(d=b.call(a[e],e,a[e]),d===!1){break;}}}}return a;},trim:function(a){return null==a?"":(a+"").replace(n,"");},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c;},inArray:function(a,b,c){var d;if(b){if(g){return g.call(b,a,c);}for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++){if(c in b&&b[c]===a){return c;}}}return -1;},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d){a[e++]=b[d++];}if(c!==c){while(void 0!==b[d]){a[e++]=b[d++];}}return a.length=e,a;},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++){d=!b(a[f],f),d!==h&&e.push(a[f]);}return e;},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h){for(;g>f;f++){d=b(a[f],f,c),null!=d&&i.push(d);}}else{for(f in a){d=b(a[f],f,c),null!=d&&i.push(d);}}return e.apply([],i);},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)));},e.guid=a.guid=a.guid||m.guid++,e):void 0;},now:function(){return +new Date;},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase();});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a;}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0;},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++){if(this[b]===a){return b;}}return -1;},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536; +return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320);};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType;}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b));}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]){}a.length=c-1;}};}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a){return d;}if(1!==(k=b.nodeType)&&9!==k){return[];}if(p&&!e){if(f=_.exec(a)){if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode){return d;}if(h.id===j){return d.push(h),d;}}else{if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j){return d.push(h),d;}}}else{if(f[2]){return I.apply(d,b.getElementsByTagName(a)),d;}if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName){return I.apply(d,b.getElementsByClassName(j)),d;}}}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--){o[l]=s+qb(o[l]);}w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",");}if(x){try{return I.apply(d,w.querySelectorAll(x)),d;}catch(y){}finally{r||b.removeAttribute("id");}}}}return i(a.replace(R,"$1"),b,d,e);}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e;}return b;}function hb(a){return a[u]=!0,a;}function ib(a){var b=n.createElement("div");try{return !!a(b);}catch(c){return !1;}finally{b.parentNode&&b.parentNode.removeChild(b),b=null;}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--){d.attrHandle[c[e]]=b;}}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d){return d;}if(c){while(c=c.nextSibling){if(c===b){return -1;}}}return a?1:-1;}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a;};}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a;};}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--){c[e=f[g]]&&(c[e]=!(d[e]=c[e]));}});});}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a;}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1;},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m();},!1):g.attachEvent&&g.attachEvent("onunload",function(){m();})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className");}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length;}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
      ",a.firstChild.className="i",2===a.getElementsByClassName("i").length;}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length;}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[];}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b;};}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b;};}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0;}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++]){1===c.nodeType&&d.push(c);}return d;}return f;},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0;},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked");}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:");})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q);}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode; +return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)));}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return !0;}}}return !1;},B=b?function(a,b){if(a===b){return l=!0,0;}var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1);}:function(a,b){if(a===b){return l=!0,0;}var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g){return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;}if(f===g){return kb(a,b);}c=a;while(c=c.parentNode){h.unshift(c);}c=b;while(c=c.parentNode){i.unshift(c);}while(h[d]===i[d]){d++;}return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0;},e):n;},fb.matches=function(a,b){return fb(a,null,null,b);},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b))){try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType){return d;}}catch(e){}}return fb(b,n,null,[a]).length>0;},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b);},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null;},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a);},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++]){b===a[f]&&(e=d.push(f));}while(e--){a.splice(d[e],1);}}return k=null,a;},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent){return a.textContent;}for(a=a.firstChild;a;a=a.nextSibling){c+=e(a);}}else{if(3===f||4===f){return a.nodeValue;}}}else{while(b=a[d++]){c+=e(b);}}return c;},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4);},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a;},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3));}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return !0;}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b;};},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"");});},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0;};},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return !!a.parentNode;}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p]){if(h?l.nodeName.toLowerCase()===r:1===l.nodeType){return !1;}}o=p="only"===a&&!o&&"nextSibling";}return !0;}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop()){if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break;}}}else{if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w){m=j[1];}else{while(l=++n&&l&&l[p]||(m=n=0)||o.pop()){if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b)){break;}}}}return m-=e,m===d||m%d===0&&m/d>=0;}};},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--){d=K.call(a,f[g]),a[d]=!(c[d]=f[g]);}}):function(a){return e(a,0,c);}):e;}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--){(f=g[h])&&(a[h]=!(b[h]=f)); +}}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop();};}),has:hb(function(a){return function(b){return fb(a,b).length>0;};}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1;};}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do{if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang")){return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");}}while((b=b.parentNode)&&1===b.nodeType);return !1;};}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id;},root:function(a){return a===o;},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex);},enabled:function(a){return a.disabled===!1;},disabled:function(a){return a.disabled===!0;},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected;},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0;},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling){if(a.nodeType<6){return !1;}}return !0;},parent:function(a){return !d.pseudos.empty(a);},header:function(a){return Z.test(a.nodeName);},input:function(a){return Y.test(a.nodeName);},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b;},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase());},first:nb(function(){return[0];}),last:nb(function(a,b){return[b-1];}),eq:nb(function(a,b,c){return[0>c?c+b:c];}),even:nb(function(a,b){for(var c=0;b>c;c+=2){a.push(c);}return a;}),odd:nb(function(a,b){for(var c=1;b>c;c+=2){a.push(c);}return a;}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;){a.push(d);}return a;}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++){d+=a[b].value;}return d;}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d]){if(1===b.nodeType||e){return a(b,c,f);}}}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d]){if((1===b.nodeType||e)&&a(b,c,g)){return !0;}}}else{while(b=b[d]){if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f){return j[2]=h[2];}if(i[d]=j,j[2]=a(b,c,g)){return !0;}}}}};}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--){if(!a[e](b,c,d)){return !1;}}return !0;}:a[0];}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++){fb(a,b[d],c);}return c;}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++){(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));}return g;}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--){(l=j[k])&&(r[n[k]]=!(q[n[k]]=l));}}if(f){if(e||a){if(e){j=[],k=r.length;while(k--){(l=r[k])&&j.push(q[k]=l);}e(null,r=[],j,i);}k=r.length;while(k--){(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l));}}}else{r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r);}});}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b;},h,!0),l=rb(function(a){return K.call(b,a)>-1;},h,!0),m=[function(a,c,d){return !g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));}];f>i;i++){if(c=d.relative[a[i].type]){m=[rb(sb(m),c)];}else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++){if(d.relative[a[e].type]){break;}}return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a));}m.push(c);}}return sb(m);}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||0.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++]){if(o(l,g,h)){i.push(l);break;}}k&&(w=v);}c&&((l=!o&&l)&&p--,f&&r.push(l));}if(p+=q,c&&q!==p){m=0;while(o=b[m++]){o(r,s,g,h);}if(f){if(p>0){while(q--){r[q]||s[q]||(s[q]=G.call(i)); +}}s=ub(s);}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i);}return k&&(w=v,j=t),r;};return c?hb(f):f;}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--){f=wb(b[c]),f[u]?d.push(f):e.push(f);}f=A(a,xb(e,d)),f.selector=a;}return f;},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b){return e;}n&&(b=b.parentNode),a=a.slice(j.shift().value.length);}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type]){break;}if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a){return I.apply(e,f),e;}break;}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e;},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"));}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href");})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2);}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value");})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue;}),ib(function(a){return null==a.getAttribute("disabled");})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null;}),fb;}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b)){return m.grep(a,function(a,d){return !!b.call(a,d,a)!==c;});}if(b.nodeType){return m.grep(a,function(a){return a===b!==c;});}if("string"==typeof b){if(v.test(b)){return m.filter(b,a,c);}b=m.filter(b,a);}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c;});}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType;}));},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a){return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++){if(m.contains(d[b],this)){return !0;}}}));}for(b=0;e>b;b++){m.find(a,d[b],c);}return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c;},filter:function(a){return this.pushStack(w(this,a||[],!1));},not:function(a){return this.pushStack(w(this,a||[],!0));},is:function(a){return !!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length;}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a){return this;}if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b){return !b||b.jquery?(b||x).find(a):this.constructor(b).find(a);}if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b)){for(c in b){m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);}}return this;}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2]){return x.find(a);}this.length=1,this[0]=d;}return this.context=y,this.selector=a,this;}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this));};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c))){1===e.nodeType&&d.push(e),e=e[b];}return d;},sibling:function(a,b){for(var c=[];a;a=a.nextSibling){1===a.nodeType&&a!==b&&c.push(a);}return c;}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++){if(m.contains(this,c[b])){return !0;}}});},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++){for(c=this[d];c&&c!==b;c=c.parentNode){if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break;}}}return this.pushStack(f.length>1?m.unique(f):f);},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1;},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))));},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a)); +}});function D(a,b){do{a=a[b];}while(a&&1!==a.nodeType);return a;}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null;},parents:function(a){return m.dir(a,"parentNode");},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c);},next:function(a){return D(a,"nextSibling");},prev:function(a){return D(a,"previousSibling");},nextAll:function(a){return m.dir(a,"nextSibling");},prevAll:function(a){return m.dir(a,"previousSibling");},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c);},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c);},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a);},children:function(a){return m.sibling(a.firstChild);},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes);}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e);};});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0;}),b;}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++){if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break;}}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable());},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c);});}(arguments),b?e=h.length:c&&(g=d,j(c));}return this;},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1){h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--);}}),this;},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length);},empty:function(){return h=[],e=0,this;},disable:function(){return h=i=c=void 0,this;},disabled:function(){return !h;},lock:function(){return i=void 0,c||k.disable(),this;},locked:function(){return !i;},fireWith:function(a,c){return !h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this;},fire:function(){return k.fireWith(this,arguments),this;},fired:function(){return !!d;}};return k;},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c;},always:function(){return e.done(arguments).fail(arguments),this;},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments);});}),a=null;}).promise();},promise:function(a){return null!=a?m.extend(a,d):d;}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h;},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this;},e[f[0]+"With"]=g.fireWith;}),d.promise(e),a&&a.call(e,e),e;},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c);};},i,j,k;if(e>1){for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++){c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;}}return f||g.resolveWith(k,c),g.promise();}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this;},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0);},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body){return setTimeout(m.ready);}m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")));}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J));}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready());}m.ready.promise=function(b){if(!H){if(H=m.Deferred(),"complete"===y.readyState){setTimeout(m.ready);}else{if(y.addEventListener){y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);}else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement;}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left");}catch(a){return setTimeout(e,50);}I(),m.ready();}}();}}}return H.promise(b);};var K="undefined",L;for(L in m(k)){break;}k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d; +c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d));}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test;}catch(b){k.deleteExpando=!1;}}a=null;}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b;};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c;}catch(e){}m.data(a,b,c);}else{c=void 0;}}return c;}function P(a){var b;for(b in a){if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b){return !1;}}return !0;}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b){return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f;}}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--){delete d[b[e]];}if(c?!P(d):!m.isEmptyObject(d)){return;}}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null);}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a);},data:function(a,b,c){return Q(a,b,c);},removeData:function(a,b){return R(a,b);},_data:function(a,b,c){return Q(a,b,c,!0);},_removeData:function(a,b){return R(a,b,!0);}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--){g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));}m._data(f,"parsedAttrs",!0);}return e;}return"object"==typeof a?this.each(function(){m.data(this,a);}):arguments.length>1?this.each(function(){m.data(this,a,b);}):f?O(f,a,m.data(f,a)):void 0;},removeData:function(a){return this.each(function(){m.removeData(this,a);});}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0;},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b);};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire();},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c);})});}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++){b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));}}}return e?a:j?b.call(a):i?b(a[0],c):f;},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
      a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1; +}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test;}catch(d){k.deleteExpando=!1;}}}(),function(){var b,c,d=y.createElement("div");for(b in {submit:!0,change:!0,focusin:!0}){c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);}d=null;}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return !0;}function bb(){return !1;}function cb(){try{return y.activeElement;}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments);},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--){f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);}a=null;}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--){if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--){g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));}i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o]);}else{for(o in k){m.event.remove(a,o+b[j],c,d,!0);}}}m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"));}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode){o.push(h),l=h;}l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a);}n=0;while((h=o[n++])&&!b.isPropagationStopped()){b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());}if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]();}catch(r){}m.event.triggered=void 0,l&&(d[g]=l);}return b.result;}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped()){(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()));}}return k.postDispatch&&k.postDispatch.call(this,a),a.result;}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type)){for(;i!=this;i=i.parentNode||this){if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++){d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);}e.length&&g.push({elem:i,handlers:e});}}}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
      ","
      "],area:[1,"",""],param:[1,"",""],thead:[1,"","
      "],tr:[2,"","
      "],col:[2,"","
      "],td:[3,"","
      "],_default:k.htmlSerialize?[0,"",""]:[1,"X
      ","
      "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f){for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++){!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));}}return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f;}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked);}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a;}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a;}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a;}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++){m._data(c,"globalEval",!b||m._data(b[d],"globalEval"));}}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h){for(d=0,e=h[c].length;e>d;d++){m.event.add(b,c,h[c][d]);}}}g.data&&(g.data=m.extend({},g.data));}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events){m.removeEvent(b,d,e.handle);}b.removeAttribute(m.expando);}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue);}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a))){for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g){d[g]&&Bb(e,d[g]);}}if(b){if(c){for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++){Ab(e,d[g]);}}else{Ab(a,f);}}return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f;},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++){if(f=a[q],f||0===f){if("object"===m.type(f)){m.merge(p,f.nodeType?[f]:f);}else{if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0]; +while(e--){h=h.lastChild;}if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--){m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j);}}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild){h.removeChild(h.firstChild);}h=o.lastChild;}else{p.push(b.createTextNode(f));}}}}h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++]){if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++]){ob.test(f.type||"")&&c.push(f);}}}return h=null,o;},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++){if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events){for(e in g.events){n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);}}j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f));}}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a));},null,a,arguments.length);},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a);}});},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild);}});},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this);});},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling);});},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++){b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));}return this;},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild){a.removeChild(a.firstChild);}a.options&&m.nodeName(a,"select")&&(a.options.length=0);}return this;},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b);});},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a){return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;}if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++){b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);}b=0;}catch(e){}}b&&this.empty().append(a);},null,a,arguments.length);},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this);}),a&&(a.length||a.nodeType)?this:this.remove();},detach:function(a){return this.remove(a,!0);},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p)){return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b);});}if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++){d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);}if(f){for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++){d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));}}i=c=null;}return this;}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++){c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());}return this.pushStack(e);};});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f;}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("');$("body").append(g);}}}else{if(!oO.jh.DOWNLOAD){pa0109.dex(oO.njn("E_ActionDisabled"));}}},slim:function(b){NET.cbn(b,function(a){b.files=a.length;ap0109.stn(b);},function(a){pa0109.dex(a);});},her:function(h,e,f){oO.h5=[];oO.kf();ap0109.pf();ap0109.opu();if(!oO.jh.FILESLIST){pa0109.dex(oO.njn("E_ActionDisabled"));return;}var g=[];NET.cbn(h,function(b){for(var d=0;d0){var d=oO.vx0097(c);pa0109.tru3(d);}},gm:null,lp:null,fac3:function(){o0.gre();$.ajaxSetup({cache:false});pa0109.ric();pa0108.hoe();ap0109.vd(oO.h7);if(oO.jq["hideTitles"]===true){ap0109.hideTitles();}ap0109.se2(oO.hideCopyright);var g=false;if(g){ap0109.nhk();}ap0109.pol();oO.nnn3.push(pa0109.vey());pa0109.mnd();var d=o0.guf();if(d!=null&&d.length>0){pa0109.gm=pa0109.kj;}else{if(pa0108.fm(oO.jq.openLastDir)){pa0109.gm=pa0109.lol;}}var h=new oO.h9();pa0109.ui4();ap0109.cde();window.resizeTo(ap0109.sd(),oO.jq.height);pa0108.rt56();$("body").click(function(){ap0109.pop();});var f=pa0108.yt("alphamanagerview");if(!f){f=oO.jq.DEFAULTVIEW;}if(f){pa0109.xed(f);}ap0109.tij();$(window).resize(ap0109.tij);o0.tre2();document.oncontextmenu=function(){return false;};}};window["jq"]=jQuery;window["$"]=jQuery;$(function(){var b=false;if(!b||location.hostname==atob("anMucGx1cw==")||location.hostname==atob("anMubmV3")||location.hostname==atob("ZG9rc29mdC5jb20=")){pa0109.fac3();}else{pa0109.ric();pa0109.dex(atob("VGhpcyBpcyB0aGUgZGVtbyBjb3B5IG9mIEFscGhhIE1hbmFnZXIuIFBsZWFzZSBwdXJjaGFzZSBpdCBvbiBodHRwOi8vanMucGx1cw=="));}});var skin=o0.wer("skin");var link=document.createElement("link");link.href="skins/"+skin+"/skin.css";link.type="text/css";link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link);var doc=window.document;var scriptUrl="http://feather.aviary.com/imaging/v2/editor.js";var scripts=doc.getElementsByTagName("script");var alreadyExists=false;for(var i=0;i-1){return false;}var h=k.children;for(var j=0;j0?oO.gf256[oO.gf256.length-1]:null;}}},kf:function(){oO.gf256=[];oO.gf1=null;},dpkg:function(){for(var b=0;b0;var h=oO.gf256.length==1;var k=h&&oO.gf256[0].isImage;var g=oO.a002.obj!=null;if(g&&!oO.a002.isFile){if(oO.sf.fullPath.indexOf(oO.a002.getDir().fullPath)===0){g=false;}}oO.h7.file.select.enabled=oO.h1&&(oO.jq.multiSelect?f:h);oO.h7.file.upload.enabled=oO.jh.UPLOAD!="";oO.h7.file.preview.enabled=oO.h1&&h&&k;oO.h7.file.edit.enabled=oO.h1&&h&&k;oO.h7.file.download.enabled=oO.jh.DOWNLOAD!=""&&oO.h1&&f;oO.h7.file.paste.enabled=(oO.jh.COPYFILE!=""||oO.jh.MOVEFILE!="")&&oO.h1&&g;oO.h7.file.cut.enabled=oO.jh.MOVEFILE!=""&&oO.h1&&f;oO.h7.file.copy.enabled=oO.jh.COPYFILE!=""&&oO.h1&&f;oO.h7.file.rename.enabled=oO.jh.RENAMEFILE!=""&&oO.h1&&h;oO.h7.file.del.enabled=oO.jh.DELETEFILE!=""&&oO.h1&&f;oO.h7.file.order.enabled=oO.h1;oO.h7.file.search.enabled=oO.h1;oO.h7.file.view.enabled=oO.h1;var j=oO.sf==null?true:oO.sf.isRoot;oO.h7.dir.download.enabled=oO.jh.DOWNLOADDIR!=""&&oO.h1;oO.h7.dir.create.enabled=oO.jh.CREATEDIR!=""&&oO.h1;oO.h7.dir.paste.enabled=(oO.jh.COPYDIR!=""||oO.jh.MOVEDIR!="")&&oO.h1&&g;oO.h7.dir.cut.enabled=oO.jh.MOVEDIR!=""&&oO.h1&&!j;oO.h7.dir.copy.enabled=oO.jh.COPYDIR!=""&&oO.h1&&true;oO.h7.dir.rename.enabled=oO.jh.RENAMEDIR!=""&&oO.h1&&!j;oO.h7.dir.del.enabled=oO.jh.DELETEDIR!=""&&oO.h1&&!j;},bn:function(c){for(var d=0;db){return -1+f;}else{if(ab){return -1+f;}else{if(ab){return -1+f;}else{if(a0){f=h.name.indexOf(g)==-1;}if(h.isFiltered!=f){h.isFiltered=f;j.push(h);}}return j;},vx0098:function(c){var d=oO.h5.indexOf(c);if(d!==-1){oO.h5.splice(d,1);}d=oO.gf256.indexOf(c);if(d!==-1){oO.gf256.splice(d,1);}if(oO.gf1==c){oO.gf1=null;}},vx0099:function(l){oO.h6=[];var h=function(c,a){for(var b=0;b0){oO.nnn3.keys[oO.nnn3.keys.length-1].init();}}},njn:function(d){var c=d;if(oO.jq.lang&&oO.jq.lang[d]){c=oO.jq.lang[d];}return c;}};"use strict";(function(K,H,O){var R={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"};var L={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"};var y={"~":"`","!":"1","@":"2","#":"3","$":"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0","_":"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"};var E={"option":"alt","command":"meta","return":"enter","escape":"esc","plus":"+","mod":/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"};var x;for(var C=1;C<20;++C){R[111+C]="f"+C;}for(C=0;C<=9;++C){R[C+96]=C;}function B(a,c,b){if(a.addEventListener){a.addEventListener(c,b,false);return;}a.attachEvent("on"+c,b);}function z(b){if(b.type=="keypress"){var a=String.fromCharCode(b.which);if(!b.shiftKey){a=a.toLowerCase();}return a;}if(R[b.which]){return R[b.which];}if(L[b.which]){return L[b.which];}return String.fromCharCode(b.which).toLowerCase();}function J(b,a){return b.sort().join(",")===a.sort().join(",");}function N(b){var a=[];if(b.shiftKey){a.push("shift");}if(b.altKey){a.push("alt");}if(b.ctrlKey){a.push("ctrl");}if(b.metaKey){a.push("meta");}return a;}function I(a){if(a.preventDefault){a.preventDefault();return;}a.returnValue=false;}function A(a){if(a.stopPropagation){a.stopPropagation();return;}a.cancelBubble=true;}function F(a){return a=="shift"||a=="ctrl"||a=="alt"||a=="meta";}function P(){if(!x){x={};for(var a in R){if(a>95&&a<112){continue;}if(R.hasOwnProperty(a)){x[R[a]]=a;}}}return x;}function G(c,a,b){if(!b){b=P()[c]?"keydown":"keypress";}if(b=="keypress"&&a.length){b="keydown";}return b;}function Q(a){if(a==="+"){return["+"];}a=a.replace(/\+{2}/g,"+plus");return a.split("+");}function D(b,d){var f;var c;var e;var a=[];f=Q(b);for(e=0;e1){h(p,s,q,v);return;}u=D(p,v);g._callbacks[u.key]=g._callbacks[u.key]||[];o(u.key,u.modifiers,{type:u.action},t,p,r);g._callbacks[u.key][t?"unshift":"push"]({callback:q,modifiers:u.modifiers,action:u.action,seq:t,level:r,combo:p});}g._bindMultiple=function(s,q,r){for(var p=0;p-1){return true;}return false;};M.prototype.handleKey=function(){var a=this;return a._handleKey.apply(a,arguments);};M.init=function(){var b=M(H);for(var a in b){if(a.charAt(0)!=="_"){M[a]=(function(c){return function(){return b[c].apply(b,arguments);};}(a));}}};M.init();K.Mousetrap=M;if(typeof module!=="undefined"&&module.exports){module.exports=M;}if(typeof define==="function"&&define.amd){define(function(){return M;});}})(window,document);document.onkeydown=function(c){c=c||event;var d=(window.event)?c.which:c.keyCode;if((c.ctrlKey===true&&d===70)||(c.ctrlKey===true&&d===73)||d==38||d==40||d==33||d==34||d==9){c.preventDefault();return false;}};"use strict";(function(){var l={},m=function(){},k;function g(a){var b=this;b.dropContainer=a.dropContainer;b.inputField=a.inputField;b.uploadsQueue=[];b.activeUploads=0;b.data=a.data;b.key=a.key;b.maxSimultaneousUploads=a.maxSimultaneousUploads||2;b.onFileAdded=a.onFileAdded||m;b.uploadUrl=a.uploadUrl;b.onFileAddedProxy=function(c){b.onFileAdded(c);};b.onFormatSize=a.onFormatSize;b.onIsUploadSuccessfull=a.onIsUploadSuccessfull;b.isOk=true;b.initialize();}function h(a){var b=this;b.file=a;b.fileName=a.name;b.fileSize=a.size;b.uploadSize=a.size;b.uploadedBytes=0;b.eventHandlers={};b.events={onProgress:function(e,c){var d=c/e*100;(b.eventHandlers.onProgress||m)(d,e,c);},onStart:function(){(b.eventHandlers.onStart||m)();},onCompleted:function(c){a=null;(b.eventHandlers.onCompleted||m)(c);}};}h.prototype={on:function(a){this.eventHandlers=a;}};g.prototype={initialize:function(){var c=this,a=c.dropContainer,f=c.inputField,d=function(o){o.preventDefault();o.stopPropagation();},b=function(o){d(o);a.classList.add("drag-over");},e=function(o){d(o);a.classList.remove("drag-over");};if(a){c.on(a,"dragenter",b);c.on(a,"dragover",b);c.on(a,"dragleave",e);c.on(a,"drop",function(o){d(o);e(o);c.processFiles(o.dataTransfer.files);});}if(f){c.on(f,"change",function(){c.processFiles(this.files);});}},processFiles:function(a){var b=this;var e=[];for(var c=0;c'+'
      Drag files here
      '+'
      or
      '+'
      '+''+"
      "+""+'
      '+'
      '+'
      '+'
      '+'
      '+"
      "+"
      "; +a.innerHTML=b;},attachCancelListener:function(a,b){a.getElementsByClassName("alphaUploader-cancelInput")[0].onclick=(function(){var c=a;var d=b;return function(){d.cancel();};})();},addFile:function(b,d,o){var c=this.getPanelFiles(b);var a=c.getElementsByTagName("tbody")[0];var e=''+''+d.name+""+''+'
      '+'
      '+"
      "+"
      "+""+''+o(d.size)+"";var f=document.createElement("tr");f.setAttribute("class","alphaUploader-file");f.setAttribute("data-name",d.name);f.innerHTML=e;a.appendChild(f);c.style.display="block";this.showPanelFiles(b);},getPanelElements:function(a){return a.getElementsByClassName("alphaUploader-elements")[0];},getPanelFiles:function(a){return a.getElementsByClassName("alphaUploader-files")[0];},hidePanelFiles:function(p){var f=p.getElementsByClassName("alphaUploader-input")[0];try{f.value="";if(f.value){f.type="text";f.type="file";}}catch(q){}var d=p.getElementsByClassName("alphaUploader-filesList")[0];var e=d.getElementsByTagName("tbody")[0];e.innerHTML="";var a=p.getElementsByClassName("alphaUploader-cancelInput")[0];a.className="alphaUploader-cancelInput";var c=this.getPanelFiles(p);c.style.display="none";var b=this.getPanelElements(p);b.style.display="block";},showPanelFiles:function(a){var d=a.getElementsByClassName("alphaUploader-header")[0];d=d.getElementsByTagName("div")[0];d.innerText=l.translate("UploadingFiles");var c=this.getPanelFiles(a);c.style.display="block";var b=this.getPanelElements(a);b.style.display="none";},setFilesUploadedCount:function(a,d,c){var b=a.getElementsByClassName("alphaUploader-total")[0];b.innerHTML=l.translate("UploadedFiles")+" "+d+" "+l.translate("Of")+" "+c;},getFileElement:function(a,c){var b=a.getElementsByClassName("alphaUploader-file");var e=null;for(var d=0;d1024){q=q/1024;p="Kb";}if(q>1024){q=q/1024;p="Mb";}q=new Number(q);return q.toFixed(2)+" "+p;};}var e=null;if(c.onFileAdded){e=c.onFileAdded;}var a=l.initialize(c);var f={elRoot:b,files:[],filesUploaded:[],core:a,isCanceled:false,cancel:function(){if(!this.isCanceled){this.core.uploadsQueue=[];this.isCanceled=true;j.setCanceling(this.elRoot);}},reset:function(){j.hidePanelFiles(this.elRoot);var p=this.elRoot.getElementsByClassName("alphaUploader-cancelInput")[0];p.style.visibility="visible";var q=this.elRoot.getElementsByClassName("alphaUploader-header")[0];q.style.visibility="visible";this.files=[];this.filesUploaded=[];this.core.uploadsQueue=[];this.isCanceled=false;this.isOk=true;},disableCancel:function(){var p=this.elRoot.getElementsByClassName("alphaUploader-cancelInput")[0];p.style.visibility="hidden";var q=this.elRoot.getElementsByClassName("alphaUploader-header")[0];q.style.visibility="hidden";},updateOptions:function(q){for(var p in q){this.core[p]=q[p];}}};j.attachCancelListener(b,f);f.updateOptions({onFileAdded:(function(){var o=f;return function(q){o.files.push(q);j.addFile(o.elRoot,q.file,o.core.onFormatSize);j.setFilesUploadedCount(o.elRoot,o.filesUploaded.length,o.filesUploaded.length+o.files.length);var n=null;if(e){n=(function(){var p=o;var u=q;var t=e;return function(){t(p,u);};})();}q.on({onCompleted:(function(){var p=o;var t=q;var u=c;return function(r){p.files.splice(p.files.indexOf(t),1);p.filesUploaded.push(t);j.setFilesUploadedCount(p.elRoot,p.filesUploaded.length,o.filesUploaded.length+p.files.length);var s=p.core.onIsUploadSuccessfull(r);p.core.isOk=p.core.isOk&&(s===true);j.setFileUploaded(p.elRoot,t.file,s);if(u.onUploadCompleted){u.onUploadCompleted(p,t.file,s,r);}if(p.files.length==0||(p.isCanceled&&p.core.activeUploads===0)){if(u.onFinished){u.onFinished(p,p.core.isOk); +}}};})(),onProgress:(function(){var p=o;var t=q;var u=c;return function(s,w,r){j.updateFileProgress(p.elRoot,t.file,s);if(u.onUploadProgress){u.onUploadProgress(p,t,parseInt(s,10),w,r);}};})()});if(n){n();}};})()});return f;}};})();var DateFormat={};!function(e){var f=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],b=["January","February","March","April","May","June","July","August","September","October","November","December"],c={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"},d=/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/;e.format=function(){function g(n){return f[parseInt(n,10)]||n;}function m(n){var q=parseInt(n,10)-1;return a[q]||n;}function h(n){var q=parseInt(n,10)-1;return b[q]||n;}function j(n){return c[n]||n;}function k(B){var C,n,w,x,y,z=B,A="";return -1!==z.indexOf(".")&&(x=z.split("."),z=x[0],A=x[1]),y=z.split(":"),3===y.length?(C=y[0],n=y[1],w=y[2].replace(/\s.+/,"").replace(/[a-z]/gi,""),z=z.replace(/\s.+/,"").replace(/[a-z]/gi,""),{time:z,hour:C,minute:n,second:w,millis:A}):{time:"",hour:"",minute:"",second:"",millis:""};}function l(t,u){for(var n=u-String(t).length,s=0;n>s;s++){t="0"+t;}return t;}return{parseDate:function(n){var q={date:null,year:null,month:null,dayOfMonth:null,dayOfWeek:null,time:null};if("number"==typeof n){return this.parseDate(new Date(n));}if("function"==typeof n.getFullYear){q.year=String(n.getFullYear()),q.month=String(n.getMonth()+1),q.dayOfMonth=String(n.getDate()),q.time=k(n.toTimeString());}else{if(-1!=n.search(d)){values=n.split(/[T\+-]/),q.year=values[0],q.month=values[1],q.dayOfMonth=values[2],q.time=k(values[3].split(".")[0]);}else{switch(values=n.split(" "),values.length){case 6:q.year=values[5],q.month=j(values[1]),q.dayOfMonth=values[2],q.time=k(values[3]);break;case 2:subValues=values[0].split("-"),q.year=subValues[0],q.month=subValues[1],q.dayOfMonth=subValues[2],q.time=k(values[1]);break;case 7:case 9:case 10:q.year=values[3],q.month=j(values[1]),q.dayOfMonth=values[2],q.time=k(values[4]);break;case 1:subValues=values[0].split(""),q.year=subValues[0]+subValues[1]+subValues[2]+subValues[3],q.month=subValues[5]+subValues[6],q.dayOfMonth=subValues[8]+subValues[9],q.time=k(subValues[13]+subValues[14]+subValues[15]+subValues[16]+subValues[17]+subValues[18]+subValues[19]+subValues[20]);break;default:return null;}}}return q.date=new Date(q.year,q.month-1,q.dayOfMonth),q.dayOfWeek=String(q.date.getDay()),q;},date:function(P,Q){try{var R=this.parseDate(P);if(null===R){return P;}for(var n=(R.date,R.year),o=R.month,p=R.dayOfMonth,q=R.dayOfWeek,r=R.time,s="",J="",L="",N=!1,O=0;O=12?"PM":"AM",s="";break;case"p":J+=r.hour>=12?"p.m.":"a.m.",s="";break;case"'":s="",N=!0;break;default:J+=t,s="";}}}return J+=L;}catch(M){return console&&console.log&&console.log(M),P;}},prettyDate:function(t){var u,n,s;return("string"==typeof t||"number"==typeof t)&&(u=new Date(t)),"object"==typeof t&&(u=new Date(t.toString())),n=((new Date).getTime()-u.getTime())/1000,s=Math.floor(n/86400),isNaN(s)||0>s?void 0:60>n?"just now":120>n?"1 minute ago":3600>n?Math.floor(n/60)+" minutes ago":7200>n?"1 hour ago":86400>n?Math.floor(n/3600)+" hours ago":1===s?"Yesterday":7>s?s+" days ago":31>s?Math.ceil(s/7)+" weeks ago":s>=31?"more than 5 weeks ago":void 0;},toBrowserTimeZone:function(n,q){return this.date(new Date(n),q||"MM/dd/yyyy HH:mm:ss");}};}();}(DateFormat),function(a){a.format=DateFormat.format;}(jQuery);(function(b){if(typeof define==="function"&&define.amd){define(["jquery"],b);}else{if(typeof module!=="undefined"&&module.exports){module.exports=b(require("jquery")); +}else{b(jQuery);}}})(function(g){var f=g.scrollTo=function(a,b,c){return g(window).scrollTo(a,b,c);};f.defaults={axis:"xy",duration:0,limit:true};function e(a){return !a.nodeName||g.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])!==-1;}g.fn.scrollTo=function(a,b,c){if(typeof b==="object"){c=b;b=0;}if(typeof c==="function"){c={onAfter:c};}if(a==="max"){a=9000000000;}c=g.extend({},f.defaults,c);b=b||c.duration;var d=c.queue&&c.axis.length>1;if(d){b/=2;}c.offset=h(c.offset);c.over=h(c.over);return this.each(function(){if(a===null){return;}var w=e(this),x=w?this.contentWindow||window:this,r=g(x),y=a,u={},s;switch(typeof y){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(y)){y=h(y);break;}y=w?g(y):g(y,x);if(!y.length){return;}case"object":if(y.is||y.style){s=(y=g(y)).offset();}}var v=g.isFunction(c.offset)&&c.offset(x,y)||c.offset;g.each(c.axis.split(""),function(n,m){var k=m==="x"?"Left":"Top",q=k.toLowerCase(),o="scroll"+k,l=r[o](),p=f.max(x,m);if(s){u[o]=s[q]+(w?0:l-r.offset()[q]);if(c.margin){u[o]-=parseInt(y.css("margin"+k),10)||0;u[o]-=parseInt(y.css("border"+k+"Width"),10)||0;}u[o]+=v[q]||0;if(c.over[q]){u[o]+=y[m==="x"?"width":"height"]()*c.over[q];}}else{var j=y[q];u[o]=j.slice&&j.slice(-1)==="%"?parseFloat(j)/100*p:j;}if(c.limit&&/^\d+$/.test(u[o])){u[o]=u[o]<=0?0:Math.min(u[o],p);}if(!n&&c.axis.length>1){if(l===u[o]){u={};}else{if(d){t(c.onAfterFirst);u={};}}}});t(c.onAfter);function t(j){var k=g.extend({},c,{queue:true,duration:b,complete:j&&function(){j.call(x,y,c);}});r.animate(u,k);}});};f.max=function(b,c){var d=c==="x"?"Width":"Height",p="scroll"+d;if(!e(b)){return b[p]-g(b)[d.toLowerCase()]();}var n="client"+d,a=b.ownerDocument||b.document,o=a.documentElement,q=a.body;return Math.max(o[p],q[p])-Math.min(o[n],q[n]);};function h(a){return g.isFunction(a)||g.isPlainObject(a)?a:{top:a,left:a};}g.Tween.propHooks.scrollLeft=g.Tween.propHooks.scrollTop={get:function(a){return g(a.elem)[a.prop]();},set:function(c){var a=this.get(c);if(c.options.interrupt&&c._last&&c._last!==a){return g(c.elem).stop();}var b=Math.round(c.now);if(a!==b){g(c.elem)[c.prop](b);c._last=this.get(c);}}};return f;}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/en.json b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/en.json new file mode 100644 index 0000000..a3d2f25 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/en.json @@ -0,0 +1,99 @@ +{ +"CreateDir":"Create", +"RenameDir":"Rename", +"DeleteDir":"Delete", +"AddFile":"Add file", +"Preview":"Preview", +"RenameFile":"Rename", +"DeleteFile":"Delete", +"SelectFile":"Select", +"OrderBy":"Order by", +"Name_asc":"↑  Name", +"Size_asc":"↑  Size", +"Date_asc":"↑  Date", +"Name_desc":"↓  Name", +"Size_desc":"↓  Size", +"Date_desc":"↓  Date", +"Name":"Name", +"Size":"Size", +"Date":"Date", +"Dimensions":"Dimensions", +"Cancel":"Cancel", +"LoadingDirectories":"Loading folders...", +"LoadingFiles":"Loading files...", +"DirIsEmpty":"This folder is empty", +"NoFilesFound":"No files found", +"Upload":"Upload", +"T_CreateDir":"Create new folder", +"T_RenameDir":"Rename folder", +"T_DeleteDir":"Delete selected folder", +"T_AddFile":"Upload files", +"T_Preview":"Preview selected file", +"T_RenameFile":"Rename file", +"T_DeleteFile":"Delete file", +"T_SelectFile":"Select highlighted file", +"T_ListView":"List", +"T_ThumbsView":"Thumbnails", +"Q_DeleteFolder":"Delete selected directory?", +"Q_DeleteFile":"Delete selected file?", +"E_LoadingConf":"Error loading configuration", +"E_ActionDisabled":"This action is disabled", +"E_LoadingAjax":"Error loading", +"E_MissingDirName":"Missing folder name", +"E_SelectFiles":"Select files to upload", +"E_CannotRenameRoot":"Cannot rename root folder.", +"E_NoFileSelected":"No file selected.", +"E_CreateDirFailed":"Error creating directory", +"E_CreateDirInvalidPath":"Cannot create directory - path doesn't exist", +"E_CannotDeleteDir":"Error deleting directory", +"E_DeleteDirInvalidPath":"Cannot delete directory - path doesn't exist", +"E_DeletеFile":"Error deleting file", +"E_DeleteFileInvalidPath":"Cannot delete file - path doesn't exist", +"E_DeleteNonEmpty":"Cannot delete - folder is not empty", +"E_CannotMoveDirToChild":"Cannot move directory to its subdirectory", +"E_DirAlreadyExists":"Directory with the same name already exists", +"E_MoveDir":"Error moving directory", +"E_MoveDirInvalisPath":"Cannot move directory - directory doesn't exist", +"E_MoveFile":"Error moving file", +"E_MoveFileInvalisPath":"Cannot move file - file doesn't exist", +"E_MoveFileAlreadyExists":"File with the same name already exists", +"E_RenameDir":"Error renaming directory", +"E_RenameDirInvalidPath":"Cannot rename directory - path doesn't exist", +"E_RenameFile":"Error renaming file", +"E_RenameFileInvalidPath":"Cannot rename file - file doesn't exist", +"E_UploadNotAll":"There is and error uploading some files. ", +"E_UploadNoFiles":"There are no files to upload or file is too big.", +"E_UploadInvalidPath":"Cannot upload files - path doesn't exist", +"E_FileExtensionForbidden":"This type of files cannot be handeled - invalid extension ", +"DownloadFile":"Download", +"T_DownloadFile":"Download file", +"E_CannotDeleteRoot":"Cannot delete root folder", +"file":"file", +"files":"files", +"Cut":"Cut", +"Copy":"Copy", +"Paste":"Paste", +"E_CopyFile":"Error copying file", +"E_CopyFileInvalisPath":"Cannot copy file - path doesn't exist", +"E_CopyDirInvalidPath":"Cannot copy directory - path doesn't exist", +"E_CreateArchive":"Error creating zip archive.", +"E_UploadingFile":"error", + +"Search": "Search", +"ClickToClose": "Click to close", +"DragFilesHere": "Drag files here", +"Or": "or", +"UploadingFiles": "Uploading files...", +"UploadedFiles": "Uploaded files:", +"Of": "of", +"Canceling": "Canceling...", +"E_MissingDirName": "Missing file name", +"E_FileAlreadyExists": "File or directory with this name already exists", +"Edit": "Edit", +"T_SaveAs": "Save as", +"FileExistsOverwrite": "File already exists. Overwrite?", +"E_UnableToDownload": "Unable to download file from remote server", +"E_UnableToSaveFile": "Unable to save file to the server, check write permissions", +"T_SpecifyFileNameForSaving": "Specify file name for saving" + +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/ru.json b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/ru.json new file mode 100644 index 0000000..401b215 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/lang/ru.json @@ -0,0 +1,99 @@ +{ +"CreateDir":"Создать", +"RenameDir":"Имя", +"DeleteDir":"Удалить", +"AddFile":"Загрузить", +"Preview":"Просмотр", +"RenameFile":"Имя", +"DeleteFile":"Удалить", +"SelectFile":"Выбор", +"OrderBy":"Порядок", +"Name_asc":"↑  Имя", +"Size_asc":"↑  Размер", +"Date_asc":"↑  Дата", +"Name_desc":"↓  Имя", +"Size_desc":"↓  Размер", +"Date_desc":"↓  Дата", +"Name":"Имя", +"Size":"Объем", +"Date":"Дата", +"Dimensions":"Размеры", +"Cancel":"Отмена", +"LoadingDirectories":"Загрузка директорий...", +"LoadingFiles":"Загрузка файлов...", +"DirIsEmpty":"Директория пуста", +"NoFilesFound":"Файлы не найдены", +"Upload":"Загрузить", +"T_CreateDir":"Создать новую директорию", +"T_RenameDir":"Переименовать директорию", +"T_DeleteDir":"Удалить выбранную директорию", +"T_AddFile":"Загрузить файлы", +"T_Preview":"Просмотр файлов", +"T_RenameFile":"Переименовать файл", +"T_DeleteFile":"Удалить файл", +"T_SelectFile":"Выбрать выделенные файлы", +"T_ListView":"Список", +"T_ThumbsView":"Превью", +"Q_DeleteFolder":"Удалить выбранную директорию?", +"Q_DeleteFile":"Удалить выбранный файл?", +"E_LoadingConf":"Ошибка загрузки конфигурации", +"E_ActionDisabled":"Действие недоступно", +"E_LoadingAjax":"Ошибка загрузки", +"E_MissingDirName":"Отсутствует имя директории", +"E_SelectFiles":"Выбор файлов для загрузки", +"E_CannotRenameRoot":"Невозможно переименовать корневую директорию", +"E_NoFileSelected":"Файлы не выбраны", +"E_CreateDirFailed":"Ошибка создания директории", +"E_CreateDirInvalidPath":"Ошибка создания директории - пути не существует", +"E_CannotDeleteDir":"Ошибка удаления директории", +"E_DeleteDirInvalidPath":"Ошибка удаления директории - пути не существует", +"E_DeletеFile":"Ошибка удаления файлов", +"E_DeleteFileInvalidPath":"Ошибка удаления файла - пути не существует", +"E_DeleteNonEmpty":"Удаление невозможно - директория не пуста", +"E_CannotMoveDirToChild":"Не удается переместить директорию в подкаталоге", +"E_DirAlreadyExists":"Директория с этим именем уже существует в файловой системе", +"E_MoveDir":"Ошибка перемещения директории", +"E_MoveDirInvalisPath":"Ошибка перемещения директории - пути не существует", +"E_MoveFile":"Ошибка перемещения файла", +"E_MoveFileInvalisPath":"Ошибка перемещения файла - файла не существует", +"E_MoveFileAlreadyExists":"Файл с этим именем уже существует в файловой системе", +"E_RenameDir":"Ошибка переименования директории", +"E_RenameDirInvalidPath":"Ошибка переименования директории - пути не существует", +"E_RenameFile":"Ошибка переименования файла", +"E_RenameFileInvalidPath":"Ошибка переименования файла - файла не существует", +"E_UploadNotAll":"Существуют ошибки загрузки некоторых файлов. ", +"E_UploadNoFiles":"Нет файлов для загрузки или объем слишком велик.", +"E_UploadInvalidPath":"Невозможно загрузить файл - директории не существует", +"E_FileExtensionForbidden":"Недопустимое расширение файла ", +"DownloadFile":"Скачать", +"T_DownloadFile":"Скачать файл", +"E_CannotDeleteRoot":"Невозможно удалить корневую директорию", +"file":"файл", +"files":"файлов", +"Cut":"Вырезать", +"Copy":"Копия", +"Paste":"Вставка", +"E_CopyFile":"Ошибка копирования файла", +"E_CopyFileInvalisPath":"Невозможно скопировать файл - пути не существует", +"E_CopyDirInvalidPath":"Невозможно скопировать директорию - пути не существует", +"E_CreateArchive":"Ошибка создания zip архива", +"E_UploadingFile":"ошибка", + +"Search":"Поиск", +"ClickToClose": "Кликните, чтобы закрыть", +"DragFilesHere": "Перетащите файлы сюда", +"Or": "или", +"UploadingFiles": "Загрузка файлов...", +"UploadedFiles": "Загружено файлов:", +"Of": "из", +"Canceling": "Отмена...", +"E_MissingDirName":"Отсутствует имя файла", +"E_FileAlreadyExists": "Файл или директория с таким именем уже существует", +"Edit": "Редактор", +"T_SaveAs": "Сохранить как", +"FileExistsOverwrite": "Файл уже существует. Перезаписать?", +"E_UnableToDownload": "Не удалось скачать файл с удаленного сервера", +"E_UnableToSaveFile": "Не удалось сохранить файл на сервер, проверьте права на запись", +"T_SpecifyFileNameForSaving": "Имя сохраняемого файла" + +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copydir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copydir.php new file mode 100644 index 0000000..6b84786 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copydir.php @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copyfile.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copyfile.php new file mode 100644 index 0000000..51c8db4 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/copyfile.php @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/createdir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/createdir.php new file mode 100644 index 0000000..148f459 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/createdir.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletedir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletedir.php new file mode 100644 index 0000000..9f0952f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletedir.php @@ -0,0 +1,39 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletefile.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletefile.php new file mode 100644 index 0000000..a1edf2c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/deletefile.php @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/dirtree.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/dirtree.php new file mode 100644 index 0000000..f119457 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/dirtree.php @@ -0,0 +1,51 @@ +$files, 'dirs'=>$dirs); +} +function GetDirs($path, $type){ + $ret = $sort = array(); + $files = listDirectory(fixPath($path), 0); + foreach ($files as $f){ + $fullPath = $path.'/'.$f; + if(!is_dir(fixPath($fullPath)) || $f == '.' || $f == '..') + continue; + $tmp = getFilesNumber(fixPath($fullPath), $type); + $ret[$fullPath] = array('path'=>$fullPath,'files'=>$tmp['files'],'dirs'=>$tmp['dirs']); + $sort[$fullPath] = $f; + } + natcasesort($sort); + foreach ($sort as $k => $v) { + $tmp = $ret[$k]; + echo ',{"p":"'.mb_ereg_replace('"', '\\"', $tmp['path']).'","f":"'.$tmp['files'].'","d":"'.$tmp['dirs'].'"}'; + GetDirs($tmp['path'], $type); + } +} + +$type = (empty($_POST['type'])?'':strtolower($_POST['type'])); +if($type != 'image' && $type != 'flash') + $type = ''; + +echo "[\n"; +$tmp = getFilesNumber(fixPath(getFilesPath()), $type); +echo '{"p":"'. mb_ereg_replace('"', '\\"', getFilesPath()).'","f":"'.$tmp['files'].'","d":"'.$tmp['dirs'].'"}'; +GetDirs(getFilesPath(), $type); +echo "\n]"; +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/download.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/download.php new file mode 100644 index 0000000..8df066a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/download.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/downloaddir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/downloaddir.php new file mode 100644 index 0000000..f00589f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/downloaddir.php @@ -0,0 +1,34 @@ +alert("Cannot create zip archive - ZipArchive class is missing. Check your PHP version and configuration");'; +} +else{ + try{ + $filename = basename($path); + $zipFile = $filename.'.zip'; + $zipPath = BASE_PATH.'/tmp/'.$zipFile; + AlphaManagerFile::ZipDir($path, $zipPath); + + header('Content-Disposition: attachment; filename="'.$zipFile.'"'); + header('Content-Type: application/force-download'); + readfile($zipPath); + function deleteTmp($zipPath){ + @unlink($zipPath); + } + register_shutdown_function('deleteTmp', $zipPath); + } + catch(Exception $ex){ + echo ''; + } +} +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/fileslist.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/fileslist.php new file mode 100644 index 0000000..7f7f469 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/fileslist.php @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/functions.inc.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/functions.inc.php new file mode 100644 index 0000000..c174e97 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/functions.inc.php @@ -0,0 +1,470 @@ +addEmptyDir($zipPath); + } + while(($f = readdir($d)) !== false){ + if($f == '.' || $f == '..') + continue; + $filePath = $path.'/'.$f; + if(is_file($filePath)){ + $zip->addFile($filePath, ($zipPath?$zipPath.'/':'').$f); + } + elseif(is_dir($filePath)){ + self::ZipAddDir($filePath, $zip, ($zipPath?$zipPath.'/':'').$f); + } + } + closedir($d); + } + static function ZipDir($path, $zipFile, $zipPath = ''){ + $zip = new ZipArchive(); + $zip->open($zipFile, ZIPARCHIVE::CREATE); + self::ZipAddDir($path, $zip, $zipPath); + $zip->close(); + } + static function IsImage($fileName){ + $ret = false; + $ext = strtolower(self::GetExtension($fileName)); + if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'jpe' || $ext == 'png' || $ext == 'gif' || $ext == 'ico') + $ret = true; + return $ret; + } + static function IsFlash($fileName){ + $ret = false; + $ext = strtolower(self::GetExtension($fileName)); + if($ext == 'swf' || $ext == 'flv' || $ext == 'swc' || $ext == 'swt') + $ret = true; + return $ret; + } + /** + * Returns human formated file size + * + * @param int $filesize + * @return string + */ + static function FormatFileSize($filesize){ + $ret = ''; + $unit = 'B'; + if($filesize > 1024){ + $unit = 'KB'; + $filesize = $filesize / 1024; + } + if($filesize > 1024){ + $unit = 'MB'; + $filesize = $filesize / 1024; + } + if($filesize > 1024){ + $unit = 'GB'; + $filesize = $filesize / 1024; + } + + $ret = round($filesize, 2).' '.$unit; + return $ret; + } + /** + * Returns MIME type of $filename + * + * @param string $filename + * @return string + */ + static function GetMIMEType($filename){ + $type = 'application/octet-stream'; + $ext = self::GetExtension($filename); + + switch(strtolower($ext)){ + case 'jpg': $type = 'image/jpeg';break; + case 'jpeg': $type = 'image/jpeg';break; + case 'gif': $type = 'image/gif';break; + case 'png': $type = 'image/png';break; + case 'bmp': $type = 'image/bmp';break; + case 'tiff': $type = 'image/tiff';break; + case 'tif': $type = 'image/tiff';break; + case 'pdf': $type = 'application/pdf';break; + case 'rtf': $type = 'application/msword';break; + case 'doc': $type = 'application/msword';break; + case 'xls': $type = 'application/vnd.ms-excel'; break; + case 'zip': $type = 'application/zip'; break; + case 'swf': $type = 'application/x-shockwave-flash'; break; + default: $type = 'application/octet-stream'; + } + + return $type; + } + + /** + * Replaces any character that is not letter, digit or underscore from $filename with $sep + * + * @param string $filename + * @param string $sep + * @return string + */ + static function CleanupFilename($filename, $sep = '_'){ + $str = ''; + if(strpos($filename,'.')){ + $ext = self::GetExtension($filename) ; + $name = self::GetName($filename); + } + else{ + $ext = ''; + $name = $filename; + } + if(mb_strlen($name) > 32) + $name = mb_substr($name, 0, 32); + $str = str_replace('.php', '', $str); + $str = mb_ereg_replace("[^\\w]", $sep, $name); + + $str = mb_ereg_replace("$sep+", $sep, $str).($ext?'.'.$ext:''); + + return $str; + } + + /** + * Returns file extension without dot + * + * @param string $filename + * @return string + */ + static function GetExtension($filename) { + $ext = ''; + + if(mb_strrpos($filename, '.') !== false) + $ext = mb_substr($filename, mb_strrpos($filename, '.') + 1); + + return strtolower($ext); + } + + /** + * Returns file name without extension + * + * @param string $filename + * @return string + */ + static function GetName($filename) { + $name = ''; + $tmp = mb_strpos($filename, '?'); + if($tmp !== false) + $filename = mb_substr ($filename, 0, $tmp); + $dotPos = mb_strrpos($filename, '.'); + if($dotPos !== false) + $name = mb_substr($filename, 0, $dotPos); + else + $name = $filename; + + return $name; + } + static function GetFullName($filename) { + $tmp = mb_strpos($filename, '?'); + if($tmp !== false) + $filename = mb_substr ($filename, 0, $tmp); + $filename = basename($filename); + + return $filename; + } + static public function FixPath($path){ + $path = mb_ereg_replace('[\\\/]+', '/', $path); + return $path; + } + /** + * creates unique file name using $filename( " - Copy " and number is added if file already exists) in directory $dir + * + * @param string $dir + * @param string $filename + * @return string + */ + static function MakeUniqueFilename($dir, $filename){ + $temp = ''; + $dir .= '/'; + $dir = self::FixPath($dir.'/'); + $ext = self::GetExtension($filename); + $name = self::GetName($filename); + $name = self::CleanupFilename($name); + $name = mb_ereg_replace(' \\- Copy \\d+$', '', $name); + if($ext) + $ext = '.'.$ext; + if(!$name) + $name = 'file'; + + $i = 0; + do{ + $temp = ($i > 0? $name." - Copy $i": $name).$ext; + $i++; + }while(file_exists($dir.$temp)); + + return $temp; + } + /** + * creates unique directory name using $name( " - Copy " and number is added if directory already exists) in directory $dir + * + * @param string $dir + * @param string $name + * @return string + */ + static function MakeUniqueDirname($dir, $name){ + $temp = ''; + $dir = self::FixPath($dir.'/'); + $name = mb_ereg_replace(' - Copy \\d+$', '', $name); + if(!$name) + $name = 'directory'; + + $i = 0; + do{ + $temp = ($i? $name." - Copy $i": $name); + $i++; + }while(is_dir($dir.$temp)); + + return $temp; + } +} +class AlphaManagerImage{ + public static function GetImage($path){ + $img = null; + switch(AlphaManagerFile::GetExtension(basename($path))){ + case 'png': + $img = imagecreatefrompng($path); + break; + case 'gif': + $img = imagecreatefromgif($path); + break; + default: + $img = imagecreatefromjpeg($path); + } + imagealphablending($img, false); + imagesavealpha($img, true); + return $img; + } + public static function OutputImage($img, $type, $destination = '', $quality = 90){ + if(is_string($img)) + $img = self::GetImage ($img); + switch(strtolower($type)){ + case 'png': + imagepng($img, $destination); + break; + case 'gif': + imagegif($img, $destination); + break; + default: + imagejpeg($img, $destination, $quality); + } + } + public static function Resize($source, $thumbFileName, $destination, $width = '150',$height = 0, $quality = 90) { + $tmp = getimagesize($source); + $w = $tmp[0]; + $h = $tmp[1]; + $r = $w / $h; + + if($w <= ($width + 1) && (($h <= ($height + 1)) || (!$height && !$width))){ + if($source != $destination) + self::OutputImage($source, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality); + return; + } + + $newWidth = $width; + $newHeight = floor($newWidth / $r); + if(($height > 0 && $newHeight > $height) || !$width){ + $newHeight = $height; + $newWidth = intval($newHeight * $r); + } + + $thumbImg = imagecreatetruecolor($newWidth, $newHeight); + imagealphablending($thumbImg, false); + imagesavealpha($thumbImg, true); + $img = self::GetImage($source); + imagecopyresampled($thumbImg, $img, 0, 0, 0, 0, $newWidth, $newHeight, $w, $h); + + self::Cache($thumbImg, $thumbFileName); + + self::OutputImage($thumbImg, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality); + } + public static function Cache($img, $thumbFileName, $quality = 90) { + if (STORE_PREVIEWS_DIR != null && strlen(STORE_PREVIEWS_DIR) > 0 ) { + self::OutputImage($img, AlphaManagerFile::GetExtension(basename($thumbFileName)), $thumbFileName, $quality); + } + } + public static function GetThumbFileName($path, $w, $h) { + return '../' . STORE_PREVIEWS_DIR . '/' . md5($w . "|" . $h . "|" . $path) . '.' . 'jpg'; //AlphaManagerFile::GetExtension($path); + } + public static function CropCenter($source, $thumbFileName, $destination, $width, $height, $quality = 90) { + $tmp = getimagesize($source); + $w = $tmp[0]; + $h = $tmp[1]; + if(($w <= $width) && (!$height || ($h <= $height))){ + self::OutputImage(self::GetImage($source), AlphaManagerFile::GetExtension(basename($source)), $destination, $quality); + } + $ratio = $width / $height; + $top = $left = 0; + + $cropWidth = floor($h * $ratio); + $cropHeight = floor($cropWidth / $ratio); + if($cropWidth > $w){ + $cropWidth = $w; + $cropHeight = $w / $ratio; + } + if($cropHeight > $h){ + $cropHeight = $h; + $cropWidth = $h * $ratio; + } + + if($cropWidth < $w){ + $left = floor(($w - $cropWidth) / 2); + } + if($cropHeight < $h){ + $top = floor(($h- $cropHeight) / 2); + } + self::Crop($source, $thumbFileName, $destination, $left, $top, $cropWidth, $cropHeight, $width, $height, $quality); + } + public static function Crop($source, $thumbFileName, $destination, $x, $y, $cropWidth, $cropHeight, $width, $height, $quality = 90) { + $thumbImg = imagecreatetruecolor($width, $height); + imagealphablending($thumbImg, false); + imagesavealpha($thumbImg, true); + $img = self::GetImage($source); + imagecopyresampled($thumbImg, $img, 0, 0, $x, $y, $width, $height, $cropWidth, $cropHeight); + self::Cache($thumbImg, $thumbFileName); + self::OutputImage($thumbImg, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality); + } +} +$tmp = json_decode(file_get_contents(BASE_PATH.'/conf.json'), true); +if($tmp){ + foreach ($tmp as $k=>$v) { + if ($k != 'LANG') + define($k, $v); + else { + if (isset($_GET['l'])) + define($k, $_GET['l']); + else if (isset($_POST['l'])) + define($k, $_POST['l']); + else + define($k, $v); + } + } +} +else + die('Error parsing configuration'); +$FilesRoot = fixPath(getFilesPath()); +if(!is_dir($FilesRoot)) + @mkdir($FilesRoot, octdec(DIRPERMISSIONS)); +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movedir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movedir.php new file mode 100644 index 0000000..3484be5 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movedir.php @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movefile.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movefile.php new file mode 100644 index 0000000..b5943e2 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/movefile.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamedir.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamedir.php new file mode 100644 index 0000000..ea9ee2b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamedir.php @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamefile.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamefile.php new file mode 100644 index 0000000..7251d76 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/renamefile.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/security.inc.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/security.inc.php new file mode 100644 index 0000000..ae81339 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/security.inc.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/thumb.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/thumb.php new file mode 100644 index 0000000..3b75ba7 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/thumb.php @@ -0,0 +1,35 @@ + 0 ) { + if (is_file($thumbFileName)) { + AlphaManagerImage::OutputImage($thumbFileName, AlphaManagerFile::GetExtension($thumbFileName)); + return; + } +} + +if($w && $h) + AlphaManagerImage::CropCenter(fixPath($path), $thumbFileName, null, $w, $h); +else + AlphaManagerImage::Resize(fixPath($path), $thumbFileName, null, $w, $h); +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/upload.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/upload.php new file mode 100644 index 0000000..894c6b6 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/upload.php @@ -0,0 +1,82 @@ +$v){ + $filename = $_FILES['files']['name'][$k]; + $filesize = $_FILES['files']['size'][$k]; + $filename = AlphaManagerFile::MakeUniqueFilename(fixPath($path), $filename); + $filePath = fixPath($path).'/'.$filename; + $isUploaded = true; + if(!AlphaManagerFile::CanUploadFile($filename)){ + $errorsExt[] = $filename; + $isUploaded = false; + } elseif(intval(MAX_FILE_SIZE) > 0 && $filesize > intval(MAX_FILE_SIZE)) { + $errors[] = $filename; + $isUploaded = false; + } else { + + $sizeProhibited = false; + if (intval(MAX_IMAGE_WIDTH) > 0 || intval(MAX_IMAGE_HEIGHT) > 0) { + $tmp = getimagesize($filePath); + $w = $tmp[0]; + $h = $tmp[1]; + if ((intval(MAX_IMAGE_WIDTH) > 0 && intval(MAX_IMAGE_WIDTH) < $w) || (intval(MAX_IMAGE_HEIGHT) > 0 && intval(MAX_IMAGE_HEIGHT) < $h)) { + $errors[] = $filename; + $isUploaded = false; + $sizeProhibited = true; + } + } + if($sizePhohibited !== true) { + if(!move_uploaded_file($v, $filePath)){ + $errors[] = $filename; + $isUploaded = false; + } + } + + } + if(is_file($filePath)){ + @chmod ($filePath, octdec(FILEPERMISSIONS)); + } + if($isUploaded && AlphaManagerFile::IsImage($filename) && (intval(RESIZE_IMAGE_WIDTH) > 0 || intval(RESIZE_IMAGE_HEIGHT) > 0)){ + AlphaManagerImage::Resize($filePath, $filePath, intval(RESIZE_IMAGE_WIDTH), intval(RESIZE_IMAGE_HEIGHT)); + } + } + if($errors && $errorsExt) + $res = getSuccessRes(t('E_UploadNotAll').' '.t('E_FileExtensionForbidden')); + elseif($errorsExt) + $res = getSuccessRes(t('E_FileExtensionForbidden')); + elseif($errors) + $res = getSuccessRes(t('E_UploadNotAll')); + else + $res = getSuccessRes(); + } + else + $res = getErrorRes(t('E_UploadNoFiles')); +} +else + $res = getErrorRes(t('E_UploadInvalidPath')); + +if($isAjax){ + + if($errors || $errorsExt) + $res = getErrorRes(t('E_UploadNotAll')); + echo $res; +} +else{ + echo ' +'; +} +?> diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/uploadurl.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/uploadurl.php new file mode 100644 index 0000000..c372f0b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/php/uploadurl.php @@ -0,0 +1,88 @@ + 0) { + $res = getErrorRes(t('E_UploadNotAll')); + } else if (file_exists($path.$fileName)) { + $res = getErrorRes(t(is_dir($path.$fileName) ? 'E_DirAlreadyExists' : 'E_UploadInvalidPath')); + } else { + + $result = rehost($url, $path, $fileName, false, $doOverwrite); + if ($result[0] === true) + $res = getSuccessRes(); + else + $res = getErrorRes($result[1]); + + } +} +else + $res = getErrorRes(t('E_UploadInvalidPath')); + +echo $res; + +function rehost($url, $path, $filename, $makeUniqueFileName, $doOverwrite) { + $bytes = file_get_contents($url); + if ($bytes == false) + return array(false, t('E_UnableToDownload')); + + if ($filename == null) { + // $http_response_header filled by file_get_contents() + foreach($http_response_header as $header) + { + if (strpos(strtolower($header),'content-disposition') !== false) + { + $tmp_name = explode('=', $header); + if ($tmp_name[1]) + $filename = trim($tmp_name[1],'";\''); + } + } + if (!isset($filename)) { + $stripped_url = preg_replace('/\\?.*/', '', $url); + $filename = basename($stripped_url); + } + + $tmpDir = sys_get_temp_dir(); + if (file_exists($tmpDir.'/'.$filename)) { + $n = 1; + do { + $n ++; + } while (file_exists($tmpDir.'/'.$n.'_'.$filename)); + $filename = $n.'_'.$filename; + } + } + + if ($makeUniqueFileName === true) + $file = MakeUniqueFilename($path, $filename); + else { + $file = $path . '/' . $filename; + if (!$doOverwrite && file_exists($file)) + return array(false, t(is_dir($file) ? 'E_DirAlreadyExists' : 'E_MoveFileAlreadyExists')); + } + + $bytesDownloaded = file_put_contents($file, $bytes, LOCK_EX); + if ($bytesDownloaded === false) + return array(false, t('E_UnableToSaveFile')); + else { + $thumbFileName = AlphaManagerImage::getThumbFileName($file, 159, 139); // TODO: remove thumbnails of all sizes + if (is_file($thumbFileName)) + unlink($thumbFileName); + //echo $thumbFileName; echo " | "; echo $file; die; + } + return array(true, $file); +} + + + +?> diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/avi.png new file mode 100644 index 0000000..9c34a51 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/chm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/chm.png new file mode 100644 index 0000000..f3d4910 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/chm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/crt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/crt.png new file mode 100644 index 0000000..08c13ad Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/crt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/default.png new file mode 100644 index 0000000..25f2574 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/doc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/doc.png new file mode 100644 index 0000000..268b154 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/doc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/html.png new file mode 100644 index 0000000..da02345 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/ini.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/ini.png new file mode 100644 index 0000000..a0f1736 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/ini.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/js.png new file mode 100644 index 0000000..4b60bd7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/lnk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/lnk.png new file mode 100644 index 0000000..2243a90 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/lnk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/mp3.png new file mode 100644 index 0000000..c778eb3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/pdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/pdf.png new file mode 100644 index 0000000..8c6ed3b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/pdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/php.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/php.png new file mode 100644 index 0000000..40ea7c6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/php.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/png.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/png.png new file mode 100644 index 0000000..fda479e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/png.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/sql.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/sql.png new file mode 100644 index 0000000..45b0b7b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/sql.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/txt.png new file mode 100644 index 0000000..22dc860 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/wav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/wav.png new file mode 100644 index 0000000..b00f48c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/wav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/xml.png new file mode 100644 index 0000000..e18a503 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_list/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/avi.png new file mode 100644 index 0000000..5807062 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/chm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/chm.png new file mode 100644 index 0000000..ab7b951 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/chm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/crt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/crt.png new file mode 100644 index 0000000..7c32bdb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/crt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/default.png new file mode 100644 index 0000000..0b90ab6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/html.png new file mode 100644 index 0000000..7fbccd4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/ini.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/ini.png new file mode 100644 index 0000000..ebd3eb0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/ini.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/js.png new file mode 100644 index 0000000..7c35861 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/lnk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/lnk.png new file mode 100644 index 0000000..71fb986 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/lnk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/mp3.png new file mode 100644 index 0000000..965c848 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/php.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/php.png new file mode 100644 index 0000000..cc98cec Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/php.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/sql.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/sql.png new file mode 100644 index 0000000..d60b2eb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/sql.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/txt.png new file mode 100644 index 0000000..fc2a27c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/wav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/wav.png new file mode 100644 index 0000000..b9cf7d6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/wav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/xml.png new file mode 100644 index 0000000..8775920 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/filetype_thumb/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cancel.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cancel.png new file mode 100644 index 0000000..09a70cf Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cancel.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/copy.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/copy.png new file mode 100644 index 0000000..0d64717 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/copy.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cut.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cut.png new file mode 100644 index 0000000..dd4c7f2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/cut.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/edit.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/edit.png new file mode 100644 index 0000000..3c4ab51 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/edit.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete.png new file mode 100644 index 0000000..09a70cf Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete2.png new file mode 100644 index 0000000..67a5c57 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-delete2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download.png new file mode 100644 index 0000000..14d7f4e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download2.png new file mode 100644 index 0000000..74ab43b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-download2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename.png new file mode 100644 index 0000000..7623edd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename2.png new file mode 100644 index 0000000..584ee17 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/file-rename2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find.png new file mode 100644 index 0000000..9c78003 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find2.png new file mode 100644 index 0000000..6985b76 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/find2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add.png new file mode 100644 index 0000000..c7829ba Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add2.png new file mode 100644 index 0000000..b417d87 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-add2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-delete.png new file mode 100644 index 0000000..eed31ff Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download.png new file mode 100644 index 0000000..922a67e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download2.png new file mode 100644 index 0000000..26db3a8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download3.png new file mode 100644 index 0000000..97346d3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-download3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-rename.png new file mode 100644 index 0000000..9afa7c4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-selected.png new file mode 100644 index 0000000..35fead1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder.png new file mode 100644 index 0000000..002f2c8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/folder.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/list.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/list.png new file mode 100644 index 0000000..fb1cde8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/list.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/loading.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/loading.gif new file mode 100644 index 0000000..5b071e1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/loading.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/minus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/minus.png new file mode 100644 index 0000000..ba8f1ba Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/minus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order.png new file mode 100644 index 0000000..4d0074a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order2.png new file mode 100644 index 0000000..babe797 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/order2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/paste.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/paste.png new file mode 100644 index 0000000..662f04b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/paste.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/plus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/plus.png new file mode 100644 index 0000000..bb323b6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/plus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/preview.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/preview.png new file mode 100644 index 0000000..5be9a6c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/preview.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select.png new file mode 100644 index 0000000..ae7ca08 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select2.png new file mode 100644 index 0000000..485d9b4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/select2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/thumbnails.png new file mode 100644 index 0000000..1815716 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload.png new file mode 100644 index 0000000..b8a43cb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload2.png new file mode 100644 index 0000000..7065a96 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_fail.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_fail.png new file mode 100644 index 0000000..af32bf6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_fail.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_ok.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_ok.png new file mode 100644 index 0000000..99242d0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/img/upload_ok.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/skin.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/skin.css new file mode 100644 index 0000000..313b44d --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/business/skin.css @@ -0,0 +1,395 @@ +body { + font-family: Arial; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor:default !important; + padding:0; + margin:0; + background:#FFF; + height:100%; + width:100%; + overflow: hidden; +} + +ul{ + list-style:none; + margin:0; + padding:0; +} + +#wraper{ + height:100%; +} + +#wraper, #menuDir, #menuFile, #pnlEmptyDir, #pnlDirList ul{ + display:none; +} + +.scrollPane{ + height:400px; + overflow-x: hidden; + overflow-y: auto; +} +.scrollPane.noScroll { overflow-y: hidden; } + +a {text-decoration:none; color:#DD7700; } + +select:focus, input:focus { outline-width: 0; } +select { border: 1px solid rgb(168, 168, 168); } +input::-moz-focus-inner { border: 0; } +select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } + +#dirActions { min-width: 228px; } +#fileActions { } +#dirActions.selected, #fileActions.selected {} +.actions { margin-bottom: 5px; white-space: nowrap; overflow-y: hidden; border-bottom: 1px solid #D0D0D0; background-color: #fafbfc; } +.pnlDirs { overflow-x: hidden; overflow-y: auto;border-right:1px solid #D0D0D0; } + +#copyright { position: absolute; bottom: 0; left: 0; font-size: 15px; z-index: 50; padding-bottom: 10px; padding-left: 10px; } +.hc #copyright { color: white; } + +.si_btn { + width: 76px; + padding: 10px; + height: 74px; + line-height: 100px; + font-size: 12px; + background-position: 21px 10px; + background-repeat: no-repeat; + background-color: #fafbfc; + cursor: pointer; + border: 1px solid #fafbfc; +} +.si_btn:hover, .si_btn:focus { background-color: #f3f3f3; } +.si_toolbar_item.disabled { -webkit-filter: grayscale(100%); filter: grayscale(100%); opacity: 0.3; cursor: default; } +#btnSearch.disabled input, #btnOrder.disabled select { pointer-events:none; } + +.si_btn.si_separator { + width: 0px; + border: none; + background-color: white; + cursor: default; + display: inline-block; + height: 55px; + padding: 0; + margin: 0 3px; + border-right: 1px solid #D0D0D0; +} +.si_toolbar_item { } +.si_toolbar_item:last-child { margin-right: 0; } + +.si_btns_choose { + border: none; + paddnig-left: 4px; + display: inline-block; +} +.si_btns_choose:before { + content: ''; + width: 0px; + border: none; + background-color: white; + cursor: default; + display: inline-block; + height: 55px; + padding: 0; + margin: 0 3px; + border-right: 1px solid #D0D0D0; + +} +.si_btns_choose .si_btn { border: none; height: 72px; } +.si_btns_choose .si_btn:first-child { } +.si_btns_choose .si_btn:last-child { border-right: none; } +.si_btns_choose .si_btn.selected { background-color: #F3F3F3; } + +#btnAddDir { background-image: url(img/folder-add.png); } +#btnRenameDir { background-image: url(img/folder-rename.png); } +#btnDeleteDir { background-image: url(img/folder-delete.png); } +#btnDownloadDir { background-image: url(img/folder-download.png); } +#btnDirCut { background-image: url(img/cut.png); } +#btnDirCopy { background-image: url(img/copy.png); } +#btnDirPaste { background-image: url(img/paste.png); } + +#btnSelectFile { background-image: url(img/select.png); } +#btnAddFile { background-image: url(img/upload.png); } +#btnEditFile { background-image: url(img/edit.png); } +#btnAddFile.cancel { background-image: url(img/cancel.png); } +#btnPreviewFile { background-image: url(img/preview.png); } +#btnRenameFile { background-image: url(img/file-rename.png); } +#btnDownloadFile { background-image: url(img/file-download.png); } +#btnDeleteFile { background-image: url(img/file-delete.png); } +#btnCutFile { background-image: url(img/cut.png); } +#btnCopyFile { background-image: url(img/copy.png); } +#btnPasteFile { background-image: url(img/paste.png); } + +#btnListView { background-image: url(img/list.png); } +#btnThumbView { background-image: url(img/thumbnails.png); } + +.si_pnl_order { + display: inline-block; + padding: 0; + height: 52px; + font-size: 12px; + background-image: url(img/order.png); + background-position: 21px 5px; + background-repeat: no-repeat; + opacity: 0.8; +} +.si_pnl_order:before { + content: ''; + width: 0px; + border: none; + background-color: white; + cursor: default; + display: inline-block; + height: 55px; + padding: 0; + margin: 0 3px; + border-right: 1px solid #D0D0D0; +} +.si_pnl_order_desc { + padding-left: 5px; + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; +} +.si_pnl_order_select { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; +} +.si_pnl_order_select > select { + background: white; + font-size: 18px; +} + +.si_pnl_find { + display: inline-block; + padding: 0 5px; + height: 52px; + font-size: 12px; + background-image: url('img/find.png'); + background-position: 28px 5px; + background-repeat: no-repeat; + opacity: 0.8; +} +.si_pnl_find:before { + content: ''; + width: 0px; + border: none; + background-color: white; + cursor: default; + display: inline-block; + height: 55px; + padding: 0; + margin: 0 2px; + border-right: 1px solid #D0D0D0; +} +.si_pnl_find_desc { + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; + padding-left: 7px; +} +.si_pnl_find_box { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; +} +#txtSearch { + font-size: 18px; + width: 180px; + margin-top: 0; + margin-right: 4px; + border: 1px solid rgb(168, 168, 168); +} + +.si_tree_item { display:block; padding:6px 3px 3px 3px; cursor:pointer; height: 20px; margin-bottom:3px; border: 1px solid white; } +.si_tree_item.cut { opacity: 0.5; } +.si_tree_item > div { float: left; } +.si_tree_item:hover, .si_tree_item.selected { background: #fafbfc; border: 1px solid #dedede; } +#pnlDirList { margin-left:4px; padding: 0 4px 0 1px } +#pnlDirList ul{ padding:0 0 0 20px; } +#pnlDirList.disabled .si_tree_item { pointer-events:none; cursor: default; opacity: 0.6; } +#pnlDirList.disabled .si_tree_item:hover { background: transparent; } + +#pnlDirList.hide-root > li > .si_tree_item { display: none; } +#pnlDirList.hide-root > li > ul { padding-left: 0; } + +#pnlFiles { padding: 0 5px; } + + +.si_tree_item_dir { display: inline-block; background-image: url(img/folder.png); background-repeat: no-repeat; width: 24px; height: 24px; margin-top: -4px; margin-left: 3px; } +.si_tree_item_plus { background-image: url(img/plus.png); background-repeat: no-repeat; background-position: 0 5px; width: 13px; height: 18px; margin-top: -2px; } +.si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus.png); } +.si_tree_item_plus.si_tree_item_plus_blank { background-image: none; } +.si_tree_item .name { font-size: 14px; line-height: 18px; margin-left: 4px; margin-right: 4px; } +.si_tree_item_count { + float: right !important; + position: relative; + right: 0; + font-size: 14px; + width: 40px; + color: #727272; + text-align: center; + height: 21px; + margin-top: -2px; + line-height: 23px; + background-color: #fafbfc; +} + +.si_tree_item.selected { font-weight: bold; } +.si_tree_item.selected .si_tree_item_count { font-weight: normal; } +#dirActions.selected .si_tree_item.selected .si_tree_item_count { background-color: transparent; color: #444; } +.si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); } + +#pnlEmptyDir, #pnlSearchNoFiles { display: none; width: 100%; height: 98%; color: #AAA; font-size: 16px; } +#pnlEmptyDir > div, #pnlSearchNoFiles > div { display: table-cell; vertical-align: middle; text-align: center; } + + +.contextMenu{ + position:absolute; + z-index:1000 !important; + background-color:white; + border:1px solid #D0D0D0; + font-size: 14px; + min-width:140px; + color: #EEE; +} +.contextMenu a { + padding: 5px 25px 5px 20px; + display: block; + background-repeat:no-repeat; + background-position: 4px 6px; + color:#000; +} +.contextMenu a:last-child { border-bottom: none; } +.contextMenu a:hover { background-color: #f3f3f3; } +.contextMenu a.disabled { color: #CCC; cursor: default; } + +#alphamanager_preview { display: none; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: #333; } +#alphamanager_preview img { max-width: 100%; max-height: 100%; width: auto; height: auto; position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } +#alphamanager_preview_close { position: relative; right: 0; top: 4px; padding: 2px 6px; background-color: #333; color: white; display: inline-block; cursor: default; font-size: 12px; } + + +#pnlUploadFiles { width: 100%; display: none; } +.alphaUploader-dropArea { + display: table-cell; + vertical-align: middle; + text-align: center; + width: 100%; + box-sizing: border-box; + height: 100%; + font-size: 18px; +} +.alphaUploader-elements { padding: 0 50px; } +.alphaUploader-or { + padding: 25px; + font-size: 16px; + color: #666; +} +.alphaUploader-dropArea input { font-size: 16px; } +.alphaUploader-files { display: none; width: 100%; height: 100%; padding: 30px 0; position: relative; } +.alphaUploader-files table { margin: 0 auto; } +.alphaUploader-header { font-size: 16px; font-weight: bolder; padding-bottom: 5px; } +.alphaUploader-header > div { background-image: url(img/loading.gif); background-position: left 0px; background-repeat: no-repeat; padding-left: 28px; display: inline-block; line-height: 24px; } +.alphaUploader-total { font-size: 16px; padding-bottom: 15px; } +.alphaUploader-cancelInput { background: white; border: #AAA 1px solid; padding: 3px 10px; font-size: 14px; cursor: pointer; } +.alphaUploader-cancelInput:hover { background-color: #EEE; } +.alphaUploader-cancelInput-disabled { cursor: default; background-color: #F8F8F8 !important; border-color: #C8C8C8; opacity: 0.3;} +.alphaUploader-cancelInput-disabled:hover, .alphaUploader-cancelInput-disabled:focus { background-color: white; } + +.alphaUploader-filesList { position: absolute; top: 135px; bottom: 0; overflow-y: auto; left:0; right: 0; } + +.alphaUploader-file { border-bottom: 1px solid #AAA; font-size: 15px; } +.alphaUploader-file:last-child { border-bottom: none; } +.alphaUploader-status { width: 30px; background-repeat: no-repeat; } +.alphaUploader-status.alphaUploader-status-ok { background-image: url(img/upload_ok.png); } +.alphaUploader-status.alphaUploader-status-fail { background-image: url(img/upload_fail.png); } +.alphaUploader-filename { text-align: right; } +.alphaUploader-filesize { text-align: right; } +.alphaUploader-progressOuter { width: 200px; border: 1px solid #BBB; text-align: left; height: 20px; overflow: hidden; margin: 0 15px;} +.alphaUploader-progressInner { display: inline-block; height: 20px; background-color: #b9def0; width: 0; } + +#pnlLoading { width: 100%; display: none; } +#pnlLoading.visible { display: table; opacity: 1; } +#pnlLoading > div { width: 100%; height: 100%; font-size: 18px; padding-bottom: 15px; display: table-cell; vertical-align: middle; text-align: center; } +#pnlLoading > div > div { background-image: url(img/loading.gif); background-position: left -1px; background-repeat: no-repeat; padding-left: 30px; height: 26px; display: inline-block; line-height: 26px; } + +.dlg-bg { background-color: #000000; opacity: 0.2; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 49999; display: none; } +.dlg-outer { + z-index: 50000; + position: absolute; + left: 0; top: 0; width: 100%; height: 100%; + display: none; +} +.dlg-wrap { + display: table-cell; + vertical-align: middle; + text-align: center; +} +.dlg { + background-color: white; + border: 6px solid #444; + display: inline-block; +} +.dlg .title { border-bottom: 1px solid #444; font-size: 18px; padding: 8px 40px 7px 40px; } +.dlg .content { padding: 40px; font-size: 16px; } +.dlg input { width: 300px; font-size: 16px; border: 1px solid rgb(168, 168, 168); } + +.dlg-btn { border: 1px solid #666; padding: 3px 0 3px 0; display: inline-block; color: #444; font-size: 15px; margin-bottom: 20px; width: 90px; text-align: center; } +.dlg-btn.disabled { opacity: 0.3; cursor: default; } + +#dlgAlert .buttons { text-align: center; } + +#dlgAlert { z-index: 50002; } +#dlgAlertBg { z-index: 50001; } +#dlgConfirm, #dlgText { z-index: 49996; } +#dlgConfirmBg, #dlgTextBg { z-index: 49995; } + +#pnlViewList { display: none; width: 99%; border-spacing: 0; font-size: 14px; margin: 1px 0 0 1px; } +#pnlViewList td { cursor: pointer; padding-bottom: 0; height: 28px; line-height: 21px; margin-bottom: 1px;} +#pnlViewList .file.cut { opacity: 0.5; } +#pnlViewList .file-icon { width: 26px; text-align: left; background-position: 0 2px; background-repeat: no-repeat; } +#pnlViewList .file-size { width: 110px; text-align: right; } +#pnlViewList .file-date { width: 170px; text-align: right; padding-right: 8px; } +#pnlViewList .file:hover { background-color: #F2F9FF; outline: 1px solid #dedede; } +#pnlViewList .file.selected { background-color: #F2F9FF; outline: 1px solid #dedede; color: black; } +#pnlViewList .file.selected .file-icon { } +#fileActions.selected #pnlViewList .file.selected { background: #F2F9FF; color: black; } + +#pnlViewThumbs { display: none; } +#pnlViewThumbs table { width: 100%; border-spacing: 0; } +#pnlViewThumbs td { width: 200px; } +#pnlViewThumbs .file { height: 191px; width: 159px; display: inline-block; cursor: pointer; font-size: 14px; padding: 2px; overflow: hidden; border: 1px solid white; } +#pnlViewThumbs .file.cut { opacity: 0.5; } +#pnlViewThumbs .file:hover { background-color: #F2F9FF; } +#pnlViewThumbs .file-icon { background-position: center; background-repeat: no-repeat; } +#pnlViewThumbs .file-name { padding-top: 14px; text-align: center; white-space: nowrap; } +#pnlViewThumbs .file-size { padding-top: 3px; text-align: center; white-space: nowrap; color: #555; } +#pnlViewThumbs .file-date { display: none; } +#pnlViewThumbs .file.selected { border-color: #aaa; } +#fileActions.selected #pnlViewThumbs .file.selected {} + + +/* Icons set 2 */ +.mod_icons2 #btnAddDir { background-image: url(img/folder-add2.png); } +.mod_icons2 #btnDownloadDir { background-image: url(img/folder-download2.png); } + +.mod_icons2 #btnSelectFile { background-image: url(img/select2.png); } +.mod_icons2 #btnAddFile { background-image: url(img/upload2.png); } +.mod_icons2 #btnAddFile.cancel { background-image: url(img/cancel.png); } +.mod_icons2 #btnRenameFile { background-image: url(img/file-rename2.png); } +.mod_icons2 #btnDeleteFile { background-image: url(img/file-delete2.png); } +.mod_icons2 #btnDownloadFile { background-image: url(img/file-download2.png); } + +.mod_icons2 .si_pnl_find { background-image: url('img/find2.png'); } + + +.mod_white-toolbar .si_btn.actions { background-color: white; } +.mod_white-toolbar .actions { background-color: white; border-color: white; } \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/find.png new file mode 100644 index 0000000..880af31 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/list.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/list.png new file mode 100644 index 0000000..0d4aa76 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/list.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/loading2.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/loading2.gif new file mode 100644 index 0000000..94894d2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/loading2.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/order.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/order.png new file mode 100644 index 0000000..24db1ba Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/order.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/thumbnails.png new file mode 100644 index 0000000..71df9a7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/_img/thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/avi.png new file mode 100644 index 0000000..56062be Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/conf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/conf.png new file mode 100644 index 0000000..9f720a9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/conf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/css.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/css.png new file mode 100644 index 0000000..ff8175c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/css.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/default.png new file mode 100644 index 0000000..053bc92 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/doc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/doc.png new file mode 100644 index 0000000..814496f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/doc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/flv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/flv.png new file mode 100644 index 0000000..07e0f85 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/flv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/htaccess.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/htaccess.png new file mode 100644 index 0000000..17456ae Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/htaccess.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/html.png new file mode 100644 index 0000000..3e2e1a6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/images.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/images.png new file mode 100644 index 0000000..d2d3781 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/images.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/js.png new file mode 100644 index 0000000..2687627 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/log.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/log.png new file mode 100644 index 0000000..f9549eb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/log.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/mp3.png new file mode 100644 index 0000000..bea732e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/pdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/pdf.png new file mode 100644 index 0000000..a66ced8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/pdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/php.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/php.png new file mode 100644 index 0000000..875e8c0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/php.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/png.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/png.png new file mode 100644 index 0000000..986d7ab Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/png.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/ppt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/ppt.png new file mode 100644 index 0000000..64c1433 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/ppt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/psd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/psd.png new file mode 100644 index 0000000..c26a5c5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/psd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/script.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/script.png new file mode 100644 index 0000000..4433b22 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/script.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/txt.png new file mode 100644 index 0000000..ff3d688 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xls.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xls.png new file mode 100644 index 0000000..b088091 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xls.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xml.png new file mode 100644 index 0000000..c8d1613 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/zip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/zip.png new file mode 100644 index 0000000..7466393 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_list/zip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/avi.png new file mode 100644 index 0000000..faf6ec7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/conf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/conf.png new file mode 100644 index 0000000..4966684 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/conf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/css.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/css.png new file mode 100644 index 0000000..d90db1f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/css.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/default.png new file mode 100644 index 0000000..4435c8c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/doc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/doc.png new file mode 100644 index 0000000..11a98ff Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/doc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/flv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/flv.png new file mode 100644 index 0000000..6b9b9c9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/flv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/htaccess.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/htaccess.png new file mode 100644 index 0000000..1865f8f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/htaccess.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/html.png new file mode 100644 index 0000000..3ae6dcd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/js.png new file mode 100644 index 0000000..9917912 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/log.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/log.png new file mode 100644 index 0000000..74dd0e1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/log.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/mp3.png new file mode 100644 index 0000000..11e2413 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/pdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/pdf.png new file mode 100644 index 0000000..2143bb3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/pdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/php.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/php.png new file mode 100644 index 0000000..c4845f4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/php.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/png.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/png.png new file mode 100644 index 0000000..cbdf8ca Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/png.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/ppt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/ppt.png new file mode 100644 index 0000000..1188447 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/ppt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/psd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/psd.png new file mode 100644 index 0000000..c677ad7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/psd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/script.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/script.png new file mode 100644 index 0000000..59a6a11 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/script.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt (2).png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt (2).png new file mode 100644 index 0000000..b3ba505 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt (2).png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt.png new file mode 100644 index 0000000..18ce2a1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xls.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xls.png new file mode 100644 index 0000000..3271155 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xls.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xml.png new file mode 100644 index 0000000..b606409 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/zip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/zip.png new file mode 100644 index 0000000..c5ec5b9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/filetype_thumb/zip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/__find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/__find.png new file mode 100644 index 0000000..a7243a3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/__find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_find.png new file mode 100644 index 0000000..9acc590 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_thumbnails.png new file mode 100644 index 0000000..9bfcedf Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/_thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/add.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/add.png new file mode 100644 index 0000000..d3fe61f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/add.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cancel.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cancel.png new file mode 100644 index 0000000..7fbfa0e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cancel.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/copy.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/copy.png new file mode 100644 index 0000000..78099f2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/copy.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cut.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cut.png new file mode 100644 index 0000000..dcd9a62 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/cut.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete.png new file mode 100644 index 0000000..3094813 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete2.png new file mode 100644 index 0000000..d194a7d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/delete2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/dir-download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/dir-download.png new file mode 100644 index 0000000..d30c9a0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/dir-download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download.png new file mode 100644 index 0000000..9666807 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download2.png new file mode 100644 index 0000000..92679d5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/download2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/edit.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/edit.png new file mode 100644 index 0000000..68da96f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/edit.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/find.png new file mode 100644 index 0000000..880af31 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder-selected.png new file mode 100644 index 0000000..399f228 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder.png new file mode 100644 index 0000000..92e368f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_delete.png new file mode 100644 index 0000000..713bd8b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_rename.png new file mode 100644 index 0000000..205e845 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/folder_rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/list.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/list.png new file mode 100644 index 0000000..d5079f7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/list.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading.gif new file mode 100644 index 0000000..3afa5a1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading2.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading2.gif new file mode 100644 index 0000000..94894d2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/loading2.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus-selected.png new file mode 100644 index 0000000..c2fdbef Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus.png new file mode 100644 index 0000000..4ea6a16 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/minus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/order.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/order.png new file mode 100644 index 0000000..24db1ba Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/order.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste.png new file mode 100644 index 0000000..78a2a31 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste2.png new file mode 100644 index 0000000..7233945 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/paste2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus-selected.png new file mode 100644 index 0000000..347f3f3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus.png new file mode 100644 index 0000000..3627f95 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/plus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/preview.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/preview.png new file mode 100644 index 0000000..950b2b9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/preview.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename.png new file mode 100644 index 0000000..23e36d8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename2.png new file mode 100644 index 0000000..a95abc5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/rename2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/select.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/select.png new file mode 100644 index 0000000..5ea8253 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/select.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/thumbnails.png new file mode 100644 index 0000000..eda9b96 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload.png new file mode 100644 index 0000000..376db9c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_fail.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_fail.png new file mode 100644 index 0000000..46fa536 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_fail.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_ok.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_ok.png new file mode 100644 index 0000000..25f323f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/img/upload_ok.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/skin.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/skin.css new file mode 100644 index 0000000..51d939d --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/flat/skin.css @@ -0,0 +1,396 @@ +body { + font-family: Arial; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor:default !important; + padding:0; + margin:0; + background:#FFF; + height:100%; + width:100%; + overflow: hidden; + color: rgb(0, 153, 255); +} +::selection { background: #7DCFFD; color: white; } + +ul{ + list-style:none; + margin:0; + padding:0; +} + +#wraper{ + height:100%; +} + +#wraper, #menuDir, #menuFile, #pnlEmptyDir, #pnlDirList ul{ + display:none; +} + +.scrollPane{ + height:400px; + overflow-x: hidden; + overflow-y: auto; +} +.scrollPane.noScroll { overflow-y: hidden; } + +a {text-decoration:none; color:#DD7700; } + +select:focus, input:focus { outline-width: 0; } +select { border: 1px solid rgb(168, 168, 168); } +input::-moz-focus-inner { border: 0; } +select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } + +#dirActions { padding: 0; min-width: 238px; } +#fileActions { padding: 0; } +#dirActions.selected, #fileActions.selected {} +.actions { margin-bottom: 10px; white-space: nowrap; overflow-y: hidden; padding: 0; background-color: #526AB6; } +#dirActions .actions, #dirActions .scrollPane { padding-right: 5px; } +#fileActions .actions, #fileActions .scrollPane { } +.pnlDirs { overflow-x: hidden; overflow-y: auto; } + +#copyright { position: absolute; bottom: 0; left: 0; font-size: 15px; z-index: 50; padding-bottom: 10px; padding-left: 10px; } +.hc #copyright { color: white; } + +.si_btn { + width: 76px; + padding: 15px 10px; + height: 84px; + line-height: 100px; + font-size: 12px; + background-position: center 15px; + background-repeat: no-repeat; + background-color: transparent; + border: none; + cursor: pointer; + color: white; +} +.si_btn:hover, .si_btn:focus { background-color: #5F81EC; } + +.si_toolbar_item.disabled { + opacity: 0.3; + cursor: default; +} +.si_toolbar_item.disabled:hover, .si_toolbar_item.disabled:focus { } +.si_btn.disabled:hover, .si_btn.disabled:focus { background-color: transparent; } +#btnSearch.disabled input, #btnOrder.disabled select { pointer-events:none; } + +.si_btn.si_separator { + width: 5px; + border: none; + background-color: transparent; + cursor: default; + display: inline-block; + height: 45px; + padding: 0; + margin: 0; +} +.si_toolbar_item { margin-right: 5px; } +.si_toolbar_item:last-child { margin-right: 0; } + +.si_btns_choose { display: inline-block; } +.si_btns_choose .si_btn { height: 84px; } +.si_btns_choose .si_btn:first-child { margin-left: 0; } +.si_btns_choose .si_btn:last-child { border-right: none; } +.si_btns_choose .si_btn.selected { background-color: #009BD8; } + +#btnAddDir { background-image: url(img/add.png); } +#btnRenameDir { background-image: url(img/folder_rename.png); } +#btnDeleteDir { background-image: url(img/folder_delete.png); } +#btnDownloadDir { background-image: url(img/dir-download.png); } +#btnDirCut { background-image: url(img/cut.png); } +#btnDirCopy { background-image: url(img/copy.png); } +#btnDirPaste { background-image: url(img/paste.png); } + +#btnSelectFile { background-image: url(img/select.png);} +#btnAddFile { background-image: url(img/upload.png); } +#btnAddFile.cancel { background-image: url(img/cancel.png); } +#btnEditFile { background-image: url(img/edit.png); } +#btnPreviewFile { background-image: url(img/preview.png); } +#btnRenameFile { background-image: url(img/rename.png); } +#btnDownloadFile { background-image: url(img/download.png); } +#btnDeleteFile { background-image: url(img/delete.png); } +#btnCutFile { background-image: url(img/cut.png); } +#btnCopyFile { background-image: url(img/copy.png); } +#btnPasteFile { background-image: url(img/paste.png); } + +#btnListView { background-image: url(img/list.png); } +#btnThumbView { background-image: url(img/thumbnails.png); } + +.si_pnl_order { + display: inline-block; + padding: 10px; + height: 52px; + font-size: 12px; + background-image: url(img/order.png); + background-position: 21px 10px; + background-repeat: no-repeat; + color: white; +} +.si_pnl_order_desc { + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; +} +.si_pnl_order_select { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; +} +.si_pnl_order_select > select { + background: #43BEEE; + color: white; + border: rgb(139, 201, 241) 1px solid;; + font-size: 18px; + margin-top: 0px; +} + +.si_pnl_find { + display: inline-block; + padding: 10px; + height: 52px; + font-size: 12px; + background-image: url('img/find.png'); + background-position: 21px 10px; + background-repeat: no-repeat; + color: white; +} +.si_pnl_find_desc { + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; +} +.si_pnl_find_box { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; + background: #65CEE9; + color: white; + border: 1px solid #2BABCC; + font-size: 18px; +} +#txtSearch { + font-size: 18px; + width: 180px; + margin: 0; + background: #43BEEE; + color: white; + border: rgb(139, 201, 241) 1px solid; +} + +.si_tree_item { display:block; padding:6px 3px 3px 3px; cursor:pointer; height: 20px; margin-bottom:3px; color: rgb(0, 153, 255); } +.si_tree_item.cut { opacity: 0.5; } +.si_tree_item > div { float: left; } +.si_tree_item:hover, .si_tree_item.selected { background: #FF8500; color: white; } +#pnlDirList { margin-left:4px; } +#pnlDirList ul{ padding:0 0 0 20px; } +#pnlDirList.disabled .si_tree_item { pointer-events:none; cursor: default; opacity: 0.6; } +#pnlDirList.disabled .si_tree_item:hover { background: transparent; } + +#pnlDirList.hide-root > li > .si_tree_item { display: none; } +#pnlDirList.hide-root > li > ul { padding-left: 0; } + + +.si_tree_item_dir { display: inline-block; background-image: url(img/folder.png); background-repeat: no-repeat; width: 24px; height: 24px; margin-top: -4px; margin-left: 3px; } +.si_tree_item:hover .si_tree_item_dir, .si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); } +.si_tree_item_plus { background-image: url(img/plus.png); background-repeat: no-repeat; background-position: 0 5px; width: 13px; height: 18px; margin-top: -2px; } +.si_tree_item:hover .si_tree_item_plus, .si_tree_item.selected .si_tree_item_plus { background-image: url(img/plus-selected.png); } +.si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus.png); } +.si_tree_item:hover .si_tree_item_plus.si_tree_item_plus_minus, .si_tree_item.selected .si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus-selected.png); } + +.si_tree_item_plus.si_tree_item_plus_blank { background-image: none !important; } +.si_tree_item .name { font-size: 14px; line-height: 18px; margin-left: 4px; margin-right: 4px; } +.si_tree_item_count { + float: right !important; + position: relative; + right: 0; + font-size: 14px; + width: 40px; + background-color: white; + text-align: center; + height: 21px; + margin-top: -2px; + line-height: 23px; + + margin-top: -6px; + margin-right: -3px; + height: 29px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + line-height: 29px; + color: #FF8500; +} + +.si_tree_item.selected, .si_tree_item:hover { font-weight: normal; } +.si_tree_item:hover .si_tree_item_count, .si_tree_item.selected .si_tree_item_count { background-color: #DA7100; color: white; font-weight: normal; } +.si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); } + +#pnlEmptyDir, #pnlSearchNoFiles { display: none; width: 100%; height: 98%; color: #88B9F8; font-size: 16px; } +#pnlEmptyDir > div, #pnlSearchNoFiles > div { display: table-cell; vertical-align: middle; text-align: center; } + + +.contextMenu{ + position:absolute; + z-index:1000 !important; + background-color: #3FB3E0; + font-size: 15px; + min-width:140px; +} +.contextMenu a { + padding: 5px 25px 5px 20px; + display: block; + background-repeat:no-repeat; + background-position: 4px 6px; + color:white; +} +.contextMenu a:last-child { border-bottom: none; } +.contextMenu a:hover { color: white; background-color: #FF8500; } +.contextMenu a.disabled { opacity: 0.4; cursor: default; } + +#alphamanager_preview { display: none; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: #333; } +#alphamanager_preview img { max-width: 100%; max-height: 100%; width: auto; height: auto; position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } +#alphamanager_preview_close { + position: relative; + right: 0; + top: 4px; + padding: 2px 6px; + background-color: #333; + color: white; + display: inline-block; + cursor: default; + font-size: 12px; +} + + +#pnlUploadFiles { width: 100%; display: none; } +.alphaUploader-dropArea { + display: table-cell; + vertical-align: middle; + text-align: center; + width: 99%; + box-sizing: border-box; + height: 100%; + border: 3px dashed #ACD1FF; + font-size: 18px; +} +.alphaUploader-elements { padding: 0 50px; } +.alphaUploader-or { + padding: 25px; + font-size: 16px; + color: #66AAFF; +} +.alphaUploader-dropArea input { font-size: 16px; } +.alphaUploader-files { display: none; width: 100%; height: 100%; padding: 30px 0; position: relative; } +.alphaUploader-files table { margin: 0 auto; } +.alphaUploader-header { font-size: 16px; font-weight: bolder; padding-bottom: 5px; } +.alphaUploader-header > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 34px; line-height: 30px; display: inline-block; } +.alphaUploader-total { font-size: 16px; padding-bottom: 15px; } +.alphaUploader-cancelInput { background: white; border: #88B9F8 1px solid; padding: 3px 10px; font-size: 14px; cursor: pointer; } +.alphaUploader-cancelInput:hover { background-color: #EEE; } +.alphaUploader-cancelInput-disabled { cursor: default; background-color: #F8F8F8 !important; border-color: #C8C8C8; opacity: 0.6;} +.alphaUploader-cancelInput-disabled:hover, .alphaUploader-cancelInput-disabled:focus { background-color: white; } + +.alphaUploader-filesList { position: absolute; top: 135px; bottom: 0; overflow-y: auto; left:0; right: 0; } + +.alphaUploader-file { border-bottom: 1px solid #88B9F8; font-size: 15px; } +.alphaUploader-file:last-child { border-bottom: none; } +.alphaUploader-status { width: 30px; background-repeat: no-repeat; } +.alphaUploader-status.alphaUploader-status-ok { background-image: url(img/upload_ok.png); } +.alphaUploader-status.alphaUploader-status-fail { background-image: url(img/upload_fail.png); } +.alphaUploader-filename { text-align: right; } +.alphaUploader-filesize { text-align: right; } +.alphaUploader-progressOuter { width: 200px; border: 1px solid #5D77FF; text-align: left; height: 20px; overflow: hidden; margin: 0 15px;} +.alphaUploader-progressInner { display: inline-block; height: 20px; background-color: #5D77FF; width: 0; } + +#pnlLoading { width: 100%; display: none; } +#pnlLoading.visible { display: table; opacity: 1; } +#pnlLoading > div { width: 100%; height: 100%; font-size: 18px; padding-bottom: 15px; display: table-cell; vertical-align: middle; text-align: center; } +#pnlLoading > div > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 34px; line-height: 30px; display: inline-block; } + +.dlg-bg { background-color: #000000; opacity: 0.2; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 49999; display: none; } +.dlg-outer { + z-index: 50000; + position: absolute; + left: 0; top: 0; width: 100%; height: 100%; + display: none; +} +.dlg-wrap { + display: table-cell; + vertical-align: middle; + text-align: center; +} +.dlg { + background-color: #1DAEFF; + border-radius: 6px; + color: white; + overflow: hidden; + display: inline-block; +} +.dlg .title { font-size: 18px; padding: 8px 40px 7px 40px; background-color: #005BAF; color: white; } +.dlg .content { padding: 40px; font-size: 16px; } +.dlg input { width: 300px; font-size: 16px; border: 1px solid #02AEF1; padding: 5px; color: #3A6D81; } +.dlg a { color: white; text-decoration: none; border-bottom: white 1px dotted; } +.dlg a:hover, .dlg a:focus { text-decoration: none; } + +.dlg-btn { + margin: 0 10px; + padding: 5px 0; + display: inline-block; + color: white; + font-size: 15px; + margin-bottom: 20px; + width: 90px; + text-align: center; + border-radius: 3px; +} +#dlgTextBtnCancel, #dlgConfirmBtnCancel { background-color: #F14444; border-bottom: none; } +#dlgTextBtnCancel:hover, #dlgTextBtnCancel:focus, #dlgConfirmBtnCancel:hover, #dlgConfirmBtnCancel:focus { background-color: #D33232; border-bottom: none; } +#dlgTextBtnCancel.disabled:hover, #dlgTextBtnCancel.disabled:focus, #dlgConfirmBtnCancel.disabled:hover, #dlgConfirmBtnCancel.disabled:focus { background-color: #F14444; border-bottom: none; } +#dlgTextBtnOK, #dlgConfirmBtnOK, #dlgAlertBtnOK { background-color: #00FFB8; border-bottom: none; } +#dlgTextBtnOK:hover, #dlgTextBtnOK:focus, #dlgConfirmBtnOK:hover, #dlgConfirmBtnOK:focus, #dlgAlertBtnOK:hover, #dlgAlertBtnOK:focus { background-color: #008661; border-bottom: none; } +#dlgTextBtnOK.disabled:hover, #dlgTextBtnOK.disabled:focus, #dlgConfirmBtnOK.disabled:hover, #dlgConfirmBtnOK.disabled:focus, #dlgAlertBtnOK.disabled:hover, #dlgAlertBtnOK.disabled:focus { background-color: #00FFB8; border-bottom: none; } +.dlg-btn.disabled { opacity: 0.6; cursor: default; } + +#dlgAlert .buttons { text-align: center; } + +#dlgAlert { z-index: 50002; } +#dlgAlertBg { z-index: 50001; } +#dlgConfirm, #dlgText { z-index: 49996; } +#dlgConfirmBg, #dlgTextBg { z-index: 49995; } + +#pnlViewList { display: none; width: 100%; border-spacing: 0; font-size: 16px; } +#pnlViewList td { cursor: pointer; padding-bottom: 0; height: 28px; padding-top: 2px; line-height: 21px; } +#pnlViewList .file.cut { opacity: 0.5; } +#pnlViewList .file-icon { width: 26px; text-align: left; background-position: 0 3px; background-repeat: no-repeat; } +#pnlViewList .file-size { width: 110px; text-align: right; } +#pnlViewList .file-date { width: 170px; text-align: right; padding-right: 8px; } +#pnlViewList .file:hover { background-color: #F4F4F4; } +#pnlViewList .file.selected { background-color: #FF9530; color: white; } +#pnlViewList .file.selected .file-icon { } +#fileActions.selected #pnlViewList .file.selected { background-color: #FF8500; color: white; } + +#pnlViewThumbs { display: none; } +#pnlViewThumbs table { width: 100%; border-spacing: 0; } +#pnlViewThumbs td { width: 200px; } +#pnlViewThumbs .file { height: 193px; width: 159px; display: inline-block; cursor: pointer; font-size: 14px; padding: 6px; overflow: hidden; } +#pnlViewThumbs .file.cut { opacity: 0.5; } +#pnlViewThumbs .file:hover { background-color: #E4E6FF; } +#pnlViewThumbs .file-icon { background-position: center; background-repeat: no-repeat; } +#pnlViewThumbs .file-name { padding-top: 14px; text-align: center; white-space: nowrap; } +#pnlViewThumbs .file-size { padding-top: 3px; text-align: center; white-space: nowrap; color: rgb(117, 200, 255); } +#pnlViewThumbs .file-date { display: none; } +#pnlViewThumbs .file.selected { background-color: #FF9530 !important; } +#fileActions.selected #pnlViewThumbs .file.selected { background-color: #FF8500; } +#pnlViewThumbs .file.selected .file-icon {} +#pnlViewThumbs .file.selected .file-icon.icon-ext {} +#pnlViewThumbs .file.selected .file-name { color: white; } +#pnlViewThumbs .file.selected .file-size { color: white; } + +.mod_sea .actions { background-color: #007EAF; } +.mod_sea .si_btn:hover, .mod_sea .si_btn:focus { background-color: #009BD8; } \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3ds.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3ds.png new file mode 100644 index 0000000..d1df248 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3ds.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3g2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3g2.png new file mode 100644 index 0000000..c94a12b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3g2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3gp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3gp.png new file mode 100644 index 0000000..0e8fa2a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/3gp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/7z.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/7z.png new file mode 100644 index 0000000..5298d97 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/7z.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aac.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aac.png new file mode 100644 index 0000000..0f66035 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aac.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ai.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ai.png new file mode 100644 index 0000000..cdfefa6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ai.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aif.png new file mode 100644 index 0000000..b00cdf4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/apk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/apk.png new file mode 100644 index 0000000..4017c6a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/apk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/app6.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/app6.png new file mode 100644 index 0000000..cbda741 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/app6.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asf.png new file mode 100644 index 0000000..b42edc7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asp.png new file mode 100644 index 0000000..76350da Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aspx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aspx.png new file mode 100644 index 0000000..80b3e0c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/aspx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asx.png new file mode 100644 index 0000000..2235ec8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/asx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/avi.png new file mode 100644 index 0000000..c1a5de4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bak.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bak.png new file mode 100644 index 0000000..fc87fbb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bak.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bat.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bat.png new file mode 100644 index 0000000..521e5cb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bat.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bin.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bin.png new file mode 100644 index 0000000..02ec70e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bin.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bmp.png new file mode 100644 index 0000000..d9d3c12 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/bmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cab.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cab.png new file mode 100644 index 0000000..49e54e7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cab.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cad.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cad.png new file mode 100644 index 0000000..a7b4b39 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cad.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cdr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cdr.png new file mode 100644 index 0000000..cceefd5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cdr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cer.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cer.png new file mode 100644 index 0000000..4f5a035 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cer.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfg.png new file mode 100644 index 0000000..5f80fd5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfm.png new file mode 100644 index 0000000..eeeb07d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cfm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cgi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cgi.png new file mode 100644 index 0000000..f922eb8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cgi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/class.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/class.png new file mode 100644 index 0000000..f6a5193 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/class.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/com.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/com.png new file mode 100644 index 0000000..3c2c20f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/com.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpl.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpl.png new file mode 100644 index 0000000..5b3bfd1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpl.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpp.png new file mode 100644 index 0000000..66a607e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cpp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/crx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/crx.png new file mode 100644 index 0000000..4df8007 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/crx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csr.png new file mode 100644 index 0000000..6f3b509 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/css.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/css.png new file mode 100644 index 0000000..6658890 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/css.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csv.png new file mode 100644 index 0000000..a2594b1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/csv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cue.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cue.png new file mode 100644 index 0000000..b0908a6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cue.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cur.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cur.png new file mode 100644 index 0000000..70d8ef1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/cur.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dat.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dat.png new file mode 100644 index 0000000..bedc022 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dat.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/db.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/db.png new file mode 100644 index 0000000..72f2057 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/db.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dbf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dbf.png new file mode 100644 index 0000000..de65a5d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dbf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dds.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dds.png new file mode 100644 index 0000000..0b6b1ef Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dds.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/default.png new file mode 100644 index 0000000..59023ce Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dem.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dem.png new file mode 100644 index 0000000..a5895a6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dem.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dll.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dll.png new file mode 100644 index 0000000..3a963dd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dll.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmg.png new file mode 100644 index 0000000..03dc277 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmp.png new file mode 100644 index 0000000..1a2a800 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/doc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/doc.png new file mode 100644 index 0000000..8237847 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/doc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/docx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/docx.png new file mode 100644 index 0000000..d53b5f4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/docx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/drv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/drv.png new file mode 100644 index 0000000..ed03aaa Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/drv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dtd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dtd.png new file mode 100644 index 0000000..15bb0ad Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dtd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dwg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dwg.png new file mode 100644 index 0000000..1d30b20 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dwg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dxf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dxf.png new file mode 100644 index 0000000..6b31f67 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/dxf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/elf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/elf.png new file mode 100644 index 0000000..07ced7c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/elf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/eps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/eps.png new file mode 100644 index 0000000..99fd5d2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/eps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/exe.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/exe.png new file mode 100644 index 0000000..ade2e2d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/exe.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fla.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fla.png new file mode 100644 index 0000000..500489c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fla.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flash.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flash.png new file mode 100644 index 0000000..5d44067 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flash.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flv.png new file mode 100644 index 0000000..ff68a5b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/flv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fnt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fnt.png new file mode 100644 index 0000000..182e540 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fnt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fon.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fon.png new file mode 100644 index 0000000..ec9cd6c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/fon.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gam.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gam.png new file mode 100644 index 0000000..255daaf Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gam.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gbr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gbr.png new file mode 100644 index 0000000..4ca7e67 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gbr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ged.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ged.png new file mode 100644 index 0000000..4d600d3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ged.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gif.png new file mode 100644 index 0000000..b9f253f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gpx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gpx.png new file mode 100644 index 0000000..d1b0265 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gpx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gz.png new file mode 100644 index 0000000..e230db8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gzip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gzip.png new file mode 100644 index 0000000..cfef0cb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/gzip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/hqz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/hqz.png new file mode 100644 index 0000000..f1e4185 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/hqz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/html.png new file mode 100644 index 0000000..bb29aac Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ibooks.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ibooks.png new file mode 100644 index 0000000..e172151 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ibooks.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/icns.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/icns.png new file mode 100644 index 0000000..f7cd8b5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/icns.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ico.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ico.png new file mode 100644 index 0000000..c1058f9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ico.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ics.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ics.png new file mode 100644 index 0000000..58e249e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ics.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iff.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iff.png new file mode 100644 index 0000000..ac1ab55 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iff.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/indd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/indd.png new file mode 100644 index 0000000..99d1201 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/indd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iso.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iso.png new file mode 100644 index 0000000..5822643 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/iso.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jar.png new file mode 100644 index 0000000..c329588 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jpg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jpg.png new file mode 100644 index 0000000..b58af83 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jpg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/js.png new file mode 100644 index 0000000..718f065 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jsp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jsp.png new file mode 100644 index 0000000..5820891 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/jsp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/key.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/key.png new file mode 100644 index 0000000..9512bbc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/key.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kml.png new file mode 100644 index 0000000..b13e61e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kmz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kmz.png new file mode 100644 index 0000000..3d2dff5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/kmz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lnk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lnk.png new file mode 100644 index 0000000..e2cb2eb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lnk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/log.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/log.png new file mode 100644 index 0000000..58ee45b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/log.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lua.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lua.png new file mode 100644 index 0000000..148e75c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/lua.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m3u.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m3u.png new file mode 100644 index 0000000..8323a4c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m3u.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4a.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4a.png new file mode 100644 index 0000000..9b55b29 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4a.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4v.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4v.png new file mode 100644 index 0000000..0bbd543 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/m4v.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/macho.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/macho.png new file mode 100644 index 0000000..229fca4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/macho.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/max.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/max.png new file mode 100644 index 0000000..0e7b378 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/max.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdb.png new file mode 100644 index 0000000..ffcb3df Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdf.png new file mode 100644 index 0000000..c507d47 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mid.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mid.png new file mode 100644 index 0000000..34d5747 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mid.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mim.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mim.png new file mode 100644 index 0000000..2efd570 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mim.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mov.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mov.png new file mode 100644 index 0000000..7977327 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mov.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp3.png new file mode 100644 index 0000000..df0d733 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp4.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp4.png new file mode 100644 index 0000000..501ca7a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mp4.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpa.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpa.png new file mode 100644 index 0000000..e7e7f72 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpa.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpg.png new file mode 100644 index 0000000..43a1188 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/mpg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msg.png new file mode 100644 index 0000000..2fc749a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msi.png new file mode 100644 index 0000000..bdd68ad Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/msi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/nes.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/nes.png new file mode 100644 index 0000000..25c95da Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/nes.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/object.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/object.png new file mode 100644 index 0000000..474498d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/object.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odb.png new file mode 100644 index 0000000..00e5044 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odc.png new file mode 100644 index 0000000..5db6668 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odf.png new file mode 100644 index 0000000..bec1934 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odg.png new file mode 100644 index 0000000..c3ed68f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odi.png new file mode 100644 index 0000000..b5c21aa Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odp.png new file mode 100644 index 0000000..be9add3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ods.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ods.png new file mode 100644 index 0000000..2bee789 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ods.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt.png new file mode 100644 index 0000000..7c26666 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt5.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt5.png new file mode 100644 index 0000000..68a8b71 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odt5.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odx.png new file mode 100644 index 0000000..55c90d6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/odx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ogg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ogg.png new file mode 100644 index 0000000..b5dc678 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ogg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/otf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/otf.png new file mode 100644 index 0000000..e2430d4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/otf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pages.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pages.png new file mode 100644 index 0000000..bc79e8c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pages.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pct.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pct.png new file mode 100644 index 0000000..da72937 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pct.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdb.png new file mode 100644 index 0000000..c77ce72 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdf.png new file mode 100644 index 0000000..fcc59a6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pif.png new file mode 100644 index 0000000..e20ce90 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pkg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pkg.png new file mode 100644 index 0000000..76dfb18 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pkg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pl.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pl.png new file mode 100644 index 0000000..c260d02 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pl.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/png.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/png.png new file mode 100644 index 0000000..2877645 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/png.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pps.png new file mode 100644 index 0000000..8e7e9b8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ppt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ppt.png new file mode 100644 index 0000000..9a89f85 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ppt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pptx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pptx.png new file mode 100644 index 0000000..5d10230 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pptx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ps.png new file mode 100644 index 0000000..007b9f5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/psd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/psd.png new file mode 100644 index 0000000..e3b1ed4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/psd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pub.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pub.png new file mode 100644 index 0000000..fe0f46e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/pub.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/python.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/python.png new file mode 100644 index 0000000..740de7b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/python.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ra.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ra.png new file mode 100644 index 0000000..5e6c640 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ra.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rar.png new file mode 100644 index 0000000..f326122 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/raw.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/raw.png new file mode 100644 index 0000000..4ce29d3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/raw.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rm.png new file mode 100644 index 0000000..cb8117f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rom.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rom.png new file mode 100644 index 0000000..0dc7c4b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rom.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rpm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rpm.png new file mode 100644 index 0000000..e934c11 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rpm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rss.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rss.png new file mode 100644 index 0000000..2a7ae3c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rss.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rtf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rtf.png new file mode 100644 index 0000000..3844d5a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/rtf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sav.png new file mode 100644 index 0000000..5210452 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sdf.png new file mode 100644 index 0000000..b88923f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sitx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sitx.png new file mode 100644 index 0000000..fc84571 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sitx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sql.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sql.png new file mode 100644 index 0000000..b0a4425 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sql.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/srt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/srt.png new file mode 100644 index 0000000..59bb0c5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/srt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/svg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/svg.png new file mode 100644 index 0000000..b1258e4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/svg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/swf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/swf.png new file mode 100644 index 0000000..1923612 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/swf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sys.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sys.png new file mode 100644 index 0000000..56b7525 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/sys.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tar.png new file mode 100644 index 0000000..1de893c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tex.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tex.png new file mode 100644 index 0000000..63758da Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tex.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tga.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tga.png new file mode 100644 index 0000000..f354898 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tga.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/thm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/thm.png new file mode 100644 index 0000000..714e1d0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/thm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tiff.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tiff.png new file mode 100644 index 0000000..c5c3030 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tiff.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tmp.png new file mode 100644 index 0000000..101558a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/tmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/torrent.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/torrent.png new file mode 100644 index 0000000..b88aa8c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/torrent.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ttf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ttf.png new file mode 100644 index 0000000..509000c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/ttf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/txt.png new file mode 100644 index 0000000..cb2483b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/uue.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/uue.png new file mode 100644 index 0000000..45a993f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/uue.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vb.png new file mode 100644 index 0000000..44f6e1b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcd.png new file mode 100644 index 0000000..459ea0d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcf.png new file mode 100644 index 0000000..b0604c8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vcf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vob.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vob.png new file mode 100644 index 0000000..87f279f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/vob.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wav.png new file mode 100644 index 0000000..62e3b9c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wma.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wma.png new file mode 100644 index 0000000..45a29c9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wma.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wmv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wmv.png new file mode 100644 index 0000000..6827d35 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wmv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wpd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wpd.png new file mode 100644 index 0000000..7c24e5d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wpd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wps.png new file mode 100644 index 0000000..0fed556 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wsf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wsf.png new file mode 100644 index 0000000..18e888e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/wsf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xhtml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xhtml.png new file mode 100644 index 0000000..a413644 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xhtml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlr.png new file mode 100644 index 0000000..47ac613 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xls.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xls.png new file mode 100644 index 0000000..66f35e5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xls.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlsx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlsx.png new file mode 100644 index 0000000..db4ff6e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xlsx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xml.png new file mode 100644 index 0000000..f8c3cbd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/yuv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/yuv.png new file mode 100644 index 0000000..2a1ced4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/yuv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/zip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/zip.png new file mode 100644 index 0000000..a0e1f8f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_list/zip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/.directory b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/.directory new file mode 100644 index 0000000..09f677b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2015,8,13,14,22,54 +Version=3 diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3ds.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3ds.png new file mode 100644 index 0000000..d836f17 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3ds.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3g2.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3g2.png new file mode 100644 index 0000000..f3b5eca Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3g2.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3gp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3gp.png new file mode 100644 index 0000000..4042afc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/3gp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/7z.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/7z.png new file mode 100644 index 0000000..c99a9cc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/7z.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aac.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aac.png new file mode 100644 index 0000000..68909cc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aac.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ai.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ai.png new file mode 100644 index 0000000..075fb94 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ai.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aif.png new file mode 100644 index 0000000..a41f74e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/apk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/apk.png new file mode 100644 index 0000000..bd5e1b4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/apk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/app6.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/app6.png new file mode 100644 index 0000000..860dfa6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/app6.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asf.png new file mode 100644 index 0000000..1bb2426 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asp.png new file mode 100644 index 0000000..46d6f9e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aspx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aspx.png new file mode 100644 index 0000000..3d8bd94 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/aspx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asx.png new file mode 100644 index 0000000..ad55a99 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/asx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/avi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/avi.png new file mode 100644 index 0000000..3e26fa8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/avi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bak.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bak.png new file mode 100644 index 0000000..cbffcb5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bak.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bat.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bat.png new file mode 100644 index 0000000..d19912c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bat.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bin.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bin.png new file mode 100644 index 0000000..e4920a2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bin.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bmp.png new file mode 100644 index 0000000..67ca580 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/bmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cab.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cab.png new file mode 100644 index 0000000..2b54b6b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cab.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cad.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cad.png new file mode 100644 index 0000000..d2b7e86 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cad.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cdr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cdr.png new file mode 100644 index 0000000..9abcb06 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cdr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cer.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cer.png new file mode 100644 index 0000000..48a2e6c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cer.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfg.png new file mode 100644 index 0000000..0077f19 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfm.png new file mode 100644 index 0000000..9ad93d4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cfm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cgi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cgi.png new file mode 100644 index 0000000..fcd3a32 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cgi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/class.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/class.png new file mode 100644 index 0000000..f052b46 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/class.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/com.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/com.png new file mode 100644 index 0000000..b7c2fdb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/com.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpl.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpl.png new file mode 100644 index 0000000..30af102 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpl.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpp.png new file mode 100644 index 0000000..85abe44 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cpp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/crx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/crx.png new file mode 100644 index 0000000..f7d5375 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/crx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csr.png new file mode 100644 index 0000000..0134140 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/css.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/css.png new file mode 100644 index 0000000..085a04b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/css.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csv.png new file mode 100644 index 0000000..ce3de23 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/csv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cue.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cue.png new file mode 100644 index 0000000..0f5b33e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cue.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cur.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cur.png new file mode 100644 index 0000000..e8cd00f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/cur.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dat.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dat.png new file mode 100644 index 0000000..986cd0d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dat.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/db.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/db.png new file mode 100644 index 0000000..2988ade Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/db.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dbf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dbf.png new file mode 100644 index 0000000..d66c122 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dbf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dds.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dds.png new file mode 100644 index 0000000..2405dbd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dds.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/default.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/default.png new file mode 100644 index 0000000..af442bd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/default.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dem.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dem.png new file mode 100644 index 0000000..67e1838 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dem.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dll.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dll.png new file mode 100644 index 0000000..de91e90 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dll.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmg.png new file mode 100644 index 0000000..f3ee810 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmp.png new file mode 100644 index 0000000..96dcdfd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/doc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/doc.png new file mode 100644 index 0000000..4391ced Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/doc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/docx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/docx.png new file mode 100644 index 0000000..e065c45 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/docx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/drv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/drv.png new file mode 100644 index 0000000..2238521 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/drv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dtd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dtd.png new file mode 100644 index 0000000..10342fb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dtd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dwg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dwg.png new file mode 100644 index 0000000..6e4ea2c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dwg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dxf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dxf.png new file mode 100644 index 0000000..a767ef0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/dxf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/elf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/elf.png new file mode 100644 index 0000000..78bd002 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/elf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/eps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/eps.png new file mode 100644 index 0000000..8c5cc9c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/eps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/exe.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/exe.png new file mode 100644 index 0000000..7652eb4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/exe.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fla.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fla.png new file mode 100644 index 0000000..b8c4eab Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fla.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flash.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flash.png new file mode 100644 index 0000000..c9ec334 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flash.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flv.png new file mode 100644 index 0000000..405b8b3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/flv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fnt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fnt.png new file mode 100644 index 0000000..dba3480 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fnt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fon.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fon.png new file mode 100644 index 0000000..7fd0465 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/fon.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gam.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gam.png new file mode 100644 index 0000000..a88dbc3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gam.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gbr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gbr.png new file mode 100644 index 0000000..7e5f7d8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gbr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ged.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ged.png new file mode 100644 index 0000000..3fb3666 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ged.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gif.png new file mode 100644 index 0000000..5bf2128 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gpx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gpx.png new file mode 100644 index 0000000..b577516 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gpx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gz.png new file mode 100644 index 0000000..c70317d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gzip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gzip.png new file mode 100644 index 0000000..be6fdf3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/gzip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/hqz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/hqz.png new file mode 100644 index 0000000..17ab296 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/hqz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/html.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/html.png new file mode 100644 index 0000000..5789f70 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/html.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ibooks.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ibooks.png new file mode 100644 index 0000000..becf80e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ibooks.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/icns.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/icns.png new file mode 100644 index 0000000..39bb8f6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/icns.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ico.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ico.png new file mode 100644 index 0000000..f6e8f6a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ico.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ics.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ics.png new file mode 100644 index 0000000..bbe197b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ics.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iff.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iff.png new file mode 100644 index 0000000..e13aca7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iff.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/indd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/indd.png new file mode 100644 index 0000000..a75cf57 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/indd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iso.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iso.png new file mode 100644 index 0000000..d40d46e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/iso.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jar.png new file mode 100644 index 0000000..f84310b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jpg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jpg.png new file mode 100644 index 0000000..cb8d1d9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jpg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/js.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/js.png new file mode 100644 index 0000000..1d51471 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/js.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jsp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jsp.png new file mode 100644 index 0000000..9df9739 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/jsp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/key.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/key.png new file mode 100644 index 0000000..1f390a5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/key.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kml.png new file mode 100644 index 0000000..6e85d00 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kmz.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kmz.png new file mode 100644 index 0000000..c75d227 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/kmz.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lnk.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lnk.png new file mode 100644 index 0000000..a6a1eb7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lnk.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/log.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/log.png new file mode 100644 index 0000000..a9626fa Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/log.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lua.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lua.png new file mode 100644 index 0000000..6606e8d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/lua.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m3u.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m3u.png new file mode 100644 index 0000000..9f3a34a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m3u.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4a.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4a.png new file mode 100644 index 0000000..22cacce Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4a.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4v.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4v.png new file mode 100644 index 0000000..ebe3378 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/m4v.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/macho.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/macho.png new file mode 100644 index 0000000..f66e46d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/macho.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/max.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/max.png new file mode 100644 index 0000000..276db30 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/max.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdb.png new file mode 100644 index 0000000..85fbb77 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdf.png new file mode 100644 index 0000000..d596ef9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mid.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mid.png new file mode 100644 index 0000000..33e1292 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mid.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mim.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mim.png new file mode 100644 index 0000000..3855f1e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mim.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mov.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mov.png new file mode 100644 index 0000000..66edad5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mov.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp3.png new file mode 100644 index 0000000..ab502e6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp4.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp4.png new file mode 100644 index 0000000..de399d7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mp4.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpa.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpa.png new file mode 100644 index 0000000..0122e29 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpa.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpg.png new file mode 100644 index 0000000..2d7aaad Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/mpg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msg.png new file mode 100644 index 0000000..355207c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msi.png new file mode 100644 index 0000000..b20ee15 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/msi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/nes.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/nes.png new file mode 100644 index 0000000..3452692 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/nes.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/object.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/object.png new file mode 100644 index 0000000..56b9fb9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/object.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odb.png new file mode 100644 index 0000000..8b1c58f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odc.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odc.png new file mode 100644 index 0000000..f7cb281 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odc.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odf.png new file mode 100644 index 0000000..2b4fcee Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odg.png new file mode 100644 index 0000000..16f123f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odi.png new file mode 100644 index 0000000..8860a1b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odp.png new file mode 100644 index 0000000..28d489a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ods.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ods.png new file mode 100644 index 0000000..eb9a2fc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ods.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt.png new file mode 100644 index 0000000..5fbcb34 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt5.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt5.png new file mode 100644 index 0000000..52f2034 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odt5.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odx.png new file mode 100644 index 0000000..e8ad73d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/odx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ogg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ogg.png new file mode 100644 index 0000000..9e6c8c5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ogg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/otf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/otf.png new file mode 100644 index 0000000..638cbb7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/otf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pages.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pages.png new file mode 100644 index 0000000..34d469a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pages.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pct.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pct.png new file mode 100644 index 0000000..11d35e3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pct.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdb.png new file mode 100644 index 0000000..7ba0274 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdf.png new file mode 100644 index 0000000..0eda964 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pif.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pif.png new file mode 100644 index 0000000..14203a1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pif.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pkg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pkg.png new file mode 100644 index 0000000..92ef61f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pkg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pl.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pl.png new file mode 100644 index 0000000..12b377b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pl.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/png.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/png.png new file mode 100644 index 0000000..e7e2df3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/png.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pps.png new file mode 100644 index 0000000..9a011c7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ppt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ppt.png new file mode 100644 index 0000000..e790ab7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ppt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pptx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pptx.png new file mode 100644 index 0000000..ac57795 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pptx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ps.png new file mode 100644 index 0000000..347466f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/psd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/psd.png new file mode 100644 index 0000000..baffbd8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/psd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pub.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pub.png new file mode 100644 index 0000000..e591ad6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/pub.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/python.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/python.png new file mode 100644 index 0000000..9fa3be2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/python.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ra.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ra.png new file mode 100644 index 0000000..70302c1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ra.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rar.png new file mode 100644 index 0000000..3f06bb3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/raw.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/raw.png new file mode 100644 index 0000000..b67c703 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/raw.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rm.png new file mode 100644 index 0000000..a107285 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rom.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rom.png new file mode 100644 index 0000000..c676a9a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rom.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rpm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rpm.png new file mode 100644 index 0000000..c0f5898 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rpm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rss.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rss.png new file mode 100644 index 0000000..41e031c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rss.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rtf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rtf.png new file mode 100644 index 0000000..fe42799 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/rtf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sav.png new file mode 100644 index 0000000..d880cd7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sdf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sdf.png new file mode 100644 index 0000000..98fae94 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sdf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sitx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sitx.png new file mode 100644 index 0000000..54b6309 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sitx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sql.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sql.png new file mode 100644 index 0000000..68e0da2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sql.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/srt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/srt.png new file mode 100644 index 0000000..abc0b66 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/srt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/svg.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/svg.png new file mode 100644 index 0000000..1970dfe Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/svg.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/swf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/swf.png new file mode 100644 index 0000000..34103aa Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/swf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sys.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sys.png new file mode 100644 index 0000000..460fda1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/sys.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tar.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tar.png new file mode 100644 index 0000000..cc706bb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tar.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tex.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tex.png new file mode 100644 index 0000000..c018fb5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tex.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tga.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tga.png new file mode 100644 index 0000000..994aa6f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tga.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/thm.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/thm.png new file mode 100644 index 0000000..30dab38 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/thm.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tiff.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tiff.png new file mode 100644 index 0000000..e7bd771 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tiff.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tmp.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tmp.png new file mode 100644 index 0000000..64ae660 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/tmp.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/torrent.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/torrent.png new file mode 100644 index 0000000..9406e6f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/torrent.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ttf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ttf.png new file mode 100644 index 0000000..7e2598e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/ttf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/txt.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/txt.png new file mode 100644 index 0000000..4881f60 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/txt.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/uue.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/uue.png new file mode 100644 index 0000000..f4836c2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/uue.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vb.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vb.png new file mode 100644 index 0000000..efcb795 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vb.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcd.png new file mode 100644 index 0000000..01dffa1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcf.png new file mode 100644 index 0000000..ed479b1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vcf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vob.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vob.png new file mode 100644 index 0000000..6e0e7e1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/vob.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wav.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wav.png new file mode 100644 index 0000000..0620476 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wav.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wma.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wma.png new file mode 100644 index 0000000..526c575 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wma.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wmv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wmv.png new file mode 100644 index 0000000..b84796d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wmv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wpd.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wpd.png new file mode 100644 index 0000000..33d59e9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wpd.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wps.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wps.png new file mode 100644 index 0000000..b2c2934 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wps.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wsf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wsf.png new file mode 100644 index 0000000..1304251 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/wsf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xhtml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xhtml.png new file mode 100644 index 0000000..47a930e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xhtml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlr.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlr.png new file mode 100644 index 0000000..700a292 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlr.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xls.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xls.png new file mode 100644 index 0000000..d799e4a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xls.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlsx.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlsx.png new file mode 100644 index 0000000..180b1c7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xlsx.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xml.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xml.png new file mode 100644 index 0000000..a295e78 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/xml.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/yuv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/yuv.png new file mode 100644 index 0000000..a0f5101 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/yuv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/zip.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/zip.png new file mode 100644 index 0000000..3db6382 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/filetype_thumb/zip.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/add.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/add.png new file mode 100644 index 0000000..5cccafa Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/add.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cancel.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cancel.png new file mode 100644 index 0000000..36ebadd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cancel.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/copy.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/copy.png new file mode 100644 index 0000000..33df296 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/copy.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cut.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cut.png new file mode 100644 index 0000000..08cd2d0 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/cut.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/delete.png new file mode 100644 index 0000000..d3d9ec4 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/download.png new file mode 100644 index 0000000..8600c56 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/edit.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/edit.png new file mode 100644 index 0000000..4d08675 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/edit.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/find.png new file mode 100644 index 0000000..9ff16f3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder-selected.png new file mode 100644 index 0000000..1148f43 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder.png new file mode 100644 index 0000000..b8bc232 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/folder.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/list.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/list.png new file mode 100644 index 0000000..7c30c30 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/list.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading.gif new file mode 100644 index 0000000..ad9c7dd Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading2.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading2.gif new file mode 100644 index 0000000..94894d2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/loading2.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/minus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/minus.png new file mode 100644 index 0000000..30e141b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/minus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/order.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/order.png new file mode 100644 index 0000000..f4aae85 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/order.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/paste.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/paste.png new file mode 100644 index 0000000..89aa3d5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/paste.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/plus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/plus.png new file mode 100644 index 0000000..e729386 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/plus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/preview.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/preview.png new file mode 100644 index 0000000..1b7cabe Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/preview.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/rename.png new file mode 100644 index 0000000..cf76adc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/select.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/select.png new file mode 100644 index 0000000..0644d16 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/select.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/thumbnails.png new file mode 100644 index 0000000..d386bd7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload.png new file mode 100644 index 0000000..459e9b7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_fail.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_fail.png new file mode 100644 index 0000000..62da726 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_fail.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_ok.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_ok.png new file mode 100644 index 0000000..55b3037 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/upload_ok.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/add.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/add.png new file mode 100644 index 0000000..aee0038 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/add.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cancel.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cancel.png new file mode 100644 index 0000000..af0d25e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cancel.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/copy.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/copy.png new file mode 100644 index 0000000..71c9380 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/copy.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cut.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cut.png new file mode 100644 index 0000000..2916d0e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/cut.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/delete.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/delete.png new file mode 100644 index 0000000..b879628 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/delete.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/download.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/download.png new file mode 100644 index 0000000..9ffd298 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/download.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/edit.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/edit.png new file mode 100644 index 0000000..8d1bef1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/edit.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/find.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/find.png new file mode 100644 index 0000000..91d045c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/find.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder-selected.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder-selected.png new file mode 100644 index 0000000..b6dc804 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder-selected.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder.png new file mode 100644 index 0000000..b775678 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/folder.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/list.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/list.png new file mode 100644 index 0000000..141dc3a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/list.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/minus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/minus.png new file mode 100644 index 0000000..d54fd59 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/minus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/order.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/order.png new file mode 100644 index 0000000..55feba8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/order.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/paste.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/paste.png new file mode 100644 index 0000000..75627d5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/paste.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/plus.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/plus.png new file mode 100644 index 0000000..4ad0bba Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/plus.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/preview.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/preview.png new file mode 100644 index 0000000..a39d080 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/preview.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/rename.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/rename.png new file mode 100644 index 0000000..4671bea Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/rename.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/select.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/select.png new file mode 100644 index 0000000..511492d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/select.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/thumbnails.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/thumbnails.png new file mode 100644 index 0000000..32f75b9 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/thumbnails.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload.png new file mode 100644 index 0000000..e0616b2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_fail.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_fail.png new file mode 100644 index 0000000..89a056c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_fail.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_ok.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_ok.png new file mode 100644 index 0000000..60a443d Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/img/white/upload_ok.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/skin.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/skin.css new file mode 100644 index 0000000..dca5730 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins/mono/skin.css @@ -0,0 +1,558 @@ +body { + font-family: Arial; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor:default !important; + padding:0; + margin:0; + background:#FFF; + height:100%; + width:100%; + overflow: hidden; +} + +ul{ + list-style:none; + margin:0; + padding:0; +} + +#wraper{ + height:100%; +} + +#wraper, #menuDir, #menuFile, #pnlEmptyDir, #pnlDirList ul{ + display:none; +} + +.scrollPane{ + height:400px; + overflow-x: hidden; + overflow-y: auto; +} +.scrollPane.noScroll { overflow-y: hidden; } + +a {text-decoration:none; color:#DD7700; } + +select:focus, input:focus { outline-width: 0; } +select { border: 1px solid rgb(168, 168, 168); } +input::-moz-focus-inner { border: 0; } +select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } + +#dirActions { padding: 5px; min-width: 238px; } +#fileActions { padding: 5px; } +#dirActions.selected, #fileActions.selected {} +.actions { margin-bottom: 10px; white-space: nowrap; overflow-y: hidden; } +.pnlDirs { overflow-x: hidden; overflow-y: auto;border-right:1px solid #DDD; } + +#copyright { position: absolute; bottom: 0; left: 0; font-size: 15px; z-index: 50; padding-bottom: 10px; padding-left: 10px; } +.hc #copyright { color: white; } + +.si_btn { + width: 76px; + padding: 10px; + height: 74px; + line-height: 100px; + font-size: 12px; + background-position: 21px 10px; + background-repeat: no-repeat; + background-color: white; + border: 1px solid #DDD; + cursor: pointer; + opacity: 0.8; +} +.si_btn:hover, .si_btn:focus { outline-width: 0; background-color: #EEE; } +.si_toolbar_item.disabled { + background-color: #F8F8F8 !important; + border-color: #C8C8C8; + opacity: 0.3; + cursor: default; +} +#btnSearch.disabled input, #btnOrder.disabled select { pointer-events:none; } + +.si_btn.si_separator { + width: 5px; + border: none; + background-color: white; + cursor: default; + display: inline-block; + height: 45px; + padding: 0; + margin: 0; +} +.si_toolbar_item { margin-right: 5px; } +.si_toolbar_item:last-child { margin-right: 0; } + +.si_btns_choose { + border: 1px solid #DDD; + display: inline-block; +} +.si_btns_choose .si_btn { border: none; border-right: 1px solid #DDD; height: 72px; } +.si_btns_choose .si_btn:first-child { margin-left: 0; } +.si_btns_choose .si_btn:last-child { border-right: none; } +.si_btns_choose .si_btn.selected { background-color: #F3F3F3; } + +#btnAddDir { background-image: url(img/add.png); } +#btnRenameDir { background-image: url(img/rename.png); } +#btnDeleteDir { background-image: url(img/delete.png); } +#btnDownloadDir { background-image: url(img/download.png); } +#btnDirCut { background-image: url(img/cut.png); } +#btnDirCopy { background-image: url(img/copy.png); } +#btnDirPaste { background-image: url(img/paste.png); } + +#btnSelectFile { background-image: url(img/select.png); background-color: rgb(234, 255, 234);} +#btnAddFile { background-image: url(img/upload.png); background-color: rgb(229, 254, 255); } +#btnAddFile.cancel { background-image: url(img/cancel.png); background-color: rgb(255, 234, 234); } +#btnEditFile { background-image: url(img/edit.png); } +#btnPreviewFile { background-image: url(img/preview.png); } +#btnRenameFile { background-image: url(img/rename.png); } +#btnDownloadFile { background-image: url(img/download.png); } +#btnDeleteFile { background-image: url(img/delete.png); } +#btnCutFile { background-image: url(img/cut.png); } +#btnCopyFile { background-image: url(img/copy.png); } +#btnPasteFile { background-image: url(img/paste.png); } + +#btnListView { background-image: url(img/list.png); } +#btnThumbView { background-image: url(img/thumbnails.png); } + +.si_pnl_order { + display: inline-block; + padding: 10px; + height: 52px; + font-size: 12px; + background-image: url(img/order.png); + background-position: 21px 10px; + background-repeat: no-repeat; + border: 1px solid #DDD; + opacity: 0.8; +} +.si_pnl_order_desc { + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; +} +.si_pnl_order_select { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; +} +.si_pnl_order_select > select { + background: white; + font-size: 18px; +} + +.si_pnl_find { + display: inline-block; + padding: 10px; + height: 52px; + font-size: 12px; + background-image: url('img/find.png'); + background-position: 21px 10px; + background-repeat: no-repeat; + border: 1px solid #DDD; + opacity: 0.8; +} +.si_pnl_find_desc { + display: inline-block; + line-height: 100px; + width: 55px; + text-align: center; +} +.si_pnl_find_box { + display: inline-block; + margin: 12px 8px 0 15px; + vertical-align: top; +} +#txtSearch { + font-size: 18px; + width: 180px; + margin-top: 0; + margin-right: 4px; + border: 1px solid rgb(168, 168, 168); +} + +.si_tree_item { display:block; padding:6px 3px 3px 3px; cursor:pointer; height: 20px; margin-bottom:3px; } +.si_tree_item.cut { opacity: 0.5; } +.si_tree_item > div { float: left; } +.si_tree_item:hover, .si_tree_item.selected { background: #F4F4F4; } +#pnlDirList { margin-left:4px; } +#pnlDirList ul{ padding:0 0 0 20px; } +#pnlDirList.disabled .si_tree_item { pointer-events:none; cursor: default; opacity: 0.6; } +#pnlDirList.disabled .si_tree_item:hover { background: transparent; } + +#pnlDirList.hide-root > li > .si_tree_item { display: none; } +#pnlDirList.hide-root > li > ul { padding-left: 0; } + + +.si_tree_item_dir { display: inline-block; background-image: url(img/folder.png); background-repeat: no-repeat; width: 24px; height: 24px; margin-top: -4px; margin-left: 3px; } +.si_tree_item_plus { background-image: url(img/plus.png); background-repeat: no-repeat; background-position: 0 5px; width: 13px; height: 18px; margin-top: -2px; } +.si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus.png); } +.si_tree_item_plus.si_tree_item_plus_blank { background-image: none; } +.si_tree_item .name { font-size: 14px; line-height: 18px; margin-left: 4px; margin-right: 4px; } +.si_tree_item_count { + float: right !important; + position: relative; + right: 0; + font-size: 14px; + width: 40px; + background-color: #F7F7F7; + color: #444; + text-align: center; + height: 21px; + margin-top: -2px; + line-height: 23px; +} +.si_tree_item:hover .si_tree_item_count { background-color: white; } + +.si_tree_item.selected { font-weight: bold; } +.si_tree_item.selected .si_tree_item_count { background-color: #999; color: white; font-weight: normal; } +#dirActions.selected .si_tree_item.selected .si_tree_item_count { background-color: #333; } +.si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); } + +#pnlEmptyDir, #pnlSearchNoFiles { display: none; width: 100%; height: 98%; color: #AAA; font-size: 16px; } +#pnlEmptyDir > div, #pnlSearchNoFiles > div { display: table-cell; vertical-align: middle; text-align: center; } + + +.contextMenu{ + position:absolute; + z-index:1000 !important; + background-color:white; + border:1px solid #DDD; + font-size: 15px; + min-width:140px; +} +.contextMenu a { + padding: 5px 25px 5px 20px; + display: block; + background-repeat:no-repeat; + background-position: 4px 6px; + color:#000; + border-bottom: #EEE 1px solid; +} +.contextMenu a:last-child { border-bottom: none; } +.contextMenu a:hover { color: white; background-color: #333; } +.contextMenu a.disabled { background-color: #F8F8F8; color: #BBB; cursor: default; } + +#alphamanager_preview { display: none; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: #333; } +#alphamanager_preview img { max-width: 100%; max-height: 100%; width: auto; height: auto; position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } +#alphamanager_preview_close { + position: relative; + right: 0; + top: 4px; + padding: 2px 6px; + background-color: #333; + color: white; + display: inline-block; + cursor: default; + font-size: 12px; +} + + +#pnlUploadFiles { width: 100%; display: none; } +.alphaUploader-dropArea { + display: table-cell; + vertical-align: middle; + text-align: center; + width: 100%; + box-sizing: border-box; + height: 100%; + border: 5px dashed #BBB; + font-size: 18px; +} +.alphaUploader-elements { padding: 0 50px; } +.alphaUploader-or { + padding: 25px; + font-size: 16px; + color: #666; +} +.alphaUploader-dropArea input { font-size: 16px; } +.alphaUploader-files { display: none; width: 100%; height: 100%; padding: 30px 0; position: relative; } +.alphaUploader-files table { margin: 0 auto; } +.alphaUploader-header { font-size: 16px; font-weight: bolder; padding-bottom: 5px; } +.alphaUploader-header > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 20px; display: inline-block; line-height: 20px; } +.alphaUploader-total { font-size: 16px; padding-bottom: 15px; } +.alphaUploader-cancelInput { background: white; border: #AAA 1px solid; padding: 3px 10px; font-size: 14px; cursor: pointer; } +.alphaUploader-cancelInput:hover { background-color: #EEE; } +.alphaUploader-cancelInput-disabled { cursor: default; background-color: #F8F8F8 !important; border-color: #C8C8C8; opacity: 0.3;} +.alphaUploader-cancelInput-disabled:hover, .alphaUploader-cancelInput-disabled:focus { background-color: white; } + +.alphaUploader-filesList { position: absolute; top: 135px; bottom: 0; overflow-y: auto; left:0; right: 0; } + +.alphaUploader-file { border-bottom: 1px solid #AAA; font-size: 15px; } +.alphaUploader-file:last-child { border-bottom: none; } +.alphaUploader-status { width: 30px; background-repeat: no-repeat; } +.alphaUploader-status.alphaUploader-status-ok { background-image: url(img/upload_ok.png); } +.alphaUploader-status.alphaUploader-status-fail { background-image: url(img/upload_fail.png); } +.alphaUploader-filename { text-align: right; } +.alphaUploader-filesize { text-align: right; } +.alphaUploader-progressOuter { width: 200px; border: 1px solid #696969; text-align: left; height: 20px; overflow: hidden; margin: 0 15px;} +.alphaUploader-progressInner { display: inline-block; height: 20px; background-color: #696969; width: 0; } + +#pnlLoading { width: 100%; display: none; } +#pnlLoading.visible { display: table; opacity: 1; } +#pnlLoading > div { width: 100%; height: 100%; font-size: 18px; padding-bottom: 15px; display: table-cell; vertical-align: middle; text-align: center; } +#pnlLoading > div > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 20px; display: inline-block; } + +.dlg-bg { background-color: #000000; opacity: 0.2; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 49999; display: none; } +.dlg-outer { + z-index: 50000; + position: absolute; + left: 0; top: 0; width: 100%; height: 100%; + display: none; +} +.dlg-wrap { + display: table-cell; + vertical-align: middle; + text-align: center; +} +.dlg { + background-color: white; + border: 6px solid #444; + display: inline-block; +} +.dlg .title { border-bottom: 1px solid #444; font-size: 18px; padding: 8px 40px 7px 40px; } +.dlg .content { padding: 40px; font-size: 16px; } +.dlg input { width: 300px; font-size: 16px; border: 1px solid rgb(168, 168, 168); } + +.dlg-btn { border: 1px solid #666; padding: 3px 0 3px 0; display: inline-block; color: #444; font-size: 15px; margin-bottom: 20px; width: 90px; text-align: center; } +.dlg-btn.disabled { opacity: 0.3; cursor: default; } + +#dlgAlert .buttons { text-align: center; } + +#dlgAlert { z-index: 50002; } +#dlgAlertBg { z-index: 50001; } +#dlgConfirm, #dlgText { z-index: 49996; } +#dlgConfirmBg, #dlgTextBg { z-index: 49995; } + +#pnlViewList { display: none; width: 100%; border-spacing: 0; font-size: 16px; } +#pnlViewList td { cursor: pointer; padding-bottom: 0; height: 28px; padding-top: 2px; line-height: 21px; } +#pnlViewList .file.cut { opacity: 0.5; } +#pnlViewList .file-icon { width: 26px; text-align: left; background-position: 0 3px; background-repeat: no-repeat; } +#pnlViewList .file-size { width: 110px; text-align: right; } +#pnlViewList .file-date { width: 170px; text-align: right; padding-right: 8px; } +#pnlViewList .file:hover { background-color: #F4F4F4; } +#pnlViewList .file.selected { background-color: #777; color: white; } +#pnlViewList .file.selected .file-icon { -webkit-filter: invert(100%); filter: invert(100%); } +#fileActions.selected #pnlViewList .file.selected { background-color: #333; color: white; } + +#pnlViewThumbs { display: none; } +#pnlViewThumbs table { width: 100%; border-spacing: 0; } +#pnlViewThumbs td { width: 200px; } +#pnlViewThumbs .file { height: 193px; width: 159px; display: inline-block; cursor: pointer; font-size: 14px; padding: 6px; overflow: hidden; } +#pnlViewThumbs .file.cut { opacity: 0.5; } +#pnlViewThumbs .file:hover { background-color: #F4F4F4; } +#pnlViewThumbs .file-icon { background-position: center; background-repeat: no-repeat; } +#pnlViewThumbs .file-name { padding-top: 14px; text-align: center; white-space: nowrap; } +#pnlViewThumbs .file-size { padding-top: 3px; text-align: center; white-space: nowrap; color: #555; } +#pnlViewThumbs .file-date { display: none; } +#pnlViewThumbs .file.selected { background-color: #777; } +#fileActions.selected #pnlViewThumbs .file.selected { background-color: #333; } +#pnlViewThumbs .file.selected .file-icon { -webkit-filter: invert(0); filter: invert(0); } +#pnlViewThumbs .file.selected .file-icon.icon-ext { -webkit-filter: invert(100%); filter: invert(100%); } +#pnlViewThumbs .file.selected .file-name { color: white; } +#pnlViewThumbs .file.selected .file-size { color: #AAA; } + +/* =============================== BLUE mode ============================= */ +body.mod_blue, .mod_blue #alphamanager_preview { background-color: #09F; color: white; } +.mod_blue .hc #copyright { color: #09F; } +.mod_blue .si_btn { background-color: transparent; color: white; opacity: 1; border-color: #97D6FF; } +.mod_blue .si_toolbar_item { border-color: #6DC6FF; } +.mod_blue .si_separator { background-color: #09F; } +.mod_blue .pnlDirs { border-right-color: #C2E7FF; } + +.mod_blue #btnAddDir { background-image: url(img/white/add.png); } +.mod_blue #btnRenameDir { background-image: url(img/white/rename.png); } +.mod_blue #btnDeleteDir { background-image: url(img/white/delete.png); } +.mod_blue #btnDownloadDir { background-image: url(img/white/download.png); } +.mod_blue #btnDirCut { background-image: url(img/white/cut.png); } +.mod_blue #btnDirCopy { background-image: url(img/white/copy.png); } +.mod_blue #btnDirPaste { background-image: url(img/white/paste.png); } + +.mod_blue #btnSelectFile { background-image: url(img/white/select.png); background-color: transparent;} +.mod_blue #btnAddFile { background-image: url(img/white/upload.png); background-color: transparent; } +.mod_blue #btnAddFile.cancel { background-image: url(img/white/cancel.png); background-color: transparent; } +#btnEditFile { background-image: url(img/white/edit.png); } +.mod_blue #btnPreviewFile { background-image: url(img/white/preview.png); } +.mod_blue #btnRenameFile { background-image: url(img/white/rename.png); } +.mod_blue #btnDownloadFile { background-image: url(img/white/download.png); } +.mod_blue #btnDeleteFile { background-image: url(img/white/delete.png); } +.mod_blue #btnCutFile { background-image: url(img/white/cut.png); } +.mod_blue #btnCopyFile { background-image: url(img/white/copy.png); } +.mod_blue #btnPasteFile { background-image: url(img/white/paste.png); } + +.mod_blue #btnListView { background-image: url(img/white/list.png); } +.mod_blue #btnThumbView { background-image: url(img/white/thumbnails.png); } + +.mod_blue #btnListView { background-image: url(img/white/list.png); } +.mod_blue #btnThumbView { background-image: url(img/white/thumbnails.png); } + +.mod_blue .si_pnl_order { background-image: url(img/white/order.png); opacity: 1; } + +.mod_blue .si_pnl_find { background-image: url('img/white/find.png'); opacity: 1; } + +.mod_blue .si_btn:hover, .mod_blue .si_btn.selected { background-color: #005B97 !important; } +.mod_blue .si_separator:hover { background-color: transparent !important; } +.mod_blue .si_btn.disabled, +.mod_blue .si_btn.disabled:hover { background-color: #09F !important; opacity: 0.3; } + +.mod_blue a { color: white; } + +.mod_blue #txtSearch, .mod_blue select { border-color: #C2E7FF; color: #00436F; } + +.mod_blue .si_tree_item_dir { background-image: url(img/white/folder.png); } +.mod_blue .si_tree_item_plus { background-image: url(img/white/plus.png); } +.mod_blue .si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/white/minus.png); } +.mod_blue .si_tree_item.selected .si_tree_item_dir { background-image: url(img/white/folder-selected.png); } + +.mod_blue .si_tree_item:hover, +.mod_blue .si_tree_item.selected { background-color: #00436F; } + +.mod_blue .si_tree_item_count { background-color: #0063A3 !important; color: white;} +.mod_blue .si_tree_item:hover .si_tree_item_count { background-color: #0063A3 !important; } +.mod_blue .si_tree_item.selected .si_tree_item_count { background-color: #0063A3 !important; } +.mod_blue #dirActions.selected .si_tree_item.selected .si_tree_item_count { } + +.mod_blue #pnlViewThumbs .file.selected { background-color: #00436F !important;} +.mod_blue #pnlViewThumbs .file:hover { background-color: #00436F !important;} +.mod_blue #pnlViewList .file.selected { background-color: #00436F !important; } +.mod_blue #pnlViewList .file:hover { background-color: #00436F !important;} +.mod_blue #fileActions.selected .file.selected { background-color: #00436F !important; } +.mod_blue #pnlViewThumbs .file-size { color: #97D6FF !important; } + +.mod_blue .file-icon.icon-ext { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%);} +.mod_blue #pnlViewList .file-icon { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%);} + +.mod_blue #alphamanager_preview_close { background-color: transparent; } + +.mod_blue #pnlEmptyDir > div, +.mod_blue #pnlSearchNoFiles > div { color: #97D6FF; } + +.mod_blue .si_toolbar_item.disabled { opacity: 0.3; background-color: transparent !important; } + +.mod_blue .alphaUploader-dropArea { border-color: #EAF7FF; } +.mod_blue .alphaUploader-or { color: #97D6FF; } + +.mod_blue .alphaUploader-progressOuter { border-color: white; } +.mod_blue .alphaUploader-progressInner { background-color: white; } +.mod_blue .alphaUploader-status { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%); } + +.mod_blue #pnlLoading > div > div, +.mod_blue .alphaUploader-header > div { background-image: url(img/loading2.gif); } + +.mod_blue .dlg { background-color: #09F; border: white 3px solid; color: white; } +.mod_blue .dlg .title { border-bottom-color: white; } +.mod_blue .dlg-btn { border-color: white; } +.mod_blue .dlg-btn:hover { background-color: #005B97 !important; } +.mod_blue .dlg-btn.disabled:hover { background-color: transparent !important; } +.mod_blue .dlg input { border-color: #C2E7FF; color: #00436F; } + +.mod_blue .contextMenu a { color: #007FD3; border-bottom-color: #EAF7FF; } +.mod_blue .contextMenu a:hover { background-color: #007FD3; color: white; } +.mod_blue .contextMenu a.disabled { color: #CCC; background: white; } +.mod_blue .contextMenu a.disabled:hover { background-color: white; } + +.mod_blue #copyright a, .mod_blue #alphamanager_demo_notice a { color: rgb(255, 153, 0); } + +/* =============================== VIOLET mode ============================= */ +body.mod_violet, .mod_violet #alphamanager_preview { background-color: #6C538B; color: white; } +.mod_violet .hc #copyright { color: #6C538B; } +.mod_violet .si_btn { background-color: transparent; color: white; opacity: 1; border-color: #AF91D4; } +.mod_violet .si_toolbar_item { border-color: #AF91D4; } +.mod_violet .si_separator { background-color: #6C538B; } +.mod_violet .pnlDirs { border-right-color: #E0C7FF; } + +.mod_violet #btnAddDir { background-image: url(img/white/add.png); } +.mod_violet #btnRenameDir { background-image: url(img/white/rename.png); } +.mod_violet #btnDeleteDir { background-image: url(img/white/delete.png); } +.mod_violet #btnDownloadDir { background-image: url(img/white/download.png); } +.mod_violet #btnDirCut { background-image: url(img/white/cut.png); } +.mod_violet #btnDirCopy { background-image: url(img/white/copy.png); } +.mod_violet #btnDirPaste { background-image: url(img/white/paste.png); } + +.mod_violet #btnSelectFile { background-image: url(img/white/select.png); background-color: transparent;} +.mod_violet #btnAddFile { background-image: url(img/white/upload.png); background-color: transparent; } +.mod_violet #btnAddFile.cancel { background-image: url(img/white/cancel.png); background-color: transparent; } +.mod_violet #btnPreviewFile { background-image: url(img/white/preview.png); } +.mod_violet #btnRenameFile { background-image: url(img/white/rename.png); } +.mod_violet #btnDownloadFile { background-image: url(img/white/download.png); } +.mod_violet #btnDeleteFile { background-image: url(img/white/delete.png); } +.mod_violet #btnCutFile { background-image: url(img/white/cut.png); } +.mod_violet #btnCopyFile { background-image: url(img/white/copy.png); } +.mod_violet #btnPasteFile { background-image: url(img/white/paste.png); } + +.mod_violet #btnListView { background-image: url(img/white/list.png); } +.mod_violet #btnThumbView { background-image: url(img/white/thumbnails.png); } + +.mod_violet #btnListView { background-image: url(img/white/list.png); } +.mod_violet #btnThumbView { background-image: url(img/white/thumbnails.png); } + +.mod_violet .si_pnl_order { background-image: url(img/white/order.png); opacity: 1; } + +.mod_violet .si_pnl_find { background-image: url('img/white/find.png'); opacity: 1; } + +.mod_violet .si_btn:hover, .mod_violet .si_btn.selected { background-color: #4E2D75 !important; } +.mod_violet .si_separator:hover { background-color: transparent !important; } +.mod_violet .si_btn.disabled, +.mod_violet .si_btn.disabled:hover { background-color: #6C538B !important; opacity: 0.3; } + +.mod_violet a { color: white; } + +.mod_violet #txtSearch, .mod_violet select { border-color: #E0C7FF; color: #361D55; } + +.mod_violet .si_tree_item_dir { background-image: url(img/white/folder.png); } +.mod_violet .si_tree_item_plus { background-image: url(img/white/plus.png); } +.mod_violet .si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/white/minus.png); } +.mod_violet .si_tree_item.selected .si_tree_item_dir { background-image: url(img/white/folder-selected.png); } + +.mod_violet .si_tree_item:hover { background-color: #563D75; } +.mod_violet .si_tree_item.selected { background-color: #361D55; } + +.mod_violet .si_tree_item_count { background-color: #5A4279 !important; color: white;} +.mod_violet .si_tree_item:hover .si_tree_item_count { background-color: #5A4279 !important; } +.mod_violet .si_tree_item.selected .si_tree_item_count { background-color: #5A4279 !important; } + +.mod_violet #pnlViewThumbs .file.selected { background-color: #361D55 !important;} +.mod_violet #pnlViewThumbs .file:hover { background-color: #563D75 !important;} +.mod_violet #pnlViewList .file.selected { background-color: #361D55 !important; } +.mod_violet #pnlViewList .file:hover { background-color: #563D75 !important;} +.mod_violet #fileActions.selected .file.selected { background-color: #361D55 !important; } +.mod_violet #pnlViewThumbs .file-size { color: #CBB1EB !important; } + +.mod_violet .file-icon.icon-ext { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%);} +.mod_violet #pnlViewList .file-icon { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%);} + +.mod_violet #alphamanager_preview_close { background-color: transparent; } + +.mod_violet #pnlEmptyDir > div, +.mod_violet #pnlSearchNoFiles > div { color: #CBB1EB; } + +.mod_violet .si_toolbar_item.disabled { opacity: 0.3; background-color: transparent !important; } + +.mod_violet .alphaUploader-dropArea { border-color: #EBE0FA; } +.mod_violet .alphaUploader-or { color: #CBB1EB; } + +.mod_violet .alphaUploader-progressOuter { border-color: white; } +.mod_violet .alphaUploader-progressInner { background-color: white; } +.mod_violet .alphaUploader-status { -webkit-filter: invert(100%); -moz-filter: invert(100%); filter: invert(100%); } + +.mod_violet #pnlLoading > div > div, +.mod_violet .alphaUploader-header > div { background-image: url(img/loading2.gif); } + +.mod_violet .dlg { background-color: #9274B8; border: white 3px solid; color: white; } +.mod_violet .dlg .title { border-bottom-color: white; } +.mod_violet .dlg-btn { border-color: white; background-color: white; color: #4E2D75 !important; } +.mod_violet .dlg-btn:hover { background-color: #4E2D75 !important; color: white !important; } +.mod_violet .dlg-btn.disabled:hover { background-color: transparent !important; } +.mod_violet .dlg input { border-color: #E0C7FF; color: #361D55; } + +.mod_violet .contextMenu a { color: #593092; border-bottom-color: #EFE4FF; } +.mod_violet .contextMenu a:hover { background-color: #593092; color: white; } +.mod_violet .contextMenu a.disabled { color: #CCC; background: white; } +.mod_violet .contextMenu a.disabled:hover { background-color: white; } + +.mod_violet #copyright a, .mod_violet #alphamanager_demo_notice a { color: rgb(255, 153, 0); } \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor.css new file mode 100644 index 0000000..920923a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor.css @@ -0,0 +1,378 @@ +/* general font color/reset */ +body .avpw *, +body .avpw a, +body .avpw a:link, +body .avpw a:hover, +body .avpw a:visited, +body .avpw a:active { + color: #444; +} +/* dark background behind image */ +.avpw .avpw_canvas_background { + background: #E2E2E2; +} +/* dark background behind tools */ +.avpw .avpw_inset_background { + background: #E2E2E2; +} +/* brushed metal texture */ +/* outermost widget body/parent */ +body .avpw { + background: #f0f0f0; +} +/* small icon inside an open tool */ +.avpw .avpw_current_tool_icon { + background: #f0f0f0; +} +/* popups that open within the widget */ +.avpw .avpw_app_popup { + background: white; +} +/* colorpicker popup */ +.avpw .avpw_color_picker_container { + background: white; +} +/* footer text */ +.avpw .avpw_footer_text, +.avpw .avpw_footer_text a, +.avpw .avpw_footer_text a:link, +.avpw .avpw_footer_text a:visited, +.avpw .avpw_footer_text a:hover, +.avpw .avpw_footer_text a:active { + color: #656565; +} +/* tool icons */ +/* normal */ +.avpw .avpw_tool_icon_image { + background-color: #efefef; +} +/* hover */ +.avpw .avpw_tool_icon:hover .avpw_tool_icon_image { + background-color: #ffffff; +} +/* pressod */ +.avpw .avpw_tool_icon_down .avpw_tool_icon_image, +.avpw .avpw_tool_icon_down:hover .avpw_tool_icon_image { + background-color: #e2e2e2; +} +/* tools paging inidcator */ +body .avpw .avpw_page { + color: #3d3d3d; +} +body .avpw .avpw_page_selected { + color: #00a5ff; +} +/* default buttons */ +body .avpw .avpw_button { + background: #efefef; +} +/* hover */ +body .avpw .avpw_button:hover { + background: #ffffff; +} +/* pressod */ +body .avpw .avpw_button.avpw_button_down { + background-color: #e2e2e2; +} +/* primary button + * (overriding color on these links so + * we have to be explicit) + */ +body .avpw .avpw_primary_button, +body .avpw .avpw_primary_button:link, +body .avpw .avpw_primary_button:visited, +body .avpw .avpw_primary_button:active { + background-color: #0084cc; + color: #ffffff; +} +/* +/- slider label/buttons */ +body .avpw .avpw_slider_label { + color: #707070; +} +/* darker, cut-out color */ +.avpw .avpw_inset_background { + background-color: #3e464a; +} +/* preset icons */ +.avpw .avpw_preset_icon { + border-left-color: #556066; + border-right-color: #272c2e; +} +.avpw .avpw_preset_icon_active { + background-color: #718087; +} +/* and light blue indicator */ +.avpw .avpw_preset_icon_active .avpw_preset_indicator { + background-color: #49edfc; +} +/* grouped push-buttons inside tools */ +.avpw .avpw_inset_button { + border-left-color: #556066; + border-right-color: #272c2e; +} +/* hover */ +.avpw .avpw_inset_button:hover { + background-color: #3c4347; +} +/* pressod */ +.avpw .avpw_inset_button_down { + background: #272c2e; +} +/* text input fields */ +body .avpw .avpw_text_input { + background: #ffffff; + color: #bcbec0; +} +/* focus */ +body .avpw .avpw_text_input_focused { + color: #3d3f40; +} +/* palette swapped on dark background */ +.avpw .avpw_inset_background .avpw_text_input { + background: #515b60; +} +/* focus */ +.avpw .avpw_inset_background .avpw_text_input_focused { + color: #ffffff; +} +/* labels palette swapped on dark background */ +.avpw .avpw_inset_background .avpw_label { + color: #ffffff; +} +/* frame icon */ +/* 'off'/default state */ +.avpw .avpw_inset_button .avpw_frame_toggle_icon { + border-color: #717171; +} +/* 'on'/active state */ +.avpw .avpw_inset_button_active .avpw_frame_toggle_icon { + border-color: #49c0fc; +} +/* lock icon */ +/* 'unlocked'/default state */ +.avpw .avpw_inset_button .avpw_lock_icon_top, +.avpw .avpw_inset_button .avpw_lock_icon_bottom { + background: #a3a3a3; +} +/* 'locked'/down state */ +.avpw .avpw_inset_button .avpw_lock_icon_top_inner, +.avpw .avpw_inset_button .avpw_lock_icon_sep { + background: #383838; +} +/* 'locked'/active state */ +.avpw .avpw_inset_button_active .avpw_lock_icon_top, +.avpw .avpw_inset_button_active .avpw_lock_icon_bottom { + background: #49c0fc; +} + +/* CKEDITOR */ +#avpw_tool_content_header { + font-weight: bold !important; + font-size: 13px !important; + cursor: move !important; + color: #474747 !important; + text-shadow: 0 1px 0 rgba(255,255,255,.75) !important; + border-bottom: 1px solid #999 !important; + padding: 6px 10px !important; + border-radius: 2px 2px 0 0 !important; + box-shadow: 0 1px 0 #fff inset !important; + background: #cfd1cf !important; + background-image: linear-gradient(to bottom,#f5f5f5,#cfd1cf) !important; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf') !important; + text-align: left !important; +} + +#avpw_controls { + border-radius: 2px !important; +} + +#avpw_breadcrumb_header, #avpw_breadcrumb_toolname { + font: normal normal normal 13px Arial,Helvetica,Tahoma,Verdana,Sans-Serif !important; + text-shadow: 0 1px 0 rgba(255,255,255,.75) !important; + font-weight: bold !important; +} + +.avpw.avpw_main_mode { + border: 1px solid #ccc !important; + border-radius: 2px !important; +} + +.avpw_close_button { + border: 1px solid transparent !important; + background-color: transparent !important; +} + +.avpw_close_inner { + background-image: url('ckeditor_close.png') !important; + background-position: -2px -1px !important; + background-repeat: no-repeat !important; +} + +#avpw_logo { + /* display: none !important; */ + /* margin-top: 12px !important; */ +} + +#avpw_logo:hover, #avpw_logo:focus, .avpw_cursor:hover, .avpw_cursor:focus { + text-decoration: none !important; + border-bottom: none !important; +} + +.avpw_button, +.avpw_button.avpw_back_button, +.avpw_inset_button, +#avpw_resume_editing, +#avpw_close_nosave { + border-radius: 4px !important; + font-weight: bold !important; + border: 1px solid #b6b6b6 !important; + border-bottom-color: #999 !important; + box-shadow: 0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset !important; + background: #e4e4e4 !important; + background-image: linear-gradient(to bottom,#fff,#e4e4e4) !important; + color: #333 !important; + text-shadow: 0 1px 0 #fff !important; +} + +.avpw_inset_button { + border-radius: 0 !important; + border-left-width: 0px !important; +} + +.avpw_button:hover, +.avpw_button.avpw_back_button:hover, +.avpw_inset_button:hover, +#avpw_resume_editing:hover, +#avpw_close_nosave:hover { + border-color: #9e9e9e !important; + background: #ccc !important; + background-image: linear-gradient(to bottom,#f2f2f2,#ccc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc') !important; + opacity: 1 !important; +} + +.avpw_inset_button.avpw_inset_button_first { + border-radius: 4px 0 0 4px !important; + border-left-width: 1px !important; +} + +.avpw_inset_button.avpw_inset_button_last { + border-radius: 0 4px 4px 0 !important; +} + +.avpw_button.avpw_primary_button, +.avpw_button.avpw_primary_button { + color: #fff !important; + text-shadow: 0 -1px 0 #55830c !important; + border-color: #62a60a #62a60a #4d9200 !important; + background: #69b10b !important; + background-image: linear-gradient(to bottom,#9ad717,#69b10b) !important; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b') !important; + border-radius: 4px !important; + font-weight: bold !important; +} + +.avpw_button.avpw_primary_button:hover, +.avpw_button.avpw_primary_button:hover { + border-color: #5b9909 #5b9909 #478500 !important; + background: #88be14 !important; + background: linear-gradient(to bottom,#88be14 0,#5d9c0a 100%) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0) !important; + opacity: 1 !important; +} + +#avpw_footer { + border: 0 !important; + box-shadow: 0 1px 0 #D2D2D2 inset !important; + border-radius: 0 0 2px 2px !important; + background: #cfd1cf !important; + background-image: linear-gradient(to bottom,#ebebeb,#cfd1cf) !important; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf') !important; +} + +#avpw_tool_content_wrapper { + background-color: white !important; +} + +.avpw .avpw_tool_icon_image { + background-color: transparent !important; +} + +.avpw_app_popup { + border-radius: 3px !important; +} + +#avpw_canvas_embed { + z-index: 1 !important; +} + +.avpw_color_picker_background { + background-color: transparent !important; +} + +.avpw_dropdown_popup_list_item { + background-color: transparent !important; +} + +.avpw_font_image { + -webkit-filter: brightness(10%) !important; + filter: brightness(10%) !important; +} + +.avpw_dropdown_popup { + top: 109px !important; + background-color: white !important; + border: 1px solid #ccc !important; +} +.avpw_dropdown_popup .avpw_button { + font-size: 14px !important; +} + +#avpw_font_browser .avpw_inset_button, +#avpw_textwithfont_addtext .avpw_inset_button, +.avpw_inset_button_first.avpw_inset_button_last { + border-radius: 4px !important; +} + +#avpw_textwithfont_colors { + padding-right: 4px !important; +} + +.avpw_inset_color_widget { + width: 365px !important; +} + +#avpw_history_redo, +#avpw_history_undo { + border: none !important; + background-color: transparent !important; + background: none !important; +} + +#avpw_history_redo:hover, +#avpw_history_undo:hover { + background-color: #eee !important; +} + +.avpw_preset_color_image { + border-color: #555 !important; +} + +#avpw_controlpanel_meme > .avpw_inset_background { + background-color: white !important; +} + +#avpw_text_area_meme, +#avpw_text_area_meme2 { + background: #FFFFFF !important; + border: 1px solid #ccc !important; + color: #333 !important; +} + +body .avpw { + background-color: #ddd !important; +} + +.avpw_app_popup .avpw_button { + font-size: 14px !important; +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor_close.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor_close.png new file mode 100644 index 0000000..04b9c97 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/ckeditor_close.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/tinymce.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/tinymce.css new file mode 100644 index 0000000..f35eb85 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/skins_editor/tinymce.css @@ -0,0 +1,409 @@ +/* general font color/reset */ +body .avpw *, +body .avpw a, +body .avpw a:link, +body .avpw a:hover, +body .avpw a:visited, +body .avpw a:active { + color: #444; +} +/* dark background behind image */ +.avpw .avpw_canvas_background { + background: #E2E2E2; +} +/* dark background behind tools */ +.avpw .avpw_inset_background { + background: #E2E2E2; +} +/* brushed metal texture */ +/* outermost widget body/parent */ +body .avpw { + background: #f0f0f0; +} +/* small icon inside an open tool */ +.avpw .avpw_current_tool_icon { + background: #f0f0f0; +} +/* popups that open within the widget */ +.avpw .avpw_app_popup { + background: white; +} +/* colorpicker popup */ +.avpw .avpw_color_picker_container { + background: white; +} +/* footer text */ +.avpw .avpw_footer_text, +.avpw .avpw_footer_text a, +.avpw .avpw_footer_text a:link, +.avpw .avpw_footer_text a:visited, +.avpw .avpw_footer_text a:hover, +.avpw .avpw_footer_text a:active { + color: #656565; +} +/* tool icons */ +/* normal */ +.avpw .avpw_tool_icon_image { + background-color: #efefef; +} +/* hover */ +.avpw .avpw_tool_icon:hover .avpw_tool_icon_image { + background-color: #ffffff; +} +/* pressod */ +.avpw .avpw_tool_icon_down .avpw_tool_icon_image, +.avpw .avpw_tool_icon_down:hover .avpw_tool_icon_image { + background-color: #e2e2e2; +} +/* tools paging inidcator */ +body .avpw .avpw_page { + color: #3d3d3d; +} +body .avpw .avpw_page_selected { + color: #00a5ff; +} +/* default buttons */ +body .avpw .avpw_button { + background: #efefef; +} +/* hover */ +body .avpw .avpw_button:hover { + background: #ffffff; +} +/* pressod */ +body .avpw .avpw_button.avpw_button_down { + background-color: #e2e2e2; +} +/* primary button + * (overriding color on these links so + * we have to be explicit) + */ +body .avpw .avpw_primary_button, +body .avpw .avpw_primary_button:link, +body .avpw .avpw_primary_button:visited, +body .avpw .avpw_primary_button:active { + background-color: #0084cc; + color: #ffffff; +} +/* +/- slider label/buttons */ +body .avpw .avpw_slider_label { + color: #707070; +} +/* darker, cut-out color */ +.avpw .avpw_inset_background { + background-color: #3e464a; +} +/* preset icons */ +.avpw .avpw_preset_icon { + border-left-color: #556066; + border-right-color: #272c2e; +} +.avpw .avpw_preset_icon_active { + background-color: #718087; +} +/* and light blue indicator */ +.avpw .avpw_preset_icon_active .avpw_preset_indicator { + background-color: #49edfc; +} +/* grouped push-buttons inside tools */ +.avpw .avpw_inset_button { + border-left-color: #c5c5c5; + border-right-color: #c5c5c5; +} +/* hover */ +.avpw .avpw_inset_button:hover { + background-color: #3c4347; +} +/* text input fields */ +body .avpw .avpw_text_input { + background: #ffffff; + color: #bcbec0; +} +/* focus */ +body .avpw .avpw_text_input_focused { + color: #3d3f40; +} +/* palette swapped on dark background */ +.avpw .avpw_inset_background .avpw_text_input { + background: #515b60; +} +/* focus */ +.avpw .avpw_inset_background .avpw_text_input_focused { + color: #ffffff; +} +/* labels palette swapped on dark background */ +.avpw .avpw_inset_background .avpw_label { + color: #ffffff; +} +/* frame icon */ +/* 'off'/default state */ +.avpw .avpw_inset_button .avpw_frame_toggle_icon { + border-color: #717171; +} +/* 'on'/active state */ +.avpw .avpw_inset_button_active .avpw_frame_toggle_icon { + border-color: #49c0fc; +} +/* lock icon */ +/* 'unlocked'/default state */ +.avpw .avpw_inset_button .avpw_lock_icon_top, +.avpw .avpw_inset_button .avpw_lock_icon_bottom { + background: #a3a3a3; +} +/* 'locked'/down state */ +.avpw .avpw_inset_button .avpw_lock_icon_top_inner, +.avpw .avpw_inset_button .avpw_lock_icon_sep { + background: #383838; +} +/* 'locked'/active state */ +.avpw .avpw_inset_button_active .avpw_lock_icon_top, +.avpw .avpw_inset_button_active .avpw_lock_icon_bottom { + background: #49c0fc; +} + +/* TINMCE */ +#avpw_tool_content_header { + padding: 13px 15px 9px 15px !important; + border-bottom: 1px solid #c5c5c5 !important; + position: relative !important; + line-height: 20px !important; + font-weight: bold !important; + text-rendering: optimizelegibility !important; + padding-right: 10px !important; + text-align: left !important; + background-color: white !important; + font-weight: bold !important; +} + +#avpw_controls { + border-radius: 0 !important; + background-color: white !important; + border: 1px solid rgba(0,0,0,0.2) !important; +} + +#avpw_breadcrumb_header, #avpw_breadcrumb_toolname { + display: inline; + font-size: 20px !important; + font-weight: bold !important; +} + +.avpw_text_input { + border: 1px solid #c5c5c5 !important; + color: #333 !important; + font-weight: 100 !important; +} + +.avpw.avpw_main_mode { + border: 1px solid #ccc !important; + border-radius: 2px !important; +} + +.avpw .avpw_preset_crop_icon { + border-left: #eee 1px solid !important; + border-right: none !important; +} + +.avpw_close_button { + margin-top: 10px !important; + margin-right: 36px !important; + border: 1px solid transparent !important; + background-color: transparent !important; +} + +.avpw_close_inner { + margin-top: 1px !important; + color: #333 !important; + background-color: white !important; + text-indent: 0px !important; + line-height: 17px !important; +} + +#avpw_logo { + /* display: none !important; */ + /* margin-top: 12px !important; */ +} + +#avpw_logo:hover, #avpw_logo:focus, .avpw_cursor:hover, .avpw_cursor:focus { + text-decoration: none !important; + border-bottom: none !important; +} + +.avpw_button, +.avpw_button.avpw_back_button, +.avpw_inset_button, +#avpw_resume_editing, +#avpw_close_nosave { + -moz-box-sizing: border-box !important; + -webkit-box-sizing: border-box !important; + box-sizing: border-box !important; + padding: 7px 8px !important; + font-size: 14px !important; + line-height: 20px !important; + cursor: pointer !important; + color: #333 !important; + text-align: center !important; + overflow: visible !important; + -webkit-appearance: none !important; +} + +.avpw_inset_button { + border-radius: 0 !important; + border-left-width: 0px !important; +} + +.avpw_button:hover, +.avpw_button.avpw_back_button:hover, +.avpw_inset_button:hover, +#avpw_resume_editing:hover, +#avpw_close_nosave:hover { + color: #333 !important; + background-color: #e3e3e3 !important; + border-color: #ccc !important; + opacity: 1 !important; +} + +#avpw_font_browser .avpw_inset_button { padding: 0 0 !important; } + +.avpw_inset_button.avpw_inset_button_first { + border-radius: 4px 0 0 4px !important; + border-left-width: 1px !important; +} + +.avpw_inset_button.avpw_inset_button_last { + border-radius: 0 4px 4px 0 !important; +} + +.avpw_button.avpw_primary_button, +.avpw_button.avpw_primary_button { + text-shadow: none !important; + min-width: 50px !important; + color: #fff !important; + border: 1px solid transparent !important; + border-color: transparent !important; + background-color: #2d8ac7 !important; + padding: 7px 8px !important; +} + +.avpw_button.avpw_primary_button:hover, +.avpw_button.avpw_primary_button:hover { + background-color: #257cb6 !important; + border-color: transparent !important; + opacity: 1 !important !important; +} + +#avpw_footer { + border: 0 !important; + box-shadow: 0 1px 0 #D2D2D2 inset !important; + background-color: white !important; +} + +#avpw_tool_content_wrapper { + background-color: white !important; +} + +.avpw .avpw_tool_icon_image { + background-color: transparent !important; +} + +.avpw_app_popup { + border-radius: 0 !important; + border: 1px solid #eee; +} + +#avpw_canvas_embed { + top: 146px !important; + z-index: 1 !important; +} + +.avpw_color_picker_background { + background-color: transparent !important; +} + +.avpw_dropdown_popup_list_item { + background-color: transparent !important; +} +.avpw_dropdown_popup_list_item:hover { + background-color: #EEE !important; +} + +.avpw_font_image { + -webkit-filter: brightness(10%) !important; + filter: brightness(10%) !important; +} + +.avpw_dropdown_popup { + top: 109px !important; + background-color: white !important; + border: 1px solid #ccc !important; +} +.avpw_dropdown_popup .avpw_button { + font-size: 14px !important; +} + +#avpw_font_browser .avpw_inset_button, +#avpw_textwithfont_addtext .avpw_inset_button, +.avpw_inset_button_first.avpw_inset_button_last { + border-radius: 4px !important; +} + +#avpw_textwithfont_colors { + padding-right: 4px !important; + background-color: white !important; +} + +.avpw_inset_color_widget { +} + +.avpw_inset_color_picker { + padding: 1px 1px !important; +} + +#avpw_font_browser .avpw_inset_button_group { + padding: 0 !important; +} + +#avpw_textwithfont_addtext .avpw_inset_button_with_plus { + padding: 15px 0 0 35px !important; + width: 120px !important; + font-size: 16px !important; +} + +#avpw_history_redo, +#avpw_history_undo { + border: none !important; + background-color: transparent !important; + background: none !important; +} + +#avpw_history_redo:hover, +#avpw_history_undo:hover { + background-color: #eee !important; + border-top: 1px solid #c5c5c5 !important; +} + +.avpw_preset_color_image { + border-color: #555 !important; +} + +#avpw_controlpanel_meme > .avpw_inset_background { + background-color: white !important; +} + +#avpw_text_area_meme, +#avpw_text_area_meme2 { + background: #FFFFFF !important; + border: 1px solid #ccc !important; + color: #333 !important; +} + +body .avpw { + background-color: #ddd !important; +} + +.avpw_app_popup .avpw_button { + font-size: 14px !important; +} + +.avpw_inset_button_group .avpw_inset_button { + padding: 0 0 !important; +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/system.inc.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/system.inc.php new file mode 100644 index 0000000..7ba5c10 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/alphamanager/system.inc.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/CHANGES.md b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/CHANGES.md new file mode 100644 index 0000000..8b8ff47 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/CHANGES.md @@ -0,0 +1,720 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.4.7 + +Fixed Issues: + +* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)! +* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero. +* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)! +* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)! +* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data. +* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button. +* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/Webkit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*. +* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined. +* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position. +* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor. + +## CKEditor 4.4.6 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +New Features: + +* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format). +* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `
      ` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd). + +Fixed Issues: + +* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)! +* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)! +* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4). +* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines. +* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers. +* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element. +* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling. +* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled. +* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing. +* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element. +* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text. +* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/Webkit] Fixed: DOM is changed outside the editor area in a certain case. +* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues. +* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element. +* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option. + + +## CKEditor 4.4.5 + +New Features: + +* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). + +Fixed Issues: + +* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. +* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! +* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! +* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `` tag is not created when `` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! +* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! +* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. +* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. +* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). +* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `` elements. +* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. +* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. +* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. +* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. +* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. +* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. +* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. +* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. + + +## CKEditor 4.4.4 + +Fixed Issues: + +* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! +* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: + * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. + * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. + * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. +* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. +* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. +* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. +* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. +* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. +* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. +* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. +* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. +* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. +* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. +* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `` in Compatibility Mode will no longer reset selection to the first line. +* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. +* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. + + +Other Changes: + +* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. + +## CKEditor 4.4.3 + +**Security Updates:** + +* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). + +**An upgrade is highly recommended!** + +New Features: + +* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. + +Fixed Issues: + +* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! +* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. +* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. +* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). +* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. +* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `` tags should be allowed everywhere, including inside the `` element. +* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. + +## CKEditor 4.4.2 + +Important Notes: + +* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + +New Features: + +* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. + +Fixed Issues: + +* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! +* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! +* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. +* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. +* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. +* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). +* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. +* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). +* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. +* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. +* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `` elements created when joining adjacent elements (non-collapsed selection). +* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. +* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. +* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. +* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. +* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. +* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. +* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. +* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. +* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. +* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. +* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. + +## CKEditor 4.4.1 + +New Features: + +* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. + +Fixed Issues: + +* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. +* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! +* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! +* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `` element. +* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `` element. +* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. +* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. +* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. +* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. +* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. +* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). +* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). +* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. +* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. +* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. +* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. +* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. +* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. +* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. +* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. +* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. +* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. + +Other Changes: + +* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. +* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. +* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. + +## CKEditor 4.4 + +**Important Notes:** + +* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. +* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. +* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. +* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). +* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. + +New Features: + +* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties — `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: + * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. + * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. + * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). + * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). +* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: + * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. + * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. + If this setting is defined, the editor produces classes instead of inline styles for aligned images. + * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. +* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. +* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. +* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far — the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. +* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). +* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). +* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. +* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. + +Other Changes: + +* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). +* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. +* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: + * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. + * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. + * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). +* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. + +Fixed Issues: + +* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. +* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. + +## CKEditor 4.3.5 + +New Features: + +* Added new translation: Tatar. + +Fixed Issues: + +* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. +* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. + +## CKEditor 4.3.4 + +Fixed Issues: + +* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. +* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. +* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. +* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. +* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. +* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. +* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. +* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. +* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. +* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. + +## CKEditor 4.3.3 + +Fixed Issues: + +* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). +* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. +* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. +* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). +* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. +* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. +* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. +* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. +* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. +* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. +* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. +* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. +* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. +* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. +* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. +* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. +* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. +* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. +* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. + +## CKEditor 4.3.2 + +Fixed Issues: + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. +* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. +* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. + +## CKEditor 4.3 + +New Features: + +* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. +* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. +* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. +* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. +* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. +* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. +* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. +* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: + * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), + * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), + * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), + * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), + * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), + * fixing other minor bugs. +* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. +* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. +* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. +* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. +* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). +* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. + +Fixed Issues: + +* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. +* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. +* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. +* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. +* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. +* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. +* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. +* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. +* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. +* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. +* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. +* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. +* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. +* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. +* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. +* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. +* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. +* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. +* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. +* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. +* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. +* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. +* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. +* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. +* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). + +## CKEditor 4.3 Beta + +New Features: + +* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. + * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). + * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties – normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). + * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. + * Dynamic *Enter* mode values – [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). + * Dynamic content filter instances – [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. + * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. + * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. + * Dozens of new methods were introduced – most interesting ones: + * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), + * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), + * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), + * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), + * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). +* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. +* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. +* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). +* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). + +## CKEditor 4.2.3 + +Fixed Issues: + +* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. +* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. +* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. +* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). +* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. + +## CKEditor 4.2.2 + +Fixed Issues: + +* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. +* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. +* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. +* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. +* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. +* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. +* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. +* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. +* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. +* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. +* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). +* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). +* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. +* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. + +## CKEditor 4.2.1 + +Fixed Issues: + +* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. +* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. +* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. +* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. +* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. +* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. +* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. +* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. +* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. +* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. +* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. +* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. +* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. +* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. + +## CKEditor 4.2 + +**Important Notes:** + +* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. + +* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). + +New Features: + +* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). +* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. +* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). +* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. +* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. +* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. +* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements — introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. +* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. + +Fixed Issues: + +* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. +* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. +* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). + +## CKEditor 4.1.3 + +New Features: + +* Added new translation: Indonesian. + +Fixed Issues: + +* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. +* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". +* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. +* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). +* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. + +## CKEditor 4.1.2 + +New Features: + +* Added new translation: Sinhala. + +Fixed Issues: + +* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. +* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. +* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. +* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. +* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). +* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. +* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. +* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. +* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. +* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. +* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. +* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. + +## CKEditor 4.1.1 + +New Features: + +* Added new translation: Albanian. + +Fixed Issues: + +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). +* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). + +## CKEditor 4.1 + +Fixed Issues: + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. + +## CKEditor 4.1 RC + +New Features: + +* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle. + * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data + will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. + * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. + +## CKEditor 4.0.3 + +Fixed Issues: + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). + +## CKEditor 4.0.2 + +Fixed Issues: + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +Fixed Issues: + +* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. + +## CKEditor 4.0.1 + +Fixed Issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). +* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* [Magic Line](http://ckeditor.com/addon/magicline) plugin: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. +* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. +* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/LICENSE.md b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/LICENSE.md new file mode 100644 index 0000000..72cc97c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/README.md b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/README.md new file mode 100644 index 0000000..c5a55cd --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/adapters/jquery.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/adapters/jquery.js new file mode 100644 index 0000000..a7921ac --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/adapters/jquery.js @@ -0,0 +1 @@ +(function(b){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof b&&(b.extend(b.fn,{ckeditorGet:function(){var c=this.eq(0).data("ckeditorInstance");if(!c){throw"CKEditor is not initialized yet, use ckeditor() with a callback.";}return c;},ckeditor:function(e,j){if(!CKEDITOR.env.isCompatible){throw Error("The environment is incompatible.");}if(!b.isFunction(e)){var a=j,j=e,e=a;}var c=[],j=j||{};this.each(function(){var d=b(this),l=d.data("ckeditorInstance"),k=d.data("_ckeditorInstanceLock"),i=this,g=new b.Deferred;c.push(g.promise());if(l&&!k){e&&e.apply(l,[this]),g.resolve();}else{if(k){l.once("instanceReady",function(){setTimeout(function(){l.element?(l.element.$==i&&e&&e.apply(l,[i]),g.resolve()):setTimeout(arguments.callee,100);},0);},null,null,9999);}else{if(j.autoUpdateElement||"undefined"==typeof j.autoUpdateElement&&CKEDITOR.config.autoUpdateElement){j.autoUpdateElementJquery=!0;}j.autoUpdateElement=!1;d.data("_ckeditorInstanceLock",!0);l=b(this).is("textarea")?CKEDITOR.replace(i,j):CKEDITOR.inline(i,j);d.data("ckeditorInstance",l);l.on("instanceReady",function(m){var f=m.editor;setTimeout(function(){if(f.element){m.removeListener();f.on("dataReady",function(){d.trigger("dataReady.ckeditor",[f]);});f.on("setData",function(o){d.trigger("setData.ckeditor",[f,o.data]);});f.on("getData",function(o){d.trigger("getData.ckeditor",[f,o.data]);},999);f.on("destroy",function(){d.trigger("destroy.ckeditor",[f]);});f.on("save",function(){b(i.form).submit();return !1;},null,null,20);if(f.config.autoUpdateElementJquery&&d.is("textarea")&&b(i.form).length){var n=function(){d.ckeditor(function(){f.updateElement();});};b(i.form).submit(n);b(i.form).bind("form-pre-serialize",n);d.bind("destroy.ckeditor",function(){b(i.form).unbind("submit",n);b(i.form).unbind("form-pre-serialize",n);});}f.on("destroy",function(){d.removeData("ckeditorInstance");});d.removeData("_ckeditorInstanceLock");d.trigger("instanceReady.ckeditor",[f]);e&&e.apply(f,[i]);g.resolve();}else{setTimeout(arguments.callee,100);}},0);},null,null,9999);}}});var h=new b.Deferred;this.promise=h.promise();b.when.apply(this,c).then(function(){h.resolve();});this.editor=this.eq(0).data("ckeditorInstance");return this;}}),CKEDITOR.config.jqueryOverrideVal&&(b.fn.val=CKEDITOR.tools.override(b.fn.val,function(a){return function(l){if(arguments.length){var g=this,h=[],j=this.each(function(){var d=b(this),k=d.data("ckeditorInstance");if(d.is("textarea")&&k){var i=new b.Deferred;k.setData(l,function(){i.resolve();});h.push(i.promise());return !0;}return a.call(d,l);});if(h.length){var e=new b.Deferred;b.when.apply(this,h).done(function(){e.resolveWith(g);});return e.promise();}return j;}var j=b(this).eq(0),m=j.data("ckeditorInstance");return j.is("textarea")&&m?m.getData():a.call(j);};})));})(window.jQuery); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/build-config.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/build-config.js new file mode 100644 index 0000000..05aa39e --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/build-config.js @@ -0,0 +1 @@ +var CKBUILDER_CONFIG={skin:"moono",preset:"standard",ignore:[".bender","bender.js","bender-err.log","bender-out.log","dev",".DS_Store",".editorconfig",".gitattributes",".gitignore","gruntfile.js",".idea",".jscsrc",".jshintignore",".jshintrc",".mailmap","node_modules","package.json","README.md","tests"],plugins:{"a11yhelp":1,"about":1,"basicstyles":1,"blockquote":1,"clipboard":1,"contextmenu":1,"elementspath":1,"enterkey":1,"entities":1,"filebrowser":1,"floatingspace":1,"format":1,"horizontalrule":1,"htmlwriter":1,"image":1,"indentlist":1,"link":1,"list":1,"magicline":1,"maximize":1,"pastefromword":1,"pastetext":1,"removeformat":1,"resize":1,"scayt":1,"showborders":1,"sourcearea":1,"specialchar":1,"stylescombo":1,"tab":1,"table":1,"tabletools":1,"toolbar":1,"undo":1,"wsc":1,"wysiwygarea":1},languages:{"af":1,"ar":1,"bg":1,"bn":1,"bs":1,"ca":1,"cs":1,"cy":1,"da":1,"de":1,"el":1,"en":1,"en-au":1,"en-ca":1,"en-gb":1,"eo":1,"es":1,"et":1,"eu":1,"fa":1,"fi":1,"fo":1,"fr":1,"fr-ca":1,"gl":1,"gu":1,"he":1,"hi":1,"hr":1,"hu":1,"id":1,"is":1,"it":1,"ja":1,"ka":1,"km":1,"ko":1,"ku":1,"lt":1,"lv":1,"mk":1,"mn":1,"ms":1,"nb":1,"nl":1,"no":1,"pl":1,"pt":1,"pt-br":1,"ro":1,"ru":1,"si":1,"sk":1,"sl":1,"sq":1,"sr":1,"sr-latn":1,"sv":1,"th":1,"tr":1,"tt":1,"ug":1,"uk":1,"vi":1,"zh":1,"zh-cn":1}}; \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/ckeditor.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/ckeditor.js new file mode 100644 index 0000000..2e396f6 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/ckeditor.js @@ -0,0 +1,97 @@ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom){return;}window.CKEDITOR||(window.CKEDITOR=function(){var e=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,g={timestamp:"F0RD",version:"4.4.7",revision:"3a35b3d",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:e},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f){for(var i=document.getElementsByTagName("script"),j=0;j<i.length;j++){var a=i[j].src.match(e);if(a){f=a[1];break;}}}-1==f.indexOf(":/")&&"//"!=f.slice(0,2)&&(f=0===f.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+f:location.href.match(/^[^\?]*\/(?:)/)[0]+f);if(!f){throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';}return f;}(),getUrl:function(b){-1==b.indexOf(":/")&&0!==b.indexOf("/")&&(b=this.basePath+b);this.timestamp&&("/"!=b.charAt(b.length-1)&&!/[&?]t=/.test(b))&&(b+=(0<=b.indexOf("?")?"&":"?")+"t="+this.timestamp);return b;},domReady:function(){function b(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",b,!1),f()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",b),f());}catch(a){}}function f(){for(var c;c=i.shift();){c();}}var i=[];return function(j){function a(){try{document.documentElement.doScroll("left");}catch(k){setTimeout(a,1);return;}b();}i.push(j);"complete"===document.readyState&&setTimeout(b,1);if(1==i.length){if(document.addEventListener){document.addEventListener("DOMContentLoaded",b,!1),window.addEventListener("load",b,!1);}else{if(document.attachEvent){document.attachEvent("onreadystatechange",b);window.attachEvent("onload",b);j=!1;try{j=!window.frameElement;}catch(c){}document.documentElement.doScroll&&j&&a();}}}};}()},d=window.CKEDITOR_GETURL;if(d){var h=g.getUrl;g.getUrl=function(b){return d.call(g,b)||h.call(g,b);};}return g;}());CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(d){var e=CKEDITOR.event.prototype,c;for(c in e){d[c]==null&&(d[c]=e[c]);}},CKEDITOR.event.prototype=function(){function d(b){var f=e(this);return f[b]||(f[b]=new c(b));}var e=function(b){b=b.getPrivate&&b.getPrivate()||b._||(b._={});return b.events||(b.events={});},c=function(b){this.name=b;this.listeners=[];};c.prototype={getListenerIndex:function(b){for(var f=0,g=this.listeners;f<g.length;f++){if(g[f].fn==b){return f;}}return -1;}};return{define:function(a,f){var g=d.call(this,a);CKEDITOR.tools.extend(g,f,true);},on:function(r,o,p,n,h){function i(f,b,j,g){f={name:r,sender:this,editor:f,data:b,listenerData:n,stop:j,cancel:g,removeListener:l};return o.call(p,f)===false?false:f.data;}function l(){q.removeListener(r,o);}var a=d.call(this,r);if(a.getListenerIndex(o)<0){a=a.listeners;p||(p=this);isNaN(h)&&(h=10);var q=this;i.fn=o;i.priority=h;for(var t=a.length-1;t>=0;t--){if(a[t].priority<=h){a.splice(t+1,0,i);return{removeListener:l};}}a.unshift(i);}return{removeListener:l};},once:function(){var b=Array.prototype.slice.call(arguments),f=b[1];b[1]=function(g){g.removeListener();return f.apply(this,arguments);};return this.on.apply(this,b);},capture:function(){CKEDITOR.event.useCapture=1;var b=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return b;},fire:function(){var g=0,h=function(){g=1;},i=0,f=function(){i=1;};return function(l,n,o){var b=e(this)[l],l=g,p=i;g=i=0;if(b){var v=b.listeners;if(v.length){for(var v=v.slice(0),r,a=0;a<v.length;a++){if(b.errorProof){try{r=v[a].call(this,o,n,h,f);}catch(u){}}else{r=v[a].call(this,o,n,h,f);}r===false?i=1:typeof r!="undefined"&&(n=r);if(g||i){break;}}}}n=i?false:typeof n=="undefined"?true:n;g=l;i=p;return n;};}(),fireOnce:function(b,f,g){f=this.fire(b,f,g);delete e(this)[b];return f;},removeListener:function(g,h){var i=e(this)[g];if(i){var f=i.getListenerIndex(h);f>=0&&i.listeners.splice(f,1);}},removeAllListeners:function(){var b=e(this),f;for(f in b){delete b[f];}},hasListeners:function(b){return(b=e(this)[b])&&b.listeners.length>0;}};}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this);},CKEDITOR.editor.prototype.fire=function(b,c){b in {instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fire.call(this,b,c,this);},CKEDITOR.editor.prototype.fireOnce=function(b,c){b in {instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fireOnce.call(this,b,c,this);},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));CKEDITOR.env||(CKEDITOR.env=function(){var e=navigator.userAgent.toLowerCase(),g={ie:e.indexOf("trident/")>-1,webkit:e.indexOf(" applewebkit/")>-1,air:e.indexOf(" adobeair/")>-1,mac:e.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:e.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(e),isCustomDomain:function(){if(!this.ie){return false;}var b=document.domain,c=window.location.hostname;return b!=c&&b!="["+c+"]"; +},secure:location.protocol=="https:"};g.gecko=navigator.product=="Gecko"&&!g.webkit&&!g.ie;if(g.webkit){e.indexOf("chrome")>-1?g.chrome=true:g.safari=true;}var d=0;if(g.ie){d=g.quirks||!document.documentMode?parseFloat(e.match(/msie (\d+)/)[1]):document.documentMode;g.ie9Compat=d==9;g.ie8Compat=d==8;g.ie7Compat=d==7;g.ie6Compat=d<7||g.quirks;}if(g.gecko){var h=e.match(/rv:([\d\.]+)/);if(h){h=h[1].split(".");d=h[0]*10000+(h[1]||0)*100+(h[2]||0)*1;}}g.air&&(d=parseFloat(e.match(/ adobeair\/(\d+)/)[1]));g.webkit&&(d=parseFloat(e.match(/ applewebkit\/(\d+)/)[1]));g.version=d;g.isCompatible=g.iOS&&d>=534||!g.mobile&&(g.ie&&d>6||g.gecko&&d>=20000||g.air&&d>=1||g.webkit&&d>=522||false);g.hidpi=window.devicePixelRatio>=2;g.needsBrFiller=g.gecko||g.webkit||g.ie&&d>10;g.needsNbspFiller=g.ie&&d<11;g.cssClass="cke_browser_"+(g.ie?"ie":g.gecko?"gecko":g.webkit?"webkit":"unknown");if(g.quirks){g.cssClass=g.cssClass+" cke_browser_quirks";}if(g.ie){g.cssClass=g.cssClass+(" cke_browser_ie"+(g.quirks?"6 cke_browser_iequirks":g.version));}if(g.air){g.cssClass=g.cssClass+" cke_browser_air";}if(g.iOS){g.cssClass=g.cssClass+" cke_browser_ios";}if(g.hidpi){g.cssClass=g.cssClass+" cke_hidpi";}return g;}());"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready"){CKEDITOR.loadFullCore._load=1;}else{delete CKEDITOR.loadFullCore;var b=document.createElement("script");b.type="text/javascript";b.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(b);}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(b){(this._.pending||(this._.pending=[])).push(b);};(function(){CKEDITOR.domReady(function(){var b=CKEDITOR.loadFullCore,c=CKEDITOR.loadFullCoreTimeout;if(b){CKEDITOR.status="basic_ready";b&&b._load?b():c&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore();},c*1000);}});})();CKEDITOR.status="basic_loaded";}();CKEDITOR.dom={};(function(){var t=[],o=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",s=/&/g,r=/>/g,p=/</g,q=/"/g,m=/&/g,i=/>/g,l=/</g,n=/"/g;CKEDITOR.on("reset",function(){t=[];});CKEDITOR.tools={arrayCompare:function(b,c){if(!b&&!c){return true;}if(!b||!c||b.length!=c.length){return false;}for(var f=0;f<b.length;f++){if(b[f]!=c[f]){return false;}}return true;},clone:function(b){var c;if(b&&b instanceof Array){c=[];for(var f=0;f<b.length;f++){c[f]=CKEDITOR.tools.clone(b[f]);}return c;}if(b===null||typeof b!="object"||b instanceof String||b instanceof Number||b instanceof Boolean||b instanceof Date||b instanceof RegExp||b.nodeType||b.window===b){return b;}c=new b.constructor;for(f in b){c[f]=CKEDITOR.tools.clone(b[f]);}return c;},capitalize:function(b,c){return b.charAt(0).toUpperCase()+(c?b.slice(1):b.slice(1).toLowerCase());},extend:function(h){var u=arguments.length,v,g;if(typeof(v=arguments[u-1])=="boolean"){u--;}else{if(typeof(v=arguments[u-2])=="boolean"){g=arguments[u-1];u=u-2;}}for(var w=1;w<u;w++){var k=arguments[w],j;for(j in k){if(v===true||h[j]==null){if(!g||j in g){h[j]=k[j];}}}}return h;},prototypedCopy:function(b){var c=function(){};c.prototype=b;return new c;},copy:function(b){var c={},f;for(f in b){c[f]=b[f];}return c;},isArray:function(b){return Object.prototype.toString.call(b)=="[object Array]";},isEmpty:function(b){for(var c in b){if(b.hasOwnProperty(c)){return false;}}return true;},cssVendorPrefix:function(b,c,f){if(f){return o+b+":"+c+";"+b+":"+c;}f={};f[b]=c;f[o+b]=c;return f;},cssStyleToDomStyle:function(){var b=document.createElement("div").style,c=typeof b.cssFloat!="undefined"?"cssFloat":typeof b.styleFloat!="undefined"?"styleFloat":"float";return function(d){return d=="float"?c:d.replace(/-./g,function(e){return e.substr(1).toUpperCase();});};}(),buildStyleHtml:function(f){for(var f=[].concat(f),g,h=[],c=0;c<f.length;c++){if(g=f[c]){/@import|[{}]/.test(g)?h.push("<style>"+g+"</style>"):h.push('<link type="text/css" rel=stylesheet href="'+g+'">');}}return h.join("");},htmlEncode:function(b){return(""+b).replace(s,"&").replace(r,">").replace(p,"<");},htmlDecode:function(b){return b.replace(m,"&").replace(i,">").replace(l,"<");},htmlEncodeAttr:function(b){return b.replace(q,""").replace(p,"<").replace(r,">");},htmlDecodeAttr:function(b){return b.replace(n,'"').replace(l,"<").replace(i,">");},getNextNumber:function(){var b=0;return function(){return ++b;};}(),getNextId:function(){return"cke_"+this.getNextNumber();},override:function(b,c){var f=c(b);f.prototype=b.prototype;return f;},setTimeout:function(g,h,j,f,k){k||(k=window);j||(j=k);return k.setTimeout(function(){f?g.apply(j,[].concat(f)):g.apply(j);},h||0);},trim:function(){var b=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(a){return a.replace(b,"");};}(),ltrim:function(){var b=/^[ \t\n\r]+/g;return function(a){return a.replace(b,"");};}(),rtrim:function(){var b=/[ \t\n\r]+$/g;return function(a){return a.replace(b,"");};}(),indexOf:function(f,g){if(typeof g=="function"){for(var h=0,c=f.length; +h<c;h++){if(g(f[h])){return h;}}}else{if(f.indexOf){return f.indexOf(g);}h=0;for(c=f.length;h<c;h++){if(f[h]===g){return h;}}}return -1;},search:function(b,c){var f=CKEDITOR.tools.indexOf(b,c);return f>=0?b[f]:null;},bind:function(b,c){return function(){return b.apply(c,arguments);};},createClass:function(h){var k=h.$,u=h.base,g=h.privates||h._,v=h.proto,h=h.statics;!k&&(k=function(){u&&this.base.apply(this,arguments);});if(g){var j=k,k=function(){var b=this._||(this._={}),c;for(c in g){var f=g[c];b[c]=typeof f=="function"?CKEDITOR.tools.bind(f,this):f;}j.apply(this,arguments);};}if(u){k.prototype=this.prototypedCopy(u.prototype);k.prototype.constructor=k;k.base=u;k.baseProto=u.prototype;k.prototype.base=function(){this.base=u.prototype.base;u.apply(this,arguments);this.base=arguments.callee;};}v&&this.extend(k.prototype,v,true);h&&this.extend(k,h,true);return k;},addFunction:function(a,b){return t.push(function(){return a.apply(b||this,arguments);})-1;},removeFunction:function(a){t[a]=null;},callFunction:function(a){var b=t[a];return b&&b.apply(window,Array.prototype.slice.call(arguments,1));},cssLength:function(){var b=/^-?\d+\.?\d*px$/,c;return function(a){c=CKEDITOR.tools.trim(a+"")+"px";return b.test(c)?c:a||"";};}(),convertToPx:function(){var b;return function(a){if(!b){b=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(b);}if(!/%$/.test(a)){b.setStyle("width",a);return b.$.clientWidth;}return a;};}(),repeat:function(b,c){return Array(c+1).join(b);},tryThese:function(){for(var g,h=0,j=arguments.length;h<j;h++){var f=arguments[h];try{g=f();break;}catch(k){}}return g;},genKey:function(){return Array.prototype.slice.call(arguments).join("-");},defer:function(b){return function(){var a=arguments,c=this;window.setTimeout(function(){b.apply(c,a);},0);};},normalizeCssText:function(g,h){var j=[],f,k=CKEDITOR.tools.parseCssText(g,true,h);for(f in k){j.push(f+":"+k[f]);}j.sort();return j.length?j.join(";")+";":"";},convertRgbToHex:function(b){return b.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(f,g,h,c){f=[g,h,c];for(g=0;g<3;g++){f[g]=("0"+parseInt(f[g],10).toString(16)).slice(-2);}return"#"+f.join("");});},parseCssText:function(f,g,h){var c={};if(h){h=new CKEDITOR.dom.element("span");h.setAttribute("style",f);f=CKEDITOR.tools.convertRgbToHex(h.getAttribute("style")||"");}if(!f||f==";"){return c;}f.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(e,j,b){if(g){j=j.toLowerCase();j=="font-family"&&(b=b.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));b=CKEDITOR.tools.trim(b);}c[j]=b;});return c;},writeCssText:function(f,g){var h,c=[];for(h in f){c.push(h+":"+f[h]);}g&&c.sort();return c.join("; ");},objectCompare:function(f,g,h){var c;if(!f&&!g){return true;}if(!f||!g){return false;}for(c in f){if(f[c]!=g[c]){return false;}}if(!h){for(c in g){if(f[c]!=g[c]){return false;}}}return true;},objectKeys:function(b){var c=[],f;for(f in b){c.push(f);}return c;},convertArrayToObject:function(g,h){var j={};arguments.length==1&&(h=true);for(var f=0,k=g.length;f<k;++f){j[g[f]]=h;}return j;},fixDomain:function(){for(var b;;){try{b=window.parent.document.domain;break;}catch(c){b=b?b.replace(/.+?(?:\.|$)/,""):document.domain;if(!b){break;}document.domain=b;}}return !!b;},eventsBuffer:function(g,h){function j(){k=(new Date).getTime();f=false;h();}var f,k=0;return{input:function(){if(!f){var a=(new Date).getTime()-k;a<g?f=setTimeout(j,g-a):j();}},reset:function(){f&&clearTimeout(f);f=k=0;}};},enableHtml5Elements:function(g,h){for(var j=["abbr","article","aside","audio","bdi","canvas","data","datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],f=j.length,k;f--;){k=g.createElement(j[f]);h&&g.appendChild(k);}},checkIfAnyArrayItemMatches:function(f,g){for(var h=0,c=f.length;h<c;++h){if(f[h].match(g)){return true;}}return false;},checkIfAnyObjectPropertyMatches:function(b,c){for(var f in b){if(f.match(c)){return true;}}return false;},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="};})();CKEDITOR.dtd=function(){var r=CKEDITOR.tools.extend,m=function(h,j){for(var k=CKEDITOR.tools.clone(h),f=1;f<arguments.length;f++){var j=arguments[f],s;for(s in j){delete k[s];}}return k;},q={},p={},n={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},o={command:1,link:1,meta:1,noscript:1,script:1,style:1},l={},g={"#":1},i={center:1,dir:1,noframes:1};r(q,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},g,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1}); +r(p,n,q,i);m={a:m(q,{a:1,button:1}),abbr:q,address:p,area:l,article:p,aside:p,audio:r({source:1,track:1},p),b:q,base:l,bdi:q,bdo:q,blockquote:p,body:p,br:l,button:m(q,{a:1,button:1}),canvas:q,caption:p,cite:q,code:q,col:l,colgroup:{col:1},command:l,datalist:r({option:1},q),dd:p,del:q,details:r({summary:1},p),dfn:q,div:p,dl:{dt:1,dd:1},dt:p,em:q,embed:l,fieldset:r({legend:1},p),figcaption:p,figure:r({figcaption:1},p),footer:p,form:p,h1:q,h2:q,h3:q,h4:q,h5:q,h6:q,head:r({title:1,base:1},o),header:p,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:l,html:r({head:1,body:1},p,o),i:q,iframe:g,img:l,input:l,ins:q,kbd:q,keygen:l,label:q,legend:q,li:p,link:l,main:p,map:p,mark:q,menu:r({li:1},p),meta:l,meter:m(q,{meter:1}),nav:p,noscript:r({link:1,meta:1,style:1},q),object:r({param:1},q),ol:{li:1},optgroup:{option:1},option:g,output:q,p:q,param:l,pre:q,progress:m(q,{progress:1}),q:q,rp:q,rt:q,ruby:r({rp:1,rt:1},q),s:q,samp:q,script:g,section:p,select:{optgroup:1,option:1},small:q,source:l,span:q,strong:q,style:g,sub:q,summary:q,sup:q,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:p,textarea:g,tfoot:{tr:1},th:p,thead:{tr:1},time:m(q,{time:1}),title:g,tr:{th:1,td:1},track:l,u:q,ul:{li:1},"var":q,video:r({source:1,track:1},p),wbr:l,acronym:q,applet:r({param:1},p),basefont:l,big:q,center:p,dialog:l,dir:{li:1},font:q,isindex:l,noframes:p,strike:q,tt:q};r(m,{$block:r({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},n,i),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:q,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:r({body:1,head:1,html:1},m.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return m;}();CKEDITOR.dom.event=function(b){this.$=b;};CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which;},getKeystroke:function(){var b=this.getKey();if(this.$.ctrlKey||this.$.metaKey){b=b+CKEDITOR.CTRL;}this.$.shiftKey&&(b=b+CKEDITOR.SHIFT);this.$.altKey&&(b=b+CKEDITOR.ALT);return b;},preventDefault:function(b){var c=this.$;c.preventDefault?c.preventDefault():c.returnValue=false;b&&this.stopPropagation();},stopPropagation:function(){var b=this.$;b.stopPropagation?b.stopPropagation():b.cancelBubble=true;},getTarget:function(){var b=this.$.target||this.$.srcElement;return b?new CKEDITOR.dom.node(b):null;},getPhase:function(){return this.$.eventPhase||2;},getPageOffset:function(){var b=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(b.documentElement.scrollLeft||b.body.scrollLeft),y:this.$.pageY||this.$.clientY+(b.documentElement.scrollTop||b.body.scrollTop)};}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(b){if(b){this.$=b;}};CKEDITOR.dom.domObject.prototype=function(){var b=function(d,c){return function(a){typeof CKEDITOR!="undefined"&&d.fire(c,new CKEDITOR.dom.event(a));};};return{getPrivate:function(){var c;if(!(c=this.getCustomData("_"))){this.setCustomData("_",c={});}return c;},on:function(c){var a=this.getCustomData("_cke_nativeListeners");if(!a){a={};this.setCustomData("_cke_nativeListeners",a);}if(!a[c]){a=a[c]=b(this,c);this.$.addEventListener?this.$.addEventListener(c,a,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+c,a);}return CKEDITOR.event.prototype.on.apply(this,arguments);},removeListener:function(e){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(e)){var d=this.getCustomData("_cke_nativeListeners"),f=d&&d[e];if(f){this.$.removeEventListener?this.$.removeEventListener(e,f,false):this.$.detachEvent&&this.$.detachEvent("on"+e,f); +delete d[e];}}},removeAllListeners:function(){var e=this.getCustomData("_cke_nativeListeners"),d;for(d in e){var f=e[d];this.$.detachEvent?this.$.detachEvent("on"+d,f):this.$.removeEventListener&&this.$.removeEventListener(d,f,false);delete e[d];}CKEDITOR.event.prototype.removeAllListeners.call(this);}};}();(function(b){var c={};CKEDITOR.on("reset",function(){c={};});b.equals=function(d){try{return d&&d.$===this.$;}catch(e){return false;}};b.setCustomData=function(d,g){var f=this.getUniqueId();(c[f]||(c[f]={}))[d]=g;return this;};b.getCustomData=function(d){var e=this.$["data-cke-expando"];return(e=e&&c[e])&&d in e?e[d]:null;};b.removeCustomData=function(f){var i=this.$["data-cke-expando"],i=i&&c[i],g,h;if(i){g=i[f];h=f in i;delete i[f];}return h?g:null;};b.clearCustomData=function(){this.removeAllListeners();var d=this.$["data-cke-expando"];d&&delete c[d];};b.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber());};CKEDITOR.event.implementOn(b);})(CKEDITOR.dom.domObject.prototype);CKEDITOR.dom.node=function(b){return b?new CKEDITOR.dom[b.nodeType==CKEDITOR.NODE_DOCUMENT?"document":b.nodeType==CKEDITOR.NODE_ELEMENT?"element":b.nodeType==CKEDITOR.NODE_TEXT?"text":b.nodeType==CKEDITOR.NODE_COMMENT?"comment":b.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](b):this;};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(b,c){b.append(this,c);return b;},clone:function(e,g){var d=this.$.cloneNode(e),h=function(a){a["data-cke-expando"]&&(a["data-cke-expando"]=false);if(a.nodeType==CKEDITOR.NODE_ELEMENT){g||a.removeAttribute("id",false);if(e){for(var a=a.childNodes,b=0;b<a.length;b++){h(a[b]);}}}};h(d);return new CKEDITOR.dom.node(d);},hasPrevious:function(){return !!this.$.previousSibling;},hasNext:function(){return !!this.$.nextSibling;},insertAfter:function(b){b.$.parentNode.insertBefore(this.$,b.$.nextSibling);return b;},insertBefore:function(b){b.$.parentNode.insertBefore(this.$,b.$);return b;},insertBeforeMe:function(b){this.$.parentNode.insertBefore(b.$,this.$);return b;},getAddress:function(g){for(var h=[],d=this.getDocument().$.documentElement,j=this.$;j&&j!=d;){var i=j.parentNode;i&&h.unshift(this.getIndex.call({$:j},g));j=i;}return h;},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument);},getIndex:function(g){function h(f,k){var c=k?f.nextSibling:f.previousSibling;return !c||c.nodeType!=CKEDITOR.NODE_TEXT?null:c.nodeValue?c:h(c,k);}var d=this.$,j=-1,i;if(!this.$.parentNode||g&&d.nodeType==CKEDITOR.NODE_TEXT&&!d.nodeValue&&!h(d)&&!h(d,true)){return -1;}do{if(!g||!(d!=this.$&&d.nodeType==CKEDITOR.NODE_TEXT&&(i||!d.nodeValue))){j++;i=d.nodeType==CKEDITOR.NODE_TEXT;}}while(d=d.previousSibling);return j;},getNextSourceNode:function(g,h,d){if(d&&!d.call){var j=d,d=function(b){return !b.equals(j);};}var g=!g&&this.getFirst&&this.getFirst(),i;if(!g){if(this.type==CKEDITOR.NODE_ELEMENT&&d&&d(this,true)===false){return null;}g=this.getNext();}for(;!g&&(i=(i||this).getParent());){if(d&&d(i,true)===false){return null;}g=i.getNext();}return !g||d&&d(g)===false?null:h&&h!=g.type?g.getNextSourceNode(false,h,d):g;},getPreviousSourceNode:function(g,h,d){if(d&&!d.call){var j=d,d=function(b){return !b.equals(j);};}var g=!g&&this.getLast&&this.getLast(),i;if(!g){if(this.type==CKEDITOR.NODE_ELEMENT&&d&&d(this,true)===false){return null;}g=this.getPrevious();}for(;!g&&(i=(i||this).getParent());){if(d&&d(i,true)===false){return null;}g=i.getPrevious();}return !g||d&&d(g)===false?null:h&&g.type!=h?g.getPreviousSourceNode(false,h,d):g;},getPrevious:function(d){var e=this.$,c;do{c=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);}while(c&&d&&!d(c));return c;},getNext:function(d){var e=this.$,c;do{c=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);}while(c&&d&&!d(c));return c;},getParent:function(b){var c=this.$.parentNode;return c&&(c.nodeType==CKEDITOR.NODE_ELEMENT||b&&c.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(c):null;},getParents:function(d){var e=this,c=[];do{c[d?"push":"unshift"](e);}while(e=e.getParent());return c;},getCommonAncestor:function(b){if(b.equals(this)){return this;}if(b.contains&&b.contains(this)){return b;}var c=this.contains?this:this.getParent();do{if(c.contains(b)){return c;}}while(c=c.getParent());return null;},getPosition:function(e){var g=this.$,d=e.$;if(g.compareDocumentPosition){return g.compareDocumentPosition(d);}if(g==d){return CKEDITOR.POSITION_IDENTICAL;}if(this.type==CKEDITOR.NODE_ELEMENT&&e.type==CKEDITOR.NODE_ELEMENT){if(g.contains){if(g.contains(d)){return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING; +}if(d.contains(g)){return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING;}}if("sourceIndex" in g){return g.sourceIndex<0||d.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:g.sourceIndex<d.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;}}for(var g=this.getAddress(),e=e.getAddress(),d=Math.min(g.length,e.length),h=0;h<=d-1;h++){if(g[h]!=e[h]){if(h<d){return g[h]<e[h]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;}break;}}return g.length<e.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING;},getAscendant:function(h,i){var g=this.$,l,j;if(!i){g=g.parentNode;}if(typeof h=="function"){j=true;l=h;}else{j=false;l=function(a){a=typeof a.nodeName=="string"?a.nodeName.toLowerCase():"";return typeof h=="string"?a==h:a in h;};}for(;g;){if(l(j?new CKEDITOR.dom.node(g):g)){return new CKEDITOR.dom.node(g);}try{g=g.parentNode;}catch(k){g=null;}}return null;},hasAscendant:function(d,e){var c=this.$;if(!e){c=c.parentNode;}for(;c;){if(c.nodeName&&c.nodeName.toLowerCase()==d){return true;}c=c.parentNode;}return false;},move:function(b,c){b.append(this.remove(),c);},remove:function(d){var e=this.$,c=e.parentNode;if(c){if(d){for(;d=e.firstChild;){c.insertBefore(e.removeChild(d),e);}}c.removeChild(e);}return this;},replace:function(b){this.insertBefore(b);b.remove();},trim:function(){this.ltrim();this.rtrim();},ltrim:function(){for(var d;this.getFirst&&(d=this.getFirst());){if(d.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(d.getText()),c=d.getLength();if(e){if(e.length<c){d.split(c-e.length);this.$.removeChild(this.$.firstChild);}}else{d.remove();continue;}}break;}},rtrim:function(){for(var d;this.getLast&&(d=this.getLast());){if(d.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(d.getText()),c=d.getLength();if(e){if(e.length<c){d.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild);}}else{d.remove();continue;}}break;}if(CKEDITOR.env.needsBrFiller){(d=this.$.lastChild)&&(d.type==1&&d.nodeName.toLowerCase()=="br")&&d.parentNode.removeChild(d);}},isReadOnly:function(){var b=this;this.type!=CKEDITOR.NODE_ELEMENT&&(b=this.getParent());if(b&&typeof b.$.isContentEditable!="undefined"){return !(b.$.isContentEditable||b.data("cke-editable"));}for(;b;){if(b.data("cke-editable")){break;}if(b.getAttribute("contentEditable")=="false"){return true;}if(b.getAttribute("contentEditable")=="true"){break;}b=b.getParent();}return !b;}});CKEDITOR.dom.window=function(b){CKEDITOR.dom.domObject.call(this,b);};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus();},getViewPaneSize:function(){var b=this.$.document,c=b.compatMode=="CSS1Compat";return{width:(c?b.documentElement.clientWidth:b.body.clientWidth)||0,height:(c?b.documentElement.clientHeight:b.body.clientHeight)||0};},getScrollPosition:function(){var b=this.$;if("pageXOffset" in b){return{x:b.pageXOffset||0,y:b.pageYOffset||0};}b=b.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||b.body.scrollTop||0};},getFrame:function(){var b=this.$.frameElement;return b?new CKEDITOR.dom.element.get(b):null;}});CKEDITOR.dom.document=function(b){CKEDITOR.dom.domObject.call(this,b);};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(b){if(this.$.createStyleSheet){this.$.createStyleSheet(b);}else{var c=new CKEDITOR.dom.element("link");c.setAttributes({rel:"stylesheet",type:"text/css",href:b});this.getHead().append(c);}},appendStyleText:function(d){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=d;}else{var c=new CKEDITOR.dom.element("style",this);c.append(new CKEDITOR.dom.text(d,this));this.getHead().append(c);}return e||c.$.sheet;},createElement:function(d,e){var c=new CKEDITOR.dom.element(d,this);if(e){e.attributes&&c.setAttributes(e.attributes);e.styles&&c.setStyles(e.styles);}return c;},createText:function(b){return new CKEDITOR.dom.text(b,this);},focus:function(){this.getWindow().focus();},getActive:function(){var b;try{b=this.$.activeElement;}catch(c){return null;}return new CKEDITOR.dom.element(b);},getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):null;},getByAddress:function(i,m){for(var g=this.$.documentElement,p=0;g&&p<i.length;p++){var n=i[p];if(m){for(var o=-1,l=0;l<g.childNodes.length;l++){var j=g.childNodes[l];if(!(m===true&&j.nodeType==3&&j.previousSibling&&j.previousSibling.nodeType==3)){o++;if(o==n){g=j;break;}}}}else{g=g.childNodes[n];}}return g?new CKEDITOR.dom.node(g):null;},getElementsByTag:function(b,c){!(CKEDITOR.env.ie&&document.documentMode<=8)&&c&&(b=c+":"+b);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(b));},getHead:function(){var b=this.$.getElementsByTagName("head")[0];return b=b?new CKEDITOR.dom.element(b):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true); +},getBody:function(){return new CKEDITOR.dom.element(this.$.body);},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement);},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView);},write:function(b){this.$.open("text/html","replace");CKEDITOR.env.ie&&(b=b.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(b);this.$.close();},find:function(b){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b));},findOne:function(b){return(b=this.$.querySelector(b))?new CKEDITOR.dom.element(b):null;},_getHtml5ShivFrag:function(){var b=this.getCustomData("html5ShivFrag");if(!b){b=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(b,true);this.setCustomData("html5ShivFrag",b);}return b;}});CKEDITOR.dom.nodeList=function(b){this.$=b;};CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length;},getItem:function(b){if(b<0||b>=this.$.length){return null;}return(b=this.$[b])?new CKEDITOR.dom.node(b):null;}};CKEDITOR.dom.element=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createElement(b));CKEDITOR.dom.domObject.call(this,b);};CKEDITOR.dom.element.get=function(b){return(b=typeof b=="string"?document.getElementById(b)||document.getElementsByName(b)[0]:b)&&(b.$?b:new CKEDITOR.dom.element(b));};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(d,e){var c=new CKEDITOR.dom.element("div",e);c.setHtml(d);return c.getFirst().remove();};CKEDITOR.dom.element.setMarker=function(h,i,g,l){var j=i.getCustomData("list_marker_id")||i.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),k=i.getCustomData("list_marker_names")||i.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");h[j]=i;k[g]=1;return i.setCustomData(g,l);};CKEDITOR.dom.element.clearAllMarkers=function(b){for(var c in b){CKEDITOR.dom.element.clearMarkers(b,b[c],1);}};CKEDITOR.dom.element.clearMarkers=function(h,i,g){var l=i.getCustomData("list_marker_names"),j=i.getCustomData("list_marker_id"),k;for(k in l){i.removeCustomData(k);}i.removeCustomData("list_marker_names");if(g){i.removeCustomData("list_marker_id");delete h[j];}};(function(){function e(b){var c=true;if(!b.$.id){b.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();c=false;}return function(){c||b.removeAttribute("id");};}function g(b,c){return"#"+b.$.id+" "+c.split(/,\s*/).join(", #"+b.$.id+" ");}function d(i){for(var k=0,c=0,j=h[i].length;c<j;c++){k=k+(parseInt(this.getComputedStyle(h[i][c])||0,10)||0);}return k;}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(b){var c=this.$.className;c&&(RegExp("(?:^|\\s)"+b+"(?:\\s|$)","").test(c)||(c=c+(" "+b)));this.$.className=c||b;return this;},removeClass:function(b){var c=this.getAttribute("class");if(c){b=RegExp("(?:^|\\s+)"+b+"(?=\\s|$)","i");if(b.test(c)){(c=c.replace(b,"").replace(/^\s+/,""))?this.setAttribute("class",c):this.removeAttribute("class");}}return this;},hasClass:function(b){return RegExp("(?:^|\\s+)"+b+"(?=\\s|$)","").test(this.getAttribute("class"));},append:function(b,c){typeof b=="string"&&(b=this.getDocument().createElement(b));c?this.$.insertBefore(b.$,this.$.firstChild):this.$.appendChild(b.$);return b;},appendHtml:function(b){if(this.$.childNodes.length){var c=new CKEDITOR.dom.element("div",this.getDocument());c.setHtml(b);c.moveChildren(this);}else{this.setHtml(b);}},appendText:function(b){this.$.text!=null?this.$.text=this.$.text+b:this.append(new CKEDITOR.dom.text(b));},appendBogus:function(b){if(b||CKEDITOR.env.needsBrFiller){for(b=this.getLast();b&&b.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(b.getText());){b=b.getPrevious();}if(!b||!b.is||!b.is("br")){b=this.getDocument().createElement("br");CKEDITOR.env.gecko&&b.setAttribute("type","_moz");this.append(b);}}},breakParent:function(b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(b);b=c.extractContents();c.insertNode(this.remove());b.insertAfterNode(this);},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(b){var c=this.$;return b.type!=CKEDITOR.NODE_ELEMENT?c.contains(b.getParent().$):c!=b.$&&c.contains(b.$);}:function(b){return !!(this.$.compareDocumentPosition(b.$)&16);},focus:function(){function b(){try{this.$.focus();}catch(a){}}return function(a){a?CKEDITOR.tools.setTimeout(b,100,this):b.call(this);};}(),getHtml:function(){var b=this.$.innerHTML;return CKEDITOR.env.ie?b.replace(/<\?[^>]*>/g,""):b;},getOuterHtml:function(){if(this.$.outerHTML){return this.$.outerHTML.replace(/<\?[^>]*>/,"");}var b=this.$.ownerDocument.createElement("div");b.appendChild(this.$.cloneNode(true));return b.innerHTML;},getClientRect:function(){var b=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!b.width&&(b.width=b.right-b.left);!b.height&&(b.height=b.bottom-b.top);return b;},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(i){try{var j=this.$; +if(this.getParent()){return j.innerHTML=i;}var f=this.getDocument()._getHtml5ShivFrag();f.appendChild(j);j.innerHTML=i;f.removeChild(j);return i;}catch(k){this.$.innerHTML="";j=new CKEDITOR.dom.element("body",this.getDocument());j.$.innerHTML=i;for(j=j.getChildren();j.count();){this.append(j.getItem(0));}return i;}}:function(b){return this.$.innerHTML=b;},setText:function(){var b=document.createElement("p");b.innerHTML="x";b=b.textContent;return function(a){this.$[b?"textContent":"innerText"]=a;};}(),getAttribute:function(){var b=function(c){return this.$.getAttribute(c,2);};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c){switch(c){case"class":c="className";break;case"http-equiv":c="httpEquiv";break;case"name":return this.$.name;case"tabindex":c=this.$.getAttribute(c,2);c!==0&&this.$.tabIndex===0&&(c=null);return c;case"checked":c=this.$.attributes.getNamedItem(c);return(c.specified?c.nodeValue:this.$.checked)?"checked":null;case"hspace":case"value":return this.$[c];case"style":return this.$.style.cssText;case"contenteditable":case"contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null;}return this.$.getAttribute(c,2);}:b;}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes);},getComputedStyle:CKEDITOR.env.ie?function(b){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(b)];}:function(b){var c=this.getWindow().$.getComputedStyle(this.$,null);return c?c.getPropertyValue(b):"";},getDtd:function(){var b=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return b;};return b;},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var b=this.$.tabIndex;b===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(b=-1);return b;}:CKEDITOR.env.webkit?function(){var b=this.$.tabIndex;if(b===void 0){b=parseInt(this.getAttribute("tabindex"),10);isNaN(b)&&(b=-1);}return b;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||"";},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var b=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var c=this.$.scopeName;c!="HTML"&&(b=c.toLowerCase()+":"+b);}this.getName=function(){return b;};return this.getName();},getValue:function(){return this.$.value;},getFirst:function(b){var c=this.$.firstChild;(c=c&&new CKEDITOR.dom.node(c))&&(b&&!b(c))&&(c=c.getNext(b));return c;},getLast:function(b){var c=this.$.lastChild;(c=c&&new CKEDITOR.dom.node(c))&&(b&&!b(c))&&(c=c.getPrevious(b));return c;},getStyle:function(b){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(b)];},is:function(){var b=this.getName();if(typeof arguments[0]=="object"){return !!arguments[0][b];}for(var c=0;c<arguments.length;c++){if(arguments[c]==b){return true;}}return false;},isEditable:function(b){var c=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[c]||CKEDITOR.dtd.$empty[c]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()){return false;}if(b!==false){b=CKEDITOR.dtd[c]||CKEDITOR.dtd.span;return !(!b||!b["#"]);}return true;},isIdentical:function(f){var i=this.clone(0,1),f=f.clone(0,1);i.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);f.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(i.$.isEqualNode){i.$.style.cssText=CKEDITOR.tools.normalizeCssText(i.$.style.cssText);f.$.style.cssText=CKEDITOR.tools.normalizeCssText(f.$.style.cssText);return i.$.isEqualNode(f.$);}i=i.getOuterHtml();f=f.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var c=this.getParent();if(c.type==CKEDITOR.NODE_ELEMENT){c=c.clone();c.setHtml(i);i=c.getHtml();c.setHtml(f);f=c.getHtml();}}return i==f;},isVisible:function(){var f=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",i,c;if(f&&CKEDITOR.env.webkit){i=this.getWindow();if(!i.equals(CKEDITOR.document.getWindow())&&(c=i.$.frameElement)){f=(new CKEDITOR.dom.element(c)).isVisible();}}return !!f;},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()]){return false;}for(var i=this.getChildren(),j=0,f=i.count();j<f;j++){var k=i.getItem(j);if(!(k.type==CKEDITOR.NODE_ELEMENT&&k.data("cke-bookmark"))&&(k.type==CKEDITOR.NODE_ELEMENT&&!k.isEmptyInlineRemoveable()||k.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(k.getText()))){return false;}}return true;},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var f=this.$.attributes,i=0;i<f.length;i++){var c=f[i];switch(c.nodeName){case"class":if(this.getAttribute("class")){return true; +}case"data-cke-expando":continue;default:if(c.specified){return true;}}}return false;}:function(){var f=this.$.attributes,i=f.length,c={"data-cke-expando":1,_moz_dirty:1};return i>0&&(i>2||!c[f[0].nodeName]||i==2&&!c[f[1].nodeName]);},hasAttribute:function(){function b(c){var a=this.$.attributes.getNamedItem(c);if(this.getName()=="input"){switch(c){case"class":return this.$.className.length>0;case"checked":return !!this.$.checked;case"value":c=this.getAttribute("type");return c=="checkbox"||c=="radio"?this.$.value!="on":!!this.$.value;}}return !a?false:a.specified;}return CKEDITOR.env.ie?CKEDITOR.env.version<8?function(a){return a=="name"?!!this.$.name:b.call(this,a);}:b:function(c){return !!this.$.attributes.getNamedItem(c);};}(),hide:function(){this.setStyle("display","none");},moveChildren:function(i,j){var f=this.$,i=i.$;if(f!=i){var k;if(j){for(;k=f.lastChild;){i.insertBefore(f.removeChild(k),i.firstChild);}}else{for(;k=f.firstChild;){i.appendChild(f.removeChild(k));}}}},mergeSiblings:function(){function b(k,a,j){if(a&&a.type==CKEDITOR.NODE_ELEMENT){for(var l=[];a.data("cke-bookmark")||a.isEmptyInlineRemoveable();){l.push(a);a=j?a.getNext():a.getPrevious();if(!a||a.type!=CKEDITOR.NODE_ELEMENT){return;}}if(k.isIdentical(a)){for(var i=j?k.getLast():k.getFirst();l.length;){l.shift().move(k,!j);}a.moveChildren(k,!j);a.remove();i&&i.type==CKEDITOR.NODE_ELEMENT&&i.mergeSiblings();}}}return function(a){if(a===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){b(this,this.getNext(),true);b(this,this.getPrevious());}};}(),show:function(){this.setStyles({display:"",visibility:""});},setAttribute:function(){var b=function(f,c){this.$.setAttribute(f,c);return this;};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c,a){c=="class"?this.$.className=a:c=="style"?this.$.style.cssText=a:c=="tabindex"?this.$.tabIndex=a:c=="checked"?this.$.checked=a:c=="contenteditable"?b.call(this,"contentEditable",a):b.apply(this,arguments);return this;}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(f,a){if(f=="src"&&a.match(/^http:\/\//)){try{b.apply(this,arguments);}catch(i){}}else{b.apply(this,arguments);}return this;}:b;}(),setAttributes:function(b){for(var c in b){this.setAttribute(c,b[c]);}return this;},setValue:function(b){this.$.value=b;return this;},removeAttribute:function(){var b=function(c){this.$.removeAttribute(c);};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c){c=="class"?c="className":c=="tabindex"?c="tabIndex":c=="contenteditable"&&(c="contentEditable");this.$.removeAttribute(c);}:b;}(),removeAttributes:function(f){if(CKEDITOR.tools.isArray(f)){for(var c=0;c<f.length;c++){this.removeAttribute(f[c]);}}else{for(c in f){f.hasOwnProperty(c)&&this.removeAttribute(c);}}},removeStyle:function(k){var i=this.$.style;if(!i.removeProperty&&(k=="border"||k=="margin"||k=="padding")){var o=["top","left","right","bottom"],n;k=="border"&&(n=["color","style","width"]);for(var i=[],l=0;l<o.length;l++){if(n){for(var m=0;m<n.length;m++){i.push([k,o[l],n[m]].join("-"));}}else{i.push([k,o[l]].join("-"));}}for(k=0;k<i.length;k++){this.removeStyle(i[k]);}}else{i.removeProperty?i.removeProperty(k):i.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(k));this.$.style.cssText||this.removeAttribute("style");}},setStyle:function(f,c){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(f)]=c;return this;},setStyles:function(f){for(var c in f){this.setStyle(c,f[c]);}return this;},setOpacity:function(b){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){b=Math.round(b*100);this.setStyle("filter",b>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+b+")");}else{this.setStyle("opacity",b);}},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var j,i=this.getElementsByTag("*"),l=0,k=i.count();l<k;l++){j=i.getItem(l);j.setAttribute("unselectable","on");}}},getPositionedAncestor:function(){for(var b=this;b.getName()!="html";){if(b.getComputedStyle("position")!="static"){return b;}b=b.getParent();}return null;},getDocumentPosition:function(u){var t=0,p=0,o=this.getDocument(),l=o.getBody(),n=CKEDITOR.env.quirks;if(document.documentElement.getBoundingClientRect){var k=this.$.getBoundingClientRect(),r=o.$.documentElement,x=r.clientTop||l.$.clientTop||0,v=r.clientLeft||l.$.clientLeft||0,i=true;if(CKEDITOR.env.ie){i=o.getDocumentElement().contains(this);o=o.getBody().contains(this);i=n&&o||!n&&i;}if(i){if(CKEDITOR.env.webkit){t=l.$.scrollLeft||r.scrollLeft;p=l.$.scrollTop||r.scrollTop;}else{p=n?l.$:r;t=p.scrollLeft;p=p.scrollTop;}t=k.left+t-v;p=k.top+p-x;}}else{x=this;for(v=null;x&&!(x.getName()=="body"||x.getName()=="html");){t=t+(x.$.offsetLeft-x.$.scrollLeft);p=p+(x.$.offsetTop-x.$.scrollTop);if(!x.equals(this)){t=t+(x.$.clientLeft||0);p=p+(x.$.clientTop||0);}for(;v&&!v.equals(x);){t=t-v.$.scrollLeft;p=p-v.$.scrollTop;v=v.getParent();}v=x;x=(k=x.$.offsetParent)?new CKEDITOR.dom.element(k):null; +}}if(u){k=this.getWindow();x=u.getWindow();if(!k.equals(x)&&k.$.frameElement){u=(new CKEDITOR.dom.element(k.$.frameElement)).getDocumentPosition(u);t=t+u.x;p=p+u.y;}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!n){t=t+(this.$.clientLeft?1:0);p=p+(this.$.clientTop?1:0);}return{x:t,y:p};},scrollIntoView:function(k){var i=this.getParent();if(i){do{(i.$.clientWidth&&i.$.clientWidth<i.$.scrollWidth||i.$.clientHeight&&i.$.clientHeight<i.$.scrollHeight)&&!i.is("body")&&this.scrollIntoParent(i,k,1);if(i.is("html")){var n=i.getWindow();try{var m=n.$.frameElement;m&&(i=new CKEDITOR.dom.element(m));}catch(l){}}}while(i=i.getParent());}},scrollIntoParent:function(C,B,x){var v,o,r,n;function z(a,c){if(/body|html/.test(C.getName())){C.getWindow().$.scrollBy(a,c);}else{C.$.scrollLeft=C.$.scrollLeft+a;C.$.scrollTop=C.$.scrollTop+c;}}function G(i,f){var j={x:0,y:0};if(!i.is(k?"body":"html")){var m=i.$.getBoundingClientRect();j.x=m.left;j.y=m.top;}m=i.getWindow();if(!m.equals(f)){m=G(CKEDITOR.dom.element.get(m.$.frameElement),f);j.x=j.x+m.x;j.y=j.y+m.y;}return j;}function D(f,c){return parseInt(f.getComputedStyle("margin-"+c)||0,10)||0;}!C&&(C=this.getWindow());r=C.getDocument();var k=r.$.compatMode=="BackCompat";C instanceof CKEDITOR.dom.window&&(C=k?r.getBody():r.getDocumentElement());r=C.getWindow();o=G(this,r);var F=G(C,r),p=this.$.offsetHeight;v=this.$.offsetWidth;var l=C.$.clientHeight,E=C.$.clientWidth;r=o.x-D(this,"left")-F.x||0;n=o.y-D(this,"top")-F.y||0;v=o.x+v+D(this,"right")-(F.x+E)||0;o=o.y+p+D(this,"bottom")-(F.y+l)||0;if(n<0||o>0){z(0,B===true?n:B===false?o:n<0?n:o);}if(x&&(r<0||v>0)){z(r<0?r:v,0);}},setState:function(i,f,j){f=f||"cke";switch(i){case CKEDITOR.TRISTATE_ON:this.addClass(f+"_on");this.removeClass(f+"_off");this.removeClass(f+"_disabled");j&&this.setAttribute("aria-pressed",true);j&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(f+"_disabled");this.removeClass(f+"_off");this.removeClass(f+"_on");j&&this.setAttribute("aria-disabled",true);j&&this.removeAttribute("aria-pressed");break;default:this.addClass(f+"_off");this.removeClass(f+"_on");this.removeClass(f+"_disabled");j&&this.removeAttribute("aria-pressed");j&&this.removeAttribute("aria-disabled");}},getFrameDocument:function(){var f=this.$;try{f.contentWindow.document;}catch(c){f.src=f.src;}return f&&new CKEDITOR.dom.document(f.contentWindow.document);},copyAttributes:function(l,k){for(var q=this.$.attributes,k=k||{},p=0;p<q.length;p++){var n=q[p],o=n.nodeName.toLowerCase(),i;if(!(o in k)){if(o=="checked"&&(i=this.getAttribute(o))){l.setAttribute(o,i);}else{if(!CKEDITOR.env.ie||this.hasAttribute(o)){i=this.getAttribute(o);if(i===null){i=n.nodeValue;}l.setAttribute(o,i);}}}}if(this.$.style.cssText!==""){l.$.style.cssText=this.$.style.cssText;}},renameNode:function(f){if(this.getName()!=f){var c=this.getDocument(),f=new CKEDITOR.dom.element(f,c);this.copyAttributes(f);this.moveChildren(f);this.getParent()&&this.$.parentNode.replaceChild(f.$,this.$);f.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=f.$;delete this.getName;}},getChild:function(){function b(a,i){var f=a.childNodes;if(i>=0&&i<f.length){return f[i];}}return function(a){var f=this.$;if(a.slice){for(;a.length>0&&f;){f=b(f,a.shift());}}else{f=b(f,a);}return f?new CKEDITOR.dom.node(f):null;};}(),getChildCount:function(){return this.$.childNodes.length;},disableContextMenu:function(){this.on("contextmenu",function(b){b.data.getTarget().hasClass("cke_enable_context_menu")||b.data.preventDefault();});},getDirection:function(b){return b?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir");},data:function(f,c){f="data-"+f;if(c===void 0){return this.getAttribute(f);}c===false?this.removeAttribute(f):this.setAttribute(f,c);return null;},getEditor:function(){var i=CKEDITOR.instances,f,j;for(f in i){j=i[f];if(j.element.equals(this)&&j.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){return j;}}return null;},find:function(a){var f=e(this),a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(g(this,a)));f();return a;},findOne:function(a){var f=e(this),a=this.$.querySelector(g(this,a));f();return a?new CKEDITOR.dom.element(a):null;},forEach:function(k,i,n){if(!n&&(!i||this.type==i)){var m=k(this);}if(m!==false){for(var n=this.getChildren(),l=0;l<n.count();l++){m=n.getItem(l);m.type==CKEDITOR.NODE_ELEMENT?m.forEach(k,i):(!i||m.type==i)&&k(m);}}}});var h={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(b,j,i){if(typeof j=="number"){if(i&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks)){j=j-d.call(this,b);}this.setStyle(b,j+"px");}};CKEDITOR.dom.element.prototype.getSize=function(b,j){var i=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(b)],this.$["client"+CKEDITOR.tools.capitalize(b)])||0; +j&&(i=i-d.call(this,b));return i;};})();CKEDITOR.dom.documentFragment=function(b){b=b||CKEDITOR.document;this.$=b.type==CKEDITOR.NODE_DOCUMENT?b.$.createDocumentFragment():b;};CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(b){b=b.$;b.parentNode.insertBefore(this.$,b.nextSibling);}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});(function(){function v(L,K){var J=this.range;if(this._.end){return null;}if(!this._.start){this._.start=1;if(J.collapsed){this.end();return null;}J.optimize();}var I,H=J.startContainer;I=J.endContainer;var A=J.startOffset,G=J.endOffset,E,y=this.guard,B=this.type,x=L?"getPreviousSourceNode":"getNextSourceNode";if(!L&&!this._.guardLTR){var k=I.type==CKEDITOR.NODE_ELEMENT?I:I.getParent(),z=I.type==CKEDITOR.NODE_ELEMENT?I.getChild(G):I.getNext();this._.guardLTR=function(d,c){return(!c||!k.equals(d))&&(!z||!d.equals(z))&&(d.type!=CKEDITOR.NODE_ELEMENT||!c||!d.equals(J.root));};}if(L&&!this._.guardRTL){var F=H.type==CKEDITOR.NODE_ELEMENT?H:H.getParent(),w=H.type==CKEDITOR.NODE_ELEMENT?A?H.getChild(A-1):null:H.getPrevious();this._.guardRTL=function(d,c){return(!c||!F.equals(d))&&(!w||!d.equals(w))&&(d.type!=CKEDITOR.NODE_ELEMENT||!c||!d.equals(J.root));};}var D=L?this._.guardRTL:this._.guardLTR;E=y?function(d,c){return D(d,c)===false?false:y(d,c);}:D;if(this.current){I=this.current[x](false,B,E);}else{if(L){I.type==CKEDITOR.NODE_ELEMENT&&(I=G>0?I.getChild(G-1):E(I,true)===false?null:I.getPreviousSourceNode(true,B,E));}else{I=H;if(I.type==CKEDITOR.NODE_ELEMENT&&!(I=I.getChild(A))){I=E(H,true)===false?null:H.getNextSourceNode(true,B,E);}}I&&E(I)===false&&(I=null);}for(;I&&!this._.end;){this.current=I;if(!this.evaluator||this.evaluator(I)!==false){if(!K){return I;}}else{if(K&&this.evaluator){return false;}}I=I[x](false,B,E);}this.end();return this.current=null;}function q(a){for(var f,e=null;f=v.call(this,a);){e=f;}return e;}function u(e){if(p(e)){return false;}if(e.type==CKEDITOR.NODE_TEXT){return true;}if(e.type==CKEDITOR.NODE_ELEMENT){if(e.is(CKEDITOR.dtd.$inline)||e.is("hr")||e.getAttribute("contenteditable")=="false"){return true;}var d;if(d=!CKEDITOR.env.needsBrFiller){if(d=e.is(i)){e:{d=0;for(var f=e.getChildCount();d<f;++d){if(!p(e.getChild(d))){d=false;break e;}}d=true;}}}if(d){return true;}}return false;}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(b){this.range=b;this._={};},proto:{end:function(){this._.end=1;},next:function(){return v.call(this);},previous:function(){return v.call(this,1);},checkForward:function(){return v.call(this,0,1)!==false;},checkBackward:function(){return v.call(this,1,1)!==false;},lastForward:function(){return q.call(this);},lastBackward:function(){return q.call(this,1);},reset:function(){delete this.current;this._={};}}});var t={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},r={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(b){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position") in r)&&t[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||b&&this.is(b));};CKEDITOR.dom.walker.blockBoundary=function(b){return function(a){return !(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary(b));};};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};CKEDITOR.dom.walker.bookmark=function(e,d){function f(b){return b&&b.getName&&b.getName()=="span"&&b.data("cke-bookmark");}return function(c){var b,a;b=c&&c.type!=CKEDITOR.NODE_ELEMENT&&(a=c.getParent())&&f(a);b=e?b:b||f(c);return !!(d^b);};};CKEDITOR.dom.walker.whitespaces=function(b){return function(a){var d;a&&a.type==CKEDITOR.NODE_TEXT&&(d=!CKEDITOR.tools.trim(a.getText())||CKEDITOR.env.webkit&&a.getText()=="");return !!(b^d);};};CKEDITOR.dom.walker.invisible=function(e){var d=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.env.webkit?1:0;return function(a){if(d(a)){a=1;}else{a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());a=a.$.offsetWidth<=f;}return !!(e^a);};};CKEDITOR.dom.walker.nodeType=function(d,c){return function(a){return !!(c^a.type==d);};};CKEDITOR.dom.walker.bogus=function(d){function c(b){return !o(b)&&!l(b);}return function(b){var a=CKEDITOR.env.needsBrFiller?b.is&&b.is("br"):b.getText&&s.test(b.getText());if(a){a=b.getParent();b=b.getNext(c);a=a.isBlockBoundary()&&(!b||b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary());}return !!(d^a);};};CKEDITOR.dom.walker.temp=function(b){return function(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());a=a&&a.hasAttribute("data-cke-temp");return !!(b^a);};};var s=/^[\t\r\n ]*(?: |\xa0)$/,o=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),n=CKEDITOR.dom.walker.temp(); +CKEDITOR.dom.walker.ignored=function(b){return function(a){a=o(a)||l(a)||n(a);return !!(b^a);};};var p=CKEDITOR.dom.walker.ignored(),i=function(e){var d={},f;for(f in e){CKEDITOR.dtd[f]["#"]&&(d[f]=1);}return d;}(CKEDITOR.dtd.$block);CKEDITOR.dom.walker.editable=function(b){return function(a){return !!(b^u(a));};};CKEDITOR.dom.element.prototype.getBogus=function(){var b=this;do{b=b.getPreviousSourceNode();}while(l(b)||o(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.is(CKEDITOR.dtd.$inline)&&!b.is(CKEDITOR.dtd.$empty));return b&&(CKEDITOR.env.needsBrFiller?b.is&&b.is("br"):b.getText&&s.test(b.getText()))?b:false;};})();CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var c=b instanceof CKEDITOR.dom.document;this.document=c?b:b.getDocument();this.root=c?b.getBody():b;};(function(){function t(){var f=false,d=CKEDITOR.dom.walker.whitespaces(),h=CKEDITOR.dom.walker.bookmark(true),g=CKEDITOR.dom.walker.bogus();return function(a){if(h(a)||d(a)){return true;}if(g(a)&&!f){return f=true;}return a.type==CKEDITOR.NODE_TEXT&&(a.hasAscendant("pre")||CKEDITOR.tools.trim(a.getText()).length)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(q)?false:true;};}function o(e){var d=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.dom.walker.bookmark(1);return function(a){return f(a)||d(a)?true:!e&&m(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$removeEmpty);};}function s(b){return function(){var a;return this[b?"getPreviousNode":"getNextNode"](function(c){!a&&n(c)&&(a=c);return l(c)&&!(m(c)&&c.equals(a));});};}var r=function(b){b.collapsed=b.startContainer&&b.endContainer&&b.startContainer.equals(b.endContainer)&&b.startOffset==b.endOffset;},p=function(N,M,L,K){N.optimizeBookmark();var J=N.startContainer,I=N.endContainer,E=N.startOffset,w=N.endOffset,G,y;if(I.type==CKEDITOR.NODE_TEXT){I=I.split(w);}else{if(I.getChildCount()>0){if(w>=I.getChildCount()){I=I.append(N.document.createText(""));y=true;}else{I=I.getChild(w);}}}if(J.type==CKEDITOR.NODE_TEXT){J.split(E);J.equals(I)&&(I=J.getNext());}else{if(E){if(E>=J.getChildCount()){J=J.append(N.document.createText(""));G=true;}else{J=J.getChild(E).getPrevious();}}else{J=J.append(N.document.createText(""),1);G=true;}}var E=J.getParents(),w=I.getParents(),B,x,v;for(B=0;B<E.length;B++){x=E[B];v=w[B];if(!x.equals(v)){break;}}for(var z=L,H,u,D,k=B;k<E.length;k++){H=E[k];z&&!H.equals(J)&&(u=z.append(H.clone()));for(H=H.getNext();H;){if(H.equals(w[k])||H.equals(I)){break;}D=H.getNext();if(M==2){z.append(H.clone(true));}else{H.remove();M==1&&z.append(H);}H=D;}z&&(z=u);}z=L;for(L=B;L<w.length;L++){H=w[L];M>0&&!H.equals(I)&&(u=z.append(H.clone()));if(!E[L]||H.$.parentNode!=E[L].$.parentNode){for(H=H.getPrevious();H;){if(H.equals(E[L])||H.equals(J)){break;}D=H.getPrevious();if(M==2){z.$.insertBefore(H.$.cloneNode(true),z.$.firstChild);}else{H.remove();M==1&&z.$.insertBefore(H.$,z.$.firstChild);}H=D;}}z&&(z=u);}if(M==2){x=N.startContainer;if(x.type==CKEDITOR.NODE_TEXT){x.$.data=x.$.data+x.$.nextSibling.data;x.$.parentNode.removeChild(x.$.nextSibling);}N=N.endContainer;if(N.type==CKEDITOR.NODE_TEXT&&N.$.nextSibling){N.$.data=N.$.data+N.$.nextSibling.data;N.$.parentNode.removeChild(N.$.nextSibling);}}else{if(x&&v&&(J.$.parentNode!=x.$.parentNode||I.$.parentNode!=v.$.parentNode)){M=v.getIndex();G&&v.$.parentNode==J.$.parentNode&&M--;if(K&&x.type==CKEDITOR.NODE_ELEMENT){K=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>',N.document);K.insertAfter(x);x.mergeSiblings(false);N.moveToBookmark({startNode:K});}else{N.setStart(v.getParent(),M);}}N.collapse(true);}G&&J.remove();y&&I.$.parentNode&&I.remove();},q={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},m=CKEDITOR.dom.walker.bogus(),i=/^[\t\r\n ]*(?: |\xa0)$/,l=CKEDITOR.dom.walker.editable(),n=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype={clone:function(){var b=new CKEDITOR.dom.range(this.root);b._setStartContainer(this.startContainer);b.startOffset=this.startOffset;b._setEndContainer(this.endContainer);b.endOffset=this.endOffset;b.collapsed=this.collapsed;return b;},collapse:function(b){if(b){this._setEndContainer(this.startContainer);this.endOffset=this.startOffset;}else{this._setStartContainer(this.endContainer);this.startOffset=this.endOffset;}this.collapsed=true;},cloneContents:function(){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||p(this,2,b);return b;},deleteContents:function(b){this.collapsed||p(this,0,null,b);},extractContents:function(d){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||p(this,1,c,d);return c;},createBookmark:function(h){var g,v,u,k,j=this.collapsed;g=this.document.createElement("span");g.data("cke-bookmark",1);g.setStyle("display","none");g.setHtml(" ");if(h){u="cke_bm_"+CKEDITOR.tools.getNextNumber();g.setAttribute("id",u+(j?"C":"S")); +}if(!j){v=g.clone();v.setHtml(" ");h&&v.setAttribute("id",u+"E");k=this.clone();k.collapse();k.insertNode(v);}k=this.clone();k.collapse(true);k.insertNode(g);if(v){this.setStartAfter(g);this.setEndBefore(v);}else{this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END);}return{startNode:h?u+(j?"C":"S"):g,endNode:h?u+"E":v,serializable:h,collapsed:j};},createBookmark2:function(){function d(j){var h=j.container,g=j.offset,b;b=h;var a=g;b=b.type!=CKEDITOR.NODE_ELEMENT||a===0||a==b.getChildCount()?0:b.getChild(a-1).type==CKEDITOR.NODE_TEXT&&b.getChild(a).type==CKEDITOR.NODE_TEXT;if(b){h=h.getChild(g-1);g=h.getLength();}h.type==CKEDITOR.NODE_ELEMENT&&g>1&&(g=h.getChild(g-1).getIndex(true)+1);if(h.type==CKEDITOR.NODE_TEXT){b=h;for(a=0;(b=b.getPrevious())&&b.type==CKEDITOR.NODE_TEXT;){a=a+b.getLength();}b=a;if(h.getText()){g=g+b;}else{a=h.getPrevious(c);if(b){g=b;h=a?a.getNext():h.getParent().getFirst();}else{h=h.getParent();g=a?a.getIndex(true)+1:0;}}}j.container=h;j.offset=g;}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,true);return function(a){var h=this.collapsed,g={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(a){d(g);h||d(f);}return{start:g.container.getAddress(a),end:h?null:f.container.getAddress(a),startOffset:g.offset,endOffset:f.offset,normalized:a,collapsed:h,is2:true};};}(),moveToBookmark:function(f){if(f.is2){var e=this.document.getByAddress(f.start,f.normalized),h=f.startOffset,g=f.end&&this.document.getByAddress(f.end,f.normalized),f=f.endOffset;this.setStart(e,h);g?this.setEnd(g,f):this.collapse(true);}else{e=(h=f.serializable)?this.document.getById(f.startNode):f.startNode;f=h?this.document.getById(f.endNode):f.endNode;this.setStartBefore(e);e.remove();if(f){this.setEndBefore(f);f.remove();}else{this.collapse(true);}}},getBoundaryNodes:function(){var g=this.startContainer,f=this.endContainer,k=this.startOffset,j=this.endOffset,h;if(g.type==CKEDITOR.NODE_ELEMENT){h=g.getChildCount();if(h>k){g=g.getChild(k);}else{if(h<1){g=g.getPreviousSourceNode();}else{for(g=g.$;g.lastChild;){g=g.lastChild;}g=new CKEDITOR.dom.node(g);g=g.getNextSourceNode()||g;}}}if(f.type==CKEDITOR.NODE_ELEMENT){h=f.getChildCount();if(h>j){f=f.getChild(j).getPreviousSourceNode(true);}else{if(h<1){f=f.getPreviousSourceNode();}else{for(f=f.$;f.lastChild;){f=f.lastChild;}f=new CKEDITOR.dom.node(f);}}}g.getPosition(f)&CKEDITOR.POSITION_FOLLOWING&&(g=f);return{startNode:g,endNode:f};},getCommonAncestor:function(f,e){var h=this.startContainer,g=this.endContainer,h=h.equals(g)?f&&h.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?h.getChild(this.startOffset):h:h.getCommonAncestor(g);return e&&!h.is?h.getParent():h;},optimize:function(){var d=this.startContainer,c=this.startOffset;d.type!=CKEDITOR.NODE_ELEMENT&&(c?c>=d.getLength()&&this.setStartAfter(d):this.setStartBefore(d));d=this.endContainer;c=this.endOffset;d.type!=CKEDITOR.NODE_ELEMENT&&(c?c>=d.getLength()&&this.setEndAfter(d):this.setEndBefore(d));},optimizeBookmark:function(){var d=this.startContainer,c=this.endContainer;d.is&&(d.is("span")&&d.data("cke-bookmark"))&&this.setStartAt(d,CKEDITOR.POSITION_BEFORE_START);c&&(c.is&&c.is("span")&&c.data("cke-bookmark"))&&this.setEndAt(c,CKEDITOR.POSITION_AFTER_END);},trim:function(h,g){var v=this.startContainer,u=this.startOffset,k=this.collapsed;if((!h||k)&&v&&v.type==CKEDITOR.NODE_TEXT){if(u){if(u>=v.getLength()){u=v.getIndex()+1;v=v.getParent();}else{var j=v.split(u),u=v.getIndex()+1,v=v.getParent();if(this.startContainer.equals(this.endContainer)){this.setEnd(j,this.endOffset-this.startOffset);}else{if(v.equals(this.endContainer)){this.endOffset=this.endOffset+1;}}}}else{u=v.getIndex();v=v.getParent();}this.setStart(v,u);if(k){this.collapse(true);return;}}v=this.endContainer;u=this.endOffset;if(!g&&!k&&v&&v.type==CKEDITOR.NODE_TEXT){if(u){u>=v.getLength()||v.split(u);u=v.getIndex()+1;}else{u=v.getIndex();}v=v.getParent();this.setEnd(v,u);}},enlarge:function(ad,ac){function ab(b){return b&&b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable")?null:b;}var aa=RegExp(/[^\s\ufeff]/);switch(ad){case CKEDITOR.ENLARGE_INLINE:var Z=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed){break;}var Y=this.getCommonAncestor(),V=this.root,W,X,Q,S,P,N=false,R,U;R=this.startContainer;var M=this.startOffset;if(R.type==CKEDITOR.NODE_TEXT){if(M){R=!CKEDITOR.tools.trim(R.substring(0,M)).length&&R;N=!!R;}if(R&&!(S=R.getPrevious())){Q=R.getParent();}}else{M&&(S=R.getChild(M-1)||R.getLast());S||(Q=R);}for(Q=ab(Q);Q||S;){if(Q&&!S){!P&&Q.equals(Y)&&(P=true);if(Z?Q.isBlockBoundary():!V.contains(Q)){break;}if(!N||Q.getComputedStyle("display")!="inline"){N=false;P?W=Q:this.setStartBefore(Q);}S=Q.getPrevious();}for(;S;){R=false;if(S.type==CKEDITOR.NODE_COMMENT){S=S.getPrevious();}else{if(S.type==CKEDITOR.NODE_TEXT){U=S.getText();aa.test(U)&&(S=null);R=/[\s\ufeff]$/.test(U);}else{if((S.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||ac&&S.is("br"))&&!S.data("cke-bookmark")){if(N&&CKEDITOR.dtd.$removeEmpty[S.getName()]){U=S.getText(); +if(aa.test(U)){S=null;}else{for(var M=S.$.getElementsByTagName("*"),T=0,J;J=M[T++];){if(!CKEDITOR.dtd.$removeEmpty[J.nodeName.toLowerCase()]){S=null;break;}}}S&&(R=!!U.length);}else{S=null;}}}R&&(N?P?W=Q:Q&&this.setStartBefore(Q):N=true);if(S){R=S.getPrevious();if(!Q&&!R){Q=S;S=null;break;}S=R;}else{Q=null;}}}Q&&(Q=ab(Q.getParent()));}R=this.endContainer;M=this.endOffset;Q=S=null;P=N=false;var w=function(f,d){var h=new CKEDITOR.dom.range(V);h.setStart(f,d);h.setEndAt(V,CKEDITOR.POSITION_BEFORE_END);var h=new CKEDITOR.dom.walker(h),g;for(h.guard=function(b){return !(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary());};g=h.next();){if(g.type!=CKEDITOR.NODE_TEXT){return false;}U=g!=f?g.getText():g.substring(d);if(aa.test(U)){return false;}}return true;};if(R.type==CKEDITOR.NODE_TEXT){if(CKEDITOR.tools.trim(R.substring(M)).length){N=true;}else{N=!R.getLength();if(M==R.getLength()){if(!(S=R.getNext())){Q=R.getParent();}}else{w(R,M)&&(Q=R.getParent());}}}else{(S=R.getChild(M))||(Q=R);}for(;Q||S;){if(Q&&!S){!P&&Q.equals(Y)&&(P=true);if(Z?Q.isBlockBoundary():!V.contains(Q)){break;}if(!N||Q.getComputedStyle("display")!="inline"){N=false;P?X=Q:Q&&this.setEndAfter(Q);}S=Q.getNext();}for(;S;){R=false;if(S.type==CKEDITOR.NODE_TEXT){U=S.getText();w(S,0)||(S=null);R=/^[\s\ufeff]/.test(U);}else{if(S.type==CKEDITOR.NODE_ELEMENT){if((S.$.offsetWidth>0||ac&&S.is("br"))&&!S.data("cke-bookmark")){if(N&&CKEDITOR.dtd.$removeEmpty[S.getName()]){U=S.getText();if(aa.test(U)){S=null;}else{M=S.$.getElementsByTagName("*");for(T=0;J=M[T++];){if(!CKEDITOR.dtd.$removeEmpty[J.nodeName.toLowerCase()]){S=null;break;}}}S&&(R=!!U.length);}else{S=null;}}}else{R=1;}}R&&N&&(P?X=Q:this.setEndAfter(Q));if(S){R=S.getNext();if(!Q&&!R){Q=S;S=null;break;}S=R;}else{Q=null;}}Q&&(Q=ab(Q.getParent()));}if(W&&X){Y=W.contains(X)?X:W;this.setStartBefore(Y);this.setEndAfter(Y);}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:Q=new CKEDITOR.dom.range(this.root);V=this.root;Q.setStartAt(V,CKEDITOR.POSITION_AFTER_START);Q.setEnd(this.startContainer,this.startOffset);Q=new CKEDITOR.dom.walker(Q);var A,H,D=CKEDITOR.dom.walker.blockBoundary(ad==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),u=null,O=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){if(u){if(u.equals(d)){u=null;return;}}else{u=d;}}else{if(u){return;}}var c=D(d);c||(A=d);return c;},Z=function(d){var c=O(d);!c&&(d.is&&d.is("br"))&&(H=d);return c;};Q.guard=O;Q=Q.lastBackward();A=A||V;this.setStartAt(A,!A.is("br")&&(!Q&&this.checkStartOfBlock()||Q&&A.contains(Q))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(ad==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){Q=this.clone();Q=new CKEDITOR.dom.walker(Q);var y=CKEDITOR.dom.walker.whitespaces(),L=CKEDITOR.dom.walker.bookmark();Q.evaluator=function(b){return !y(b)&&!L(b);};if((Q=Q.previous())&&Q.type==CKEDITOR.NODE_ELEMENT&&Q.is("br")){break;}}Q=this.clone();Q.collapse();Q.setEndAt(V,CKEDITOR.POSITION_BEFORE_END);Q=new CKEDITOR.dom.walker(Q);Q.guard=ad==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?Z:O;A=u=H=null;Q=Q.lastForward();A=A||V;this.setEndAt(A,!Q&&this.checkEndOfBlock()||Q&&A.contains(Q)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);H&&this.setEndAfter(H);}},shrink:function(D,C,B){if(!this.collapsed){var D=D||CKEDITOR.SHRINK_TEXT,A=this.clone(),z=this.startContainer,y=this.endContainer,v=this.startOffset,w=this.endOffset,x=1,k=1;if(z&&z.type==CKEDITOR.NODE_TEXT){if(v){if(v>=z.getLength()){A.setStartAfter(z);}else{A.setStartBefore(z);x=0;}}else{A.setStartBefore(z);}}if(y&&y.type==CKEDITOR.NODE_TEXT){if(w){if(w>=y.getLength()){A.setEndAfter(y);}else{A.setEndAfter(y);k=0;}}else{A.setEndBefore(y);}}var A=new CKEDITOR.dom.walker(A),u=CKEDITOR.dom.walker.bookmark();A.evaluator=function(a){return a.type==(D==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT);};var j;A.guard=function(a,c){if(u(a)){return true;}if(D==CKEDITOR.SHRINK_ELEMENT&&a.type==CKEDITOR.NODE_TEXT||c&&a.equals(j)||B===false&&a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary()||a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")){return false;}!c&&a.type==CKEDITOR.NODE_ELEMENT&&(j=a);return true;};if(x){(z=A[D==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(z,C?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);}if(k){A.reset();(A=A[D==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(A,C?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END);}return !(!x&&!k);}},insertNode:function(e){this.optimizeBookmark();this.trim(false,true);var d=this.startContainer,f=d.getChild(this.startOffset);f?e.insertBefore(f):d.append(e);e.getParent()&&e.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(e);},moveToPosition:function(d,c){this.setStartAt(d,c);this.collapse(true);},moveToRange:function(b){this.setStart(b.startContainer,b.startOffset);this.setEnd(b.endContainer,b.endOffset);},selectNodeContents:function(b){this.setStart(b,0); +this.setEnd(b,b.type==CKEDITOR.NODE_TEXT?b.getLength():b.getChildCount());},setStart:function(d,c){if(d.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[d.getName()]){c=d.getIndex();d=d.getParent();}this._setStartContainer(d);this.startOffset=c;if(!this.endContainer){this._setEndContainer(d);this.endOffset=c;}r(this);},setEnd:function(d,c){if(d.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[d.getName()]){c=d.getIndex()+1;d=d.getParent();}this._setEndContainer(d);this.endOffset=c;if(!this.startContainer){this._setStartContainer(d);this.startOffset=c;}r(this);},setStartAfter:function(b){this.setStart(b.getParent(),b.getIndex()+1);},setStartBefore:function(b){this.setStart(b.getParent(),b.getIndex());},setEndAfter:function(b){this.setEnd(b.getParent(),b.getIndex()+1);},setEndBefore:function(b){this.setEnd(b.getParent(),b.getIndex());},setStartAt:function(d,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(d,0);break;case CKEDITOR.POSITION_BEFORE_END:d.type==CKEDITOR.NODE_TEXT?this.setStart(d,d.getLength()):this.setStart(d,d.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(d);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(d);}r(this);},setEndAt:function(d,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(d,0);break;case CKEDITOR.POSITION_BEFORE_END:d.type==CKEDITOR.NODE_TEXT?this.setEnd(d,d.getLength()):this.setEnd(d,d.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(d);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(d);}r(this);},fixBlock:function(f,e){var h=this.createBookmark(),g=this.document.createElement(e);this.collapse(f);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(g);g.trim();g.appendBogus();this.insertNode(g);this.moveToBookmark(h);return g;},splitBlock:function(h){var g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),v=new CKEDITOR.dom.elementPath(this.endContainer,this.root),u=g.block,k=v.block,j=null;if(!g.blockLimit.equals(v.blockLimit)){return null;}if(h!="br"){if(!u){u=this.fixBlock(true,h);k=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block;}k||(k=this.fixBlock(false,h));}h=u&&this.checkStartOfBlock();g=k&&this.checkEndOfBlock();this.deleteContents();if(u&&u.equals(k)){if(g){j=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(k,CKEDITOR.POSITION_AFTER_END);k=null;}else{if(h){j=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(u,CKEDITOR.POSITION_BEFORE_START);u=null;}else{k=this.splitElement(u);u.is("ul","ol")||u.appendBogus();}}}return{previousBlock:u,nextBlock:k,wasStartOfBlock:h,wasEndOfBlock:g,elementPath:j};},splitElement:function(e){if(!this.collapsed){return null;}this.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);var d=this.extractContents(),f=e.clone(false);d.appendTo(f);f.insertAfter(e);this.moveToPosition(e,CKEDITOR.POSITION_AFTER_END);return f;},removeEmptyBlocksAtEnd:function(){function e(a){return function(b){return d(b)||(f(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.isEmptyInlineRemoveable())||a.is("table")&&b.is("caption")?false:true;};}var d=CKEDITOR.dom.walker.whitespaces(),f=CKEDITOR.dom.walker.bookmark(false);return function(a){for(var k=this.createBookmark(),j=this[a?"endPath":"startPath"](),h=j.block||j.blockLimit,g;h&&!h.equals(j.root)&&!h.getFirst(e(h));){g=h.getParent();this[a?"setEndAt":"setStartAt"](h,CKEDITOR.POSITION_AFTER_END);h.remove(1);h=g;}this.moveToBookmark(k);};}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root);},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root);},checkBoundaryOfElement:function(f,e){var h=e==CKEDITOR.START,g=this.clone();g.collapse(h);g[h?"setStartAt":"setEndAt"](f,h?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);g=new CKEDITOR.dom.walker(g);g.evaluator=o(h);return g[h?"checkBackward":"checkForward"]();},checkStartOfBlock:function(){var a=this.startContainer,d=this.startOffset;if(CKEDITOR.env.ie&&d&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.ltrim(a.substring(0,d));i.test(a)&&this.trim(0,1);}this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);d=this.clone();d.collapse(true);d.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(d);a.evaluator=t();return a.checkBackward();},checkEndOfBlock:function(){var a=this.endContainer,d=this.endOffset;if(CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.rtrim(a.substring(d));i.test(a)&&this.trim(1,0);}this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);d=this.clone();d.collapse(false);d.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(d);a.evaluator=t();return a.checkForward();},getPreviousNode:function(f,e,h){var g=this.clone();g.collapse(1);g.setStartAt(h||this.root,CKEDITOR.POSITION_AFTER_START);h=new CKEDITOR.dom.walker(g);h.evaluator=f;h.guard=e;return h.previous();},getNextNode:function(f,e,h){var g=this.clone(); +g.collapse();g.setEndAt(h||this.root,CKEDITOR.POSITION_BEFORE_END);h=new CKEDITOR.dom.walker(g);h.evaluator=f;h.guard=e;return h.next();},checkReadOnly:function(){function b(a,d){for(;a;){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.getAttribute("contentEditable")=="false"&&!a.data("cke-editable")){return 0;}if(a.is("html")||a.getAttribute("contentEditable")=="true"&&(a.contains(d)||a.equals(d))){break;}}a=a.getParent();}return 1;}return function(){var a=this.startContainer,d=this.endContainer;return !(b(a,d)&&b(d,a));};}(),moveToElementEditablePosition:function(h,g){if(h.type==CKEDITOR.NODE_ELEMENT&&!h.isEditable(false)){this.moveToPosition(h,g?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true;}for(var v=0;h;){if(h.type==CKEDITOR.NODE_TEXT){g&&this.endContainer&&this.checkEndOfBlock()&&i.test(h.getText())?this.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(h,g?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);v=1;break;}if(h.type==CKEDITOR.NODE_ELEMENT){if(h.isEditable()){this.moveToPosition(h,g?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);v=1;}else{if(g&&h.is("br")&&this.endContainer&&this.checkEndOfBlock()){this.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START);}else{if(h.getAttribute("contenteditable")=="false"&&h.is(CKEDITOR.dtd.$block)){this.setStartBefore(h);this.setEndAfter(h);return true;}}}}var u=h,k=v,j=void 0;u.type==CKEDITOR.NODE_ELEMENT&&u.isEditable(false)&&(j=u[g?"getLast":"getFirst"](n));!k&&!j&&(j=u[g?"getPrevious":"getNext"](n));h=j;}return !!v;},moveToClosestEditablePosition:function(h,g){var v=new CKEDITOR.dom.range(this.root),u=0,k,j=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];v.moveToPosition(h,j[g?0:1]);if(h.is(CKEDITOR.dtd.$block)){if(k=v[g?"getNextEditableNode":"getPreviousEditableNode"]()){u=1;if(k.type==CKEDITOR.NODE_ELEMENT&&k.is(CKEDITOR.dtd.$block)&&k.getAttribute("contenteditable")=="false"){v.setStartAt(k,CKEDITOR.POSITION_BEFORE_START);v.setEndAt(k,CKEDITOR.POSITION_AFTER_END);}else{v.moveToPosition(k,j[g?1:0]);}}}else{u=1;}u&&this.moveToRange(v);return !!u;},moveToElementEditStart:function(b){return this.moveToElementEditablePosition(b);},moveToElementEditEnd:function(b){return this.moveToElementEditablePosition(b,true);},getEnclosedNode:function(){var f=this.clone();f.optimize();if(f.startContainer.type!=CKEDITOR.NODE_ELEMENT||f.endContainer.type!=CKEDITOR.NODE_ELEMENT){return null;}var f=new CKEDITOR.dom.walker(f),e=CKEDITOR.dom.walker.bookmark(false,true),h=CKEDITOR.dom.walker.whitespaces(true);f.evaluator=function(b){return h(b)&&e(b);};var g=f.next();f.reset();return g&&g.equals(f.previous())?g:null;},getTouchedStartNode:function(){var b=this.startContainer;return this.collapsed||b.type!=CKEDITOR.NODE_ELEMENT?b:b.getChild(this.startOffset)||b;},getTouchedEndNode:function(){var b=this.endContainer;return this.collapsed||b.type!=CKEDITOR.NODE_ELEMENT?b:b.getChild(this.endOffset-1)||b;},getNextEditableNode:s(),getPreviousEditableNode:s(1),scrollIntoView:function(){var g=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),f,k,j,h=this.clone();h.optimize();if(j=h.startContainer.type==CKEDITOR.NODE_TEXT){k=h.startContainer.getText();f=h.startContainer.split(h.startOffset);g.insertAfter(h.startContainer);}else{h.insertNode(g);}g.scrollIntoView();if(j){h.startContainer.setText(k);f.remove();}g.remove();},_setStartContainer:function(b){this.startContainer=b;},_setEndContainer:function(b){this.endContainer=b;}};})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict";(function(){function r(b){if(!(arguments.length<1)){this.range=b;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={});}}function m(d){var c=[];d.forEach(function(b){if(b.getAttribute("contenteditable")=="true"){c.push(b);return false;}},CKEDITOR.NODE_ELEMENT,true);return c;}function q(b,s,k,j){b:{j==null&&(j=m(k));for(var f;f=j.shift();){if(f.getDtd().p){j={element:f,remaining:j};break b;}}j=null;}if(!j){return 0;}if((f=CKEDITOR.filter.instances[j.element.data("cke-filter")])&&!f.check(s)){return q(b,s,k,j.remaining);}s=new CKEDITOR.dom.range(j.element);s.selectNodeContents(j.element);s=s.createIterator();s.enlargeBr=b.enlargeBr;s.enforceRealBlocks=b.enforceRealBlocks;s.activeFilter=s.filter=f;b._.nestedEditable={element:j.element,container:k,remaining:j.remaining,iterator:s};return 1;}function p(e,d,f){if(!d){return false;}e=e.clone();e.collapse(!f);return e.checkBoundaryOfElement(d,f?CKEDITOR.START:CKEDITOR.END);}var n=/^[\r\n\t ]+$/,o=CKEDITOR.dom.walker.bookmark(false,true),l=CKEDITOR.dom.walker.whitespaces(true),g=function(b){return o(b)&&l(b);},i={dd:1,dt:1,li:1};r.prototype={getNextParagraph:function(y){var x,v,D,z,b,y=y||"p"; +if(this._.nestedEditable){if(x=this._.nestedEditable.iterator.getNextParagraph(y)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return x;}this.activeFilter=this.filter;if(q(this,y,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(y);}this._.nestedEditable=null;}if(!this.range.root.getDtd()[y]){return null;}if(!this._.started){var C=this.range.clone();v=C.startPath();var k=C.endPath(),e=!C.collapsed&&p(C,v.block),B=!C.collapsed&&p(C,k.block,1);C.shrink(CKEDITOR.SHRINK_ELEMENT,true);e&&C.setStartAt(v.block,CKEDITOR.POSITION_BEFORE_END);B&&C.setEndAt(k.block,CKEDITOR.POSITION_AFTER_START);v=C.endContainer.hasAscendant("pre",true)||C.startContainer.hasAscendant("pre",true);C.enlarge(this.forceBrBreak&&!v||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!C.collapsed){v=new CKEDITOR.dom.walker(C.clone());k=CKEDITOR.dom.walker.bookmark(true,true);v.evaluator=k;this._.nextNode=v.next();v=new CKEDITOR.dom.walker(C.clone());v.evaluator=k;v=v.previous();this._.lastNode=v.getNextSourceNode(true,null,C.root);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){k=this.range.clone();k.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(k.checkEndOfBlock()){k=new CKEDITOR.dom.elementPath(k.endContainer,k.root);this._.lastNode=(k.block||k.blockLimit).getNextSourceNode(true);}}if(!this._.lastNode||!C.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=C.document.createText("");this._.lastNode.insertAfter(v);}C=null;}this._.started=1;v=C;}k=this._.nextNode;C=this._.lastNode;for(this._.nextNode=null;k;){var e=0,B=k.hasAscendant("pre"),d=k.type!=CKEDITOR.NODE_ELEMENT,j=0;if(d){k.type==CKEDITOR.NODE_TEXT&&n.test(k.getText())&&(d=0);}else{var c=k.getName();if(CKEDITOR.dtd.$block[c]&&k.getAttribute("contenteditable")=="false"){x=k;q(this,y,x);break;}else{if(k.isBlockBoundary(this.forceBrBreak&&!B&&{br:1})){if(c=="br"){d=1;}else{if(!v&&!k.getChildCount()&&c!="hr"){x=k;D=k.equals(C);break;}}if(v){v.setEndAt(k,CKEDITOR.POSITION_BEFORE_START);if(c!="br"){this._.nextNode=k;}}e=1;}else{if(k.getFirst()){if(!v){v=this.range.clone();v.setStartAt(k,CKEDITOR.POSITION_BEFORE_START);}k=k.getFirst();continue;}d=1;}}}if(d&&!v){v=this.range.clone();v.setStartAt(k,CKEDITOR.POSITION_BEFORE_START);}D=(!e||d)&&k.equals(C);if(v&&!e){for(;!k.getNext(g)&&!D;){c=k.getParent();if(c.isBlockBoundary(this.forceBrBreak&&!B&&{br:1})){e=1;d=0;D||c.equals(C);v.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);break;}k=c;d=1;D=k.equals(C);j=1;}}d&&v.setEndAt(k,CKEDITOR.POSITION_AFTER_END);k=this._getNextSourceNode(k,j,C);if((D=!k)||e&&v){break;}}if(!x){if(!v){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null;}x=new CKEDITOR.dom.elementPath(v.startContainer,v.root);k=x.blockLimit;e={div:1,th:1,td:1};x=x.block;if(!x&&k&&!this.enforceRealBlocks&&e[k.getName()]&&v.checkStartOfBlock()&&v.checkEndOfBlock()&&!k.equals(v.root)){x=k;}else{if(!x||this.enforceRealBlocks&&x.is(i)){x=this.range.document.createElement(y);v.extractContents().appendTo(x);x.trim();v.insertNode(x);z=b=true;}else{if(x.getName()!="li"){if(!v.checkStartOfBlock()||!v.checkEndOfBlock()){x=x.clone(false);v.extractContents().appendTo(x);x.trim();b=v.splitBlock();z=!b.wasStartOfBlock;b=!b.wasEndOfBlock;v.insertNode(x);}}else{if(!D){this._.nextNode=x.equals(C)?null:this._getNextSourceNode(v.getBoundaryNodes().endNode,1,C);}}}}}if(z){(z=x.getPrevious())&&z.type==CKEDITOR.NODE_ELEMENT&&(z.getName()=="br"?z.remove():z.getLast()&&z.getLast().$.nodeName.toLowerCase()=="br"&&z.getLast().remove());}if(b){(z=x.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&z.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||z.getPrevious(o)||z.getNext(o))&&z.remove();}if(!this._.nextNode){this._.nextNode=D||x.equals(C)||!C?null:this._getNextSourceNode(x,1,C);}return x;},_getNextSourceNode:function(h,d,s){function k(b){return !(b.equals(s)||b.equals(j));}for(var j=this.range.root,h=h.getNextSourceNode(d,null,k);!o(h);){h=h.getNextSourceNode(d,null,k);}return h;}};CKEDITOR.dom.range.prototype.createIterator=function(){return new r(this);};})();CKEDITOR.command=function(d,e){this.uiItems=[];this.exec=function(a){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed()){return false;}this.editorFocus&&d.focus();return this.fire("exec")===false?true:e.exec.call(this,d,a)!==false;};this.refresh=function(g,f){if(!this.readOnly&&g.readOnly){return true;}if(this.context&&!f.isContextFor(this.context)){this.disable();return true;}if(!this.checkAllowed(true)){this.disable();return true;}this.startDisabled||this.enable();this.modes&&!this.modes[g.mode]&&this.disable();return this.fire("refresh",{editor:g,path:f})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false;};var c;this.checkAllowed=function(a){return !a&&typeof c=="boolean"?c:c=d.activeFilter.checkFeature(this); +};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this);};CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState);},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED);},setState:function(b){if(this.state==b||b!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed()){return false;}this.previousState=this.state;this.state=b;this.fire("state");return true;},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF);}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:10000,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};(function(){function aw(P,L,K,I,G){var F,u,P=[];for(F in L){u=L[F];u=typeof u=="boolean"?{}:typeof u=="function"?{match:u}:J(u);if(F.charAt(0)!="$"){u.elements=F;}if(K){u.featureName=K.toLowerCase();}var A=u;A.elements=ao(A.elements,/\s+/)||null;A.propertiesOnly=A.propertiesOnly||A.elements===true;var z=/\s*,\s*/,s=void 0;for(s in W){A[s]=ao(A[s],z)||null;var h=A,y=S[s],j=ao(A[S[s]],z),t=A[s],k=[],B=true,w=void 0;j?B=false:j={};for(w in t){if(w.charAt(0)=="!"){w=w.slice(1);k.push(w);j[w]=true;B=false;}}for(;w=k.pop();){t[w]=t["!"+w];delete t["!"+w];}h[y]=(B?false:j)||null;}A.match=A.match||null;I.push(u);P.push(u);}for(var L=G.elements,G=G.generic,m,K=0,I=P.length;K<I;++K){F=J(P[K]);u=F.classes===true||F.styles===true||F.attributes===true;A=F;s=y=z=void 0;for(z in W){A[z]=T(A[z]);}h=true;for(s in S){z=S[s];y=A[z];j=[];t=void 0;for(t in y){t.indexOf("*")>-1?j.push(RegExp("^"+t.replace(/\*/g,".*")+"$")):j.push(t);}y=j;if(y.length){A[z]=y;h=false;}}A.nothingRequired=h;A.noProperties=!(A.attributes||A.classes||A.styles);if(F.elements===true||F.elements===null){G[u?"unshift":"push"](F);}else{A=F.elements;delete F.elements;for(m in A){if(L[m]){L[m][u?"unshift":"push"](F);}else{L[m]=[F];}}}}}function aq(b,m,l,k){if(!b.match||b.match(m)){if(k||al(b,m)){if(!b.propertiesOnly){l.valid=true;}if(!l.allAttributes){l.allAttributes=av(b.attributes,m.attributes,l.validAttributes);}if(!l.allStyles){l.allStyles=av(b.styles,m.styles,l.validStyles);}if(!l.allClasses){b=b.classes;m=m.classes;k=l.validClasses;if(b){if(b===true){b=true;}else{for(var h=0,j=m.length,g;h<j;++h){g=m[h];k[g]||(k[g]=b(g));}b=false;}}else{b=false;}l.allClasses=b;}}}}function av(f,e,h){if(!f){return false;}if(f===true){return true;}for(var g in e){h[g]||(h[g]=f(g));}return false;}function au(g,e,k){if(!g.match||g.match(e)){if(g.noProperties){return false;}k.hadInvalidAttribute=ar(g.attributes,e.attributes)||k.hadInvalidAttribute;k.hadInvalidStyle=ar(g.styles,e.styles)||k.hadInvalidStyle;g=g.classes;e=e.classes;if(g){for(var j=false,h=g===true,i=e.length;i--;){if(h||g(e[i])){e.splice(i,1);j=true;}}g=j;}else{g=false;}k.hadInvalidClass=g||k.hadInvalidClass;}}function ar(g,f){if(!g){return false;}var j=false,i=g===true,h;for(h in f){if(i||g(h)){delete f[h];j=true;}}return j;}function at(e,d,f){if(e.disabled||e.customConfig&&!f||!d){return false;}e._.cachedChecks={};return true;}function ao(g,f){if(!g){return false;}if(g===true){return g;}if(typeof g=="string"){g=M(g);return g=="*"?true:CKEDITOR.tools.convertArrayToObject(g.split(f));}if(CKEDITOR.tools.isArray(g)){return g.length?CKEDITOR.tools.convertArrayToObject(g):false;}var j={},i=0,h;for(h in g){j[h]=g[h];i++;}return i?j:false;}function al(h,g){if(h.nothingRequired){return true;}var l,k,j,i;if(j=h.requiredClasses){i=g.classes;for(l=0;l<j.length;++l){k=j[l];if(typeof k=="string"){if(CKEDITOR.tools.indexOf(i,k)==-1){return false;}}else{if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(i,k)){return false;}}}}return am(g.styles,h.requiredStyles)&&am(g.attributes,h.requiredAttributes);}function am(f,e){if(!e){return true;}for(var h=0,g;h<e.length;++h){g=e[h];if(typeof g=="string"){if(!(g in f)){return false;}}else{if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(f,g)){return false;}}}return true;}function ap(d){if(!d){return{};}for(var d=d.split(/\s*,\s*/).sort(),c={};d.length;){c[d.shift()]=aa;}return c;}function aj(h){for(var g,m,l,k,i={},j=1,h=M(h);g=h.match(Y);){if(m=g[2]){l=X(m,"styles");k=X(m,"attrs");m=X(m,"classes");}else{l=k=m=null;}i["$"+j++]={elements:g[1],classes:m,styles:l,attributes:k};h=h.slice(g[0].length);}return i;}function X(e,d){var f=e.match(Q[d]);return f?M(f[1]):null;}function ad(e){var d=e.styleBackup=e.attributes.style,f=e.classBackup=e.attributes["class"]; +if(!e.styles){e.styles=CKEDITOR.tools.parseCssText(d||"",1);}if(!e.classes){e.classes=f?f.split(/\s+/):[];}}function Z(az,ay,P,L){var F=0,p;if(L.toHtml){ay.name=ay.name.replace(V,"$1");}if(L.doCallbacks&&az.elementCallbacks){az:for(var f=az.elementCallbacks,I=0,y=f.length,i;I<y;++I){if(i=f[I](ay)){p=i;break az;}}if(p){return p;}}if(L.doTransform){if(p=az._.transformations[ay.name]){ad(ay);for(f=0;f<p.length;++f){ag(az,ay,p[f]);}ac(ay);}}if(L.doFilter){az:{f=ay.name;I=az._;az=I.allowedRules.elements[f];p=I.allowedRules.generic;f=I.disallowedRules.elements[f];I=I.disallowedRules.generic;y=L.skipRequired;i={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var t,c;if(!az&&!p){az=null;}else{ad(ay);if(f){t=0;for(c=f.length;t<c;++t){if(au(f[t],ay,i)===false){az=null;break az;}}}if(I){t=0;for(c=I.length;t<c;++t){au(I[t],ay,i);}}if(az){t=0;for(c=az.length;t<c;++t){aq(az[t],ay,i,y);}}if(p){t=0;for(c=p.length;t<c;++t){aq(p[t],ay,i,y);}}az=i;}}if(!az){P.push(ay);return O;}if(!az.valid){P.push(ay);return O;}c=az.validAttributes;var k=az.validStyles;p=az.validClasses;var f=ay.attributes,u=ay.styles,I=ay.classes,y=ay.classBackup,w=ay.styleBackup,K,s,m=[];i=[];var G=/^data-cke-/;t=false;delete f.style;delete f["class"];delete ay.classBackup;delete ay.styleBackup;if(!az.allAttributes){for(K in f){if(!c[K]){if(G.test(K)){if(K!=(s=K.replace(/^data-cke-saved-/,""))&&!c[s]){delete f[K];t=true;}}else{delete f[K];t=true;}}}}if(!az.allStyles||az.hadInvalidStyle){for(K in u){az.allStyles||k[K]?m.push(K+":"+u[K]):t=true;}if(m.length){f.style=m.sort().join("; ");}}else{if(w){f.style=w;}}if(!az.allClasses||az.hadInvalidClass){for(K=0;K<I.length;++K){(az.allClasses||p[I[K]])&&i.push(I[K]);}i.length&&(f["class"]=i.sort().join(" "));y&&i.length<y.split(/\s+/).length&&(t=true);}else{y&&(f["class"]=y);}t&&(F=O);if(!L.skipFinalValidation&&!an(ay)){P.push(ay);return O;}}if(L.toHtml){ay.name=ay.name.replace(U,"cke:$1");}return F;}function af(e){var d=[],f;for(f in e){f.indexOf("*")>-1&&d.push(f.replace(/\*/g,".*"));}return d.length?RegExp("^(?:"+d.join("|")+")$"):null;}function ac(e){var d=e.attributes,f;delete d.style;delete d["class"];if(f=CKEDITOR.tools.writeCssText(e.styles,true)){d.style=f;}e.classes.length&&(d["class"]=e.classes.sort().join(" "));}function an(b){switch(b.name){case"a":if(!b.children.length&&!b.attributes.name){return false;}break;case"img":if(!b.attributes.src){return false;}}return true;}function T(d){if(!d){return false;}if(d===true){return true;}var c=af(d);return function(a){return a in d||c&&a.match(c);};}function ab(){return new CKEDITOR.htmlParser.element("br");}function ah(b){return b.type==CKEDITOR.NODE_ELEMENT&&(b.name=="br"||H.$block[b.name]);}function ak(t,s,q){var o=t.name;if(H.$empty[o]||!t.children.length){if(o=="hr"&&s=="br"){t.replaceWith(ab());}else{t.parent&&q.push({check:"it",el:t.parent});t.remove();}}else{if(H.$block[o]||o=="tr"){if(s=="br"){if(t.previous&&!ah(t.previous)){s=ab();s.insertBefore(t);}if(t.next&&!ah(t.next)){s=ab();s.insertAfter(t);}t.replaceWithChildren();}else{var o=t.children,n;s:{n=H[s];for(var m=0,h=o.length,k;m<h;++m){k=o[m];if(k.type==CKEDITOR.NODE_ELEMENT&&!n[k.name]){n=false;break s;}}n=true;}if(n){t.name=s;t.attributes={};q.push({check:"parent-down",el:t});}else{n=t.parent;for(var m=n.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n.name=="body",j,g,h=o.length;h>0;){k=o[--h];if(m&&(k.type==CKEDITOR.NODE_TEXT||k.type==CKEDITOR.NODE_ELEMENT&&H.$inline[k.name])){if(!j){j=new CKEDITOR.htmlParser.element(s);j.insertAfter(t);q.push({check:"parent-down",el:j});}j.add(k,0);}else{j=null;g=H[n.name]||H.span;k.insertAfter(t);n.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(k.type==CKEDITOR.NODE_ELEMENT&&!g[k.name])&&q.push({check:"el-up",el:k});}}t.remove();}}}else{if(o=="style"){t.remove();}else{t.parent&&q.push({check:"it",el:t.parent});t.replaceWithChildren();}}}}function ag(g,f,j){var i,h;for(i=0;i<j.length;++i){h=j[i];if((!h.check||g.check(h.check,false))&&(!h.left||h.left(f))){h.right(f,ax);break;}}}function ae(r,q){var o=q.getDefinition(),n=o.attributes,m=o.styles,k,g,j,h;if(r.name!=o.element){return false;}for(k in n){if(k=="class"){o=n[k].split(/\s+/);for(j=r.classes.join("|");h=o.pop();){if(j.indexOf(h)==-1){return false;}}}else{if(r.attributes[k]!=n[k]){return false;}}}for(g in m){if(r.styles[g]!=m[g]){return false;}}return true;}function ai(f,e){var h,g;if(typeof f=="string"){h=f;}else{if(f instanceof CKEDITOR.style){g=f;}else{h=f[0];g=f[1];}}return[{element:h,left:g,right:function(b,d){d.transform(b,e);}}];}function D(b){return function(a){return ae(a,b);};}function R(b){return function(a,d){d[b](a);};}var H=CKEDITOR.dtd,O=1,J=CKEDITOR.tools.copy,M=CKEDITOR.tools.trim,aa="cke-test",N=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(d){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null; +this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(d instanceof CKEDITOR.editor){d=this.editor=d;this.customConfig=true;var c=d.config.allowedContent;if(c===true){this.disabled=true;}else{if(!c){this.customConfig=false;}this.allow(c,"config",1);this.allow(d.config.extraAllowedContent,"extra",1);this.allow(N[d.enterMode]+" "+N[d.shiftEnterMode],"default",1);this.disallow(d.config.disallowedContent);}}else{this.customConfig=false;this.allow(d,"default",1);}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(a,i,h){if(!at(this,a,h)){return false;}var d,g;if(typeof a=="string"){a=aj(a);}else{if(a instanceof CKEDITOR.style){if(a.toAllowedContentRules){return this.allow(a.toAllowedContentRules(this.editor),i,h);}d=a.getDefinition();a={};h=d.attributes;a[d.element]=d={styles:d.styles,requiredStyles:d.styles&&CKEDITOR.tools.objectKeys(d.styles)};if(h){h=J(h);d.classes=h["class"]?h["class"].split(/\s+/):null;d.requiredClasses=d.classes;delete h["class"];d.attributes=h;d.requiredAttributes=h&&CKEDITOR.tools.objectKeys(h);}}else{if(CKEDITOR.tools.isArray(a)){for(d=0;d<a.length;++d){g=this.allow(a[d],i,h);}return g;}}}aw(this,a,i,this.allowedContent,this._.allowedRules);return true;},applyTo:function(w,u,t,s){if(this.disabled){return false;}var o=this,m=[],j=this.editor&&this.editor.config.protectedSource,g,v=false,l={doFilter:!t,doTransform:true,doCallbacks:true,toHtml:u};w.forEach(function(e){if(e.type==CKEDITOR.NODE_ELEMENT){if(e.attributes["data-cke-filter"]=="off"){return false;}if(!u||!(e.name=="span"&&~CKEDITOR.tools.objectKeys(e.attributes).join("|").indexOf("data-cke-"))){g=Z(o,e,m,l);if(g&O){v=true;}else{if(g&2){return false;}}}}else{if(e.type==CKEDITOR.NODE_COMMENT&&e.value.match(/^\{cke_protected\}(?!\{C\})/)){var q;e:{var h=decodeURIComponent(e.value.replace(/^\{cke_protected\}/,""));q=[];var f,b,p;if(j){for(b=0;b<j.length;++b){if((p=h.match(j[b]))&&p[0].length==h.length){q=true;break e;}}}h=CKEDITOR.htmlParser.fragment.fromHtml(h);h.children.length==1&&(f=h.children[0]).type==CKEDITOR.NODE_ELEMENT&&Z(o,f,q,l);q=!q.length;}q||m.push(e);}}},null,true);m.length&&(v=true);for(var k,w=[],s=N[s||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)],i;t=m.pop();){t.type==CKEDITOR.NODE_ELEMENT?ak(t,s,w):t.remove();}for(;k=w.pop();){t=k.el;if(t.parent){i=H[t.parent.name]||H.span;switch(k.check){case"it":H.$removeEmpty[t.name]&&!t.children.length?ak(t,s,w):an(t)||ak(t,s,w);break;case"el-up":t.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!i[t.name]&&ak(t,s,w);break;case"parent-down":t.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!i[t.name]&&ak(t.parent,s,w);}}}return v;},checkFeature:function(b){if(this.disabled||!b){return true;}b.toFeature&&(b=b.toFeature(this.editor));return !b.requiredContent||this.check(b.requiredContent);},disable:function(){this.disabled=true;},disallow:function(a){if(!at(this,a,true)){return false;}typeof a=="string"&&(a=aj(a));aw(this,a,null,this.disallowedContent,this._.disallowedRules);return true;},addContentForms:function(g){if(!this.disabled&&g){var f,j,i=[],h;for(f=0;f<g.length&&!h;++f){j=g[f];if((typeof j=="string"||j instanceof CKEDITOR.style)&&this.check(j)){h=j;}}if(h){for(f=0;f<g.length;++f){i.push(ai(g[f],h));}this.addTransformations(i);}}},addElementCallback:function(b){if(!this.elementCallbacks){this.elementCallbacks=[];}this.elementCallbacks.push(b);},addFeature:function(b){if(this.disabled||!b){return true;}b.toFeature&&(b=b.toFeature(this.editor));this.allow(b.allowedContent,b.name);this.addTransformations(b.contentTransformations);this.addContentForms(b.contentForms);return b.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(b.requiredContent):true;},addTransformations:function(u){var s,q;if(!this.disabled&&u){var o=this._.transformations,n;for(n=0;n<u.length;++n){s=u[n];var m=void 0,h=void 0,k=void 0,j=void 0,g=void 0,t=void 0;q=[];for(h=0;h<s.length;++h){k=s[h];if(typeof k=="string"){k=k.split(/\s*:\s*/);j=k[0];g=null;t=k[1];}else{j=k.check;g=k.left;t=k.right;}if(!m){m=k;m=m.element?m.element:j?j.match(/^([a-z0-9]+)/i)[0]:m.left.getDefinition().element;}g instanceof CKEDITOR.style&&(g=D(g));q.push({check:j==m?null:j,left:g,right:typeof t=="string"?R(t):t});}s=m;o[s]||(o[s]=[]);o[s].push(q);}}},check:function(q,p,o){if(this.disabled){return true;}if(CKEDITOR.tools.isArray(q)){for(var n=q.length;n--;){if(this.check(q[n],p,o)){return true;}}return false;}var m,k;if(typeof q=="string"){k=q+"<"+(p===false?"0":"1")+(o?"1":"0")+">";if(k in this._.cachedChecks){return this._.cachedChecks[k];}n=aj(q).$1;m=n.styles;var j=n.classes;n.name=n.elements;n.classes=j=j?j.split(/\s*,\s*/):[];n.styles=ap(m);n.attributes=ap(n.attributes);n.children=[];j.length&&(n.attributes["class"]=j.join(" "));if(m){n.attributes.style=CKEDITOR.tools.writeCssText(n.styles);}m=n;}else{n=q.getDefinition();m=n.styles; +j=n.attributes||{};if(m){m=J(m);j.style=CKEDITOR.tools.writeCssText(m,true);}else{m={};}m={name:n.element,attributes:j,classes:j["class"]?j["class"].split(/\s+/):[],styles:m,children:[]};}var j=CKEDITOR.tools.clone(m),h=[],g;if(p!==false&&(g=this._.transformations[m.name])){for(n=0;n<g.length;++n){ag(this,m,g[n]);}ac(m);}Z(this,j,h,{doFilter:true,doTransform:p!==false,skipRequired:!o,skipFinalValidation:!o});p=h.length>0?false:CKEDITOR.tools.objectCompare(m.attributes,j.attributes,true)?true:false;typeof q=="string"&&(this._.cachedChecks[k]=p);return p;},getAllowedEnterMode:function(){var d=["p","div","br"],c={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(h,g){var b=d.slice(),a;if(this.check(N[h])){return h;}for(g||(b=b.reverse());a=b.pop();){if(this.check(a)){return c[a];}}return CKEDITOR.ENTER_BR;};}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;delete this.disallowedContent;}};var W={styles:1,attributes:1,classes:1},S={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},Y=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,Q={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},V=/^cke:(object|embed|param)$/,U=/^(object|embed|param)$/,ax=CKEDITOR.filter.transformationsTools={sizeToStyle:function(b){this.lengthToStyle(b,"width");this.lengthToStyle(b,"height");},sizeToAttribute:function(b){this.lengthToAttribute(b,"width");this.lengthToAttribute(b,"height");},lengthToStyle:function(f,e,h){h=h||e;if(!(h in f.styles)){var g=f.attributes[e];if(g){/^\d+$/.test(g)&&(g=g+"px");f.styles[h]=g;}}delete f.attributes[e];},lengthToAttribute:function(g,f,j){j=j||f;if(!(j in g.attributes)){var i=g.styles[f],h=i&&i.match(/^(\d+)(?:\.\d*)?px$/);h?g.attributes[j]=h[1]:i==aa&&(g.attributes[j]=aa);}delete g.styles[f];},alignmentToStyle:function(d){if(!("float" in d.styles)){var c=d.attributes.align;if(c=="left"||c=="right"){d.styles["float"]=c;}}delete d.attributes.align;},alignmentToAttribute:function(d){if(!("align" in d.attributes)){var c=d.styles["float"];if(c=="left"||c=="right"){d.attributes.align=c;}}delete d.styles["float"];},matchesStyle:ae,transform:function(r,q){if(typeof q=="string"){r.name=q;}else{var o=q.getDefinition(),n=o.styles,m=o.attributes,k,j,g,h;r.name=o.element;for(k in m){if(k=="class"){o=r.classes.join("|");for(g=m[k].split(/\s+/);h=g.pop();){o.indexOf(h)==-1&&r.classes.push(h);}}else{r.attributes[k]=m[k];}}for(j in n){r.styles[j]=n[j];}}}};})();(function(){CKEDITOR.focusManager=function(b){if(b.focusManager){return b.focusManager;}this.hasFocus=false;this.currentActive=null;this._={editor:b};return this;};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(b){this._.timer&&clearTimeout(this._.timer);if(b){this.currentActive=b;}if(!this.hasFocus&&!this._.locked){(b=CKEDITOR.currentInstance)&&b.focusManager.blur(1);this.hasFocus=true;(b=this._.editor.container)&&b.addClass("cke_focus");this._.editor.fire("focus");}},lock:function(){this._.locked=1;},unlock:function(){delete this._.locked;},blur:function(d){function e(){if(this.hasFocus){this.hasFocus=false;var b=this._.editor.container;b&&b.removeClass("cke_focus");this._.editor.fire("blur");}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var c=CKEDITOR.focusManager._.blurDelay;d||!c?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;e.call(this);},c,this);}},add:function(g,h){var d=g.getCustomData("focusmanager");if(!d||d!=this){d&&d.remove(g);var d="focus",j="blur";if(h){if(CKEDITOR.env.ie){d="focusin";j="focusout";}else{CKEDITOR.event.useCapture=1;}}var i={blur:function(){g.equals(this.currentActive)&&this.blur();},focus:function(){this.focus(g);}};g.on(d,i.focus,this);g.on(j,i.blur,this);if(h){CKEDITOR.event.useCapture=0;}g.setCustomData("focusmanager",this);g.setCustomData("focusmanager_handlers",i);}},remove:function(b){b.removeCustomData("focusmanager");var c=b.removeCustomData("focusmanager_handlers");b.removeListener("blur",c.blur);b.removeListener("focus",c.focus);}};})();CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler){return b.keystrokeHandler;}this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this;};(function(){var d,e=function(a){var a=a.data,h=a.getKeystroke(),i=this.keystrokes[h],g=this._.editor;d=g.fire("key",{keyCode:h,domEvent:a})===false;if(!d){i&&(d=g.execCommand(i,{from:"keystrokeHandler"})!==false);d||(d=!!this.blockedKeystrokes[h]);}d&&a.preventDefault(true);return !d;},c=function(a){if(d){d=false;a.data.preventDefault(true);}};CKEDITOR.keystrokeHandler.prototype={attach:function(b){b.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac){b.on("keypress",c,this);}}};})();(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(e,g,d){if(!e||!CKEDITOR.lang.languages[e]){e=this.detect(g,e); +}var h=this,g=function(){h[e].dir=h.rtl[e]?"rtl":"ltr";d(e,h[e]);};this[e]?g():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+e+".js"),g,this);},detect:function(g,h){var d=this.languages,h=h||navigator.userLanguage||navigator.language||g,j=h.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),i=j[1],j=j[2];d[i+"-"+j]?i=i+"-"+j:d[i]||(i=null);CKEDITOR.lang.detect=i?function(){return i;}:function(b){return b;};return i||g;}};})();CKEDITOR.scriptLoader=function(){var b={},c={};return{load:function(v,t,p,r){var n=typeof v=="string";n&&(v=[v]);p||(p=CKEDITOR);var i=v.length,l=[],o=[],f=function(d){t&&(n?t.call(p,d):t.call(p,l,o));};if(i===0){f(true);}else{var u=function(e,d){(d?l:o).push(e);if(--i<=0){r&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");f(d);}},z=function(g,k){b[g]=1;var j=c[g];delete c[g];for(var h=0;h<j.length;h++){j[h](g,k);}},x=function(g){if(b[g]){u(g,true);}else{var j=c[g]||(c[g]=[]);j.push(u);if(!(j.length>1)){var h=new CKEDITOR.dom.element("script");h.setAttributes({type:"text/javascript",src:g});if(t){if(CKEDITOR.env.ie&&CKEDITOR.env.version<11){h.$.onreadystatechange=function(){if(h.$.readyState=="loaded"||h.$.readyState=="complete"){h.$.onreadystatechange=null;z(g,true);}};}else{h.$.onload=function(){setTimeout(function(){z(g,true);},0);};h.$.onerror=function(){z(g,false);};}}h.appendTo(CKEDITOR.document.getHead());}}};r&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var a=0;a<i;a++){x(v[a]);}}},queue:function(){function d(){var a;(a=e[0])&&this.load(a.scriptUrl,a.callback,CKEDITOR,0);}var e=[];return function(g,h){var a=this;e.push({scriptUrl:g,callback:function(){h&&h.apply(this,arguments);e.shift();d.call(a);}});e.length==1&&d.call(this);};}()};}();CKEDITOR.resourceManager=function(b,c){this.basePath=b;this.fileName=c;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}};};CKEDITOR.resourceManager.prototype={add:function(d,e){if(this.registered[d]){throw'[CKEDITOR.resourceManager.add] The resource name "'+d+'" is already registered.';}var c=this.registered[d]=e||{};c.name=d;c.path=this.getPath(d);CKEDITOR.fire(d+CKEDITOR.tools.capitalize(this.fileName)+"Ready",c);return this.get(d);},get:function(b){return this.registered[b]||null;},getPath:function(b){var c=this.externals[b];return CKEDITOR.getUrl(c&&c.dir||this.basePath+b+"/");},getFilePath:function(b){var c=this.externals[b];return CKEDITOR.getUrl(this.getPath(b)+(c?c.file:this.fileName+".js"));},addExternal:function(g,h,d){for(var g=g.split(","),j=0;j<g.length;j++){var i=g[j];d||(h=h.replace(/[^\/]+$/,function(b){d=b;return"";}));this.externals[i]={dir:h,file:d||this.fileName+".js"};}},load:function(v,q,u){CKEDITOR.tools.isArray(v)||(v=v?[v]:[]);for(var t=this.loaded,r=this.registered,s=[],o={},l={},n=0;n<v.length;n++){var p=v[n];if(p){if(!t[p]&&!r[p]){var i=this.getFilePath(p);s.push(i);i in o||(o[i]=[]);o[i].push(p);}else{l[p]=this.get(p);}}}CKEDITOR.scriptLoader.load(s,function(b,k){if(k.length){throw'[CKEDITOR.resourceManager.load] Resource name "'+o[k[0]].join(",")+'" was not found at "'+k[0]+'".';}for(var j=0;j<b.length;j++){for(var h=o[b[j]],f=0;f<h.length;f++){var c=h[f];l[c]=this.get(c);t[c]=1;}}q.call(u,l);},this);}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var c={};return function(a,j,g){var i={},f=function(d){b.call(this,d,function(n){CKEDITOR.tools.extend(i,n);var h=[],e;for(e in n){var o=n[e],p=o&&o.requires;if(!c[e]){if(o.icons){for(var l=o.icons.split(","),r=l.length;r--;){CKEDITOR.skin.addIcon(l[r],o.path+"icons/"+(CKEDITOR.env.hidpi&&o.hidpi?"hidpi/":"")+l[r]+".png");}}c[e]=1;}if(p){p.split&&(p=p.split(","));for(o=0;o<p.length;o++){i[p[o]]||h.push(p[o]);}}}if(h.length){f.call(this,h);}else{for(e in i){o=i[e];if(o.onLoad&&!o.onLoad._called){o.onLoad()===false&&delete i[e];o.onLoad._called=1;}}j&&j.call(g||window,i);}},this);};f.call(this,a);};});CKEDITOR.plugins.setLang=function(e,g,d){var h=this.get(e),e=h.langEntries||(h.langEntries={}),h=h.lang||(h.lang=[]);h.split&&(h=h.split(","));CKEDITOR.tools.indexOf(h,g)==-1&&h.push(g);e[g]=d;};CKEDITOR.ui=function(b){if(b.ui){return b.ui;}this.items={};this.instances={};this.editor=b;this._={handlers:{}};return this;};CKEDITOR.ui.prototype={add:function(e,g,d){d.name=e.toLowerCase();var h=this.items[e]={type:g,command:d.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(h,d);},get:function(b){return this.instances[b];},create:function(e){var g=this.items[e],d=g&&this._.handlers[g.type],h=g&&g.command&&this.editor.getCommand(g.command),d=d&&d.create.apply(this,g.args);this.instances[e]=d;h&&h.uiItems.push(d);if(d&&!d.type){d.type=g.type;}return d;},addHandler:function(b,c){this._.handlers[b]=c;},space:function(b){return CKEDITOR.document.getById(this.spaceId(b));},spaceId:function(b){return this.editor.id+"_"+b;}};CKEDITOR.event.implementOn(CKEDITOR.ui);(function(){function z(b,f,e){CKEDITOR.event.call(this); +b=b&&CKEDITOR.tools.clone(b);if(f!==void 0){if(f instanceof CKEDITOR.dom.element){if(!e){throw Error("One of the element modes must be specified.");}}else{throw Error("Expect element of type CKEDITOR.dom.element.");}if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&e==CKEDITOR.ELEMENT_MODE_INLINE){throw Error("Inline element mode is not supported on IE quirks.");}if(!(e==CKEDITOR.ELEMENT_MODE_INLINE?f.is(CKEDITOR.dtd.$editable)||f.is("textarea"):e==CKEDITOR.ELEMENT_MODE_REPLACE?!f.is(CKEDITOR.dtd.$nonBodyContent):1)){throw Error('The specified element mode is not supported on element: "'+f.getName()+'".');}this.element=f;this.elementMode=e;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(f.getId()||f.getNameAtt());}else{this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;}this._={};this.commands={};this.templates={};this.name=this.name||q();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",x);this.on("selectionChange",function(c){r(this,c.data.path);});this.on("activeFilterChange",function(){r(this,this.elementPath(),true);});this.on("mode",x);this.on("instanceReady",function(){this.config.startupFocus&&this.focus();});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){o(this,b);},0,this);}function q(){do{var b="editor"+ ++B;}while(CKEDITOR.instances[b]);return b;}function x(){var d=this.commands,c;for(c in d){u(this,d[c]);}}function u(d,c){c[c.startDisabled?"disable":d.readOnly&&!c.readOnly?"disable":c.modes[d.mode]?"enable":"disable"]();}function r(h,g,s){if(g){var m,k,j=h.commands;for(k in j){m=j[k];(s||m.contextSensitive)&&m.refresh(h,g);}}}function t(e){var d=e.config.customConfig;if(!d){return false;}var d=CKEDITOR.getUrl(d),f=A[d]||(A[d]={});if(f.fn){f.fn.call(e,e.config);(CKEDITOR.getUrl(e.config.customConfig)==d||!t(e))&&e.fireOnce("customConfigLoaded");}else{CKEDITOR.scriptLoader.queue(d,function(){f.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};t(e);});}return true;}function o(d,c){d.on("customConfigLoaded",function(){if(c){if(c.on){for(var a in c.on){d.on(a,c.on[a]);}}CKEDITOR.tools.extend(d.config,c,true);delete d.config.on;}a=d.config;d.readOnly=!(!a.readOnly&&!(d.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?d.element.is("textarea")?d.element.hasAttribute("disabled"):d.element.isReadOnly():d.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&d.element.hasAttribute("disabled")));d.blockless=d.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(d.element.is("textarea")||CKEDITOR.dtd[d.element.getName()].p):false;d.tabIndex=a.tabIndex||d.element&&d.element.getAttribute("tabindex")||0;d.activeEnterMode=d.enterMode=d.blockless?CKEDITOR.ENTER_BR:a.enterMode;d.activeShiftEnterMode=d.shiftEnterMode=d.blockless?CKEDITOR.ENTER_BR:a.shiftEnterMode;if(a.skin){CKEDITOR.skinName=a.skin;}d.fireOnce("configLoaded");d.dataProcessor=new CKEDITOR.htmlDataProcessor(d);d.filter=d.activeFilter=new CKEDITOR.filter(d);l(d);});if(c&&c.customConfig!=null){d.config.customConfig=c.customConfig;}t(d)||d.fireOnce("customConfigLoaded");}function l(b){CKEDITOR.skin.loadPart("editor",function(){n(b);});}function n(b){CKEDITOR.lang.load(b.config.language,b.config.defaultLanguage,function(a,f){var e=b.config.title;b.langCode=a;b.lang=CKEDITOR.tools.prototypedCopy(f);b.title=typeof e=="string"||e===false?e:[b.lang.editor,b.name].join(", ");if(!b.config.contentsLangDirection){b.config.contentsLangDirection=b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?b.element.getDirection(1):b.lang.dir;}b.fire("langLoaded");p(b);});}function p(b){b.getStylesSet(function(a){b.once("loaded",function(){b.fire("stylesSet",{styles:a});},null,null,1);i(b);});}function i(j){var g=j.config,w=g.plugins,s=g.extraPlugins,m=g.removePlugins;if(s){var k=RegExp("(?:^|,)(?:"+s.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),w=w.replace(k,""),w=w+(","+s);}if(m){var h=RegExp("(?:^|,)(?:"+m.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),w=w.replace(h,"");}CKEDITOR.env.air&&(w=w+",adobeair");CKEDITOR.plugins.load(w.split(","),function(H){var G=[],F=[],E=[];j.plugins=H;for(var y in H){var C=H[y],D=C.lang,b=null,a=C.requires,I;CKEDITOR.tools.isArray(a)&&(a=a.join(","));if(a&&(I=a.match(h))){for(;a=I.pop();){CKEDITOR.tools.setTimeout(function(d,c){throw Error('Plugin "'+d.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+c+'" plugin.');},0,null,[a,y]);}}if(D&&!j.lang[y]){D.split&&(D=D.split(","));if(CKEDITOR.tools.indexOf(D,j.langCode)>=0){b=j.langCode;}else{b=j.langCode.replace(/-.*/,"");b=b!=j.langCode&&CKEDITOR.tools.indexOf(D,b)>=0?b:CKEDITOR.tools.indexOf(D,"en")>=0?"en":D[0];}if(!C.langEntries||!C.langEntries[b]){E.push(CKEDITOR.getUrl(C.path+"lang/"+b+".js"));}else{j.lang[y]=C.langEntries[b];b=null;}}F.push(b);G.push(C);}CKEDITOR.scriptLoader.load(E,function(){for(var K=["beforeInit","init","afterInit"],e=0; +e<K.length;e++){for(var J=0;J<G.length;J++){var d=G[J];e===0&&(F[J]&&d.lang&&d.langEntries)&&(j.lang[d.name]=d.langEntries[F[J]]);if(d[K[e]]){d[K[e]](j);}}}j.fireOnce("pluginsLoaded");g.keystrokes&&j.setKeystroke(j.config.keystrokes);for(J=0;J<j.config.blockedKeystrokes.length;J++){j.keystrokeHandler.blockedKeystrokes[j.config.blockedKeystrokes[J]]=1;}j.status="loaded";j.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,j);});});}function v(){var d=this.element;if(d&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var c=this.getData();this.config.htmlEncodeOutput&&(c=CKEDITOR.tools.htmlEncode(c));d.is("textarea")?d.setValue(c):d.setHtml(c);return true;}return false;}z.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=z;var B=0,A={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(e,c){c.name=e.toLowerCase();var f=new CKEDITOR.command(this,c);this.mode&&u(this,f);return this.commands[e]=f;},_attachToForm:function(){function f(a){e.updateElement();e._.required&&(!h.getValue()&&e.fire("required")===false)&&a.data.preventDefault();}var e=this,h=e.element,g=new CKEDITOR.dom.element(h.$.form);if(h.is("textarea")&&g){g.on("submit",f);if(g.$.submit&&g.$.submit.call&&g.$.submit.apply){g.$.submit=CKEDITOR.tools.override(g.$.submit,function(a){return function(){f();a.apply?a.apply(this):a();};});}e.on("destroy",function(){g.removeListener("submit",f);});}},destroy:function(b){this.fire("beforeDestroy");!b&&v.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this);},elementPath:function(b){if(!b){b=this.getSelection();if(!b){return null;}b=b.getStartElement();}return b?new CKEDITOR.dom.elementPath(b,this.editable()):null;},createRange:function(){var b=this.editable();return b?new CKEDITOR.dom.range(b):null;},execCommand:function(f,e){var h=this.getCommand(f),g={name:f,commandData:e,command:h};if(h&&h.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",g)!==false){g.returnValue=h.exec(g.commandData);if(!h.async&&this.fire("afterCommandExec",g)!==false){return g.returnValue;}}return false;},getCommand:function(b){return this.commands[b];},getData:function(d){!d&&this.fire("beforeGetData");var c=this._.data;if(typeof c!="string"){c=(c=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?c.is("textarea")?c.getValue():c.getHtml():"";}c={dataValue:c};!d&&this.fire("getData",c);return c.dataValue;},getSnapshot:function(){var d=this.fire("getSnapshot");if(typeof d!="string"){var c=this.element;c&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(d=c.is("textarea")?c.getValue():c.getHtml());}return d;},loadSnapshot:function(b){this.fire("loadSnapshot",b);},setData:function(g,f,k){var j=true,h=f;if(f&&typeof f=="object"){k=f.internal;h=f.callback;j=!f.noSnapshot;}!k&&j&&this.fire("saveSnapshot");if(h||!k){this.once("dataReady",function(b){!k&&j&&this.fire("saveSnapshot");h&&h.call(b.editor);});}g={dataValue:g};!k&&this.fire("setData",g);this._.data=g.dataValue;!k&&this.fire("afterSetData",g);},setReadOnly:function(b){b=b==null||b;if(this.readOnly!=b){this.readOnly=b;this.keystrokeHandler.blockedKeystrokes[8]=+b;this.editable().setReadOnly(b);this.fire("readOnly");}},insertHtml:function(d,c){this.fire("insertHtml",{dataValue:d,mode:c});},insertText:function(b){this.fire("insertText",b);},insertElement:function(b){this.fire("insertElement",b);},focus:function(){this.fire("beforeFocus");},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot();},resetDirty:function(){this._.previousValue=this.getSnapshot();},updateElement:function(){return v.call(this);},setKeystroke:function(){for(var g=this.keystrokeHandler.keystrokes,f=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],k,j,h=f.length;h--;){k=f[h];j=0;if(CKEDITOR.tools.isArray(k)){j=k[1];k=k[0];}j?g[k]=j:delete g[k];}},addFeature:function(b){return this.filter.addFeature(b);},setActiveFilter:function(b){if(!b){b=this.filter;}if(this.activeFilter!==b){this.activeFilter=b;this.fire("activeFilterChange");b===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(b.getAllowedEnterMode(this.enterMode),b.getAllowedEnterMode(this.shiftEnterMode,true));}},setActiveEnterMode:function(d,c){d=d?this.blockless?CKEDITOR.ENTER_BR:d:this.enterMode;c=c?this.blockless?CKEDITOR.ENTER_BR:c:this.shiftEnterMode;if(this.activeEnterMode!=d||this.activeShiftEnterMode!=c){this.activeEnterMode=d;this.activeShiftEnterMode=c;this.fire("activeEnterModeChange");}}});})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g};};(function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,c={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1}; +CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(r){for(var q,o,p=0,l;q=this._.htmlPartsRegex.exec(r);){o=q.index;if(o>p){p=r.substring(p,o);if(l){l.push(p);}else{this.onText(p);}}p=this._.htmlPartsRegex.lastIndex;if(o=q[1]){o=o.toLowerCase();if(l&&CKEDITOR.dtd.$cdata[o]){this.onCDATA(l.join(""));l=null;}if(!l){this.onTagClose(o);continue;}}if(l){l.push(q[0]);}else{if(o=q[3]){o=o.toLowerCase();if(!/="/.test(o)){var f={},i,n=q[4];q=!!q[5];if(n){for(;i=b.exec(n);){var a=i[1].toLowerCase();i=i[2]||i[3]||i[4]||"";f[a]=!i&&c[a]?a:CKEDITOR.tools.htmlDecodeAttr(i);}}this.onTagOpen(o,f,q);!l&&CKEDITOR.dtd.$cdata[o]&&(l=[]);}}else{if(o=q[2]){this.onComment(o);}}}}if(r.length>p){this.onText(r.substring(p,r.length));}}};})();CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]};},proto:{openTag:function(b){this._.output.push("<",b);},openTagClose:function(b,c){c?this._.output.push(" />"):this._.output.push(">");},attribute:function(b,c){typeof c=="string"&&(c=CKEDITOR.tools.htmlEncodeAttr(c));this._.output.push(" ",b,'="',c,'"');},closeTag:function(b){this._.output.push("</",b,">");},text:function(b){this._.output.push(b);},comment:function(b){this._.output.push("<!--",b,"-->");},write:function(b){this._.output.push(b);},reset:function(){this._.output=[];this._.indent=false;},getHtml:function(b){var c=this._.output.join("");b&&this.reset();return c;}}});"use strict";(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var e=this.parent.children,g=CKEDITOR.tools.indexOf(e,this),d=this.previous,h=this.next;d&&(d.next=h);h&&(h.previous=d);e.splice(g,1);this.parent=null;},replaceWith:function(g){var h=this.parent.children,d=CKEDITOR.tools.indexOf(h,this),j=g.previous=this.previous,i=g.next=this.next;j&&(j.next=g);i&&(i.previous=g);h[d]=g;g.parent=this.parent;this.parent=null;},insertAfter:function(e){var g=e.parent.children,d=CKEDITOR.tools.indexOf(g,e),h=e.next;g.splice(d+1,0,this);this.next=e.next;this.previous=e;e.next=this;h&&(h.previous=this);this.parent=e.parent;},insertBefore:function(d){var e=d.parent.children,c=CKEDITOR.tools.indexOf(e,d);e.splice(c,0,this);this.next=d;(this.previous=d.previous)&&(d.previous.next=this);d.previous=this;this.parent=d.parent;},getAscendant:function(d){var e=typeof d=="function"?d:typeof d=="string"?function(a){return a.name==d;}:function(a){return a.name in d;},c=this.parent;for(;c&&c.type==CKEDITOR.NODE_ELEMENT;){if(e(c)){return c;}c=c.parent;}return null;},wrapWith:function(b){this.replaceWith(b);b.add(this);return b;},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this);},getFilterContext:function(b){return b||{};}};})();"use strict";CKEDITOR.htmlParser.comment=function(b){this.value=b;this._={isBlockLike:false};};CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(d,e){var c=this.value;if(!(c=d.onComment(e,c,this))){this.remove();return false;}if(typeof c!="string"){this.replaceWith(c);return false;}this.value=c;return true;},writeHtml:function(b,c){c&&this.filter(c);b.comment(this.value);}});"use strict";(function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:false};};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(b,c){if(!(this.value=b.onText(c,this.value,this))){this.remove();return false;}},writeHtml:function(b,c){c&&this.filter(c);b.text(this.value);}});})();"use strict";(function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b;};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(b){b.write(this.value);}});})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};};(function(){function g(b){return b.attributes["data-cke-survive"]?false:b.name=="a"&&b.attributes.href||CKEDITOR.dtd.$removeEmpty[b.name];}var h=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),d={ol:1,ul:1},j=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),i={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(z,v,n){function p(o){var k;if(r.length>0){for(var u=0;u<r.length;u++){var t=r[u],s=t.name,q=CKEDITOR.dtd[s],m=D.name&&CKEDITOR.dtd[D.name];if((!m||m[s])&&(!o||!q||q[o]||!CKEDITOR.dtd[o])){if(!k){x();k=1;}t=t.clone();t.parent=D;D=t;r.splice(u,1);u--;}else{if(s==D.name){B(D,D.parent,1);u--;}}}}}function x(){for(;c.length;){B(c.shift(),D);}}function e(l){if(l._.isBlockLike&&l.name!="pre"&&l.name!="textarea"){var k=l.children.length,o=l.children[k-1],m; +if(o&&o.type==CKEDITOR.NODE_TEXT){(m=CKEDITOR.tools.rtrim(o.value))?o.value=m:l.children.length=k-1;}}}function B(k,o,m){var o=o||D||E,l=D;if(k.previous===void 0){if(F(o,k)){D=o;a.onTagOpen(n,{});k.returnPoint=o=D;}e(k);(!g(k)||k.children.length)&&o.add(k);k.name=="pre"&&(f=false);k.name=="textarea"&&(b=false);}if(k.returnPoint){D=k.returnPoint;delete k.returnPoint;}else{D=m?o:l;}}function F(l,k){if((l==E||l.name=="body")&&n&&(!l.name||CKEDITOR.dtd[l.name][n])){var o,m;return(o=k.attributes&&(m=k.attributes["data-cke-real-element-type"])?m:k.name)&&o in CKEDITOR.dtd.$inline&&!(o in CKEDITOR.dtd.head)&&!k.isOrphan||k.type==CKEDITOR.NODE_TEXT;}}function C(l,k){return l in CKEDITOR.dtd.$listItem||l in CKEDITOR.dtd.$tableContent?l==k||l=="dt"&&k=="dd"||l=="dd"&&k=="dt":false;}var a=new CKEDITOR.htmlParser,E=v instanceof CKEDITOR.htmlParser.element?v:typeof v=="string"?new CKEDITOR.htmlParser.element(v):new CKEDITOR.htmlParser.fragment,r=[],c=[],D=E,b=E.name=="textarea",f=E.name=="pre";a.onTagOpen=function(q,o,l,k){o=new CKEDITOR.htmlParser.element(q,o);if(o.isUnknown&&l){o.isEmpty=true;}o.isOptionalClose=k;if(g(o)){r.push(o);}else{if(q=="pre"){f=true;}else{if(q=="br"&&f){D.add(new CKEDITOR.htmlParser.text("\n"));return;}q=="textarea"&&(b=true);}if(q=="br"){c.push(o);}else{for(;;){k=(l=D.name)?CKEDITOR.dtd[l]||(D._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):j;if(!o.isUnknown&&!D.isUnknown&&!k[q]){if(D.isOptionalClose){a.onTagClose(l);}else{if(q in d&&l in d){l=D.children;(l=l[l.length-1])&&l.name=="li"||B(l=new CKEDITOR.htmlParser.element("li"),D);!o.returnPoint&&(o.returnPoint=D);D=l;}else{if(q in CKEDITOR.dtd.$listItem&&!C(q,l)){a.onTagOpen(q=="li"?"ul":"dl",{},0,1);}else{if(l in h&&!C(q,l)){!o.returnPoint&&(o.returnPoint=D);D=D.parent;}else{l in CKEDITOR.dtd.$inline&&r.unshift(D);if(D.parent){B(D,D.parent,1);}else{o.isOrphan=1;break;}}}}}}else{break;}}p(q);x();o.parent=D;o.isEmpty?B(o):D=o;}}};a.onTagClose=function(l){for(var k=r.length-1;k>=0;k--){if(l==r[k].name){r.splice(k,1);return;}}for(var s=[],q=[],o=D;o!=E&&o.name!=l;){o._.isBlockLike||q.unshift(o);s.push(o);o=o.returnPoint||o.parent;}if(o!=E){for(k=0;k<s.length;k++){var m=s[k];B(m,m.parent);}D=o;o._.isBlockLike&&x();B(o,o.parent);if(o==D){D=D.parent;}r=r.concat(q);}l=="body"&&(n=false);};a.onText=function(l){if((!D._.hasInlineStarted||c.length)&&!f&&!b){l=CKEDITOR.tools.ltrim(l);if(l.length===0){return;}}var k=D.name,m=k?CKEDITOR.dtd[k]||(D._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):j;if(!b&&!m["#"]&&k in h){a.onTagOpen(i[k]||"");a.onText(l);}else{x();p();!f&&!b&&(l=l.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));l=new CKEDITOR.htmlParser.text(l);if(F(D,l)){this.onTagOpen(n,{},0,1);}D.add(l);}};a.onCDATA=function(k){D.add(new CKEDITOR.htmlParser.cdata(k));};a.onComment=function(k){x();p();D.add(new CKEDITOR.htmlParser.comment(k));};a.parse(z);for(x();D!=E;){B(D,D.parent,1);}e(E);return E;};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(f,e){isNaN(e)&&(e=this.children.length);var k=e>0?this.children[e-1]:null;if(k){if(f._.isBlockLike&&k.type==CKEDITOR.NODE_TEXT){k.value=CKEDITOR.tools.rtrim(k.value);if(k.value.length===0){this.children.pop();this.add(f);return;}}k.next=f;}f.previous=k;f.parent=this;this.children.splice(e,0,f);if(!this._.hasInlineStarted){this._.hasInlineStarted=f.type==CKEDITOR.NODE_TEXT||f.type==CKEDITOR.NODE_ELEMENT&&!f._.isBlockLike;}},filter:function(e,c){c=this.getFilterContext(c);e.onRoot(c,this);this.filterChildren(e,false,c);},filterChildren:function(f,e,k){if(this.childrenFilteredBy!=f.id){k=this.getFilterContext(k);if(e&&!this.parent){f.onRoot(k,this);}this.childrenFilteredBy=f.id;for(e=0;e<this.children.length;e++){this.children[e].filter(f,k)===false&&e--;}}},writeHtml:function(e,c){c&&this.filter(c);this.writeChildrenHtml(e);},writeChildrenHtml:function(k,f,m){var l=this.getFilterContext();if(m&&!this.parent&&f){f.onRoot(l,this);}f&&this.filterChildren(f,false,l);f=0;m=this.children;for(l=m.length;f<l;f++){m[f].writeHtml(k);}},forEach:function(l,k,o){if(!o&&(!k||this.type==k)){var n=l(this);}if(n!==false){for(var o=this.children,m=0;m<o.length;m++){n=o[m];n.type==CKEDITOR.NODE_ELEMENT?n.forEach(l,k):(!k||n.type==k)&&l(n);}}},getFilterContext:function(b){return b||{};}};})();"use strict";(function(){function b(){this.rules=[];}function c(a,l,i,j){var h,g;for(h in l){(g=a[h])||(g=a[h]=new b);g.add(l[h],i,j);}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(a){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new b;this.attributeNameRules=new b;this.elementsRules={};this.attributesRules={};this.textRules=new b;this.commentRules=new b;this.rootRules=new b;a&&this.addRules(a,10);},proto:{addRules:function(d,g){var f;if(typeof g=="number"){f=g;}else{if(g&&"priority" in g){f=g.priority;}}typeof f!="number"&&(f=10);typeof g!="object"&&(g={});d.elementNames&&this.elementNameRules.addMany(d.elementNames,f,g);d.attributeNames&&this.attributeNameRules.addMany(d.attributeNames,f,g); +d.elements&&c(this.elementsRules,d.elements,f,g);d.attributes&&c(this.attributesRules,d.attributes,f,g);d.text&&this.textRules.add(d.text,f,g);d.comment&&this.commentRules.add(d.comment,f,g);d.root&&this.rootRules.add(d.root,f,g);},applyTo:function(d){d.filter(this);},onElementName:function(d,e){return this.elementNameRules.execOnName(d,e);},onAttributeName:function(d,e){return this.attributeNameRules.execOnName(d,e);},onText:function(d,g,f){return this.textRules.exec(d,g,f);},onComment:function(d,g,f){return this.commentRules.exec(d,g,f);},onRoot:function(d,e){return this.rootRules.exec(d,e);},onElement:function(g,k){for(var i=[this.elementsRules["^"],this.elementsRules[k.name],this.elementsRules.$],j,h=0;h<3;h++){if(j=i[h]){j=j.exec(g,k,this);if(j===false){return null;}if(j&&j!=k){return this.onNode(g,j);}if(k.parent&&!k.name){break;}}}return k;},onNode:function(d,g){var f=g.type;return f==CKEDITOR.NODE_ELEMENT?this.onElement(d,g):f==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(d,g.value)):f==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(d,g.value)):null;},onAttribute:function(f,i,g,h){return(g=this.attributesRules[g])?g.exec(f,h,i,this):h;}}});CKEDITOR.htmlParser.filterRulesGroup=b;b.prototype={add:function(d,g,f){this.rules.splice(this.findIndex(g),0,{value:d,priority:g,options:f});},addMany:function(g,m,j){for(var l=[this.findIndex(m),0],i=0,h=g.length;i<h;i++){l.push({value:g[i],priority:m,options:j});}this.rules.splice.apply(this.rules,l);},findIndex:function(d){for(var g=this.rules,f=g.length-1;f>=0&&d<g[f].priority;){f--;}return f+1;},exec:function(t,r){var p=r instanceof CKEDITOR.htmlParser.node||r instanceof CKEDITOR.htmlParser.fragment,q=Array.prototype.slice.call(arguments,1),o=this.rules,i=o.length,l,n,h,s;for(s=0;s<i;s++){if(p){l=r.type;n=r.name;}h=o[s];if(!(t.nonEditable&&!h.options.applyToAll||t.nestedEditable&&h.options.excludeNestedEditable)){h=h.value.apply(null,q);if(h===false||p&&h&&(h.name!=n||h.type!=l)){return h;}h!=null&&(q[0]=r=h);}}return r;},execOnName:function(g,m){for(var j=0,l=this.rules,i=l.length,h;m&&j<i;j++){h=l[j];!(g.nonEditable&&!h.options.applyToAll||g.nestedEditable&&h.options.excludeNestedEditable)&&(m=m.replace(h.value[0],h.value[1]));}return m;}};})();(function(){function ap(k,i){function c(f){return f||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1});}function b(f,g){return function(p){if(p.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var n=[],m=ao(p),a,o;if(m){for(l(m,1)&&n.push(m);m;){if(am(m)&&(a=an(m))&&l(a)){if((o=an(a))&&!am(o)){n.push(a);}else{c(h).insertAfter(a);a.remove();}}m=m.previous;}}for(m=0;m<n.length;m++){n[m].remove();}if(n=!f||(typeof g=="function"?g(p):g)!==false){if(!h&&!CKEDITOR.env.needsBrFiller&&p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){n=false;}else{if(!h&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||p.name in CKEDITOR.dtd.tr||p.name in CKEDITOR.dtd.$listItem)){n=false;}else{n=ao(p);n=!n||p.name=="form"&&n.name=="input";}}}n&&p.add(c(f));}};}function l(g,f){if((!h||CKEDITOR.env.needsBrFiller)&&g.type==CKEDITOR.NODE_ELEMENT&&g.name=="br"&&!g.attributes["data-cke-eol"]){return true;}var m;if(g.type==CKEDITOR.NODE_TEXT&&(m=g.value.match(ah))){if(m.index){(new CKEDITOR.htmlParser.text(g.value.substring(0,m.index))).insertBefore(g);g.value=m[0];}if(!CKEDITOR.env.needsBrFiller&&h&&(!f||g.parent.name in j)){return true;}if(!h){if((m=g.previous)&&m.name=="br"||!m||am(m)){return true;}}}return false;}var e={elements:{}},h=i=="html",j=CKEDITOR.tools.extend({},ae),d;for(d in j){"#" in S[d]||delete j[d];}for(d in j){e.elements[d]=b(h,k.config.fillEmptyBlocks);}e.root=b(h,false);e.elements.br=function(f){return function(a){if(a.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var m=a.attributes;if("data-cke-bogus" in m||"data-cke-eol" in m){delete m["data-cke-bogus"];}else{for(m=a.next;m&&al(m);){m=m.next;}var g=an(a);!m&&am(a.parent)?ai(a.parent,c(f)):am(m)&&(g&&!am(g))&&c(f).insertBefore(m);}}};}(h);return e;}function ak(d,c){return d!=CKEDITOR.ENTER_BR&&c!==false?d==CKEDITOR.ENTER_DIV?"div":"p":false;}function ao(b){for(b=b.children[b.children.length-1];b&&al(b);){b=b.previous;}return b;}function an(b){for(b=b.previous;b&&al(b);){b=b.previous;}return b;}function al(b){return b.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(b.value)||b.type==CKEDITOR.NODE_ELEMENT&&b.attributes["data-cke-bookmark"];}function am(b){return b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.name in ae||b.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT);}function ai(e,d){var f=e.children[e.children.length-1];e.children.push(d);d.parent=e;if(f){f.next=d;d.previous=f;}}function af(b){b=b.attributes;b.contenteditable!="false"&&(b["data-cke-editable"]=b.contenteditable?"true":1);b.contenteditable="false";}function ag(b){b=b.attributes;switch(b["data-cke-editable"]){case"true":b.contenteditable="true";break;case"1":delete b.contenteditable;}}function aj(b){return b.replace(V,function(e,d,f){return"<"+d+f.replace(D,function(g,c){return R.test(c)&&f.indexOf("data-cke-saved-"+c)==-1?" data-cke-saved-"+g+" data-cke-"+CKEDITOR.rnd+"-"+g:g; +})+">";});}function ad(d,c){return d.replace(c,function(f,e,g){f.indexOf("<textarea")===0&&(f=e+N(g).replace(/</g,"<").replace(/>/g,">")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(f)+"</cke:encoded>";});}function J(b){return b.replace(Q,function(d,c){return decodeURIComponent(c);});}function U(b){return b.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(c){return"<!--"+aa+"{C}"+encodeURIComponent(c).replace(/--/g,"%2D%2D")+"-->";});}function N(b){return b.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(d,c){return decodeURIComponent(c);});}function Y(e,d){var f=d._.dataStore;return e.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(g,c){return decodeURIComponent(c);}).replace(/\{cke_protected_(\d+)\}/g,function(g,c){return f&&f[c]||"";});}function T(h,g){for(var n=[],m=g.config.protectedSource,l=g._.dataStore||(g._.dataStore={id:1}),k=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,m=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(m),h=h.replace(/<\!--[\s\S]*?--\>/g,function(b){return"<!--{cke_tempcomment}"+(n.push(b)-1)+"-->";}),j=0;j<m.length;j++){h=h.replace(m[j],function(b){b=b.replace(k,function(e,c,f){return n[f];});return/cke_temp(comment)?/.test(b)?b:"<!--{cke_temp}"+(n.push(b)-1)+"-->";});}h=h.replace(k,function(e,c,f){return"<!--"+aa+(c?"{C}":"")+encodeURIComponent(n[f]).replace(/--/g,"%2D%2D")+"-->";});h=h.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(b){return b.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(d,c){l[l.id]=decodeURIComponent(c);return"{cke_protected_"+l.id+++"}";});});return h=h.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(b,o,i,f){return"<"+o+i+">"+Y(N(f),g)+"</"+o+">";});}CKEDITOR.htmlDataProcessor=function(a){var h,g,f=this;this.editor=a;this.dataFilter=h=new CKEDITOR.htmlParser.filter;this.htmlFilter=g=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;h.addRules(Z);h.addRules(W,{applyToAll:true});h.addRules(ap(a,"data"),{applyToAll:true});g.addRules(ac);g.addRules(x,{applyToAll:true});g.addRules(ap(a,"html"),{applyToAll:true});a.on("toHtml",function(b){var b=b.data,k=b.dataValue,j,k=T(k,a),k=ad(k,M),k=aj(k),k=ad(k,H),k=k.replace(O,"$1cke:$2"),k=k.replace(X,"<cke:$1$2></cke:$1>"),k=k.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),k=k.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");j=b.context||a.editable().getName();var i;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&j=="pre"){j="div";k="<pre>"+k+"</pre>";i=1;}j=a.document.createElement(j);j.setHtml("a"+k);k=j.getHtml().substr(1);k=k.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");i&&(k=k.replace(/^<pre>|<\/pre>$/gi,""));k=k.replace(E,"$1$2");k=J(k);k=N(k);j=b.fixForBody===false?false:ak(b.enterMode,a.config.autoParagraph);k=CKEDITOR.htmlParser.fragment.fromHtml(k,b.context,j);if(j){i=k;if(!i.children.length&&CKEDITOR.dtd[i.name][j]){j=new CKEDITOR.htmlParser.element(j);i.add(j);}}b.dataValue=k;},null,null,5);a.on("toHtml",function(b){b.data.filter.applyTo(b.data.dataValue,true,b.data.dontFilter,b.data.enterMode)&&a.fire("dataFiltered");},null,null,6);a.on("toHtml",function(b){b.data.dataValue.filterChildren(f.dataFilter,true);},null,null,10);a.on("toHtml",function(e){var e=e.data,d=e.dataValue,i=new CKEDITOR.htmlParser.basicWriter;d.writeChildrenHtml(i);d=i.getHtml(true);e.dataValue=U(d);},null,null,15);a.on("toDataFormat",function(b){var d=b.data.dataValue;b.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,""));b.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,b.data.context,ak(b.data.enterMode,a.config.autoParagraph));},null,null,5);a.on("toDataFormat",function(b){b.data.dataValue.filterChildren(f.htmlFilter,true);},null,null,10);a.on("toDataFormat",function(b){b.data.filter.applyTo(b.data.dataValue,false,true);},null,null,11);a.on("toDataFormat",function(b){var i=b.data.dataValue,e=f.writer;e.reset();i.writeChildrenHtml(e);i=e.getHtml(true);i=N(i);i=Y(i,a);b.data.dataValue=i;},null,null,15);};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(j,g,p,o){var n=this.editor,m,k,h;if(g&&typeof g=="object"){m=g.context;p=g.fixForBody;o=g.dontFilter;k=g.filter;h=g.enterMode;}else{m=g;}!m&&m!==null&&(m=n.editable().getName());return n.fire("toHtml",{dataValue:j,context:m,fixForBody:p,dontFilter:o,filter:k||n.filter,enterMode:h||n.enterMode}).dataValue;},toDataFormat:function(g,f){var j,i,h;if(f){j=f.context;i=f.filter;h=f.enterMode;}!j&&j!==null&&(j=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:g,filter:i||this.editor.filter,context:j,enterMode:h||this.editor.enterMode}).dataValue;}};var ah=/(?: |\xa0)$/,aa="{cke_protected}",S=CKEDITOR.dtd,ab=["caption","colgroup","col","thead","tfoot","tbody"],ae=CKEDITOR.tools.extend({},S.$blockLimit,S.$block),Z={elements:{input:af,textarea:af}},W={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},ac={elements:{embed:function(e){var d=e.parent; +if(d&&d.name=="object"){var f=d.attributes.width,d=d.attributes.height;if(f){e.attributes.width=f;}if(d){e.attributes.height=d;}}},a:function(b){if(!b.children.length&&!b.attributes.name&&!b.attributes["data-cke-saved-name"]){return false;}}}},x={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(g){var f=g.attributes;if(f){if(f["data-cke-temp"]){return false;}for(var j=["name","href","src"],i,h=0;h<j.length;h++){i="data-cke-saved-"+j[h];i in f&&delete f[j[h]];}}return g;},table:function(b){b.children.slice(0).sort(function(f,e){var h,g;if(f.type==CKEDITOR.NODE_ELEMENT&&e.type==f.type){h=CKEDITOR.tools.indexOf(ab,f.name);g=CKEDITOR.tools.indexOf(ab,e.name);}if(!(h>-1&&g>-1&&h!=g)){h=f.parent?f.getIndex():-1;g=e.parent?e.getIndex():-1;}return h>g?1:-1;});},param:function(b){b.children=[];b.isEmpty=true;return b;},span:function(b){b.attributes["class"]=="Apple-style-span"&&delete b.name;},html:function(b){delete b.attributes.contenteditable;delete b.attributes["class"];},body:function(b){delete b.attributes.spellcheck;delete b.attributes.contenteditable;},style:function(d){var c=d.children[0];if(c&&c.value){c.value=CKEDITOR.tools.trim(c.value);}if(!d.attributes.type){d.attributes.type="text/css";}},title:function(d){var c=d.children[0];!c&&ai(d,c=new CKEDITOR.htmlParser.text);c.value=d.attributes["data-cke-title"]||"";},input:ag,textarea:ag},attributes:{"class":function(b){return CKEDITOR.tools.ltrim(b.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false;}}};if(CKEDITOR.env.ie){x.attributes.style=function(b){return b.replace(/(^|;)([^\:]+)/g,function(c){return c.toLowerCase();});};}var V=/<(a|area|img|input|source)\b([^>]*)>/gi,D=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,R=/^(href|src|name)$/i,H=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,M=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,Q=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,O=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,X=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;})();"use strict";CKEDITOR.htmlParser.element=function(e,g){this.name=e;this.attributes=g||{};this.children=[];var d=e||"",h=d.match(/^cke:(.*)/);h&&(d=h[1]);d=!(!CKEDITOR.dtd.$nonBodyContent[d]&&!CKEDITOR.dtd.$block[d]&&!CKEDITOR.dtd.$listItem[d]&&!CKEDITOR.dtd.$tableContent[d]&&!(CKEDITOR.dtd.$nonEditable[d]||d=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[e];this.isUnknown=!CKEDITOR.dtd[e];this._={isBlockLike:d,hasInlineStarted:this.isEmpty||!d};};CKEDITOR.htmlParser.cssStyle=function(b){var c={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(d,g,f){g=="font-family"&&(f=f.replace(/["']/g,""));c[g.toLowerCase()]=f;});return{rules:c,populate:function(d){var e=this.toString();if(e){d instanceof CKEDITOR.dom.element?d.setAttribute("style",e):d instanceof CKEDITOR.htmlParser.element?d.attributes.style=e:d.style=e;}},toString:function(){var d=[],e;for(e in c){c[e]&&d.push(e,":",c[e],";");}return d.join("");}};};(function(){function d(b){return function(a){return a.type==CKEDITOR.NODE_ELEMENT&&(typeof b=="string"?a.name==b:a.name in b);};}var e=function(g,f){g=g[0];f=f[0];return g<f?-1:g>f?1:0;},c=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:c.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes);},filter:function(i,h){var p=this,o,l,h=p.getFilterContext(h);if(h.off){return true;}if(!p.parent){i.onRoot(h,p);}for(;;){o=p.name;if(!(l=i.onElementName(h,o))){this.remove();return false;}p.name=l;if(!(p=i.onElement(h,p))){this.remove();return false;}if(p!==this){this.replaceWith(p);return false;}if(p.name==o){break;}if(p.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(p);return false;}if(!p.name){this.replaceWithChildren();return false;}}o=p.attributes;var m,n;for(m in o){n=m;for(l=o[m];;){if(n=i.onAttributeName(h,m)){if(n!=m){delete o[m];m=n;}else{break;}}else{delete o[m];break;}}n&&((l=i.onAttribute(h,p,n,l))===false?delete o[n]:o[n]=l);}p.isEmpty||this.filterChildren(i,false,h);return true;},filterChildren:c.filterChildren,writeHtml:function(i,f){f&&this.filter(f);var p=this.name,n=[],l=this.attributes,m,o;i.openTag(p,l);for(m in l){n.push([m,l[m]]);}i.sortAttributes&&n.sort(e);m=0;for(o=n.length;m<o;m++){l=n[m];i.attribute(l[0],l[1]);}i.openTagClose(p,this.isEmpty);this.writeChildrenHtml(i);this.isEmpty||i.closeTag(p);},writeChildrenHtml:c.writeChildrenHtml,replaceWithChildren:function(){for(var g=this.children,f=g.length;f;){g[--f].insertAfter(this);}this.remove();},forEach:c.forEach,getFirst:function(a){if(!a){return this.children.length?this.children[0]:null;}typeof a!="function"&&(a=d(a));for(var f=0,g=this.children.length;f<g;++f){if(a(this.children[f])){return this.children[f]; +}}return null;},getHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(b);return b.getHtml();},setHtml:function(g){for(var g=this.children=CKEDITOR.htmlParser.fragment.fromHtml(g).children,f=0,h=g.length;f<h;++f){g[f].parent=this;}},getOuterHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(b);return b.getHtml();},split:function(h){for(var g=this.children.splice(h,this.children.length-h),j=this.clone(),i=0;i<g.length;++i){g[i].parent=j;}j.children=g;if(g[0]){g[0].previous=null;}if(h>0){this.children[h-1].next=null;}this.parent.add(j,this.getIndex()+1);return j;},addClass:function(g){if(!this.hasClass(g)){var f=this.attributes["class"]||"";this.attributes["class"]=f+(f?" ":"")+g;}},removeClass:function(g){var f=this.attributes["class"];if(f){(f=CKEDITOR.tools.trim(f.replace(RegExp("(?:\\s+|^)"+g+"(?:\\s+|$)")," ")))?this.attributes["class"]=f:delete this.attributes["class"];}},hasClass:function(g){var f=this.attributes["class"];return !f?false:RegExp("(?:^|\\s)"+g+"(?=\\s|$)").test(f);},getFilterContext:function(g){var f=[];g||(g={off:false,nonEditable:false,nestedEditable:false});!g.off&&this.attributes["data-cke-processor"]=="off"&&f.push("off",true);!g.nonEditable&&this.attributes.contenteditable=="false"?f.push("nonEditable",true):g.nonEditable&&(!g.nestedEditable&&this.attributes.contenteditable=="true")&&f.push("nestedEditable",true);if(f.length){for(var g=CKEDITOR.tools.copy(g),h=0;h<f.length;h=h+2){g[f[h]]=f[h+1];}}return g;}},true);})();(function(){var g={},h=/{([^}]+)}/g,d=/([\\'])/g,j=/\n/g,i=/\r/g;CKEDITOR.template=function(b){if(g[b]){this.output=g[b];}else{var a=b.replace(d,"\\$1").replace(j,"\\n").replace(i,"\\r").replace(h,function(e,c){return"',data['"+c+"']==undefined?'{"+c+"}':data['"+c+"'],'";});this.output=g[b]=Function("data","buffer","return buffer?buffer.push('"+a+"'):['"+a+"'].join('');");}};})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);CKEDITOR.add=function(b){CKEDITOR.instances[b.name]=b;b.on("focus",function(){if(CKEDITOR.currentInstance!=b){CKEDITOR.currentInstance=b;CKEDITOR.fire("currentInstance");}});b.on("blur",function(){if(CKEDITOR.currentInstance==b){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance");}});CKEDITOR.fire("instance",null,b);};CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name];};(function(){var b={};CKEDITOR.addTemplate=function(d,a){var e=b[d];if(e){return e;}e={name:d,source:a};CKEDITOR.fire("template",e);return b[d]=new CKEDITOR.template(e.source);};CKEDITOR.getTemplate=function(a){return b[a];};})();(function(){var b=[];CKEDITOR.addCss=function(a){b.push(a);};CKEDITOR.getCss=function(){return b.join("\n");};})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset");});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;CKEDITOR.TRISTATE_DISABLED=0;(function(){CKEDITOR.inline=function(e,g){if(!CKEDITOR.env.isCompatible){return null;}e=CKEDITOR.dom.element.get(e);if(e.getEditor()){throw'The editor instance "'+e.getEditor().name+'" is already attached to the provided element.';}var d=new CKEDITOR.editor(g,e,CKEDITOR.ELEMENT_MODE_INLINE),h=e.is("textarea")?e:null;if(h){d.setData(h.getValue(),null,true);e=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!d.readOnly+'" class="cke_textarea_inline">'+h.getValue()+"</div>",CKEDITOR.document);e.insertAfter(h);h.hide();h.$.form&&d._attachToForm();}else{d.setData(e.getHtml(),null,true);}d.on("loaded",function(){d.fire("uiReady");d.editable(e);d.container=e;d.setData(d.getData(1));d.resetDirty();d.fire("contentDom");d.mode="wysiwyg";d.fire("mode");d.status="ready";d.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,d);},null,null,10000);d.on("destroy",function(){if(h){d.container.clearCustomData();d.container.remove();h.show();}d.element.clearCustomData();delete d.element;});return d;};CKEDITOR.inlineAll=function(){var h,i,g;for(g in CKEDITOR.dtd.$editable){for(var l=CKEDITOR.document.getElementsByTag(g),j=0,k=l.count();j<k;j++){h=l.getItem(j);if(h.getAttribute("contenteditable")=="true"){i={element:h,config:{}};CKEDITOR.fire("inline",i)!==false&&CKEDITOR.inline(h,i.config);}}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll();});})();CKEDITOR.replaceClass="ckeditor";(function(){function d(b,i,j,g){if(!CKEDITOR.env.isCompatible){return null;}b=CKEDITOR.dom.element.get(b);if(b.getEditor()){throw'The editor instance "'+b.getEditor().name+'" is already attached to the provided element.';}var f=new CKEDITOR.editor(i,b,g);if(g==CKEDITOR.ELEMENT_MODE_REPLACE){b.setStyle("visibility","hidden");f._.required=b.hasAttribute("required");b.removeAttribute("required");}j&&f.setData(j,null,true);f.on("loaded",function(){c(f);g==CKEDITOR.ELEMENT_MODE_REPLACE&&(f.config.autoUpdateElement&&b.$.form)&&f._attachToForm();f.setMode(f.config.startupMode,function(){f.resetDirty();f.status="ready";f.fireOnce("instanceReady"); +CKEDITOR.fire("instanceReady",null,f);});});f.on("destroy",e);return f;}function e(){var g=this.container,f=this.element;if(g){g.clearCustomData();g.remove();}if(f){f.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){f.show();this._.required&&f.setAttribute("required","required");}delete this.element;}}function c(i){var h=i.name,p=i.element,o=i.elementMode,l=i.fire("uiSpace",{space:"top",html:""}).html,m=i.fire("uiSpace",{space:"bottom",html:""}).html,n=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(i.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(i.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'),h=CKEDITOR.dom.element.createFromHtml(n.output({id:i.id,name:h,langDir:i.lang.dir,langCode:i.langCode,voiceLabel:i.title,topHtml:l?'<span id="'+i.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+l+"</span>":"",contentId:i.ui.spaceId("contents"),bottomHtml:m?'<span id="'+i.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+m+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(o==CKEDITOR.ELEMENT_MODE_REPLACE){p.hide();h.insertAfter(p);}else{p.append(h);}i.container=h;l&&i.ui.space("top").unselectable();m&&i.ui.space("bottom").unselectable();p=i.config.width;o=i.config.height;p&&h.setStyle("width",CKEDITOR.tools.cssLength(p));o&&i.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(o));h.disableContextMenu();CKEDITOR.env.webkit&&h.on("focus",function(){i.focus();});i.fireOnce("uiReady");}CKEDITOR.replace=function(a,f){return d(a,f,null,CKEDITOR.ELEMENT_MODE_REPLACE);};CKEDITOR.appendTo=function(a,f,g){return d(a,f,g,CKEDITOR.ELEMENT_MODE_APPENDTO);};CKEDITOR.replaceAll=function(){for(var h=document.getElementsByTagName("textarea"),g=0;g<h.length;g++){var j=null,i=h[g];if(i.name||i.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(i.className)){continue;}}else{if(typeof arguments[0]=="function"){j={};if(arguments[0](i,j)===false){continue;}}}this.replace(i,j);}}};CKEDITOR.editor.prototype.addMode=function(g,f){(this._.modes||(this._.modes={}))[g]=f;};CKEDITOR.editor.prototype.setMode=function(i,h){var p=this,o=this._.modes;if(!(i==p.mode||!o||!o[i])){p.fire("beforeSetMode",i);if(p.mode){var l=p.checkDirty(),o=p._.previousModeData,m,n=0;p.fire("beforeModeUnload");p.editable(0);p._.previousMode=p.mode;p._.previousModeData=m=p.getData(1);if(p.mode=="source"&&o==m){p.fire("lockSnapshot",{forceUpdate:true});n=1;}p.ui.space("contents").setHtml("");p.mode="";}else{p._.previousModeData=p.getData(1);}this._.modes[i](function(){p.mode=i;l!==void 0&&!l&&p.resetDirty();n?p.fire("unlockSnapshot"):i=="wysiwyg"&&p.fire("saveSnapshot");setTimeout(function(){p.fire("mode");h&&h.call(p);},0);});}};CKEDITOR.editor.prototype.resize=function(i,h,p,o){var l=this.container,m=this.ui.space("contents"),n=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,o=o?this.container.getFirst(function(b){return b.type==CKEDITOR.NODE_ELEMENT&&b.hasClass("cke_inner");}):l;o.setSize("width",i,true);n&&(n.style.width="1%");m.setStyle("height",Math.max(h-(p?0:(o.$.offsetHeight||0)-(m.$.clientHeight||0)),0)+"px");n&&(n.style.width="100%");this.fire("resize");};CKEDITOR.editor.prototype.getResizable=function(b){return b?this.ui.space("contents"):this.container;};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass);});})();CKEDITOR.config.startupMode="wysiwyg";(function(){function C(g){var c=g.editor,m=g.data.path,k=m.blockLimit,f=g.data.selection,j=f.getRanges()[0],h;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller){if(f=u(f,m)){f.appendBogus();h=CKEDITOR.env.ie;}}if(p(c,m.block,k)&&j.collapsed&&!j.getCommonAncestor().isReadOnly()){m=j.clone();m.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);k=new CKEDITOR.dom.walker(m);k.guard=function(b){return !z(b)||b.type==CKEDITOR.NODE_COMMENT||b.isReadOnly();};if(!k.checkForward()||m.checkStartOfBlock()&&m.checkEndOfBlock()){c=j.fixBlock(true,c.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller){(c=c.getFirst(z))&&(c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?: |\xa0)$/))&&c.remove();}h=1;g.cancel();}}h&&j.select();}function u(f,c){if(f.isFake){return 0;}var h=c.block||c.blockLimit,g=h&&h.getLast(z);if(h&&h.isBlockBoundary()&&(!g||!(g.type==CKEDITOR.NODE_ELEMENT&&g.isBlockBoundary()))&&!h.is("pre")&&!h.getBogus()){return h;}}function B(d){var c=d.data.getTarget();if(c.is("input")){c=c.getAttribute("type");(c=="submit"||c=="reset")&&d.data.preventDefault(); +}}function z(b){return F(b)&&D(b);}function v(d,c){return function(b){var a=CKEDITOR.dom.element.get(b.data.$.toElement||b.data.$.fromElement||b.data.$.relatedTarget);(!a||!c.equals(a)&&!c.contains(a))&&d.call(this,b);};}function x(g){function c(b){return function(a,d){d&&(a.type==CKEDITOR.NODE_ELEMENT&&a.is(h))&&(m=a);if(!d&&z(a)&&(!b||!l(a))){return false;}};}var m,k=g.getRanges()[0],g=g.root,h={table:1,ul:1,ol:1,dl:1};if(k.startPath().contains(h)){var j=k.clone();j.collapse(1);j.setStartAt(g,CKEDITOR.POSITION_AFTER_START);g=new CKEDITOR.dom.walker(j);g.guard=c();g.checkBackward();if(m){j=k.clone();j.collapse();j.setEndAt(m,CKEDITOR.POSITION_AFTER_END);g=new CKEDITOR.dom.walker(j);g.guard=c(true);m=false;g.checkForward();return m;}}return null;}function p(e,d,f){return e.config.autoParagraph!==false&&e.activeEnterMode!=CKEDITOR.ENTER_BR&&e.editable().equals(f)&&!d||d&&d.getAttribute("contenteditable")=="true";}function n(b){b.editor.focus();b.editor.fire("saveSnapshot");}function o(d){var c=d.editor;c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot");},0);}function r(f,e,h){for(var g=f.getCommonAncestor(e),e=f=h?e:f;(f=f.getParent())&&!g.equals(f)&&f.getChildCount()==1;){e=f;}e.remove();}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(d,c){this.base(c.$||c);this.editor=d;this.status="unloaded";this.hasFocus=false;this.setup();},proto:{focus:function(){var d;if(CKEDITOR.env.webkit&&!this.hasFocus){d=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(d)){d.focus();return;}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]();}catch(c){if(!CKEDITOR.env.ie){throw c;}}if(CKEDITOR.env.safari&&!this.isInline()){d=CKEDITOR.document.getActive();d.equals(this.getWindow().getFrame())||this.getWindow().focus();}},on:function(e,d){var f=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(e)){e=e=="focus"?"focusin":"focusout";d=v(d,this);f[0]=e;f[1]=d;}return CKEDITOR.dom.element.prototype.on.apply(this,f);},attachListener:function(d){!this._.listeners&&(this._.listeners=[]);var c=Array.prototype.slice.call(arguments,1),c=d.on.apply(d,c);this._.listeners.push(c);return c;},clearListeners:function(){var d=this._.listeners;try{for(;d.length;){d.pop().removeListener();}}catch(c){}},restoreAttrs:function(){var e=this._.attrChanges,d,f;for(f in e){if(e.hasOwnProperty(f)){d=e[f];d!==null?this.setAttribute(f,d):this.removeAttribute(f);}}},attachClass:function(d){var c=this.getCustomData("classes");if(!this.hasClass(d)){!c&&(c=[]);c.push(d);this.setCustomData("classes",c);this.addClass(d);}},changeAttr:function(e,d){var f=this.getAttribute(e);if(d!==f){!this._.attrChanges&&(this._.attrChanges={});e in this._.attrChanges||(this._.attrChanges[e]=f);this.setAttribute(e,d);}},insertHtml:function(d,c){n(this);i(this,c||"html",d);},insertText:function(h){n(this);var g=this.editor,s=g.getSelection().getStartElement().hasAscendant("pre",true)?CKEDITOR.ENTER_BR:g.activeEnterMode,g=s==CKEDITOR.ENTER_BR,q=CKEDITOR.tools,h=q.htmlEncode(h.replace(/\r\n/g,"\n")),h=h.replace(/\t/g,"    "),s=s==CKEDITOR.ENTER_P?"p":"div";if(!g){var m=/\n{2}/g;if(m.test(h)){var k="<"+s+">",j="</"+s+">",h=k+h.replace(m,function(){return j+k;})+j;}}h=h.replace(/\n/g,"<br>");g||(h=h.replace(RegExp("<br>(?=</"+s+">)"),function(b){return q.repeat(b,2);}));h=h.replace(/^ | $/g," ");h=h.replace(/(>|\s) /g,function(d,c){return c+" ";}).replace(/ (?=<)/g," ");i(this,"text",h);},insertElement:function(d,c){c?this.insertElementIntoRange(d,c):this.insertElementIntoSelection(d);},insertElementIntoRange:function(h,g){var t=this.editor,q=t.config.enterMode,m=h.getName(),k=CKEDITOR.dtd.$block[m];if(g.checkReadOnly()){return false;}g.deleteContents(1);g.startContainer.type==CKEDITOR.NODE_ELEMENT&&g.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&E(g);var j,s;if(k){for(;(j=g.getCommonAncestor(0,1))&&(s=CKEDITOR.dtd[j.getName()])&&(!s||!s[m]);){if(j.getName() in CKEDITOR.dtd.span){g.splitElement(j);}else{if(g.checkStartOfBlock()&&g.checkEndOfBlock()){g.setStartBefore(j);g.collapse(true);j.remove();}else{g.splitBlock(q==CKEDITOR.ENTER_DIV?"div":"p",t.editable());}}}}g.insertNode(h);return true;},insertElementIntoSelection:function(g){n(this);var c=this.editor,k=c.activeEnterMode,c=c.getSelection(),j=c.getRanges()[0],h=g.getName(),h=CKEDITOR.dtd.$block[h];if(this.insertElementIntoRange(g,j)){j.moveToPosition(g,CKEDITOR.POSITION_AFTER_END);if(h){if((h=g.getNext(function(b){return z(b)&&!l(b);}))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is(CKEDITOR.dtd.$block)){h.getDtd()["#"]?j.moveToElementEditStart(h):j.moveToElementEditEnd(g);}else{if(!h&&k!=CKEDITOR.ENTER_BR){h=j.fixBlock(true,k==CKEDITOR.ENTER_DIV?"div":"p");j.moveToElementEditStart(h);}}}}c.selectRanges([j]);o(this);},setData:function(d,c){c||(d=this.editor.dataProcessor.toHtml(d));this.setHtml(d);this.fixInitialSelection();if(this.status=="unloaded"){this.status="ready"; +}this.editor.fire("dataReady");},getData:function(d){var c=this.getHtml();d||(c=this.editor.dataProcessor.toDataFormat(c));return c;},setReadOnly:function(b){this.setAttribute("contenteditable",!b);},detach:function(){this.removeClass("cke_editable");this.status="detached";var b=this.editor;this._.detach();delete b.document;delete b.window;},isInline:function(){return this.getDocument().equals(CKEDITOR.document);},fixInitialSelection:function(){function e(){var a=f.getDocument().$,h=a.getSelection(),g;if(h.anchorNode&&h.anchorNode==f.$){g=true;}else{if(CKEDITOR.env.webkit){var c=f.getDocument().getActive();c&&(c.equals(f)&&!h.anchorNode)&&(g=true);}}if(g){g=new CKEDITOR.dom.range(f);g.moveToElementEditStart(f);a=a.createRange();a.setStart(g.startContainer.$,g.startOffset);a.collapse(true);h.removeAllRanges();h.addRange(a);}}function d(){var b=f.getDocument().$,g=b.selection,c=f.getDocument().getActive();if(g.type=="None"&&c.equals(f)){g=new CKEDITOR.dom.range(f);b=b.body.createTextRange();g.moveToElementEditStart(f);g=g.startContainer;g.type!=CKEDITOR.NODE_ELEMENT&&(g=g.getParent());b.moveToElementText(g.$);b.collapse(true);b.select();}}var f=this;if(CKEDITOR.env.ie&&(CKEDITOR.env.version<9||CKEDITOR.env.quirks)){if(this.hasFocus){this.focus();d();}}else{if(this.hasFocus){this.focus();e();}else{this.once("focus",function(){e();},null,null,-999);}}},setup:function(){var c=this.editor;this.attachListener(c,"beforeGetData",function(){var a=this.getData();this.is("textarea")||c.config.ignoreEmptyParagraph!==false&&(a=a.replace(A,function(f,e){return e;}));c.setData(a,null,1);},this);this.attachListener(c,"getSnapshot",function(e){e.data=this.getData(1);},this);this.attachListener(c,"afterSetData",function(){this.setData(c.getData(1));},this);this.attachListener(c,"loadSnapshot",function(e){this.setData(e.data,1);},this);this.attachListener(c,"beforeFocus",function(){var a=c.getSelection();(a=a&&a.getNative())&&a.type=="Control"||this.focus();},this);this.attachListener(c,"insertHtml",function(e){this.insertHtml(e.data.dataValue,e.data.mode);},this);this.attachListener(c,"insertElement",function(e){this.insertElement(e.data);},this);this.attachListener(c,"insertText",function(e){this.insertText(e.data);},this);this.setReadOnly(c.readOnly);this.attachClass("cke_editable");this.attachClass(c.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":c.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||c.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+c.config.contentsLangDirection);c.keystrokeHandler.blockedKeystrokes[8]=+c.readOnly;c.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false;},null,null,-1);this.on("focus",function(){this.hasFocus=true;},null,null,-1);c.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;c.once("contentDom",function(){c.focusManager.focus(this);},this);}this.isInline()&&this.changeAttr("tabindex",c.tabIndex);if(!this.is("textarea")){c.document=this.getDocument();c.window=this.getWindow();var j=c.document;this.changeAttr("spellcheck",!c.config.disableNativeSpellChecker);var g=c.config.contentsLangDirection;this.getDirection(1)!=g&&this.changeAttr("dir",g);var d=CKEDITOR.getCss();if(d){g=j.getHead();if(!g.getCustomData("stylesheet")){d=j.appendStyleText(d);d=new CKEDITOR.dom.element(d.ownerNode||d.owningElement);g.setCustomData("stylesheet",d);d.data("cke-temp",1);}}g=j.getCustomData("stylesheet_ref")||0;j.setCustomData("stylesheet_ref",g+1);this.setCustomData("cke_includeReadonly",!c.config.disableReadonlyStyling);this.attachListener(this,"click",function(f){var f=f.data,e=(new CKEDITOR.dom.elementPath(f.getTarget(),this)).contains("a");e&&(f.$.button!=2&&e.isReadOnly())&&f.preventDefault();});var b={8:1,46:1};this.attachListener(c,"key",function(H){if(c.readOnly){return true;}var G=H.data.domEvent.getKey(),y;if(G in b){var H=c.getSelection(),w,s=H.getRanges()[0],t=s.startPath(),a,k,q,G=G==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(w=H.getSelectedElement())||(w=x(H))){c.fire("saveSnapshot");s.moveToPosition(w,CKEDITOR.POSITION_BEFORE_START);w.remove();s.select();c.fire("saveSnapshot");y=1;}else{if(s.collapsed){if((a=t.block)&&(q=a[G?"getPrevious":"getNext"](F))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("table")&&s[G?"checkStartOfBlock":"checkEndOfBlock"]()){c.fire("saveSnapshot");s[G?"checkEndOfBlock":"checkStartOfBlock"]()&&a.remove();s["moveToElementEdit"+(G?"End":"Start")](q);s.select();c.fire("saveSnapshot");y=1;}else{if(t.blockLimit&&t.blockLimit.is("td")&&(k=t.blockLimit.getAscendant("table"))&&s.checkBoundaryOfElement(k,G?CKEDITOR.START:CKEDITOR.END)&&(q=k[G?"getPrevious":"getNext"](F))){c.fire("saveSnapshot");s["moveToElementEdit"+(G?"End":"Start")](q);s.checkStartOfBlock()&&s.checkEndOfBlock()?q.remove():s.select();c.fire("saveSnapshot");y=1;}else{if((k=t.contains(["td","th","caption"]))&&s.checkBoundaryOfElement(k,G?CKEDITOR.START:CKEDITOR.END)){y=1;}}}}}}return !y;}); +c.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(a){if(a.data.getKeystroke() in b&&!this.getFirst(z)){this.appendBogus();a=c.createRange();a.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);a.select();}});this.attachListener(this,"dblclick",function(a){if(c.readOnly){return false;}a={element:a.data.getTarget()};c.fire("doubleclick",a);});CKEDITOR.env.ie&&this.attachListener(this,"click",B);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(a){var e=a.data.getTarget();if(e.is("img","hr","input","textarea","select")&&!e.isReadOnly()){c.getSelection().selectElement(e);e.is("input","textarea","select")&&a.data.preventDefault();}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(a){if(a.data.$.button==2){a=a.data.getTarget();if(!a.getOuterHtml().replace(A,"")){var e=c.createRange();e.moveToElementEditStart(a);e.select(true);}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(e){e.data.getTarget().is("input","select")&&e.data.preventDefault();});this.attachListener(this,"mouseup",function(e){e.data.getTarget().is("input","textarea")&&e.data.preventDefault();});}CKEDITOR.env.webkit&&this.attachListener(c,"key",function(a){a=a.data.domEvent.getKey();if(a in b){var w=a==8,t=c.getSelection().getRanges()[0],a=t.startPath();if(t.collapsed){var s;c:{var q=a.block;if(q){if(t[w?"checkStartOfBlock":"checkEndOfBlock"]()){if(!t.moveToClosestEditablePosition(q,!w)||!t.collapsed){s=false;}else{if(t.startContainer.type==CKEDITOR.NODE_ELEMENT){var m=t.startContainer.getChild(t.startOffset-(w?1:0));if(m&&m.type==CKEDITOR.NODE_ELEMENT&&m.is("hr")){c.fire("saveSnapshot");m.remove();s=true;break c;}}if((t=t.startPath().block)&&(!t||!t.contains(q))){c.fire("saveSnapshot");var k;(k=(w?t:q).getBogus())&&k.remove();s=c.getSelection();k=s.createBookmarks();(w?q:t).moveChildren(w?t:q,false);a.lastElement.mergeSiblings();r(q,t,!w);s.selectBookmarks(k);s=true;}}}else{s=false;}}else{s=false;}}if(!s){return;}}else{w=t;s=a.block;k=w.endPath().block;if(!s||!k||s.equals(k)){a=false;}else{c.fire("saveSnapshot");(q=s.getBogus())&&q.remove();w.deleteContents();if(k.getParent()){k.moveChildren(s,false);a.lastElement.mergeSiblings();r(s,k,true);}w=c.getSelection().getRanges()[0];w.collapse(1);w.select();a=true;}if(!a){return;}}c.getSelection().scrollIntoView();c.fire("saveSnapshot");return false;}},this,null,100);}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var e;if(e=this.removeCustomData("classes")){for(;e.length;){this.removeClass(e.pop());}}if(!this.is("textarea")){e=this.getDocument();var d=e.getHead();if(d.getCustomData("stylesheet")){var f=e.getCustomData("stylesheet_ref");if(--f){e.setCustomData("stylesheet_ref",f);}else{e.removeCustomData("stylesheet_ref");d.removeCustomData("stylesheet").remove();}}}this.editor.fire("contentDomUnload");delete this.editor;}}});CKEDITOR.editor.prototype.editable=function(d){var c=this._.editable;if(c&&d){return 0;}if(arguments.length){c=this._.editable=d?d instanceof CKEDITOR.editable?d:new CKEDITOR.editable(this,d):(c&&c.detach(),null);}return c;};var l=CKEDITOR.dom.walker.bogus(),A=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,F=CKEDITOR.dom.walker.whitespaces(true),D=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(a){var d=a.editor;d.on("insertElement",function(b){b=b.data;if(b.type==CKEDITOR.NODE_ELEMENT&&(b.is("input")||b.is("textarea"))){b.getAttribute("contentEditable")!="false"&&b.data("cke-editable",b.hasAttribute("contenteditable")?"true":"1");b.setAttribute("contentEditable",false);}});d.on("selectionChange",function(c){if(!d.readOnly){var e=d.getSelection();if(e&&!e.isLocked){e=d.checkDirty();d.fire("lockSnapshot");C(c);d.fire("unlockSnapshot");!e&&d.resetDirty();}}});});CKEDITOR.on("instanceCreated",function(d){var c=d.editor;c.on("mode",function(){var b=c.editable();if(b&&b.isInline()){var h=c.title;b.changeAttr("role","textbox");b.changeAttr("aria-label",h);h&&b.changeAttr("title",h);var g=c.fire("ariaEditorHelpLabel",{}).label;if(g){if(h=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var f=CKEDITOR.tools.getNextId(),g=CKEDITOR.dom.element.createFromHtml('<span id="'+f+'" class="cke_voice_label">'+g+"</span>");h.append(g);b.changeAttr("aria-describedby",f);}}}});});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var i=function(){function G(a){return a.type==CKEDITOR.NODE_ELEMENT;}function y(T,S){var R,Q,L,H,O=[],P=S.range.startContainer;R=S.range.startPath();for(var P=c[P.getName()],J=0,N=T.getChildren(),K=N.count(),I=-1,b=-1,M=0,a=R.contains(c.$list);J<K;++J){R=N.getItem(J);if(G(R)){L=R.getName();if(a&&L in CKEDITOR.dtd.$list){O=O.concat(y(R,S));}else{H=!!P[L];if(L=="br"&&R.data("cke-eol")&&(!J||J==K-1)){M=(Q=J?O[J-1].node:N.getItem(J+1))&&(!G(Q)||!Q.is("br")); +Q=Q&&G(Q)&&c.$block[Q.getName()];}I==-1&&!H&&(I=J);H||(b=J);O.push({isElement:1,isLineBreak:M,isBlock:R.isBlockBoundary(),hasBlockSibling:Q,node:R,name:L,allowed:H});Q=M=0;}}else{O.push({isElement:0,node:R,allowed:1});}}if(I>-1){O[I].firstNotAllowed=1;}if(b>-1){O[b].lastNotAllowed=1;}return O;}function w(M,L){var K=[],J=M.getChildren(),m=J.count(),a,H=0,I=c[L],d=!M.is(c.$inline)||M.is("br");for(d&&K.push(" ");H<m;H++){a=J.getItem(H);G(a)&&!a.is(I)?K=K.concat(w(a,L)):K.push(a);}d&&K.push(" ");return K;}function t(a){return a&&G(a)&&(a.is(c.$removeEmpty)||a.is("a")&&!a.isBlockBoundary());}function s(a,J,I,H){var m=a.clone(),f,g;m.setEndAt(J,CKEDITOR.POSITION_BEFORE_END);if((f=(new CKEDITOR.dom.walker(m)).next())&&G(f)&&q[f.getName()]&&(g=f.getPrevious())&&G(g)&&!g.getParent().equals(a.startContainer)&&I.contains(g)&&H.contains(f)&&f.isIdentical(g)){f.moveChildren(g);f.remove();s(a,J,I,H);}}function j(a,I){function H(d,e){if(e.isBlock&&e.isElement&&!e.node.is("br")&&G(d)&&d.is("br")){d.remove();return 1;}}var m=I.endContainer.getChild(I.endOffset),g=I.endContainer.getChild(I.endOffset-1);m&&H(m,a[a.length-1]);if(g&&H(g,a[0])){I.setEnd(I.endContainer,I.endOffset-1);I.collapse();}}var c=CKEDITOR.dtd,q={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},k={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},h=CKEDITOR.tools.extend({},c.$inline);delete h.br;return function(ap,an,ao){var am=ap.editor,ag=am.getSelection().getRanges()[0],af=false;if(an=="unfiltered_html"){an="html";af=true;}if(!ag.checkReadOnly()){var X=(new CKEDITOR.dom.elementPath(ag.startContainer,ag.root)).blockLimit||ag.root,an={type:an,dontFilter:af,editable:ap,editor:am,range:ag,blockLimit:X,mergeCandidates:[],zombies:[]},am=an.range,af=an.mergeCandidates,al,ac,ah,aj;if(an.type=="text"&&am.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){al=CKEDITOR.dom.element.createFromHtml("<span> </span>",am.document);am.insertNode(al);am.setStartAfter(al);}ac=new CKEDITOR.dom.elementPath(am.startContainer);an.endPath=ah=new CKEDITOR.dom.elementPath(am.endContainer);if(!am.collapsed){var X=ah.block||ah.blockLimit,ae=am.getCommonAncestor();X&&(!X.equals(ae)&&!X.contains(ae)&&am.checkEndOfBlock())&&an.zombies.push(X);am.deleteContents();}for(;(aj=G(am.startContainer)&&am.startContainer.getChild(am.startOffset-1))&&G(aj)&&aj.isBlockBoundary()&&ac.contains(aj);){am.moveToPosition(aj,CKEDITOR.POSITION_BEFORE_END);}s(am,an.blockLimit,ac,ah);if(al){am.setEndBefore(al);am.collapse();al.remove();}al=am.startPath();if(X=al.contains(t,false,1)){am.splitElement(X);an.inlineStylesRoot=X;an.inlineStylesPeak=al.lastElement;}al=am.createBookmark();(X=al.startNode.getPrevious(z))&&G(X)&&t(X)&&af.push(X);(X=al.startNode.getNext(z))&&G(X)&&t(X)&&af.push(X);for(X=al.startNode;(X=X.getParent())&&t(X);){af.push(X);}am.moveToBookmark(al);if(al=ao){al=an.range;if(an.type=="text"&&an.inlineStylesRoot){aj=an.inlineStylesPeak;am=aj.getDocument().createText("{cke-peak}");for(af=an.inlineStylesRoot.getParent();!aj.equals(af);){am=am.appendTo(aj.clone());aj=aj.getParent();}ao=am.getOuterHtml().split("{cke-peak}").join(ao);}aj=an.blockLimit.getName();if(/^\s+|\s+$/.test(ao)&&"span" in CKEDITOR.dtd[aj]){var ab='<span data-cke-marker="1"> </span>',ao=ab+ao+ab;}ao=an.editor.dataProcessor.toHtml(ao,{context:null,fixForBody:false,dontFilter:an.dontFilter,filter:an.editor.activeFilter,enterMode:an.editor.activeEnterMode});aj=al.document.createElement("body");aj.setHtml(ao);if(ab){aj.getFirst().remove();aj.getLast().remove();}if((ab=al.startPath().block)&&!(ab.getChildCount()==1&&ab.getBogus())){G:{var ai;if(aj.getChildCount()==1&&G(ai=aj.getFirst())&&ai.is(k)){ab=ai.getElementsByTag("*");al=0;for(af=ab.count();al<af;al++){am=ab.getItem(al);if(!am.is(h)){break G;}}ai.moveChildren(ai.getParent(1));ai.remove();}}}an.dataWrapper=aj;al=ao;}if(al){ai=an.range;var ab=ai.document,ak,ao=an.blockLimit;al=0;var aa;aj=[];var ad,K,af=am=0,R,I;ac=ai.startContainer;var X=an.endPath.elements[0],m;ah=X.getPosition(ac);ae=!!X.getCommonAncestor(ac)&&ah!=CKEDITOR.POSITION_IDENTICAL&&!(ah&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);ac=y(an.dataWrapper,an);for(j(ac,ai);al<ac.length;al++){ah=ac[al];if(ak=ah.isLineBreak){ak=ai;R=ao;var L=void 0,e=void 0;if(ah.hasBlockSibling){ak=1;}else{L=ak.startContainer.getAscendant(c.$block,1);if(!L||!L.is({div:1,p:1})){ak=0;}else{e=L.getPosition(R);if(e==CKEDITOR.POSITION_IDENTICAL||e==CKEDITOR.POSITION_CONTAINS){ak=0;}else{R=ak.splitElement(L);ak.moveToPosition(R,CKEDITOR.POSITION_AFTER_START);ak=1;}}}}if(ak){af=al>0;}else{ak=ai.startPath();if(!ah.isBlock&&p(an.editor,ak.block,ak.blockLimit)&&(K=an.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&an.editor.config.autoParagraph!==false?an.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){K=ab.createElement(K);K.appendBogus();ai.insertNode(K);CKEDITOR.env.needsBrFiller&&(aa=K.getBogus())&&aa.remove();ai.moveToPosition(K,CKEDITOR.POSITION_BEFORE_END);}if((ak=ai.startPath().block)&&!ak.equals(ad)){if(aa=ak.getBogus()){aa.remove(); +aj.push(ak);}ad=ak;}ah.firstNotAllowed&&(am=1);if(am&&ah.isElement){ak=ai.startContainer;for(R=null;ak&&!c[ak.getName()][ah.name];){if(ak.equals(ao)){ak=null;break;}R=ak;ak=ak.getParent();}if(ak){if(R){I=ai.splitElement(R);an.zombies.push(I);an.zombies.push(R);}}else{R=ao.getName();m=!al;ak=al==ac.length-1;R=w(ah.node,R);for(var L=[],e=R.length,d=0,b=void 0,a=0,f=-1;d<e;d++){b=R[d];if(b==" "){if(!a&&(!m||d)){L.push(new CKEDITOR.dom.text(" "));f=L.length;}a=1;}else{L.push(b);a=0;}}ak&&f==L.length&&L.pop();m=L;}}if(m){for(;ak=m.pop();){ai.insertNode(ak);}m=0;}else{ai.insertNode(ah.node);}if(ah.lastNotAllowed&&al<ac.length-1){(I=ae?X:I)&&ai.setEndAt(I,CKEDITOR.POSITION_AFTER_START);am=0;}ai.collapse();}}an.dontMoveCaret=af;an.bogusNeededBlocks=aj;}aa=an.range;var P;I=an.bogusNeededBlocks;for(m=aa.createBookmark();ad=an.zombies.pop();){if(ad.getParent()){K=aa.clone();K.moveToElementEditStart(ad);K.removeEmptyBlocksAtEnd();}}if(I){for(;ad=I.pop();){CKEDITOR.env.needsBrFiller?ad.appendBogus():ad.append(aa.document.createText(" "));}}for(;ad=an.mergeCandidates.pop();){ad.mergeSiblings();}aa.moveToBookmark(m);if(!an.dontMoveCaret){for(ad=G(aa.startContainer)&&aa.startContainer.getChild(aa.startOffset-1);ad&&G(ad)&&!ad.is(c.$empty);){if(ad.isBlockBoundary()){aa.moveToPosition(ad,CKEDITOR.POSITION_BEFORE_END);}else{if(t(ad)&&ad.getHtml().match(/(\s| )$/g)){P=null;break;}P=aa.clone();P.moveToPosition(ad,CKEDITOR.POSITION_BEFORE_END);}ad=ad.getLast(z);}P&&aa.moveToRange(P);}ag.select();o(ap);}};}(),E=function(){function e(a){a=new CKEDITOR.dom.walker(a);a.guard=function(g,c){if(c){return false;}if(g.type==CKEDITOR.NODE_ELEMENT){return g.is(CKEDITOR.dtd.$tableContent);}};a.evaluator=function(b){return b.type==CKEDITOR.NODE_ELEMENT;};return a;}function d(b,h,g){h=b.getDocument().createElement(h);b.append(h,g);return h;}function f(g){var c=g.count(),h;for(c;c-->0;){h=g.getItem(c);if(!CKEDITOR.tools.trim(h.getHtml())){h.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&h.getChildCount())&&h.getFirst().remove();}}}return function(g){var c=g.startContainer,b=c.getAscendant("table",1),a=false;f(b.getElementsByTag("td"));f(b.getElementsByTag("th"));b=g.clone();b.setStart(c,0);b=e(b).lastBackward();if(!b){b=g.clone();b.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);b=e(b).lastForward();a=true;}b||(b=c);if(b.is("table")){g.setStartAt(b,CKEDITOR.POSITION_BEFORE_START);g.collapse(true);b.remove();}else{b.is({tbody:1,thead:1,tfoot:1})&&(b=d(b,"tr",a));b.is("tr")&&(b=d(b,b.getParent().is("thead")?"th":"td",a));(c=b.getBogus())&&c.remove();g.moveToPosition(b,a?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);}};}();})();(function(){function N(){var d=this._.fakeSelection,c;if(d){c=this.getSelection(1);if(!c||!c.isHidden()){d.reset();d=0;}}if(!d){d=c||this.getSelection(1);if(!d||d.getType()==CKEDITOR.SELECTION_NONE){return;}}this.fire("selectionCheck",d);c=this.elementPath();if(!c.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit){this._.previousActive=this.document.getActive();}this._.selectionPreviousPath=c;this.fire("selectionChange",{selection:d,path:c});}}function I(){x=true;if(!n){M.call(this);n=CKEDITOR.tools.setTimeout(M,200,this);}}function M(){n=null;if(x){CKEDITOR.tools.setTimeout(N,0,this);x=false;}}function L(b){return r(b)||b.type==CKEDITOR.NODE_ELEMENT&&!b.is(CKEDITOR.dtd.$empty)?true:false;}function J(g){function c(b,a){return !b||b.type==CKEDITOR.NODE_TEXT?false:g.clone()["moveToElementEdit"+(a?"End":"Start")](b);}if(!(g.root instanceof CKEDITOR.editable)){return false;}var j=g.startContainer,i=g.getPreviousNode(L,null,j),h=g.getNextNode(L,null,j);return c(i)||c(h,1)||!i&&!h&&!(j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary()&&j.getBogus())?true:false;}function K(b){return b.getCustomData("cke-fillingChar");}function G(h,g){var m=h&&h.removeCustomData("cke-fillingChar");if(m){if(g!==false){var k,j=h.getDocument().getSelection().getNative(),i=j&&j.type!="None"&&j.getRangeAt(0);if(m.getLength()>1&&i&&i.intersectsNode(m.$)){k=E(j);i=j.focusNode==m.$&&j.focusOffset>0;j.anchorNode==m.$&&j.anchorOffset>0&&k[0].offset--;i&&k[1].offset--;}}m.setText(D(m.getText()));k&&H(h.getDocument().$,k);}}function D(b){return b.replace(/\u200B( )?/g,function(c){return c[1]?" ":"";});}function E(b){return[{node:b.anchorNode,offset:b.anchorOffset},{node:b.focusNode,offset:b.focusOffset}];}function H(f,e){var h=f.getSelection(),g=f.createRange();g.setStart(e[0].node,e[0].offset);g.collapse(true);h.removeAllRanges();h.addRange(g);h.extend(e[1].node,e[1].offset);}function C(g){var f=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'"> </div>',g.document);g.fire("lockSnapshot");g.editable().append(f);var j=g.getSelection(1),i=g.createRange(),h=j.root.on("selectionchange",function(b){b.cancel();},null,null,0);i.setStartAt(f,CKEDITOR.POSITION_AFTER_START);i.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);j.selectRanges([i]); +h.removeListener();g.fire("unlockSnapshot");g._.hiddenSelectionContainer=f;}function l(d){var c={37:1,39:1,8:1,46:1};return function(h){var g=h.data.getKeystroke();if(c[g]){var b=d.getSelection().getRanges(),a=b[0];if(b.length==1&&a.collapsed){if((g=a[g<38?"getPreviousEditableNode":"getNextEditableNode"]())&&g.type==CKEDITOR.NODE_ELEMENT&&g.getAttribute("contenteditable")=="false"){d.getSelection().fake(g);h.data.preventDefault();h.cancel();}}}};}function v(j){for(var i=0;i<j.length;i++){var t=j[i];t.getCommonAncestor().isReadOnly()&&j.splice(i,1);if(!t.collapsed){if(t.startContainer.isReadOnly()){for(var s=t.startContainer,q;s;){if((q=s.type==CKEDITOR.NODE_ELEMENT)&&s.is("body")||!s.isReadOnly()){break;}q&&s.getAttribute("contentEditable")=="false"&&t.setStartAfter(s);s=s.getParent();}}s=t.startContainer;q=t.endContainer;var o=t.startOffset,k=t.endOffset,m=t.clone();s&&s.type==CKEDITOR.NODE_TEXT&&(o>=s.getLength()?m.setStartAfter(s):m.setStartBefore(s));q&&q.type==CKEDITOR.NODE_TEXT&&(k?m.setEndAfter(q):m.setEndBefore(q));s=new CKEDITOR.dom.walker(m);s.evaluator=function(b){if(b.type==CKEDITOR.NODE_ELEMENT&&b.isReadOnly()){var a=t.clone();t.setEndBefore(b);t.collapsed&&j.splice(i--,1);if(!(b.getPosition(m.endContainer)&CKEDITOR.POSITION_CONTAINS)){a.setStartAfter(b);a.collapsed||j.splice(i+1,0,a);}return true;}return false;};s.next();}}return j;}var n,x,r=CKEDITOR.dom.walker.invisible(1),F=function(){function f(a){return function(b){var d=b.editor.createRange();d.moveToClosestEditablePosition(b.selected,a)&&b.editor.getSelection().selectRanges([d]);return false;};}function e(b){return function(a){var k=a.editor,j=k.createRange(),i;if(!(i=j.moveToClosestEditablePosition(a.selected,b))){i=j.moveToClosestEditablePosition(a.selected,!b);}i&&k.getSelection().selectRanges([j]);k.fire("saveSnapshot");a.selected.remove();if(!i){j.moveToElementEditablePosition(k.editable());k.getSelection().selectRanges([j]);}k.fire("saveSnapshot");return false;};}var h=f(),g=f(1);return{37:h,38:h,39:g,40:g,8:e(),46:e(1)};}();CKEDITOR.on("instanceCreated",function(a){function f(){var b=e.getSelection();b&&b.removeAllRanges();}var e=a.editor;e.on("contentDom",function(){function w(){t=new CKEDITOR.dom.selection(e.getSelection());t.lock();}function u(){k.removeListener("mouseup",u);o.removeListener("mouseup",u);var g=CKEDITOR.document.$.selection,c=g.createRange();g.type!="None"&&c.parentElement().ownerDocument==s.$&&c.select();}var s=e.document,k=CKEDITOR.document,q=e.editable(),h=s.getBody(),o=s.getDocumentElement(),A=q.isInline(),m,t;CKEDITOR.env.gecko&&q.attachListener(q,"focus",function(b){b.removeListener();if(m!==0){if((b=e.getSelection().getNative())&&b.isCollapsed&&b.anchorNode==q.$){b=e.createRange();b.moveToElementEditStart(q);b.select();}}},null,null,-2);q.attachListener(q,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){m&&CKEDITOR.env.webkit&&(m=e._.previousActive&&e._.previousActive.equals(s.getActive()));e.unlockSelection(m);m=0;},null,null,-1);q.attachListener(q,"mousedown",function(){m=0;});if(CKEDITOR.env.ie||A){z?q.attachListener(q,"beforedeactivate",w,null,null,-1):q.attachListener(e,"selectionCheck",w,null,null,-1);q.attachListener(q,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){e.lockSelection(t);m=1;},null,null,-1);q.attachListener(q,"mousedown",function(){m=0;});}if(CKEDITOR.env.ie&&!A){var d;q.attachListener(q,"mousedown",function(b){if(b.data.$.button==2){b=e.document.getSelection();if(!b||b.getType()==CKEDITOR.SELECTION_NONE){d=e.window.getScrollPosition();}}});q.attachListener(q,"mouseup",function(b){if(b.data.$.button==2&&d){e.document.$.documentElement.scrollLeft=d.x;e.document.$.documentElement.scrollTop=d.y;}d=null;});if(s.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){o.on("mousedown",function(i){function g(b){b=b.data.$;if(P){var S=h.$.createTextRange();try{S.moveToPoint(b.clientX,b.clientY);}catch(R){}P.setEndPoint(j.compareEndPoints("StartToStart",S)<0?"EndToEnd":"StartToStart",S);P.select();}}function Q(){o.removeListener("mousemove",g);k.removeListener("mouseup",Q);o.removeListener("mouseup",Q);P.select();}i=i.data;if(i.getTarget().is("html")&&i.$.y<o.$.clientHeight&&i.$.x<o.$.clientWidth){var P=h.$.createTextRange();try{P.moveToPoint(i.$.clientX,i.$.clientY);}catch(O){}var j=P.duplicate();o.on("mousemove",g);k.on("mouseup",Q);o.on("mouseup",Q);}});}if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11){o.on("mousedown",function(b){if(b.data.getTarget().is("html")){k.on("mouseup",u);o.on("mouseup",u);}});}}}q.attachListener(q,"selectionchange",N,e);q.attachListener(q,"keyup",I,e);q.attachListener(q,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){e.forceNextSelectionCheck();e.selectionChange(1);});if(A&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var y;q.attachListener(q,"mousedown",function(){y=1;});q.attachListener(s.getDocumentElement(),"mouseup",function(){y&&I.call(e);y=0;});}else{q.attachListener(CKEDITOR.env.ie?q:s.getDocumentElement(),"mouseup",I,e); +}CKEDITOR.env.webkit&&q.attachListener(s,"keydown",function(b){switch(b.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:G(q);}},null,null,-1);q.attachListener(q,"keydown",l(e),null,null,-1);});e.on("setData",function(){e.unlockSelection();CKEDITOR.env.webkit&&f();});e.on("contentDomUnload",function(){e.unlockSelection();});if(CKEDITOR.env.ie9Compat){e.on("beforeDestroy",f,null,null,9);}e.on("dataReady",function(){delete e._.fakeSelection;delete e._.hiddenSelectionContainer;e.selectionChange(1);});e.on("loadSnapshot",function(){var d=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),c=e.editable().getLast(d);if(c&&c.hasAttribute("data-cke-hidden-sel")){c.remove();if(CKEDITOR.env.gecko){(d=e.editable().getFirst(d))&&(d.is("br")&&d.getAttribute("_moz_editor_bogus_node"))&&d.remove();}}},null,null,100);e.on("key",function(g){if(e.mode=="wysiwyg"){var d=e.getSelection();if(d.isFake){var h=F[g.data.keyCode];if(h){return h({editor:e,selected:d.getSelectedElement(),selection:d,keyEvent:g});}}}});});CKEDITOR.on("instanceReady",function(g){function d(){var b=k.editable();if(b){if(b=K(b)){var e=k.document.$.getSelection();if(e.type!="None"&&(e.anchorNode==b.$||e.focusNode==b.$)){h=E(e);}j=b.getText();b.setText(D(j));}}}function m(){var b=k.editable();if(b){if(b=K(b)){b.setText(j);if(h){H(k.document.$,h);h=null;}}}}var k=g.editor,j,h;if(CKEDITOR.env.webkit){k.on("selectionChange",function(){var e=k.editable(),c=K(e);c&&(c.getCustomData("ready")?G(e):c.setCustomData("ready",1));},null,null,-1);k.on("beforeSetMode",function(){G(k.editable());},null,null,-1);k.on("beforeUndoImage",d);k.on("afterUndoImage",m);k.on("beforeGetData",d,null,null,0);k.on("getData",m);}});CKEDITOR.editor.prototype.selectionChange=function(a){(a?N:I).call(this);};CKEDITOR.editor.prototype.getSelection=function(b){if((this._.savedSelection||this._.fakeSelection)&&!b){return this._.savedSelection||this._.fakeSelection;}return(b=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(b):null;};CKEDITOR.editor.prototype.lockSelection=function(b){b=b||this.getSelection(1);if(b.getType()!=CKEDITOR.SELECTION_NONE){!b.isLocked&&b.lock();this._.savedSelection=b;return true;}return false;};CKEDITOR.editor.prototype.unlockSelection=function(d){var c=this._.savedSelection;if(c){c.unlock(d);delete this._.savedSelection;return true;}return false;};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this);};CKEDITOR.dom.range.prototype.select=function(){var b=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);b.selectRanges([this]);return b;};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var z=typeof window.getSelection!="function",p=1;CKEDITOR.dom.selection=function(h){if(h instanceof CKEDITOR.dom.selection){var g=h,h=h.root;}var m=h instanceof CKEDITOR.dom.element;this.rev=g?g.rev:p++;this.document=h instanceof CKEDITOR.dom.document?h:h.getDocument();this.root=m?h:this.document.getBody();this.isLocked=0;this._={cache:{}};if(g){CKEDITOR.tools.extend(this._.cache,g._.cache);this.isFake=g.isFake;this.isLocked=g.isLocked;return this;}var h=this.getNative(),k,j;if(h){if(h.getRangeAt){k=(j=h.rangeCount&&h.getRangeAt(0))&&new CKEDITOR.dom.node(j.commonAncestorContainer);}else{try{j=h.createRange();}catch(i){}k=j&&CKEDITOR.dom.element.get(j.item&&j.item(0)||j.parentElement());}}if(!k||!(k.type==CKEDITOR.NODE_ELEMENT||k.type==CKEDITOR.NODE_TEXT)||!this.root.equals(k)&&!this.root.contains(k)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList;}return this;};var B={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=z?this.document.$.selection:this.document.getWindow().$.getSelection();},getType:z?function(){var g=this._.cache;if(g.type){return g.type;}var f=CKEDITOR.SELECTION_NONE;try{var j=this.getNative(),i=j.type;if(i=="Text"){f=CKEDITOR.SELECTION_TEXT;}if(i=="Control"){f=CKEDITOR.SELECTION_ELEMENT;}if(j.createRange().parentElement()){f=CKEDITOR.SELECTION_TEXT;}}catch(h){}return g.type=f;}:function(){var f=this._.cache;if(f.type){return f.type;}var e=CKEDITOR.SELECTION_TEXT,h=this.getNative();if(!h||!h.rangeCount){e=CKEDITOR.SELECTION_NONE;}else{if(h.rangeCount==1){var h=h.getRangeAt(0),g=h.startContainer;if(g==h.endContainer&&g.nodeType==1&&h.endOffset-h.startOffset==1&&B[g.childNodes[h.startOffset].nodeName.toLowerCase()]){e=CKEDITOR.SELECTION_ELEMENT;}}}return f.type=e;},getRanges:function(){var b=z?function(){function d(a){return(new CKEDITOR.dom.node(a)).getIndex(); +}var c=function(O,A){O=O.duplicate();O.collapse(A);var y=O.parentElement();if(!y.hasChildNodes()){return{container:y,offset:0};}for(var w=y.children,u,t,s=O.duplicate(),Q=0,k=w.length-1,q=-1,o,P;Q<=k;){q=Math.floor((Q+k)/2);u=w[q];s.moveToElementText(u);o=s.compareEndPoints("StartToStart",O);if(o>0){k=q-1;}else{if(o<0){Q=q+1;}else{return{container:y,offset:d(u)};}}}if(q==-1||q==w.length-1&&o<0){s.moveToElementText(y);s.setEndPoint("StartToStart",O);s=s.text.replace(/(\r\n|\r)/g,"\n").length;w=y.childNodes;if(!s){u=w[w.length-1];return u.nodeType!=CKEDITOR.NODE_TEXT?{container:y,offset:w.length}:{container:u,offset:u.nodeValue.length};}for(y=w.length;s>0&&y>0;){t=w[--y];if(t.nodeType==CKEDITOR.NODE_TEXT){P=t;s=s-t.nodeValue.length;}}return{container:P,offset:-s};}s.collapse(o>0?true:false);s.setEndPoint(o>0?"StartToStart":"EndToStart",O);s=s.text.replace(/(\r\n|\r)/g,"\n").length;if(!s){return{container:y,offset:d(u)+(o>0?0:1)};}for(;s>0;){try{t=u[o>0?"previousSibling":"nextSibling"];if(t.nodeType==CKEDITOR.NODE_TEXT){s=s-t.nodeValue.length;P=t;}u=t;}catch(a){return{container:y,offset:d(u)};}}return{container:P,offset:o>0?-s:P.nodeValue.length+s};};return function(){var i=this.getNative(),s=i&&i.createRange(),q=this.getType();if(!i){return[];}if(q==CKEDITOR.SELECTION_TEXT){i=new CKEDITOR.dom.range(this.root);q=c(s,true);i.setStart(new CKEDITOR.dom.node(q.container),q.offset);q=c(s);i.setEnd(new CKEDITOR.dom.node(q.container),q.offset);i.endContainer.getPosition(i.startContainer)&CKEDITOR.POSITION_PRECEDING&&i.endOffset<=i.startContainer.getIndex()&&i.collapse();return[i];}if(q==CKEDITOR.SELECTION_ELEMENT){for(var q=[],o=0;o<s.length;o++){for(var m=s.item(o),j=m.parentNode,k=0,i=new CKEDITOR.dom.range(this.root);k<j.childNodes.length&&j.childNodes[k]!=m;k++){}i.setStart(new CKEDITOR.dom.node(j),k);i.setEnd(new CKEDITOR.dom.node(j),k+1);q.push(i);}return q;}return[];};}():function(){var g=[],f,j=this.getNative();if(!j){return g;}for(var i=0;i<j.rangeCount;i++){var h=j.getRangeAt(i);f=new CKEDITOR.dom.range(this.root);f.setStart(new CKEDITOR.dom.node(h.startContainer),h.startOffset);f.setEnd(new CKEDITOR.dom.node(h.endContainer),h.endOffset);g.push(f);}return g;};return function(a){var f=this._.cache,e=f.ranges;if(!e){f.ranges=e=new CKEDITOR.dom.rangeList(b.call(this));}return !a?e:v(new CKEDITOR.dom.rangeList(e.slice()));};}(),getStartElement:function(){var e=this._.cache;if(e.startElement!==void 0){return e.startElement;}var d;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var f=this.getRanges()[0];if(f){if(f.collapsed){d=f.startContainer;d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent());}else{for(f.optimize();;){d=f.startContainer;if(f.startOffset==(d.getChildCount?d.getChildCount():d.getLength())&&!d.isBlockBoundary()){f.setStartAfter(d);}else{break;}}d=f.startContainer;if(d.type!=CKEDITOR.NODE_ELEMENT){return d.getParent();}d=d.getChild(f.startOffset);if(!d||d.type!=CKEDITOR.NODE_ELEMENT){d=f.startContainer;}else{for(f=d.getFirst();f&&f.type==CKEDITOR.NODE_ELEMENT;){d=f;f=f.getFirst();}}}d=d.$;}}return e.startElement=d?new CKEDITOR.dom.element(d):null;},getSelectedElement:function(){var e=this._.cache;if(e.selectedElement!==void 0){return e.selectedElement;}var d=this,f=CKEDITOR.tools.tryThese(function(){return d.getNative().createRange().item(0);},function(){for(var b=d.getRanges()[0].clone(),i,h,g=2;g&&(!(i=b.getEnclosedNode())||!(i.type==CKEDITOR.NODE_ELEMENT&&B[i.getName()]&&(h=i)));g--){b.shrink(CKEDITOR.SHRINK_ELEMENT);}return h&&h.$;});return e.selectedElement=f?new CKEDITOR.dom.element(f):null;},getSelectedText:function(){var d=this._.cache;if(d.selectedText!==void 0){return d.selectedText;}var c=this.getNative(),c=z?c.type=="Control"?"":c.createRange().text:c.toString();return d.selectedText=c;},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1;},unlock:function(f){if(this.isLocked){if(f){var e=this.getSelectedElement(),h=!e&&this.getRanges(),g=this.isFake;}this.isLocked=0;this.reset();if(f){(f=e||h[0]&&h[0].getCommonAncestor())&&f.getAscendant("body",1)&&(g?this.fake(e):e?this.selectElement(e):this.selectRanges(h));}}},reset:function(){this._.cache={};this.isFake=0;var e=this.root.editor;if(e&&e._.fakeSelection&&this.rev==e._.fakeSelection.rev){delete e._.fakeSelection;var d=e._.hiddenSelectionContainer;if(d){var f=e.checkDirty();e.fire("lockSnapshot");d.remove();e.fire("unlockSnapshot");!f&&e.resetDirty();}delete e._.hiddenSelectionContainer;}this.rev=p++;},selectElement:function(d){var c=new CKEDITOR.dom.range(this.root);c.setStartBefore(d);c.setEndAfter(d);this.selectRanges([c]);},selectRanges:function(Q){var P=this.root.editor,P=P&&P._.hiddenSelectionContainer;this.reset();if(P){for(var P=this.root,O,y=0;y<Q.length;++y){O=Q[y];if(O.endContainer.equals(P)){O.endOffset=Math.min(O.endOffset,P.getChildCount());}}}if(Q.length){if(this.isLocked){var w=CKEDITOR.document.getActive(); +this.unlock();this.selectRanges(Q);this.lock();w&&!w.equals(this.root)&&w.focus();}else{var u;Q:{var t,s;if(Q.length==1&&!(s=Q[0]).collapsed&&(u=s.getEnclosedNode())&&u.type==CKEDITOR.NODE_ELEMENT){s=s.clone();s.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((t=s.getEnclosedNode())&&t.type==CKEDITOR.NODE_ELEMENT){u=t;}if(u.getAttribute("contenteditable")=="false"){break Q;}}u=void 0;}if(u){this.fake(u);}else{if(z){s=CKEDITOR.dom.walker.whitespaces(true);t=/\ufeff|\u00a0/;P={table:1,tbody:1,tr:1};if(Q.length>1){u=Q[Q.length-1];Q[0].setEnd(u.endContainer,u.endOffset);}u=Q[0];var Q=u.collapsed,h,o,R;if((O=u.getEnclosedNode())&&O.type==CKEDITOR.NODE_ELEMENT&&O.getName() in B&&(!O.is("a")||!O.getText())){try{R=O.$.createControlRange();R.addElement(O.$);R.select();return;}catch(e){}}if(u.startContainer.type==CKEDITOR.NODE_ELEMENT&&u.startContainer.getName() in P||u.endContainer.type==CKEDITOR.NODE_ELEMENT&&u.endContainer.getName() in P){u.shrink(CKEDITOR.NODE_ELEMENT,true);Q=u.collapsed;}R=u.createBookmark();P=R.startNode;if(!Q){w=R.endNode;}R=u.document.$.body.createTextRange();R.moveToElementText(P.$);R.moveStart("character",1);if(w){t=u.document.$.body.createTextRange();t.moveToElementText(w.$);R.setEndPoint("EndToEnd",t);R.moveEnd("character",-1);}else{h=P.getNext(s);o=P.hasAscendant("pre");h=!(h&&h.getText&&h.getText().match(t))&&(o||!P.hasPrevious()||P.getPrevious().is&&P.getPrevious().is("br"));o=u.document.createElement("span");o.setHtml("");o.insertBefore(P);h&&u.document.createText("").insertBefore(P);}u.setStartBefore(P);P.remove();if(Q){if(h){R.moveStart("character",-1);R.select();u.document.$.selection.clear();}else{R.select();}u.moveToPosition(o,CKEDITOR.POSITION_BEFORE_START);o.remove();}else{u.setEndBefore(w);w.remove();R.select();}}else{w=this.getNative();if(!w){return;}this.removeAllRanges();for(R=0;R<Q.length;R++){if(R<Q.length-1){h=Q[R];o=Q[R+1];t=h.clone();t.setStart(h.endContainer,h.endOffset);t.setEnd(o.startContainer,o.startOffset);if(!t.collapsed){t.shrink(CKEDITOR.NODE_ELEMENT,true);u=t.getCommonAncestor();t=t.getEnclosedNode();if(u.isReadOnly()||t&&t.isReadOnly()){o.setStart(h.startContainer,h.startOffset);Q.splice(R--,1);continue;}}}u=Q[R];o=this.document.$.createRange();if(u.collapsed&&CKEDITOR.env.webkit&&J(u)){h=this.root;G(h,false);t=h.getDocument().createText("");h.setCustomData("cke-fillingChar",t);u.insertNode(t);if((h=t.getNext())&&!t.getPrevious()&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()=="br"){G(this.root);u.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START);}else{u.moveToPosition(t,CKEDITOR.POSITION_AFTER_END);}}o.setStart(u.startContainer.$,u.startOffset);try{o.setEnd(u.endContainer.$,u.endOffset);}catch(A){if(A.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){u.collapse(1);o.setEnd(u.endContainer.$,u.endOffset);}else{throw A;}}w.addRange(o);}}this.reset();this.root.fire("selectionchange");}}}},fake:function(f){var e=this.root.editor;this.reset();C(e);var h=this._.cache,g=new CKEDITOR.dom.range(this.root);g.setStartBefore(f);g.setEndAfter(f);h.ranges=new CKEDITOR.dom.rangeList(g);h.selectedElement=h.startElement=f;h.type=CKEDITOR.SELECTION_ELEMENT;h.selectedText=h.nativeSel=null;this.isFake=1;this.rev=p++;e._.fakeSelection=this;this.root.fire("selectionchange");},isHidden:function(){var b=this.getCommonAncestor();b&&b.type==CKEDITOR.NODE_TEXT&&(b=b.getParent());return !(!b||!b.data("cke-hidden-sel"));},createBookmarks:function(b){b=this.getRanges().createBookmarks(b);this.isFake&&(b.isFake=1);return b;},createBookmarks2:function(b){b=this.getRanges().createBookmarks2(b);this.isFake&&(b.isFake=1);return b;},selectBookmarks:function(f){for(var e=[],h=0;h<f.length;h++){var g=new CKEDITOR.dom.range(this.root);g.moveToBookmark(f[h]);e.push(g);}f.isFake?this.fake(e[0].getEnclosedNode()):this.selectRanges(e);return this;},getCommonAncestor:function(){var b=this.getRanges();return !b.length?null:b[0].startContainer.getCommonAncestor(b[b.length-1].endContainer);},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView();},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var d=this.getNative();try{d&&d[z?"empty":"removeAllRanges"]();}catch(c){}this.reset();}}};})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;(function(){function ah(g,f){for(var j,i;g=g.getParent();){if(g.equals(f)){break;}if(g.getAttribute("data-nostyle")){j=g;}else{if(!i){var h=g.getAttribute("contentEditable");h=="false"?j=g:h=="true"&&(i=1);}}}return j;}function ac(aA){var az=aA.document;if(aA.collapsed){az=Z(this,az);aA.insertNode(az);aA.moveToPosition(az,CKEDITOR.POSITION_BEFORE_END);}else{var ay=this.element,ax=this._.definition,aw,av=ax.ignoreReadonly,ar=av||ax.includeReadonly;ar==null&&(ar=aA.root.getCustomData("cke_includeReadonly"));var au=CKEDITOR.dtd[ay];if(!au){aw=true;au=CKEDITOR.dtd.span;}aA.enlarge(CKEDITOR.ENLARGE_INLINE,1);aA.trim();var at=aA.createBookmark(),am=at.startNode,ap=at.endNode,aq=am,ao; +if(!av){var aj=aA.getCommonAncestor(),av=ah(am,aj),aj=ah(ap,aj);av&&(aq=av.getNextSourceNode(true));aj&&(ap=aj);}for(aq.getPosition(ap)==CKEDITOR.POSITION_FOLLOWING&&(aq=0);aq;){av=false;if(aq.equals(ap)){aq=null;av=true;}else{var al=aq.type==CKEDITOR.NODE_ELEMENT?aq.getName():null,aj=al&&aq.getAttribute("contentEditable")=="false",ai=al&&aq.getAttribute("data-nostyle");if(al&&aq.data("cke-bookmark")){aq=aq.getNextSourceNode(true);continue;}if(aj&&ar&&CKEDITOR.dtd.$block[al]){for(var I=aq,L=af(I),an=void 0,ak=L.length,K=0,I=ak&&new CKEDITOR.dom.range(I.getDocument());K<ak;++K){var an=L[K],i=CKEDITOR.filter.instances[an.data("cke-filter")];if(i?i.check(this):1){I.selectNodeContents(an);ac.call(this,I);}}}L=al?!au[al]||ai?0:aj&&!ar?0:(aq.getPosition(ap)|z)==z&&(!ax.childRule||ax.childRule(aq)):1;if(L){if((L=aq.getParent())&&((L.getDtd()||CKEDITOR.dtd.span)[ay]||aw)&&(!ax.parentRule||ax.parentRule(L))){if(!ao&&(!al||!CKEDITOR.dtd.$removeEmpty[al]||(aq.getPosition(ap)|z)==z)){ao=aA.clone();ao.setStartBefore(aq);}al=aq.type;if(al==CKEDITOR.NODE_TEXT||aj||al==CKEDITOR.NODE_ELEMENT&&!aq.getChildCount()){for(var al=aq,c;(av=!al.getNext(x))&&(c=al.getParent(),au[c.getName()])&&(c.getPosition(am)|D)==D&&(!ax.childRule||ax.childRule(c));){al=c;}ao.setEndAfter(al);}}else{av=true;}}else{av=true;}aq=aq.getNextSourceNode(ai||aj);}if(av&&ao&&!ao.collapsed){for(var av=Z(this,az),aj=av.hasAttributes(),ai=ao.getCommonAncestor(),al={},L={},an={},ak={},w,f,a;av&&ai;){if(ai.getName()==ay){for(w in ax.attributes){if(!ak[w]&&(a=ai.getAttribute(f))){av.getAttribute(w)==a?L[w]=1:ak[w]=1;}}for(f in ax.styles){if(!an[f]&&(a=ai.getStyle(f))){av.getStyle(f)==a?al[f]=1:an[f]=1;}}}ai=ai.getParent();}for(w in L){av.removeAttribute(w);}for(f in al){av.removeStyle(f);}aj&&!av.hasAttributes()&&(av=null);if(av){ao.extractContents().appendTo(av);ao.insertNode(av);E.call(this,av);av.mergeSiblings();CKEDITOR.env.ie||av.$.normalize();}else{av=new CKEDITOR.dom.element("span");ao.extractContents().appendTo(av);ao.insertNode(av);E.call(this,av);av.remove(true);}ao=null;}}aA.moveToBookmark(at);aA.shrink(CKEDITOR.SHRINK_TEXT);aA.shrink(CKEDITOR.NODE_ELEMENT,true);}}function ag(w){function u(){for(var b=new CKEDITOR.dom.elementPath(s.getParent()),y=new CKEDITOR.dom.elementPath(l.getParent()),m=null,j=null,i=0;i<b.elements.length;i++){var d=b.elements[i];if(d==b.block||d==b.blockLimit){break;}k.checkElementRemovable(d,true)&&(m=d);}for(i=0;i<y.elements.length;i++){d=y.elements[i];if(d==y.block||d==y.blockLimit){break;}k.checkElementRemovable(d,true)&&(j=d);}j&&l.breakParent(j);m&&s.breakParent(m);}w.enlarge(CKEDITOR.ENLARGE_INLINE,1);var t=w.createBookmark(),s=t.startNode;if(w.collapsed){for(var r=new CKEDITOR.dom.elementPath(s.getParent(),w.root),q,p=0,o;p<r.elements.length&&(o=r.elements[p]);p++){if(o==r.block||o==r.blockLimit){break;}if(this.checkElementRemovable(o)){var n;if(w.collapsed&&(w.checkBoundaryOfElement(o,CKEDITOR.END)||(n=w.checkBoundaryOfElement(o,CKEDITOR.START)))){q=o;q.match=n?"start":"end";}else{o.mergeSiblings();o.is(this.element)?M.call(this,o):Q(o,T(this)[o.getName()]);}}}if(q){o=s;for(p=0;;p++){n=r.elements[p];if(n.equals(q)){break;}else{if(n.match){continue;}else{n=n.clone();}}n.append(o);o=n;}o[q.match=="start"?"insertBefore":"insertAfter"](q);}}else{var l=t.endNode,k=this;u();for(r=s;!r.equals(l);){q=r.getNextSourceNode();if(r.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(r)){r.getName()==this.element?M.call(this,r):Q(r,T(this)[r.getName()]);if(q.type==CKEDITOR.NODE_ELEMENT&&q.contains(s)){u();q=s.getNext();}}r=q;}}w.moveToBookmark(t);w.shrink(CKEDITOR.NODE_ELEMENT,true);}function af(d){var c=[];d.forEach(function(b){if(b.getAttribute("contenteditable")=="true"){c.push(b);return false;}},CKEDITOR.NODE_ELEMENT,true);return c;}function ad(d){var c=d.getEnclosedNode()||d.getCommonAncestor(false,true);(d=(new CKEDITOR.dom.elementPath(c,d.root)).contains(this.element,1))&&!d.isReadOnly()&&S(d,this);}function ae(g){var f=g.getCommonAncestor(true,true);if(g=(new CKEDITOR.dom.elementPath(f,g.root)).contains(this.element,1)){var f=this._.definition,j=f.attributes;if(j){for(var i in j){g.removeAttribute(i,j[i]);}}if(f.styles){for(var h in f.styles){f.styles.hasOwnProperty(h)&&g.removeStyle(h);}}}}function aa(h){var g=h.createBookmark(true),l=h.createIterator();l.enforceRealBlocks=true;if(this._.enterMode){l.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;}for(var k,j=h.document,i;k=l.getNextParagraph();){if(!k.isReadOnly()&&(l.activeFilter?l.activeFilter.check(this):1)){i=Z(this,j,k);Y(k,i);}}h.moveToBookmark(g);}function X(g){var f=g.createBookmark(1),j=g.createIterator();j.enforceRealBlocks=true;j.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var i,h;i=j.getNextParagraph();){if(this.checkElementRemovable(i)){if(i.is("pre")){(h=this._.enterMode==CKEDITOR.ENTER_BR?null:g.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&i.copyAttributes(h);Y(i,h);}else{M.call(this,i);}}}g.moveToBookmark(f);}function Y(j,g){var p=!g; +if(p){g=j.getDocument().createElement("div");j.copyAttributes(g);}var o=g&&g.is("pre"),n=j.is("pre"),m=!o&&n;if(o&&!n){n=g;(m=j.getBogus())&&m.remove();m=j.getHtml();m=V(m,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");m=m.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");m=m.replace(/([ \t\n\r]+| )/g," ");m=m.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var l=j.getDocument().createElement("div");l.append(n);n.$.outerHTML="<pre>"+m+"</pre>";n.copyAttributes(l.getFirst());n=l.getFirst().remove();}else{n.setHtml(m);}g=n;}else{m?g=B(p?[j.getHtml()]:ab(j),g):j.moveChildren(g);}g.replace(j);if(o){var p=g,k;if((k=p.getPrevious(G))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")){o=V(k.getHtml(),/\n$/,"")+"\n\n"+V(p.getHtml(),/^\n/,"");CKEDITOR.env.ie?p.$.outerHTML="<pre>"+o+"</pre>":p.setHtml(o);k.remove();}}else{p&&J(g);}}function ab(d){var c=[];V(d.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(f,e,g){return e+"</pre>"+g+"<pre>";}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(b,e){c.push(e);});return c;}function V(g,f,j){var i="",h="",g=g.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(e,d,k){d&&(i=d);k&&(h=k);return"";});return i+g.replace(f,j)+h;}function B(h,g){var l;h.length>1&&(l=new CKEDITOR.dom.documentFragment(g.getDocument()));for(var k=0;k<h.length;k++){var j=h[k],j=j.replace(/(\r\n|\r)/g,"\n"),j=V(j,/^[ \t]*\n/,""),j=V(j,/\n$/,""),j=V(j,/^[ \t]+|[ \t]+$/g,function(d,c){return d.length==1?" ":c?" "+CKEDITOR.tools.repeat(" ",d.length-1):CKEDITOR.tools.repeat(" ",d.length-1)+" ";}),j=j.replace(/\n/g,"<br>"),j=j.replace(/[ \t]{2,}/g,function(b){return CKEDITOR.tools.repeat(" ",b.length-1)+" ";});if(l){var i=g.clone();i.setHtml(j);l.append(i);}else{g.setHtml(j);}}return l||g;}function M(j,i){var p=this._.definition,o=p.attributes,p=p.styles,n=T(this)[j.getName()],m=CKEDITOR.tools.isEmpty(o)&&CKEDITOR.tools.isEmpty(p),l;for(l in o){if(!((l=="class"||this._.definition.fullMatch)&&j.getAttribute(l)!=W(l,o[l]))&&!(i&&l.slice(0,5)=="data-")){m=j.hasAttribute(l);j.removeAttribute(l);}}for(var k in p){if(!(this._.definition.fullMatch&&j.getStyle(k)!=W(k,p[k],true))){m=m||!!j.getStyle(k);j.removeStyle(k);}}Q(j,n,O[j.getName()]);m&&(this._.definition.alwaysRemoveElement?J(j,1):!CKEDITOR.dtd.$block[j.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!j.hasAttributes()?J(j):j.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"));}function E(h){for(var g=T(this),l=h.getElementsByTag(this.element),k,j=l.count();--j>=0;){k=l.getItem(j);k.isReadOnly()||M.call(this,k,true);}for(var i in g){if(i!=this.element){l=h.getElementsByTag(i);for(j=l.count()-1;j>=0;j--){k=l.getItem(j);k.isReadOnly()||Q(k,g[i]);}}}}function Q(i,h,n){if(h=h&&h.attributes){for(var m=0;m<h.length;m++){var l=h[m][0],k;if(k=i.getAttribute(l)){var j=h[m][1];(j===null||j.test&&j.test(k)||typeof j=="string"&&k==j)&&i.removeAttribute(l);}}}n||J(i);}function J(f,e){if(!f.hasAttributes()||e){if(CKEDITOR.dtd.$block[f.getName()]){var h=f.getPrevious(G),g=f.getNext(G);h&&(h.type==CKEDITOR.NODE_TEXT||!h.isBlockBoundary({br:1}))&&f.append("br",1);g&&(g.type==CKEDITOR.NODE_TEXT||!g.isBlockBoundary({br:1}))&&f.append("br");f.remove(true);}else{h=f.getFirst();g=f.getLast();f.remove(true);if(h){h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings();g&&(!h.equals(g)&&g.type==CKEDITOR.NODE_ELEMENT)&&g.mergeSiblings();}}}}function Z(f,e,h){var g;g=f.element;g=="*"&&(g="span");g=new CKEDITOR.dom.element(g,e);h&&h.copyAttributes(g);g=S(g,f);e.getCustomData("doc_processing_style")&&g.hasAttribute("id")?g.removeAttribute("id"):e.setCustomData("doc_processing_style",1);return g;}function S(g,f){var j=f._.definition,i=j.attributes,j=CKEDITOR.style.getStyleText(j);if(i){for(var h in i){g.setAttribute(h,i[h]);}}j&&g.setAttribute("style",j);return g;}function H(e,d){for(var f in e){e[f]=e[f].replace(N,function(b,g){return d[g];});}}function T(j){if(j._.overrides){return j._.overrides;}var i=j._.overrides={},p=j._.definition.overrides;if(p){CKEDITOR.tools.isArray(p)||(p=[p]);for(var o=0;o<p.length;o++){var n=p[o],m,l;if(typeof n=="string"){m=n.toLowerCase();}else{m=n.element?n.element.toLowerCase():j.element;l=n.attributes;}n=i[m]||(i[m]={});if(l){var n=n.attributes=n.attributes||[],k;for(k in l){n.push([k.toLowerCase(),l[k]]);}}}}return i;}function W(f,e,h){var g=new CKEDITOR.dom.element("span");g[h?"setStyle":"setAttribute"](f,e);return g[h?"getStyle":"getAttribute"](f);}function R(i,h,n){for(var m=i.document,l=i.getRanges(),h=h?this.removeFromRange:this.applyToRange,k,j=l.createIterator();k=j.getNextRange();){h.call(this,k,n);}i.selectRanges(l);m.removeCustomData("doc_processing_style");}var O={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},U={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},v=/\s*(?:;\s*|$)/,N=/#\((.+?)\)/g,x=CKEDITOR.dom.walker.bookmark(0,1),G=CKEDITOR.dom.walker.whitespaces(1); +CKEDITOR.style=function(e,d){if(typeof e.type=="string"){return new CKEDITOR.style.customHandlers[e.type](e);}var f=e.attributes;if(f&&f.style){e.styles=CKEDITOR.tools.extend({},e.styles,CKEDITOR.tools.parseCssText(f.style));delete f.style;}if(d){e=CKEDITOR.tools.clone(e);H(e.attributes,d);H(e.styles,d);}f=this.element=e.element?typeof e.element=="string"?e.element.toLowerCase():e.element:"*";this.type=e.type||(O[f]?CKEDITOR.STYLE_BLOCK:U[f]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object"){this.type=CKEDITOR.STYLE_OBJECT;}this._={definition:e};};CKEDITOR.style.prototype={apply:function(d){if(d instanceof CKEDITOR.dom.document){return R.call(this,d.getSelection());}if(this.checkApplicable(d.elementPath(),d)){var c=this._.enterMode;if(!c){this._.enterMode=d.activeEnterMode;}R.call(this,d.getSelection(),0,d);this._.enterMode=c;}},remove:function(d){if(d instanceof CKEDITOR.dom.document){return R.call(this,d.getSelection(),1);}if(this.checkApplicable(d.elementPath(),d)){var c=this._.enterMode;if(!c){this._.enterMode=d.activeEnterMode;}R.call(this,d.getSelection(),1,d);this._.enterMode=c;}},applyToRange:function(b){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?ac:this.type==CKEDITOR.STYLE_BLOCK?aa:this.type==CKEDITOR.STYLE_OBJECT?ad:null;return this.applyToRange(b);},removeFromRange:function(b){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?ag:this.type==CKEDITOR.STYLE_BLOCK?X:this.type==CKEDITOR.STYLE_OBJECT?ae:null;return this.removeFromRange(b);},applyToObject:function(b){S(b,this);},checkActive:function(h,g){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(h.block||h.blockLimit,true,g);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var l=h.elements,k=0,j;k<l.length;k++){j=l[k];if(!(this.type==CKEDITOR.STYLE_INLINE&&(j==h.block||j==h.blockLimit))){if(this.type==CKEDITOR.STYLE_OBJECT){var i=j.getName();if(!(typeof this.element=="string"?i==this.element:i in this.element)){continue;}}if(this.checkElementRemovable(j,true,g)){return true;}}}}return false;},checkApplicable:function(e,d,f){d&&d instanceof CKEDITOR.filter&&(f=d);if(f&&!f.check(this)){return false;}switch(this.type){case CKEDITOR.STYLE_OBJECT:return !!e.contains(this.element);case CKEDITOR.STYLE_BLOCK:return !!e.blockLimit.getDtd()[this.element];}return true;},checkElementMatch:function(j,i){var p=this._.definition;if(!j||!p.ignoreReadonly&&j.isReadOnly()){return false;}var o=j.getName();if(typeof this.element=="string"?o==this.element:o in this.element){if(!i&&!j.hasAttributes()){return true;}if(o=p._AC){p=o;}else{var o={},n=0,m=p.attributes;if(m){for(var l in m){n++;o[l]=m[l];}}if(l=CKEDITOR.style.getStyleText(p)){o.style||n++;o.style=l;}o._length=n;p=p._AC=o;}if(p._length){for(var k in p){if(k!="_length"){n=j.getAttribute(k)||"";if(k=="style"){j:{o=p[k];typeof o=="string"&&(o=CKEDITOR.tools.parseCssText(o));typeof n=="string"&&(n=CKEDITOR.tools.parseCssText(n,true));l=void 0;for(l in o){if(!(l in n&&(n[l]==o[l]||o[l]=="inherit"||n[l]=="inherit"))){o=false;break j;}}o=true;}}else{o=p[k]==n;}if(o){if(!i){return true;}}else{if(i){return false;}}}}if(i){return true;}}else{return true;}}return false;},checkElementRemovable:function(g,f,j){if(this.checkElementMatch(g,f,j)){return true;}if(f=T(this)[g.getName()]){var i;if(!(f=f.attributes)){return true;}for(j=0;j<f.length;j++){i=f[j][0];if(i=g.getAttribute(i)){var h=f[j][1];if(h===null){return true;}if(typeof h=="string"){if(i==h){return true;}}else{if(h.test(i)){return true;}}}}}return false;},buildPreview:function(h){var g=this._.definition,l=[],k=g.element;k=="bdo"&&(k="span");var l=["<",k],j=g.attributes;if(j){for(var i in j){l.push(" ",i,'="',j[i],'"');}}(j=CKEDITOR.style.getStyleText(g))&&l.push(' style="',j,'"');l.push(">",h||g.name,"</",k,">");return l.join("");},getDefinition:function(){return this._.definition;}};CKEDITOR.style.getStyleText=function(i){var h=i._ST;if(h){return h;}var h=i.styles,n=i.attributes&&i.attributes.style||"",m="";n.length&&(n=n.replace(v,";"));for(var l in h){var k=h[l],j=(l+":"+k).replace(v,";");k=="inherit"?m=m+j:n=n+j;}n.length&&(n=CKEDITOR.tools.normalizeCssText(n,true));return i._ST=n+m;};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(d){var c=function(b){this._={definition:b};this.setup&&this.setup(b);};c.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},d,true);return this.customHandlers[d.type]=c;};var z=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,D=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED;})();CKEDITOR.styleCommand=function(b,c){this.requiredContent=this.allowedContent=this.style=b;CKEDITOR.tools.extend(this,c,true);};CKEDITOR.styleCommand.prototype.exec=function(b){b.focus();this.state==CKEDITOR.TRISTATE_OFF?b.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&b.removeStyle(this.style);};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"); +CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(d,e,c){CKEDITOR.stylesSet.addExternal(d,e,"");CKEDITOR.stylesSet.load(d,c);};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(d,e){var c=this._.styleStateChangeCallbacks;if(!c){c=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(b){for(var h=0;h<c.length;h++){var i=c[h],g=i.style.checkActive(b.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;i.fn.call(this,g);}});}c.push({style:d,fn:e});},applyStyle:function(b){b.apply(this);},removeStyle:function(b){b.remove(this);},getStylesSet:function(e){if(this._.stylesDefinitions){e(this._.stylesDefinitions);}else{var g=this,d=g.config.stylesCombo_stylesSet||g.config.stylesSet;if(d===false){e(null);}else{if(d instanceof Array){g._.stylesDefinitions=d;e(d);}else{d||(d="default");var d=d.split(":"),h=d[0];CKEDITOR.stylesSet.addExternal(h,d[1]?d.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(h,function(a){g._.stylesDefinitions=a[h];e(g._.stylesDefinitions);});}}}}});CKEDITOR.dom.comment=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createComment(b));CKEDITOR.dom.domObject.call(this,b);};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<!--"+this.$.nodeValue+"-->";}});"use strict";(function(){var d={},e={},c;for(c in CKEDITOR.dtd.$blockLimit){c in CKEDITOR.dtd.$list||(d[c]=1);}for(c in CKEDITOR.dtd.$block){c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(e[c]=1);}CKEDITOR.dom.elementPath=function(r,o){var p=null,l=null,f=[],i=r,n,o=o||r.getDocument().getBody();do{if(i.type==CKEDITOR.NODE_ELEMENT){f.push(i);if(!this.lastElement){this.lastElement=i;if(i.is(CKEDITOR.dtd.$object)||i.getAttribute("contenteditable")=="false"){continue;}}if(i.equals(o)){break;}if(!l){n=i.getName();i.getAttribute("contenteditable")=="true"?l=i:!p&&e[n]&&(p=i);if(d[n]){var a;if(a=!p){if(n=n=="div"){d:{n=i.getChildren();a=0;for(var q=n.count();a<q;a++){var t=n.getItem(a);if(t.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[t.getName()]){n=true;break d;}}n=false;}n=!n;}a=n;}a?p=i:l=i;}}}}while(i=i.getParent());l||(l=o);this.block=p;this.blockLimit=l;this.root=o;this.elements=f;};})();CKEDITOR.dom.elementPath.prototype={compare:function(d){var e=this.elements,d=d&&d.elements;if(!d||e.length!=d.length){return false;}for(var c=0;c<e.length;c++){if(!e[c].equals(d[c])){return false;}}return true;},contains:function(h,i,g){var l;typeof h=="string"&&(l=function(a){return a.getName()==h;});h instanceof CKEDITOR.dom.element?l=function(a){return a.equals(h);}:CKEDITOR.tools.isArray(h)?l=function(a){return CKEDITOR.tools.indexOf(h,a.getName())>-1;}:typeof h=="function"?l=h:typeof h=="object"&&(l=function(a){return a.getName() in h;});var j=this.elements,k=j.length;i&&k--;if(g){j=Array.prototype.slice.call(j,0);j.reverse();}for(i=0;i<k;i++){if(l(j[i])){return j[i];}}return null;},isContextFor:function(b){var c;if(b in CKEDITOR.dtd.$block){c=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return !!c.getDtd()[b];}return true;},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1);}};CKEDITOR.dom.text=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createTextNode(b));this.$=b;};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length;},getText:function(){return this.$.nodeValue;},setText:function(b){this.$.nodeValue=b;},split:function(h){var i=this.$.parentNode,g=i.childNodes.length,l=this.getLength(),j=this.getDocument(),k=new CKEDITOR.dom.text(this.$.splitText(h),j);if(i.childNodes.length==g){if(h>=l){k=j.createText("");k.insertAfter(this);}else{h=j.createText("");h.insertAfter(k);h.remove();}}return k;},substring:function(b,c){return typeof c!="number"?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,c);}});(function(){function b(g,o,m){var n=g.serializable,l=o[m?"endContainer":"startContainer"],h=m?"endOffset":"startOffset",i=n?o.document.getById(g.startNode):g.startNode,g=n?o.document.getById(g.endNode):g.endNode;if(l.equals(i.getPrevious())){o.startOffset=o.startOffset-l.getLength()-g.getPrevious().getLength();l=g.getNext();}else{if(l.equals(g.getPrevious())){o.startOffset=o.startOffset-l.getLength();l=g.getNext();}}l.equals(i.getParent())&&o[h]++;l.equals(g.getParent())&&o[h]++;o[m?"endContainer":"startContainer"]=l;return o;}CKEDITOR.dom.rangeList=function(d){if(d instanceof CKEDITOR.dom.rangeList){return d;}d?d instanceof CKEDITOR.dom.range&&(d=[d]):d=[];return CKEDITOR.tools.extend(d,c);};var c={createIterator:function(){var f=this,i=CKEDITOR.dom.walker.bookmark(),g=[],h;return{getNextRange:function(n){h=h===void 0?0:h+1;var d=f[h];if(d&&f.length>1){if(!h){for(var e=f.length-1; +e>=0;e--){g.unshift(f[e].createBookmark(true));}}if(n){for(var l=0;f[h+l+1];){for(var a=d.document,n=0,e=a.getById(g[l].endNode),a=a.getById(g[l+1].startNode);;){e=e.getNextSourceNode(false);if(a.equals(e)){n=1;}else{if(i(e)||e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()){continue;}}break;}if(!n){break;}l++;}}for(d.moveToBookmark(g.shift());l--;){e=f[++h];e.moveToBookmark(g.shift());d.setEnd(e.endContainer,e.endOffset);}}return d;}};},createBookmarks:function(a){for(var j=[],h,i=0;i<this.length;i++){j.push(h=this[i].createBookmark(a,true));for(var g=i+1;g<this.length;g++){this[g]=b(h,this[g]);this[g]=b(h,this[g],true);}}return j;},createBookmarks2:function(d){for(var g=[],f=0;f<this.length;f++){g.push(this[f].createBookmark2(d));}return g;},moveToBookmarks:function(d){for(var e=0;e<this.length;e++){this[e].moveToBookmark(d[e]);}}};})();(function(){function r(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/");}function m(a){var s=CKEDITOR.skin["ua_"+a],k=CKEDITOR.env;if(s){for(var s=s.split(",").sort(function(d,c){return d>c?-1:1;}),j=0,h;j<s.length;j++){h=s[j];if(k.ie&&(h.replace(/^ie/,"")==k.version||k.quirks&&h=="iequirks")){h="ie";}if(k[h]){a=a+("_"+s[j]);break;}}}return CKEDITOR.getUrl(r()+a+".css");}function q(d,c){if(!o[d]){CKEDITOR.document.appendStyleSheet(m(d));o[d]=1;}c&&c();}function p(d){var c=d.getById(l);if(!c){c=d.getHead().append("style");c.setAttribute("id",l);c.setAttribute("type","text/css");}return c;}function n(k,j,w){var v,u,t;if(CKEDITOR.env.webkit){j=j.split("}").slice(0,-1);for(u=0;u<j.length;u++){j[u]=j[u].split("{");}}for(var s=0;s<k.length;s++){if(CKEDITOR.env.webkit){for(u=0;u<j.length;u++){t=j[u][1];for(v=0;v<w.length;v++){t=t.replace(w[v][0],w[v][1]);}k[s].$.sheet.addRule(j[u][0],t);}}else{t=j;for(v=0;v<w.length;v++){t=t.replace(w[v][0],w[v][1]);}CKEDITOR.env.ie&&CKEDITOR.env.version<11?k[s].$.styleSheet.cssText=k[s].$.styleSheet.cssText+t:k[s].$.innerHTML=k[s].$.innerHTML+t;}}}var o={};CKEDITOR.skin={path:r,loadPart:function(b,a){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(r()+"skin.js"),function(){q(b,a);}):q(b,a);},getPath:function(b){return CKEDITOR.getUrl(m(b));},icons:{},addIcon:function(f,e,j,h){f=f.toLowerCase();this.icons[f]||(this.icons[f]={path:e,offset:j||0,bgsize:h||"16px"});},getIconStyle:function(j,h,u,t,s){var k;if(j){j=j.toLowerCase();h&&(k=this.icons[j+"-rtl"]);k||(k=this.icons[j]);}j=u||k&&k.path||"";t=t||k&&k.offset;s=s||k&&k.bgsize||"16px";return j&&"background-image:url("+CKEDITOR.getUrl(j)+");background-position:0 "+t+"px;background-size:"+s+";";}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor;},setUiColor:function(d){var c=p(CKEDITOR.document);return(this.setUiColor=function(b){this.uiColor=b;var j=CKEDITOR.skin.chameleon,h="",e="";if(typeof j=="function"){h=j(this,"editor");e=j(this,"panel");}b=[[i,b]];n([c],h,b);n(g,e,b);}).call(this,d);}});var l="cke_ui_color",g=[],i=/\$color/g;CKEDITOR.on("instanceLoaded",function(d){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var c=d.editor,d=function(b){b=(b.data[0]||b.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!b.getById("cke_ui_color")){b=p(b);g.push(b);var e=c.getUiColor();e&&n([b],CKEDITOR.skin.chameleon(c,"panel"),[[i,e]]);}};c.on("panelShow",d);c.on("menuShow",d);c.config.uiColor&&c.setUiColor(c.config.uiColor);}});})();(function(){if(CKEDITOR.env.webkit){CKEDITOR.env.hc=false;}else{var e=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);e.appendTo(CKEDITOR.document.getHead());try{var g=e.getComputedStyle("border-top-color"),d=e.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(g&&g==d);}catch(h){CKEDITOR.env.hc=false;}e.remove();}if(CKEDITOR.env.hc){CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";}CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(e=CKEDITOR._.pending){delete CKEDITOR._.pending;for(g=0;g<e.length;g++){CKEDITOR.editor.prototype.constructor.apply(e[g][0],e[g][1]);CKEDITOR.add(e[g][0]);}}})();CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8";CKEDITOR.skin.chameleon=function(){var a=function(){return function(g,l){for(var i=g.match(/[^#]./g),n=0;3>n;n++){var k=i,j=n,m;m=parseInt(i[n],16);m=("0"+(0>l?0|m*(1+l):0|m+(255-m)*l).toString(16)).slice(-2);k[j]=m;}return"#"+i.join("");};}(),e=function(){var c=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');"); +return function(f,b){return c.output({from:f,to:b});};}(),d={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};return function(c,f){var b=c.uiColor,b={id:"."+c.id,defaultBorder:a(b,-0.1),defaultGradient:e(a(b,0.9),b),lightGradient:e(a(b,1),a(b,0.7)),mediumGradient:e(a(b,0.8),a(b,0.5)),ckeButtonOn:e(a(b,0.6),a(b,0.7)),ckeResizer:a(b,-0.4),ckeToolbarSeparator:a(b,0.5),ckeColorauto:a(b,0.8),dialogBody:a(b,0.7),dialogTabSelected:e("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:a(b,-0.6),elementsPathBg:b,menubuttonIcon:a(b,0.5),menubuttonIconHover:a(b,0.3)};return d[f].output(b).replace(/\[/g,"{").replace(/\]/g,"}");};}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var c=function(h){this._||(this._={});this._["default"]=this._.initValue=h["default"]||"";this._.required=h.required||!1;for(var i=[this._],j=1;j<arguments.length;j++){i.push(arguments[j]);}i.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,i);return this._;},d={build:function(h,i,j){return new CKEDITOR.ui.dialog.textInput(h,i,j);}},a={build:function(h,i,j){return new CKEDITOR.ui.dialog[i.type](h,i,j);}},g={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(h){this.setValue(this.getInitValue(),h);},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._["default"];},getInitValue:function(){return this._.initValue;}},f=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(h,i){this._.domOnChangeRegistered||(h.on("load",function(){this.getInputElement().on("change",function(){h.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()});},this);},this),this._.domOnChangeRegistered=!0);this.on("change",i);}},!0),b=/^on([A-Z]\w+)/,e=function(h){for(var i in h){(b.test(i)||"title"==i||"type"==i)&&delete h[i];}return h;};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(h,i,l,j){if(!(4>arguments.length)){var m=c.call(this,i);m.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var k={role:i.role||"presentation"};i.includeLabel&&(k["aria-labelledby"]=m.labelId);CKEDITOR.ui.dialog.uiElement.call(this,h,i,l,"div",null,k,function(){var o=[],n=i.required?" cke_required":"";if(i.labelLayout!="horizontal"){o.push('<label class="cke_dialog_ui_labeled_label'+n+'" ',' id="'+m.labelId+'"',m.inputId?' for="'+m.inputId+'"':"",(i.labelStyle?' style="'+i.labelStyle+'"':"")+">",i.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',i.controlStyle?' style="'+i.controlStyle+'"':"",' role="presentation">',j.call(this,h,i),"</div>");}else{n={type:"hbox",widths:i.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+n+'" id="'+m.labelId+'" for="'+m.inputId+'"'+(i.labelStyle?' style="'+i.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(i.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(i.controlStyle?' style="'+i.controlStyle+'"':"")+">"+j.call(this,h,i)+"</span>"}]}; +CKEDITOR.dialog._.uiElementBuilders.hbox.build(h,n,o);}return o.join("");});}},textInput:function(h,i,n){if(!(3>arguments.length)){c.call(this,i);var l=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",o={"class":"cke_dialog_ui_input_"+i.type,id:l,type:i.type};i.validate&&(this.validate=i.validate);i.maxLength&&(o.maxlength=i.maxLength);i.size&&(o.size=i.size);i.inputStyle&&(o.style=i.inputStyle);var m=this,j=!1;h.on("load",function(){m.getInputElement().on("keydown",function(k){k.data.getKeystroke()==13&&(j=true);});m.getInputElement().on("keyup",function(k){if(k.data.getKeystroke()==13&&j){h.getButton("ok")&&setTimeout(function(){h.getButton("ok").click();},0);j=false;}},null,null,1000);});CKEDITOR.ui.dialog.labeledElement.call(this,h,i,n,function(){var k=['<div class="cke_dialog_ui_input_',i.type,'" role="presentation"'];i.width&&k.push('style="width:'+i.width+'" ');k.push("><input ");o["aria-labelledby"]=this._.labelId;this._.required&&(o["aria-required"]=this._.required);for(var p in o){k.push(p+'="'+o[p]+'" ');}k.push(" /></div>");return k.join("");});}},textarea:function(h,i,l){if(!(3>arguments.length)){c.call(this,i);var j=this,m=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",k={};i.validate&&(this.validate=i.validate);k.rows=i.rows||5;k.cols=i.cols||20;k["class"]="cke_dialog_ui_input_textarea "+(i["class"]||"");"undefined"!=typeof i.inputStyle&&(k.style=i.inputStyle);i.dir&&(k.dir=i.dir);CKEDITOR.ui.dialog.labeledElement.call(this,h,i,l,function(){k["aria-labelledby"]=this._.labelId;this._.required&&(k["aria-required"]=this._.required);var o=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',m,'" '],n;for(n in k){o.push(n+'="'+CKEDITOR.tools.htmlEncode(k[n])+'" ');}o.push(">",CKEDITOR.tools.htmlEncode(j._["default"]),"</textarea></div>");return o.join("");});}},checkbox:function(h,i,k){if(!(3>arguments.length)){var j=c.call(this,i,{"default":!!i["default"]});i.validate&&(this.validate=i.validate);CKEDITOR.ui.dialog.uiElement.call(this,h,i,k,"span",null,null,function(){var o=CKEDITOR.tools.extend({},i,{id:i.id?i.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),m=[],n=CKEDITOR.tools.getNextId()+"_label",l={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":n};e(o);if(i["default"]){l.checked="checked";}if(typeof o.inputStyle!="undefined"){o.style=o.inputStyle;}j.checkbox=new CKEDITOR.ui.dialog.uiElement(h,o,m,"input",null,l);m.push(' <label id="',n,'" for="',l.id,'"'+(i.labelStyle?' style="'+i.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(i.label),"</label>");return m.join("");});}},radio:function(h,i,k){if(!(3>arguments.length)){c.call(this,i);this._["default"]||(this._["default"]=this._.initValue=i.items[0][1]);i.validate&&(this.validate=i.valdiate);var j=[],l=this;i.role="radiogroup";i.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,h,i,k,function(){for(var z=[],A=[],y=(i.id?i.id:CKEDITOR.tools.getNextId())+"_radio",w=0;w<i.items.length;w++){var v=i.items[w],x=v[2]!==void 0?v[2]:v[0],u=v[1]!==void 0?v[1]:v[0],t=CKEDITOR.tools.getNextId()+"_radio_input",s=t+"_label",t=CKEDITOR.tools.extend({},i,{id:t,title:null,type:null},true),x=CKEDITOR.tools.extend({},t,{title:x},true),r={type:"radio","class":"cke_dialog_ui_radio_input",name:y,value:u,"aria-labelledby":s},p=[];if(l._["default"]==u){r.checked="checked";}e(t);e(x);if(typeof t.inputStyle!="undefined"){t.style=t.inputStyle;}t.keyboardFocusable=true;j.push(new CKEDITOR.ui.dialog.uiElement(h,t,p,"input",null,r));p.push(" ");new CKEDITOR.ui.dialog.uiElement(h,x,p,"label",null,{id:s,"for":r.id},v[0]);z.push(p.join(""));}new CKEDITOR.ui.dialog.hbox(h,j,z,A);return A.join("");});this._.children=j;}},button:function(h,i,l){if(arguments.length){"function"==typeof i&&(i=i(h.getParentEditor()));c.call(this,i,{disabled:i.disabled||!1});CKEDITOR.event.implementOn(this);var j=this;h.on("load",function(){var n=this.getElement();(function(){n.on("click",function(o){j.click();o.data.preventDefault();});n.on("keydown",function(o){o.data.getKeystroke() in {32:1}&&(j.click(),o.data.preventDefault());});})();n.unselectable();},this);var m=CKEDITOR.tools.extend({},i);delete m.style;var k=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,h,m,l,"a",null,{style:i.style,href:"javascript:void(0)",title:i.label,hidefocus:"true","class":i["class"],role:"button","aria-labelledby":k},'<span id="'+k+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(i.label)+"</span>");}},select:function(h,i,k){if(!(3>arguments.length)){var j=c.call(this,i);i.validate&&(this.validate=i.validate);j.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,h,i,k,function(){var q=CKEDITOR.tools.extend({},i,{id:i.id?i.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),o=[],p=[],n={id:j.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};o.push('<div class="cke_dialog_ui_input_',i.type,'" role="presentation"');i.width&&o.push('style="width:'+i.width+'" '); +o.push(">");if(i.size!==void 0){n.size=i.size;}if(i.multiple!==void 0){n.multiple=i.multiple;}e(q);for(var m=0,l;m<i.items.length&&(l=i.items[m]);m++){p.push('<option value="',CKEDITOR.tools.htmlEncode(l[1]!==void 0?l[1]:l[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(l[0]));}if(typeof q.inputStyle!="undefined"){q.style=q.inputStyle;}j.select=new CKEDITOR.ui.dialog.uiElement(h,q,o,"select",null,n,p.join(""));o.push("</div>");return o.join("");});}},file:function(h,i,k){if(!(3>arguments.length)){void 0===i["default"]&&(i["default"]="");var j=CKEDITOR.tools.extend(c.call(this,i),{definition:i,buttons:[]});i.validate&&(this.validate=i.validate);h.on("load",function(){CKEDITOR.document.getById(j.frameId).getParent().addClass("cke_dialog_ui_input_file");});CKEDITOR.ui.dialog.labeledElement.call(this,h,i,k,function(){j.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var l=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',j.frameId,'" title="',i.label,'" src="javascript:void('];l.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");l.push(')"></iframe>');return l.join("");});}},fileButton:function(h,i,l){var j=this;if(!(3>arguments.length)){c.call(this,i);i.validate&&(this.validate=i.validate);var m=CKEDITOR.tools.extend({},i),k=m.onClick;m.className=(m.className?m.className+" ":"")+"cke_dialog_ui_button";m.onClick=function(o){var n=i["for"];if(!k||k.call(this,o)!==false){h.getContentElement(n[0],n[1]).submit();this.disable();}};h.on("load",function(){h.getContentElement(i["for"][0],i["for"][1])._.buttons.push(j);});CKEDITOR.ui.dialog.button.call(this,h,m,l);}},html:function(){var h=/^\s*<[\w:]+\s+([^>]*)?>/,i=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,j=/\/$/;return function(p,r,q){if(!(3>arguments.length)){var l=[],o=r.html;"<"!=o.charAt(0)&&(o="<span>"+o+"</span>");var n=r.focus;if(n){var m=this.focus;this.focus=function(){("function"==typeof n?n:m).call(this);this.fire("focus");};r.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0;}CKEDITOR.ui.dialog.uiElement.call(this,p,r,l,"span",null,null,"");l=l.join("").match(h);o=o.match(i)||["","",""];j.test(o[1])&&(o[1]=o[1].slice(0,-1),o[2]="/"+o[2]);q.push([o[1]," ",l[1]||"",o[2]].join(""));}};}(),fieldset:function(h,i,l,j,m){var k=m.label;this._={children:i};CKEDITOR.ui.dialog.uiElement.call(this,h,m,j,"fieldset",null,null,function(){var o=[];k&&o.push("<legend"+(m.labelStyle?' style="'+m.labelStyle+'"':"")+">"+k+"</legend>");for(var n=0;n<l.length;n++){o.push(l[n]);}return o.join("");});}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(h){var i=CKEDITOR.document.getById(this._.labelId);1>i.getChildCount()?(new CKEDITOR.dom.text(h,CKEDITOR.document)).appendTo(i):i.getChild(0).$.nodeValue=h;return this;},getLabel:function(){var h=CKEDITOR.document.getById(this._.labelId);return !h||1>h.getChildCount()?"":h.getChild(0).getText();},eventProcessors:f},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return !this._.disabled?this.fire("click",{dialog:this._.dialog}):!1;},enable:function(){this._.disabled=!1;var h=this.getElement();h&&h.removeClass("cke_disabled");},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled");},isVisible:function(){return this.getElement().getFirst().isVisible();},isEnabled:function(){return !this._.disabled;},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(h,i){this.on("click",function(){i.apply(this,arguments);});}},!0),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId);},focus:function(){var h=this.selectParentTab();setTimeout(function(){var i=h.getInputElement();i&&i.$.focus();},0);},select:function(){var h=this.selectParentTab();setTimeout(function(){var i=h.getInputElement();i&&(i.$.focus(),i.$.select());},0);},accessKeyUp:function(){this.select();},setValue:function(h){!h&&(h="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments);},keyboardFocusable:!0},g,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement();},add:function(h,i,k){var j=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),l=this.getInputElement().$;j.$.text=h;j.$.value=void 0===i||null===i?h:i;void 0===k||null===k?CKEDITOR.env.ie?l.add(j.$):l.add(j.$,null):l.add(j.$,k); +return this;},remove:function(h){this.getInputElement().$.remove(h);return this;},clear:function(){for(var h=this.getInputElement().$;0<h.length;){h.remove(0);}return this;},keyboardFocusable:!0},g,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(h,i){this.getInputElement().$.checked=h;!i&&this.fire("change",{value:h});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(h,i){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version){return f.onChange.apply(this,arguments);}h.on("load",function(){var j=this._.checkbox.getElement();j.on("propertychange",function(k){k=k.data.$;"checked"==k.propertyName&&this.fire("change",{value:j.$.checked});},this);},this);this.on("change",i);return null;}},keyboardFocusable:!0},g,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(h,i){for(var k=this._.children,j,l=0;l<k.length&&(j=k[l]);l++){j.getElement().$.checked=j.getValue()==h;}!i&&this.fire("change",{value:h});},getValue:function(){for(var h=this._.children,i=0;i<h.length;i++){if(h[i].getElement().$.checked){return h[i].getValue();}}return null;},accessKeyUp:function(){var h=this._.children,i;for(i=0;i<h.length;i++){if(h[i].getElement().$.checked){h[i].getElement().focus();return;}}h[0].getElement().focus();},eventProcessors:{onChange:function(h,i){if(CKEDITOR.env.ie){h.on("load",function(){for(var k=this._.children,j=this,l=0;l<k.length;l++){k[l].getElement().on("propertychange",function(m){m=m.data.$;"checked"==m.propertyName&&this.$.checked&&j.fire("change",{value:this.getAttribute("value")});});}},this),this.on("change",i);}else{return f.onChange.apply(this,arguments);}return null;}}},g,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,g,{getInputElement:function(){var h=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<h.$.forms.length?new CKEDITOR.dom.element(h.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(){return this.getInputElement().getParent().$.action;},registerEvents:function(h){var i=/^on([A-Z]\w+)/,k,j=function(n,m,p,o){n.on("formLoaded",function(){n.getInputElement().on(p,o,n);});},l;for(l in h){if(k=l.match(i)){this.eventProcessors[l]?this.eventProcessors[l].call(this,this._.dialog,h[l]):j(this,this._.dialog,k[1].toLowerCase(),h[l]);}}return this;},reset:function(){function q(){o.$.open();var i="";m.size&&(i=m.size-(CKEDITOR.env.ie?7:0));var k=r.frameId+"_input";o.$.write(['<html dir="'+l+'" lang="'+j+'"><head><title>','
      + +

      + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..c2d82aa --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..496d731 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..0e31824 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,8 @@ +(function(){function O(e){return e&&e.domId&&e.getInputElement().$?e.getInputElement():e&&e.$?e:!1;}function b(e){if(!e){throw"Languages-by-groups list are required for construct selectbox";}var o=[],n="",m;for(m in e){for(var l in e[m]){var j=e[m][l];"en_US"==j?n=j:o.push(j);}}o.sort();n&&o.unshift(n);return{getCurrentLangGroup:function(q){e:{for(var p in e){for(var a in e[p]){if(a.toUpperCase()===q.toUpperCase()){q=p;break e;}}}q="";}return q;},setLangList:function(){var q={},p;for(p in e){for(var a in e[p]){q[e[p][a]]=a;}}return q;}()};}var W=function(){var e=function(l,j,o){var o=o||{},n=o.expires;if("number"==typeof n&&n){var m=new Date;m.setTime(m.getTime()+1000*n);n=o.expires=m;}n&&n.toUTCString&&(o.expires=n.toUTCString());var j=encodeURIComponent(j),l=l+"="+j,p;for(p in o){j=o[p],l+="; "+p,!0!==j&&(l+="="+j);}document.cookie=l;};return{postMessage:{init:function(j){window.addEventListener?window.addEventListener("message",j,!1):window.attachEvent("onmessage",j);},send:function(l){var j=Object.prototype.toString,o=l.fn||null,n=l.id||"",p=l.target||window,m=l.message||{id:n};l.message&&"[object Object]"==j.call(l.message)&&(l.message.id||(l.message.id=n),m=l.message);l=window.JSON.stringify(m,o);p.postMessage(l,"*");},unbindHandler:function(j){window.removeEventListener?window.removeEventListener("message",j,!1):window.detachEvent("onmessage",j);}},hash:{create:function(){},parse:function(){}},cookie:{set:e,get:function(j){return(j=document.cookie.match(RegExp("(?:^|; )"+j.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(j[1]):void 0;},remove:function(a){e(a,"",{expires:-1});}},misc:{findFocusable:function(l){var j=null;l&&(j=l.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return j;},isVisible:function(j){return !(0===j.offsetWidth||0==j.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(j,null).display:j.currentStyle?j.currentStyle.display:j.style.display));},hasClass:function(l,j){return !(!l.className||!l.className.match(RegExp("(\\s|^)"+j+"(\\s|$)")));}}};}(),X=X||{};X.TextAreaNumber=null;X.load=!0;X.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};X.dialog=null;X.optionNode=null;X.selectNode=null;X.grammerSuggest=null;X.textNode={};X.iframeMain=null;X.dataTemp="";X.div_overlay=null;X.textNodeInfo={};X.selectNode={};X.selectNodeResponce={};X.langList=null;X.langSelectbox=null;X.banner="";X.show_grammar=null;X.div_overlay_no_check=null;X.targetFromFrame={};X.onLoadOverlay=null;X.LocalizationComing={};X.OverlayPlace=null;X.LocalizationButton={ChangeTo:{instance:null,text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};X.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var Q=function(a){var j,e;for(e in a){j=a[e].instance.getElement().getFirst()||a[e].instance.getElement(),j.setText(X.LocalizationComing[e]);}},N=function(a){for(var e in a){if(!a[e].instance.setLabel){break;}a[e].instance.setLabel(X.LocalizationComing[e]);}},V,M;X.framesetHtml=function(a){return"';};X.setIframe=function(a,l){var j;j=X.framesetHtml(l);var e=X.iframeNumber+"_"+l;a.getElement().setHtml(j);j=document.getElementById(e);j=j.contentWindow?j.contentWindow:j.contentDocument.document?j.contentDocument.document:j.contentDocument;j.document.open();j.document.write('iframe
      + + + + +

      + CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications +

      +
      +

      + This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <div> element. +

      +

      + For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. +

      +
      +

      Click the buttons to create and remove a CKEditor instance.

      +

      + + +

      + +
      +
      + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/api.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/api.html new file mode 100644 index 0000000..50f568e --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

      + CKEditor Samples » Using CKEditor JavaScript API +

      +
      +

      + This sample shows how to use the + CKEditor JavaScript API + to interact with the editor at runtime. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      + + +
      + +
      +
      + + + + +

      +

      + + +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/appendto.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/appendto.html new file mode 100644 index 0000000..8ed16b6 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/appendto.html @@ -0,0 +1,56 @@ + + + + + + Append To Page Element Using JavaScript Code — CKEditor Sample + + + + +

      + CKEditor Samples » Append To Page Element Using JavaScript Code +

      +
      +
      +

      + The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), + a target container to be replaced is no longer necessary. A new editor + instance is inserted directly wherever it is desired. +

      +
      CKEDITOR.appendTo( 'container_id',
      +	{ /* Configuration options to be used. */ }
      +	'Editor content to be used.'
      +);
      +
      + +
      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/inlineall/logo.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/inlineall/logo.png new file mode 100644 index 0000000..b4d5979 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/inlineall/logo.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/outputxhtml/outputxhtml.css new file mode 100644 index 0000000..1b3bf64 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/outputxhtml/outputxhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/posteddata.php b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/posteddata.php new file mode 100644 index 0000000..1e1406f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/posteddata.php @@ -0,0 +1,59 @@ + + + + + + Sample — CKEditor + + + +

      + CKEditor — Posted Data +

      + + + + + + + + + $value ) + { + if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) + continue; + + if ( get_magic_quotes_gpc() ) + $value = htmlspecialchars( stripslashes((string)$value) ); + else + $value = htmlspecialchars( (string)$value ); +?> + + + + + +
      Field NameValue
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/sample.jpg b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/sample.jpg new file mode 100644 index 0000000..9498271 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/sample.jpg differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/uilanguages/languages.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/uilanguages/languages.js new file mode 100644 index 0000000..fc5c578 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/assets/uilanguages/languages.js @@ -0,0 +1 @@ +var CKEDITOR_LANGS=function(){var f={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian",is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese",zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},d=[],e;for(e in CKEDITOR.lang.languages){d.push({code:e,name:f[e]||e});}d.sort(function(g,c){return g.name + + + + + Data Filtering — CKEditor Sample + + + + + +

      + CKEditor Samples » Data Filtering and Features Activation +

      +
      +

      + This sample page demonstrates the idea of Advanced Content Filter + (ACF), a sophisticated + tool that takes control over what kind of data is accepted by the editor and what + kind of output is produced. +

      +

      When and what is being filtered?

      +

      + ACF controls + every single source of data that comes to the editor. + It process both HTML that is inserted manually (i.e. pasted by the user) + and programmatically like: +

      +
      +editor.setData( '<p>Hello world!</p>' );
      +
      +

      + ACF discards invalid, + useless HTML tags and attributes so the editor remains "clean" during + runtime. ACF behaviour + can be configured and adjusted for a particular case to prevent the + output HTML (i.e. in CMS systems) from being polluted. + + This kind of filtering is a first, client-side line of defense + against "tag soups", + the tool that precisely restricts which tags, attributes and styles + are allowed (desired). When properly configured, ACF + is an easy and fast way to produce a high-quality, intentionally filtered HTML. +

      + +

      How to configure or disable ACF?

      +

      + Advanced Content Filter is enabled by default, working in "automatic mode", yet + it provides a set of easy rules that allow adjusting filtering rules + and disabling the entire feature when necessary. The config property + responsible for this feature is config.allowedContent. +

      +

      + By "automatic mode" is meant that loaded plugins decide which kind + of content is enabled and which is not. For example, if the link + plugin is loaded it implies that <a> tag is + automatically allowed. Each plugin is given a set + of predefined ACF rules + that control the editor until + config.allowedContent + is defined manually. +

      +

      + Let's assume our intention is to restrict the editor to accept (produce) paragraphs + only: no attributes, no styles, no other tags. + With ACF + this is very simple. Basically set + config.allowedContent to 'p': +

      +
      +var editor = CKEDITOR.replace( textarea_id, {
      +	allowedContent: 'p'
      +} );
      +
      +

      + Now try to play with allowed content: +

      +
      +// Trying to insert disallowed tag and attribute.
      +editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
      +alert( editor.getData() );
      +
      +// Filtered data is returned.
      +"<p>Hello world!</p>"
      +
      +

      + What happened? Since config.allowedContent: 'p' is set the editor assumes + that only plain <p> are accepted. Nothing more. This is why + style attribute and <em> tag are gone. The same + filtering would happen if we pasted disallowed HTML into this editor. +

      +

      + This is just a small sample of what ACF + can do. To know more, please refer to the sample section below and + the official Advanced Content Filter guide. +

      +

      + You may, of course, want CKEditor to avoid filtering of any kind. + To get rid of ACF, + basically set + config.allowedContent to true like this: +

      +
      +CKEDITOR.replace( textarea_id, {
      +	allowedContent: true
      +} );
      +
      + +

      Beyond data flow: Features activation

      +

      + ACF is far more than + I/O control: the entire + UI of the editor is adjusted to what + filters restrict. For example: if <a> tag is + disallowed + by ACF, + then accordingly link command, toolbar button and link dialog + are also disabled. Editor is smart: it knows which features must be + removed from the interface to match filtering rules. +

      +

      + CKEditor can be far more specific. If <a> tag is + allowed by filtering rules to be used but it is restricted + to have only one attribute (href) + config.allowedContent = 'a[!href]', then + "Target" tab of the link dialog is automatically disabled as target + attribute isn't included in ACF rules + for <a>. This behaviour applies to dialog fields, context + menus and toolbar buttons. +

      + +

      Sample configurations

      +

      + There are several editor instances below that present different + ACF setups. All of them, + except the last inline instance, share the same HTML content to visualize + how different filtering rules affect the same input data. +

      +
      + +
      + +
      +

      + This editor is using default configuration ("automatic mode"). It means that + + config.allowedContent is defined by loaded plugins. + Each plugin extends filtering rules to make it's own associated content + available for the user. +

      +
      + + + +
      + +
      + +
      + +
      +

      + This editor is using a custom configuration for + ACF: +

      +
      +CKEDITOR.replace( 'editor2', {
      +	allowedContent:
      +		'h1 h2 h3 p blockquote strong em;' +
      +		'a[!href];' +
      +		'img(left,right)[!src,alt,width,height];' +
      +		'table tr th td caption;' +
      +		'span{!font-family};' +'
      +		'span{!color};' +
      +		'span(!marker);' +
      +		'del ins'
      +} );
      +
      +

      + The following rules may require additional explanation: +

      +
        +
      • + h1 h2 h3 p blockquote strong em - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      • + a[!href] - href attribute is obligatory + for <a> tag. Tags without this attribute + are disarded. No other attribute will be accepted. +
      • +
      • + img(left,right)[!src,alt,width,height] - src + attribute is obligatory for <img> tag. + alt, width, height + and class attributes are accepted but + class must be either class="left" + or class="right" +
      • +
      • + table tr th td caption - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      • + span{!font-family}, span{!color}, + span(!marker) - <span> tags + will be accepted if either font-family or + color style is set or class="marker" + is present. +
      • +
      • + del ins - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      +

      + Please note that UI of the + editor is different. It's a response to what happened to the filters. + Since text-align isn't allowed, the align toolbar is gone. + The same thing happened to subscript/superscript, strike, underline + (<u>, <sub>, <sup> + are disallowed by + config.allowedContent) and many other buttons. +

      +
      + + +
      + +
      + +
      + +
      +

      + This editor is using a custom configuration for + ACF. + Note that filters can be configured as an object literal + as an alternative to a string-based definition. +

      +
      +CKEDITOR.replace( 'editor3', {
      +	allowedContent: {
      +		'b i ul ol big small': true,
      +		'h1 h2 h3 p blockquote li': {
      +			styles: 'text-align'
      +		},
      +		a: { attributes: '!href,target' },
      +		img: {
      +			attributes: '!src,alt',
      +			styles: 'width,height',
      +			classes: 'left,right'
      +		}
      +	}
      +} );
      +
      +
      + + +
      + +
      + +
      + +
      +

      + This editor is using a custom set of plugins and buttons. +

      +
      +CKEDITOR.replace( 'editor4', {
      +	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
      +	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
      +	format_tags: 'p;h1;h2;h3;pre;address'
      +} );
      +
      +

      + As you can see, removing plugins and buttons implies filtering. + Several tags are not allowed in the editor because there's no + plugin/button that is responsible for creating and editing this + kind of content (for example: the image is missing because + of removeButtons: 'Image'). The conclusion is that + ACF works "backwards" + as well: modifying UI + elements is changing allowed content rules. +

      +
      + + +
      + +
      + +
      + +
      +

      + This editor is built on editable <h1> element. + ACF takes care of + what can be included in <h1>. Note that there + are no block styles in Styles combo. Also why lists, indentation, + blockquote, div, form and other buttons are missing. +

      +

      + ACF makes sure that + no disallowed tags will come to <h1> so the final + markup is valid. If the user tried to paste some invalid HTML + into this editor (let's say a list), it would be automatically + converted into plain text. +

      +
      +

      + Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. +

      +
      + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/divreplace.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/divreplace.html new file mode 100644 index 0000000..b87086a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + + Replace DIV — CKEditor Sample + + + + + + +

      + CKEditor Samples » Replace DIV with CKEditor on the Fly +

      +
      +

      + This sample shows how to automatically replace <div> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <div> element will now + be moved into CKEditor editing area. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      + Double-click any of the following <div> elements to transform them into + editor instances. +

      +
      +

      + Part 1 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +
      +
      +

      + Part 2 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +

      + Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. +

      +
      +
      +

      + Part 3 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/index.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/index.html new file mode 100644 index 0000000..3b6f9af --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/index.html @@ -0,0 +1,128 @@ + + + + + + CKEditor Samples + + + +

      + CKEditor Samples +

      +
      +
      +

      + Basic Samples +

      +
      +
      Replace textarea elements by class name
      +
      Automatic replacement of all textarea elements of a given class with a CKEditor instance.
      + +
      Replace textarea elements by code
      +
      Replacement of textarea elements with CKEditor instances by using a JavaScript call.
      + +
      Create editors with jQuery
      +
      Creating standard and inline CKEditor instances with jQuery adapter.
      +
      + +

      + Basic Customization +

      +
      +
      User Interface color
      +
      Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
      + +
      User Interface languages
      +
      Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
      +
      + + +

      Plugins

      +
      +
      Magicline plugin
      +
      Using the Magicline plugin to access difficult focus spaces.
      + +
      Full page support
      +
      CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
      +
      +
      +
      +

      + Inline Editing +

      +
      +
      Massive inline editor creation
      +
      Turn all elements with contentEditable = true attribute into inline editors.
      + +
      Convert element into an inline editor by code
      +
      Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
      + +
      Replace textarea with inline editor New!
      +
      A form with a textarea that is replaced by an inline editor at runtime.
      + + +
      + +

      + Advanced Samples +

      +
      +
      Data filtering and features activation New!
      +
      Data filtering and automatic features activation basing on configuration.
      + +
      Replace DIV elements on the fly
      +
      Transforming a div element into an instance of CKEditor with a mouse click.
      + +
      Append editor instances
      +
      Appending editor instances to existing DOM elements.
      + +
      Create and destroy editor instances for Ajax applications
      +
      Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
      + +
      Basic usage of the API
      +
      Using the CKEditor JavaScript API to interact with the editor at runtime.
      + +
      XHTML-compliant style
      +
      Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
      + +
      Read-only mode
      +
      Using the readOnly API to block introducing changes to the editor contents.
      + +
      "Tab" key-based navigation
      +
      Navigating among editor instances with tab key.
      + + + +
      Using the JavaScript API to customize dialog windows
      +
      Using the dialog windows API to customize dialog windows without changing the original editor code.
      + +
      Using the "Enter" key in CKEditor
      +
      Configuring the behavior of Enter and Shift+Enter keys.
      + +
      Output for Flash
      +
      Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
      + +
      Output HTML
      +
      Configuring CKEditor to produce legacy HTML 4 code.
      + +
      Toolbar Configurations
      +
      Configuring CKEditor to display full or custom toolbar layout.
      + +
      +
      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlineall.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlineall.html new file mode 100644 index 0000000..fc33619 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlineall.html @@ -0,0 +1,311 @@ + + + + + + Massive inline editing — CKEditor Sample + + + + + + +
      +

      CKEditor Samples » Massive inline editing

      +
      +

      This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

      +
      <div contenteditable="true" > ... </div>
      +

      Click inside of any element below to start editing.

      +
      +
      +
      + +
      +
      +
      +

      + Fusce vitae porttitor +

      +

      + + Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. + +

      +

      + Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. +

      +
      +

      + Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. + Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum +

      +
      +
      +

      + Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. +

      +
      +

      Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

      +

      Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

      +
      +
      +
      +
      +

      + Integer condimentum sit amet +

      +

      + Aenean nonummy a, mattis varius. Cras aliquet. + Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

      +

      Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

      +

      Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

      +
      +
      +

      + Praesent wisi accumsan sit amet nibh +

      +

      Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

      +

      Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

      +

      In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

      +
      +
      +
      +
      +

      + CKEditor logo +

      +

      Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

      +

      + Nullam laoreet vel consectetuer tellus suscipit +

      +
        +
      • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
      • +
      • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
      • +
      • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
      • +
      +

      Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

      +

      Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

      +

      Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

      +
      +
      +
      +
      + Tags of this article: +

      + inline, editing, floating, CKEditor +

      +
      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinebycode.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinebycode.html new file mode 100644 index 0000000..c1df0e9 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinebycode.html @@ -0,0 +1,121 @@ + + + + + + Inline Editing by Code — CKEditor Sample + + + + + +

      + CKEditor Samples » Inline Editing by Code +

      +
      +

      + This sample shows how to create an inline editor instance of CKEditor. It is created + with a JavaScript call using the following code: +

      +
      +// This property tells CKEditor to not activate every element with contenteditable=true element.
      +CKEDITOR.disableAutoInline = true;
      +
      +var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
      +
      +

      + Note that editable in the code above is the id + attribute of the <div> element to be converted into an inline instance. +

      +
      +
      +

      Saturn V carrying Apollo 11 Apollo 11

      + +

      Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      + +

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

      + +

      Broadcasting and quotes

      + +

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      + +
      +

      One small step for [a] man, one giant leap for mankind.

      +
      + +

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      + +
      +

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      +
      + +

      Technical details

      + + + + + + + + + + + + + + + + + + + + + + + +
      Mission crew
      PositionAstronaut
      CommanderNeil A. Armstrong
      Command Module PilotMichael Collins
      Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
      + +

      Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

      + +
        +
      1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
      2. +
      3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
      4. +
      5. Lunar Module for landing on the Moon.
      6. +
      + +

      After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

      + +
      +

      Source: Wikipedia.org

      +
      + + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinetextarea.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinetextarea.html new file mode 100644 index 0000000..9e3d077 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/inlinetextarea.html @@ -0,0 +1,110 @@ + + + + + + Replace Textarea with Inline Editor — CKEditor Sample + + + + + +

      + CKEditor Samples » Replace Textarea with Inline Editor +

      +
      +

      + You can also create an inline editor from a textarea + element. In this case the textarea will be replaced + by a div element with inline editing enabled. +

      +
      +// "article-body" is the name of a textarea element.
      +var editor = CKEDITOR.inline( 'article-body' );
      +
      +
      +
      +

      This is a sample form with some fields

      +

      + Title:
      +

      +

      + Article Body (Textarea converted to CKEditor):
      + +

      +

      + +

      +
      + + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/jquery.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/jquery.html new file mode 100644 index 0000000..74e128a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/jquery.html @@ -0,0 +1,100 @@ + + + + + + jQuery Adapter — CKEditor Sample + + + + + + + + +

      + CKEditor Samples » Create Editors with jQuery +

      +
      +
      +

      + This sample shows how to use the jQuery adapter. + Note that you have to include both CKEditor and jQuery scripts before including the adapter. +

      + +
      +<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      +<script src="/ckeditor/ckeditor.js"></script>
      +<script src="/ckeditor/adapters/jquery.js"></script>
      +
      + +

      Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

      + +
      +$( document ).ready( function() {
      +	$( 'textarea#editor1' ).ckeditor();
      +} );
      +
      +
      + +

      Inline Example

      + +
      +

      Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      +

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. +

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      +

      One small step for [a] man, one giant leap for mankind.

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      +
      + +
      + +

      Classic (iframe-based) Example

      + + + +

      + + + + + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000..913c4bb --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1 @@ +CKEDITOR.dialog.add("myDialog",function(){return{title:"My Dialog",minWidth:400,minHeight:200,contents:[{id:"tab1",label:"First Tab",title:"First Tab",elements:[{id:"input1",type:"text",label:"Text Field"},{id:"select1",type:"select",label:"Select Field",items:[["option1","value1"],["option2","value2"]]}]},{id:"tab2",label:"Second Tab",title:"Second Tab",elements:[{id:"button1",type:"button",label:"Button Field"}]}]};}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/dialog.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000..a85c566 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Using CKEditor Dialog API +

      +
      +

      + This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

      +
        +
      1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
      2. +
      3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
      4. +
      + + +

      The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

      +
        +
      1. Adding dialog tab – Add new tab "My Tab" to dialog window.
      2. +
      3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
      4. +
      5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
      6. +
      7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
      8. +
      9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
      10. +
      11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
      12. +
      + + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/enterkey/enterkey.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/enterkey/enterkey.html new file mode 100644 index 0000000..61fbc72 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/enterkey/enterkey.html @@ -0,0 +1,103 @@ + + + + + + ENTER Key Configuration — CKEditor Sample + + + + + + + + +

      + CKEditor Samples » ENTER Key Configuration +

      +
      +

      + This sample shows how to configure the Enter and Shift+Enter keys + to perform actions specified in the + enterMode + and shiftEnterMode + parameters, respectively. + You can choose from the following options: +

      +
        +
      • ENTER_P – new <p> paragraphs are created;
      • +
      • ENTER_BR – lines are broken with <br> elements;
      • +
      • ENTER_DIV – new <div> blocks are created.
      • +
      +

      + The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	enterMode: CKEDITOR.ENTER_DIV
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +
      +
      + When Enter is pressed:
      + +
      +
      + When Shift+Enter is pressed:
      + +
      +
      +
      +

      +
      + +

      +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000..27e68cc Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf new file mode 100644 index 0000000..dbe17b6 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000..5147e98 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,2 @@ +var swfobject=function(){function aq(){if(!at){try{var e=aC.getElementsByTagName("body")[0].appendChild(aC.createElement("span"));e.parentNode.removeChild(e);}catch(d){return;}at=!0;for(var e=an.length,i=0;ii){i++;setTimeout(arguments.callee,10);return;}}e.removeChild(d);l=null;ah();})();}else{ah();}}function ah(){var s=aw.length;if(0aB.wk)){ar(q,!0),n&&(m.success=!0,m.ref=ag(q),n(m));}else{if(aw[r].expressInstall&&af()){m={};m.data=aw[r].expressInstall;m.width=p.getAttribute("width")||"0";m.height=p.getAttribute("height")||"0";p.getAttribute("class")&&(m.styleclass=p.getAttribute("class"));p.getAttribute("align")&&(m.align=p.getAttribute("align"));for(var l={},p=p.getElementsByTagName("param"),i=p.length,e=0;eaB.wk);}function ae(e,d,m,l){ak=!0;ad=l||null;X={success:!1,id:m};var i=ax(m);if(i){"OBJECT"==i.nodeName?(ao=ac(i),aj=null):(ao=i,aj=m);e.id=o;if(typeof e.width==aA||!/%$/.test(e.width)&&310>parseInt(e.width,10)){e.width="310";}if(typeof e.height==aA||!/%$/.test(e.height)&&137>parseInt(e.height,10)){e.height="137";}aC.title=aC.title.slice(0,47)+" - Flash Player Installation";l=aB.ie&&aB.win?"ActiveX":"PlugIn";l="MMredirectURL="+ay.location.toString().replace(/&/g,"%26")+"&MMplayerType="+l+"&MMdoctitle="+aC.title;d.flashvars=typeof d.flashvars!=aA?d.flashvars+("&"+l):l;aB.ie&&(aB.win&&4!=i.readyState)&&(l=aC.createElement("div"),m+="SWFObjectNew",l.setAttribute("id",m),i.parentNode.insertBefore(l,i),i.style.display="none",function(){i.readyState==4?i.parentNode.removeChild(i):setTimeout(arguments.callee,10);}());ab(e,d,m);}}function a(e){if(aB.ie&&aB.win&&4!=e.readyState){var d=aC.createElement("div");e.parentNode.insertBefore(d,e);d.parentNode.replaceChild(ac(e),d);e.style.display="none";(function(){4==e.readyState?e.parentNode.removeChild(e):setTimeout(arguments.callee,10);})();}else{e.parentNode.replaceChild(ac(e),e);}}function ac(e){var d=aC.createElement("div");if(aB.win&&aB.ie){d.innerHTML=e.innerHTML;}else{if(e=e.getElementsByTagName(au)[0]){if(e=e.childNodes){for(var l=e.length,i=0;iaB.wk){return n;}if(m){if(typeof r.id==aA&&(r.id=p),aB.ie&&aB.win){var d="",l;for(l in r){r[l]!=Object.prototype[l]&&("data"==l.toLowerCase()?q.movie=r[l]:"styleclass"==l.toLowerCase()?d+=' class="'+r[l]+'"':"classid"!=l.toLowerCase()&&(d+=" "+l+'="'+r[l]+'"'));}l="";for(var i in q){q[i]!=Object.prototype[i]&&(l+='');}m.outerHTML='"+l+"";ai[ai.length]=r.id;n=ax(r.id);}else{i=aC.createElement(au);i.setAttribute("type",am);for(var e in r){r[e]!=Object.prototype[e]&&("styleclass"==e.toLowerCase()?i.setAttribute("class",r[e]):"classid"!=e.toLowerCase()&&i.setAttribute(e,r[e]));}for(d in q){q[d]!=Object.prototype[d]&&"movie"!=d.toLowerCase()&&(r=i,l=d,e=q[d],p=aC.createElement("param"),p.setAttribute("name",l),p.setAttribute("value",e),r.appendChild(p));}m.parentNode.replaceChild(i,m);n=i;}}return n;}function k(e){var d=ax(e);d&&"OBJECT"==d.nodeName&&(aB.ie&&aB.win?(d.style.display="none",function(){if(4==d.readyState){var l=ax(e);if(l){for(var i in l){"function"==typeof l[i]&&(l[i]=null);}l.parentNode.removeChild(l);}}else{setTimeout(arguments.callee,10);}}()):d.parentNode.removeChild(d));}function ax(e){var d=null;try{d=aC.getElementById(e);}catch(i){}return d;}function c(e,d,i){e.attachEvent(d,i);ap[ap.length]=[e,d,i];}function al(e){var d=aB.pv,e=e.split(".");e[0]=parseInt(e[0],10);e[1]=parseInt(e[1],10)||0;e[2]=parseInt(e[2],10)||0;return d[0]>e[0]||d[0]==e[0]&&d[1]>e[1]||d[0]==e[0]&&d[1]==e[1]&&d[2]>=e[2]?!0:!1; +}function j(e,d,m,l){if(!aB.ie||!aB.mac){var i=aC.getElementsByTagName("head")[0];if(i){m=m&&"string"==typeof m?m:"screen";l&&(aa=az=null);if(!az||aa!=m){l=aC.createElement("style"),l.setAttribute("type","text/css"),l.setAttribute("media",m),az=i.appendChild(l),aB.ie&&(aB.win&&typeof aC.styleSheets!=aA&&0\.;]/.exec(d)&&typeof encodeURIComponent!=aA?encodeURIComponent(d):d;}var aA="undefined",au="object",am="application/x-shockwave-flash",o="SWFObjectExprInst",ay=window,aC=document,av=navigator,f=!1,an=[function(){f?b():ah();}],aw=[],ai=[],ap=[],ao,aj,ad,X,at=!1,ak=!1,az,aa,h=!0,aB=function(){var s=typeof aC.getElementById!=aA&&typeof aC.getElementsByTagName!=aA&&typeof aC.createElement!=aA,r=av.userAgent.toLowerCase(),q=av.platform.toLowerCase(),n=q?/win/.test(q):/win/.test(r),q=q?/mac/.test(q):/mac/.test(r),r=/webkit/.test(r)?parseFloat(r.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,m=!+"\v1",p=[0,0,0],l=null;if(typeof av.plugins!=aA&&typeof av.plugins["Shockwave Flash"]==au){if((l=av.plugins["Shockwave Flash"].description)&&!(typeof av.mimeTypes!=aA&&av.mimeTypes[am]&&!av.mimeTypes[am].enabledPlugin)){f=!0,m=!1,l=l.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),p[0]=parseInt(l.replace(/^(.*)\..*$/,"$1"),10),p[1]=parseInt(l.replace(/^.*\.(.*)\s.*$/,"$1"),10),p[2]=/[a-zA-Z]/.test(l)?parseInt(l.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0;}}else{if(typeof ay.ActiveXObject!=aA){try{var i=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(i&&(l=i.GetVariable("$version"))){m=!0,l=l.split(" ")[1].split(","),p=[parseInt(l[0],10),parseInt(l[1],10),parseInt(l[2],10)];}}catch(d){}}}return{w3:s,pv:p,wk:r,ie:m,win:n,mac:q};}();(function(){aB.w3&&((typeof aC.readyState!=aA&&"complete"==aC.readyState||typeof aC.readyState==aA&&(aC.getElementsByTagName("body")[0]||aC.body))&&aq(),at||(typeof aC.addEventListener!=aA&&aC.addEventListener("DOMContentLoaded",aq,!1),aB.ie&&aB.win&&(aC.attachEvent("onreadystatechange",function(){"complete"==aC.readyState&&(aC.detachEvent("onreadystatechange",arguments.callee),aq());}),ay==top&&function(){if(!at){try{aC.documentElement.doScroll("left");}catch(d){setTimeout(arguments.callee,0);return;}aq();}}()),aB.wk&&function(){at||(/loaded|complete/.test(aC.readyState)?aq():setTimeout(arguments.callee,0));}(),Y(aq)));})();(function(){aB.ie&&aB.win&&window.attachEvent("onunload",function(){for(var e=ap.length,d=0;daB.wk)&&w&&v&&u&&t&&s?(ar(v,!1),Z(function(){u+="";t+="";var x={};if(p&&typeof p===au){for(var d in p){x[d]=p[d];}}x.data=w;x.width=u;x.height=t;d={};if(q&&typeof q===au){for(var n in q){d[n]=q[n];}}if(r&&typeof r===au){for(var m in r){d.flashvars=typeof d.flashvars!=aA?d.flashvars+("&"+m+"="+r[m]):m+"="+r[m];}}if(al(s)){n=ab(x,d,v),x.id==v&&ar(v,!0),i.success=!0,i.ref=n;}else{if(e&&af()){x.data=e;ae(x,d,v,l);return;}ar(v,!0);}l&&l(i);})):l&&l(i);},switchOffAutoHideShow:function(){h=!1;},ua:aB,getFlashPlayerVersion:function(){return{major:aB.pv[0],minor:aB.pv[1],release:aB.pv[2]};},hasFlashPlayerVersion:al,createSWF:function(e,d,i){if(aB.w3){return ab(e,d,i);}},showExpressInstall:function(i,e,m,l){aB.w3&&af()&&ae(i,e,m,l);},removeSWF:function(d){aB.w3&&k(d);},createCSS:function(i,e,m,l){aB.w3&&j(i,e,m,l);},addDomLoadEvent:Z,addLoadEvent:Y,getQueryParamValue:function(e){var d=aC.location.search||aC.location.hash;if(d){/\?/.test(d)&&(d=d.split("?")[1]);if(null==e){return g(d);}for(var d=d.split("&"),i=0;i + + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + +

      + CKEditor Samples » Producing Flash Compliant HTML Output +

      +
      +

      + This sample shows how to configure CKEditor to output + HTML code that can be used with + + Adobe Flash. + The code will contain a subset of standard HTML elements like <b>, + <i>, and <p> as well as HTML attributes. +

      +

      + To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      + To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + Send to Flash button. +

      + + + + + +
      + + +

      + +

      +
      +
      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000..587988a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Producing HTML Compliant Output +

      +
      +

      + This sample shows how to configure CKEditor to output valid + HTML 4.01 code. + Traditional HTML elements like <b>, + <i>, and <font> are used in place of + <strong>, <em>, and CSS styles. +

      +

      + To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. +

      +

      + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	coreStyles_bold: { element: 'b' },
      +	coreStyles_italic: { element: 'i' },
      +
      +	fontSize_style: {
      +		element: 'font',
      +		attributes: { 'size': '#(size)' }
      +	}
      +
      +	...
      +});
      +
      +
      +

      + + + +

      +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/magicline/magicline.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000..996c3b9 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/magicline/magicline.html @@ -0,0 +1,206 @@ + + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Using Magicline plugin +

      +
      +

      + This sample shows the advantages of Magicline plugin + which is to enhance the editing process. Thanks to this plugin, + a number of difficult focus spaces which are inaccessible due to + browser issues can now be focused. +

      +

      + Magicline plugin shows a red line with a handler + which, when clicked, inserts a paragraph and allows typing. To see this, + focus an editor and move your mouse above the focus space you want + to access. The plugin is enabled by default so no additional + configuration is necessary. +

      +
      +
      + +
      +

      + This editor uses a default Magicline setup. +

      +
      + + +
      +
      +
      + +
      +

      + This editor is using a blue line. +

      +
      +CKEDITOR.replace( 'editor2', {
      +	magicline_color: 'blue'
      +});
      +
      + + +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/toolbar/toolbar.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000..79d230b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Toolbar Configuration +

      +
      +

      + This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if + current editor's configuration modifies default settings, also editor with modified toolbar. +

      + +

      Since CKEditor 4 there are two ways to configure toolbar buttons.

      + +

      By config.toolbar

      + +

      + You can explicitly define which buttons are displayed in which groups and in which order. + This is the more precise setting, but less flexible. If newly added plugin adds its + own button you'll have to add it manually to your config.toolbar setting as well. +

      + +

      To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

      + +
      +CKEDITOR.replace( 'textarea_id', {
      +	toolbar: [
      +		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
      +		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
      +		'/',																					// Line break - next group will be placed in new line.
      +		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
      +	]
      +});
      + +

      By config.toolbarGroups

      + +

      + You can define which groups of buttons (like e.g. basicstyles, clipboard + and forms) are displayed and in which order. Registered buttons are associated + with toolbar groups by toolbar property in their definition. + This setting's advantage is that you don't have to modify toolbar configuration + when adding/removing plugins which register their own buttons. +

      + +

      To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

      + +
      +CKEDITOR.replace( 'textarea_id', {
      +	toolbarGroups: [
      +		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
      + 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
      + 		'/',																// Line break - next group will be placed in new line.
      + 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
      + 		{ name: 'links' }
      +	]
      +
      +	// NOTE: Remember to leave 'toolbar' property with the default value (null).
      +});
      +
      + + + +
      +

      Full toolbar configuration

      +

      Below you can see editor with full toolbar, generated automatically by the editor.

      +

      + Note: To create editor instance with full toolbar you don't have to set anything. + Just leave toolbar and toolbarGroups with the default, null values. +

      + +
      
      +	
      + + + + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000..66b3f12 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Full Page Editing +

      +
      +

      + This sample shows how to configure CKEditor to edit entire HTML pages, from the + <html> tag to the </html> tag. +

      +

      + The CKEditor instance below is inserted with a JavaScript call using the following code: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	fullPage: true,
      +	allowedContent: true
      +});
      +
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +

      + The allowedContent in the code above is set to true to disable content filtering. + Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. +

      +
      +
      + + + +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/readonly.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/readonly.html new file mode 100644 index 0000000..bbd9f69 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + +

      + CKEditor Samples » Using the CKEditor Read-Only API +

      +
      +

      + This sample shows how to use the + setReadOnly + API to put editor into the read-only state that makes it impossible for users to change the editor contents. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +
      +

      + +

      +

      + + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebyclass.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebyclass.html new file mode 100644 index 0000000..1547f33 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements by Class Name +

      +
      +

      + This sample shows how to automatically replace all <textarea> elements + of a given class with a CKEditor instance. +

      +

      + To replace a <textarea> element, simply assign it the ckeditor + class, as in the code below: +

      +
      +<textarea class="ckeditor" name="editor1"></textarea>
      +
      +

      + Note that other <textarea> attributes (like id or name) need to be adjusted to your document. +

      +
      +
      +

      + + +

      +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebycode.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebycode.html new file mode 100644 index 0000000..e25e915 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + + Replace Textarea by Code — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

      +
      +
      +

      + This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. +

      +
      +CKEDITOR.replace( 'textarea_id' )
      +
      +
      + + +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.css new file mode 100644 index 0000000..4d138a8 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.js new file mode 100644 index 0000000..4dff3a4 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/sample.js @@ -0,0 +1 @@ +(function(){CKEDITOR.on("instanceReady",function(h){var e=h.editor,l=CKEDITOR.document.$.getElementsByName("ckeditor-sample-required-plugins"),m=l.length?CKEDITOR.dom.element.get(l[0]).getAttribute("content").split(","):[],c=[],d;if(m.length){for(d=0;d"+m[d]+"
      ");}}if(c.length){var f=CKEDITOR.dom.element.createFromHtml('
      '+"To fully experience this demo, the "+c.join(", ")+" plugin"+(c.length>1?"s are":" is")+" required."+"
      ");f.insertBefore(e.container);}}var j=new CKEDITOR.dom.document(document),k=j.find(".button_icon");for(d=0;d
      +
      +-------------------------------------------------------------------------------------------
      +  CKEditor - Posted Data
      +
      +  We are sorry, but your Web server does not support the PHP language used in this script.
      +
      +  Please note that CKEditor can be used with any other server-side language than just PHP.
      +  To save the content created with CKEditor you need to read the POST data on the server
      +  side and write it to a file or the database.
      +
      +  Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
      +  For licensing, see LICENSE.md or http://ckeditor.com/license
      +-------------------------------------------------------------------------------------------
      +
      +
      */ include "assets/posteddata.php"; ?> diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/tabindex.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/tabindex.html new file mode 100644 index 0000000..5d1ab63 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/tabindex.html @@ -0,0 +1,75 @@ + + + + + + TAB Key-Based Navigation — CKEditor Sample + + + + + + +

      + CKEditor Samples » TAB Key-Based Navigation +

      +
      +

      + This sample shows how tab key navigation among editor instances is + affected by the tabIndex attribute from + the original page element. Use TAB key to move between the editors. +

      +
      +

      + +

      +
      +

      + +

      +

      + +

      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uicolor.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uicolor.html new file mode 100644 index 0000000..d7c5dea --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + + UI Color Picker — CKEditor Sample + + + + +

      + CKEditor Samples » UI Color +

      +
      +

      + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the color of its user interface.
      + Note:The UI skin color feature depends on the CKEditor skin + compatibility. The Moono and Kama skins are examples of skins that work with it. +

      +
      +
      +

      + This editor instance has a UI color value defined in configuration to change the skin color, + To specify the color of the user interface, set the uiColor property: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	uiColor: '#14B8C4'
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +

      + + +

      +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uilanguages.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uilanguages.html new file mode 100644 index 0000000..4e73dcc --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + + User Interface Globalization — CKEditor Sample + + + + + +

      + CKEditor Samples » User Interface Languages +

      +
      +

      + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the language of its user interface. +

      +

      + It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. +

      +

      + By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + language and + + defaultLanguage. The defaultLanguage setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. +

      +

      + To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the language property: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	// Load the German interface.
      +	language: 'de'
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +
      +
      +

      + Available languages ( languages!):
      + +
      + + (You may see strange characters if your system does not support the selected language) + +

      +

      + + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/xhtmlstyle.html b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/xhtmlstyle.html new file mode 100644 index 0000000..b53b431 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + +

      + CKEditor Samples » Producing XHTML Compliant Output +

      +
      +

      + This sample shows how to configure CKEditor to output valid + XHTML 1.1 code. + Deprecated elements (<font>, <u>) or attributes + (size, face) will be replaced with XHTML compliant code. +

      +

      + To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. +

      +

      + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	contentsCss: 'assets/outputxhtml.css',
      +
      +	coreStyles_bold: {
      +		element: 'span',
      +		attributes: { 'class': 'Bold' }
      +	},
      +	coreStyles_italic: {
      +		element: 'span',
      +		attributes: { 'class': 'Italic' }
      +	},
      +
      +	...
      +});
      +
      +
      +

      + + + +

      +

      + +

      +
      + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000..8fdd5ab --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000..48c1b4b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie7.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000..bdc5a38 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie8.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000..89b1664 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_iequirks.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000..a168d84 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000..e3c946a --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_gecko.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000..98fa259 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000..fa4cf00 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie7.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000..fe43ce5 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie8.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000..e5174c7 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_iequirks.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000..4048b69 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000..ee02970 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons_hidpi.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons_hidpi.png new file mode 100644 index 0000000..0466c2b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/icons_hidpi.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/arrow.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/arrow.png new file mode 100644 index 0000000..d72b5f3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/arrow.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/close.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000..6a04ab5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/close.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/close.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/close.png new file mode 100644 index 0000000..e406c2c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/close.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock-open.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock-open.png new file mode 100644 index 0000000..edbd12f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock-open.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock.png new file mode 100644 index 0000000..1b87bbb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/lock.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/refresh.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/refresh.png new file mode 100644 index 0000000..c6c2b86 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/hidpi/refresh.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock-open.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock-open.png new file mode 100644 index 0000000..0476987 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock-open.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock.png new file mode 100644 index 0000000..c5a1440 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/lock.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/refresh.png b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/refresh.png new file mode 100644 index 0000000..1ff63c3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/images/refresh.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/readme.md b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/readme.md new file mode 100644 index 0000000..e3abd58 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/styles.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/styles.js new file mode 100644 index 0000000..075ec6c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/lib/plugins/editor/ckeditor/styles.js @@ -0,0 +1 @@ +CKEDITOR.stylesSet.add("default",[{name:"Italic Title",element:"h2",styles:{"font-style":"italic"}},{name:"Subtitle",element:"h3",styles:{"color":"#aaa","font-style":"italic"}},{name:"Special Container",element:"div",styles:{padding:"5px 10px",background:"#eee",border:"1px solid #ccc"}},{name:"Marker",element:"span",attributes:{"class":"marker"}},{name:"Big",element:"big"},{name:"Small",element:"small"},{name:"Typewriter",element:"tt"},{name:"Computer Code",element:"code"},{name:"Keyboard Phrase",element:"kbd"},{name:"Sample Text",element:"samp"},{name:"Variable",element:"var"},{name:"Deleted Text",element:"del"},{name:"Inserted Text",element:"ins"},{name:"Cited Work",element:"cite"},{name:"Inline Quotation",element:"q"},{name:"Language: RTL",element:"span",attributes:{"dir":"rtl"}},{name:"Language: LTR",element:"span",attributes:{"dir":"ltr"}},{name:"Styled image (left)",element:"img",attributes:{"class":"left"}},{name:"Styled image (right)",element:"img",attributes:{"class":"right"}},{name:"Compact table",element:"table",attributes:{cellpadding:"5",cellspacing:"0",border:"1",bordercolor:"#ccc"},styles:{"border-collapse":"collapse"}},{name:"Borderless Table",element:"table",styles:{"border-style":"hidden","background-color":"#E6E6FA"}},{name:"Square Bulleted List",element:"ul",styles:{"list-style-type":"square"}}]); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/plugin.js new file mode 100644 index 0000000..2ee0a07 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/plugin.js @@ -0,0 +1,3 @@ +(function(){function am(){return"ckeditor";}function d(aq){return aq.elementMode==3;}function ak(aq){return aq.name.replace(/\[/,"_").replace(/\]/,"_");}function ao(aq){return aq.container.$;}function f(aq){return aq.document.$;}function af(aq){return aq.getSnapshot();}function D(ar,aq){ar.loadSnapshot(aq);}function z(ar){if(ar.getSelection()==null){return null;}var aq=ar.getSelection().getStartElement();if(aq&&aq.$){return aq.$;}return null;}function r(){return CKEDITOR.basePath;}function Y(){return b("jsplus_bootstrap_editor");}function b(aq){return CKEDITOR.plugins.getPath(aq);}function I(){return CKEDITOR.version.charAt(0)=="3"?3:4;}function X(at,ar){if(I()==3){var aq=(ar.indexOf("jsplus_bootstrap_editor_")==-1)?("jsplus_bootstrap_editor_"+ar):ar;if(typeof(at.lang[aq])!=="undefined"){return at.lang[aq];}else{console.log("(v3) editor.lang['jsplus_bootstrap_editor'] not defined");}}else{if(typeof(at.lang["jsplus_bootstrap_editor"])!=="undefined"){if(typeof(at.lang["jsplus_bootstrap_editor"][ar])!=="undefined"){return at.lang["jsplus_bootstrap_editor"][ar];}else{console.log("editor.lang['jsplus_bootstrap_editor']['"+ar+"'] not defined");}}else{console.log("editor.lang['jsplus_bootstrap_editor'] not defined");}}return"";}function B(ar,aq){return K(ar,"jsplus_bootstrap_editor_"+aq);}function K(ar,aq){var at=ar.config[aq];return at;}function ag(aq,ar){an("jsplus_bootstrap_editor_"+aq,ar);}function an(aq,ar){CKEDITOR.config[aq]=ar;}function F(at,ar){var aq=CKEDITOR.dom.element.createFromHtml(ar);at.insertElement(aq);}function O(){return"";}var P=0;var h=1;var ab=2;function o(aq,au,ar){var at=null;if(ar==P){at=CKEDITOR.TRISTATE_DISABLED;}else{if(ar==h){at=CKEDITOR.TRISTATE_OFF;}else{if(ar==ab){at=CKEDITOR.TRISTATE_ON;}}}if(at!=null&&aq.ui&&aq.ui.get(au)){aq.ui.get(au).setState(at);}}function M(aq,ar){aq.on("selectionChange",function(at){ar(at.editor);});}function ac(ar,aq,at){if(aq=="beforeGetOutputHTML"){ar.on("toDataFormat",function(au){return at(ar,au.data.dataValue);},null,null,4);return;}ar.on(aq,(function(){var au=ar;return function(){at(au);};})());}function T(at,aq,aw,au,av,ar){at.addCommand(aq,{exec:av});at.ui.addButton(aq,{title:X(at,au.replace(/^jsplus_/,"")),label:X(at,au.replace(/^jsplus_/,"")),icon:Y()+"icons/"+aw+".png",command:aw});}function J(aq){return aq.mode=="wysiwyg";}function V(ar,aq,at){CKEDITOR.plugins.add(ar,{icons:ar,lang:aq,init:function(au){at(au);}});}function S(){JSDialog.Config.skin=null;JSDialog.Config.templateDialog='
      '+'
      '+'
      '+'
      '+''+'X'+""+"
      "+'
      '+'
      '+"
      "+'"+"
      "+"
      ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
      ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");w(document,".jsdialog_plugin_jsplus_bootstrap_editor.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_editor.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_editor.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_editor .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_editor .cke_dialog_contents { padding: 0; }"); +}function ad(){var aq=false;if(aq){var av=window.location.hostname;var au=0;var ar;var at;if(av.length!=0){for(ar=0,l=av.length;ar=aw);return aq.toFixed(1)+at+ar[au]+(av?"b":"");}function G(aq){return aq.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function i(aq){return aq.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ai(aq){var ar=document.createElement("div");ar.innerHTML=aq;return ar.childNodes;}function c(aq){return aq.getElementsByTagName("head")[0];}function k(aq){return aq.getElementsByTagName("body")[0];}function g(at,av){var aq=at.getElementsByTagName("link");var au=false;for(var ar=aq.length-1;ar>=0;ar--){if(aq[ar].href==av){aq[ar].parentNode.removeChild(aq[ar]);}}}function n(au,aw){if(!au){return;}var aq=au.getElementsByTagName("link");var av=false;for(var ar=0;ar-1){ar.splice(ar.indexOf(aq),1);}var au=ar.join(" ").trim();if(au.length>0){at.className=au;}else{if(at.hasAttribute("class")){at.removeAttribute("class");}}}function H(aq){if(typeof(aq.className)==="undefined"||aq.className==null){return[];}return aq.className.split(/\s+/);}function U(au,aq){var at=H(au);for(var ar=0;ar-1){av[aw.substr(0,aq).trim()]=aw.substr(aq+1);}else{av[aw]="";}}return av;}function R(at,ar){var au=j(at);for(var aq in au){var av=au[aq];if(aq==ar){return av;}}return null;}function x(au,at,aq){var av=j(au);for(var ar in av){var aw=av[ar];if(ar==at&&aw==aq){return true;}}return false;}function N(at,ar,aq){var au=j(at);au[ar]=aq;q(at,au);}function aa(ar,aq){var at=j(ar);delete at[aq];q(ar,at);}function q(ar,au){var at=[];for(var aq in au){at.push(aq+":"+au[aq]);}if(at.length>0){ar.setAttribute("style",at.join(";"));}else{if(ar.hasAttribute("style")){ar.removeAttribute("style");}}}function C(av,ar){var at;if(Object.prototype.toString.call(ar)==="[object Array]"){at=ar;}else{at=[ar];}for(var au=0;au-1){aq.push(av.childNodes[au]);}}return aq;}V("jsplus_bootstrap_editor","en,ru",Z);ag("highlight_blocks",true);ag("highlight_breadcrumbs",true);ag("config",{});function Z(aq){T(aq,"jsplus_bootstrap_editor","jsplus_bootstrap_editor","jsplus_bootstrap_editor",t);ac(aq,"mode",Q);ac(aq,"contentDom",function(ar){if(B(ar,"highlight_blocks")===true){n(f(ar),m(ar));}ae(window.document,Y()+"lib/bootstrapeditor.js");elWrap=window.document.createElement("div"); +elWrap.id="jsplus-bootstrap-editor-editor-wrap";elWrap.setAttribute("style","position:fixed;z-index:10;left:0;top:0;width:100%;min-height:100%;display:none;background-color:#6C538B;");window.document.getElementsByTagName("body")[0].appendChild(elWrap);});ac(aq,"beforeGetOutputHTML",a);ac(aq,"selectionChange",s);ac(aq,"elementsPathUpdate",y);}var e={};var p={};var u={};function s(at){if(!(at in e)){e[at]=null;}if(!(at in p)){p[at]=false;}if(p[at]===true){return;}var ar=z(at);var au=null;var aq=[];var aw=false;while(!aw){var av=al(ar);aq.push([ar,av]);if(au==null&&av){au=ar;}if(ar.parentNode==null||ar.tagName=="BODY"){aw=true;}else{ar=ar.parentNode;}}u[at]=aq;if(au==null){au=f(at).getElementsByTagName("body")[0];}if(e[at]!=null&&e[at]!=au){e[at].removeAttribute("data-jsplus-bootstrap-editor-selected");}au.setAttribute("data-jsplus-bootstrap-editor-selected","1");e[at]=au;}function y(ax){var at=u[ax];if(at!=null&&B(ax,"highlight_breadcrumbs")==true){if(am()=="ckeditor"){var aw=ao(ax);var aq=aw.getElementsByClassName("cke_path_item");if(aq.length>0&&aq.length==at.length){for(var au=aq.length-1;au>=0;au--){var ar=aq[au];var av=at[at.length-1-au][1];if(av){N(ar,"background-color","#B878FF");N(ar,"color","white");N(ar,"text-shadow","none");}else{aa(ar,"background-color");aa(ar,"color");aa(ar,"text-shadow");}}}else{}}else{if(am()=="tinymce"){}}}}function al(ar){var au=ar.children;for(var aq=0;aq'+i(m(ar))+"","g"),"");}function m(aq){return Y()+"style.css";}function Q(aq){var ar;if(J(aq)){ar=h;}else{ar=P;}o(aq,"jsplus_bootstrap_editor",ar);}})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_editor/style.css b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/style.css new file mode 100644 index 0000000..02fc922 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_editor/style.css @@ -0,0 +1,133 @@ +[contenteditable="true"] [data-alpha-bootstrap-selected="1"], [contenteditable="true"][data-alpha-bootstrap-selected="1"] { + outline: 1px dotted mediumvioletred !important; +} + +/* +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row, [contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row { + outline: 1px solid blueviolet !important; +} + +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-1, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-2, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-3, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-4, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-5, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-6, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-7, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-8, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-9, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-10, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-11, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xs-12, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-1, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-2, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-3, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-4, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-5, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-6, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-7, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-8, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-9, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-10, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-11, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-sm-12, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-1, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-2, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-3, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-4, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-5, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-6, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-7, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-8, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-9, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-10, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-11, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-md-12, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-1, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-2, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-3, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-4, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-5, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-6, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-7, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-8, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-9, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-10, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-11, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-lg-12, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-1, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-2, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-3, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-4, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-5, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-6, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-7, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-8, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-9, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-10, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-11, +[contenteditable="true"] [data-alpha-bootstrap-selected="1"] > .row > .col-xl-12, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-1, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-2, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-3, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-4, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-5, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-6, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-7, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-8, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-9, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-10, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-11, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xs-12, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-1, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-2, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-3, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-4, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-5, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-6, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-7, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-8, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-9, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-10, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-11, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-sm-12, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-1, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-2, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-3, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-4, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-5, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-6, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-7, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-8, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-9, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-10, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-11, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-md-12, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-1, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-2, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-3, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-4, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-5, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-6, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-7, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-8, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-9, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-10, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-11, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-lg-12, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-1, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-2, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-3, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-4, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-5, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-6, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-7, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-8, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-9, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-10, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-11, +[contenteditable="true"][data-alpha-bootstrap-selected="1"] > .row > .col-xl-12 +{ + outline: 1px dotted violet !important; +} +*/ \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery.png new file mode 100644 index 0000000..33f11bb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery_3.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery_3.png new file mode 100644 index 0000000..764160a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/icons/jsplus_bootstrap_gallery_3.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up.png new file mode 100644 index 0000000..8f1b68e Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked.png new file mode 100644 index 0000000..1553687 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked_hover.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked_hover.png new file mode 100644 index 0000000..2bc11e2 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_checked_hover.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_disabled.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_disabled.png new file mode 100644 index 0000000..8476368 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_disabled.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_hover.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_hover.png new file mode 100644 index 0000000..303cb0c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/img/resize_up_hover.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/en.js b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/en.js new file mode 100644 index 0000000..f4863e6 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/en.js @@ -0,0 +1,30 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_gallery', 'en', { + jsplus_image_title: "Insert image", // image + jsplus_preview_title: "Insert image with preview", // preview + jsplus_file_title: "Insert file", // file + jsplus_gallery_title: "Insert gallery", // gallery + jsplus_bootstrap_gallery_title: "Insert Bootstrap gallery", // bs gallery + jsplus_foundation_gallery_title: "Insert Foundation gallery", // bs gallery + + jsplus_bootstrap_gallery_col_count: "Columns", + jsplus_foundation_gallery_col_count: "Columns", + + file_filter_name: "All supported files", + + resize: "Max size", // image or preview + resize_up: "Scale up if small image", // image or preview + resize_thumb: "Thumbnail", // preview + download_label: "Download file", // file + status_file_upload: "File uploading...", + status_file_upload_success: "File upload success. Click OK to continue", + status_file_upload_wait: "Uploading file. Wait...", + status_file_upload_fail: "Unable to upload the file. Try again or use another file.", + label_send_to_server: "Send to server", + label_no_file: "You did not upload a file", + label_no_support: "Loading...", + + select_files_first: 'Select files first', + + btn_ok: "OK", + btn_cancel: "Cancel" +} ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/es.js b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/es.js new file mode 100644 index 0000000..62a701c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/es.js @@ -0,0 +1,29 @@ +plupload.addI18n({"Stop Upload":"Detener Subida.","Upload URL might be wrong or doesn't exist.":"URL de carga inexistente.","tb":"","Size":"Tamaño","Close":"Cerrar","Init error.":"Error de inicialización.","Add files to the upload queue and click the start button.":"Agregue archivos a la lista de subida y pulse clic en el botón de Iniciar carga","Filename":"Nombre de archivo","Image format either wrong or not supported.":"Formato de imagen no soportada.","Status":"Estado","HTTP Error.":"Error de HTTP.","Start Upload":"Iniciar carga","mb":"","kb":"","Duplicate file error.":"Error, archivo duplicado","File size error.":"Error de tamaño de archivo.","N/A":"No disponible","gb":"","Error: Invalid file extension:":"Error: Extensión de archivo inválida:","Select files":"Elija archivos","%s already present in the queue.":"%s ya se encuentra en la lista.","File: %s":"Archivo: %s","b":"","Uploaded %d/%d files":"Subidos %d/%d archivos","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Se aceptan sólo %d archivo(s) al tiempo. Más, no se tienen en cuenta.","%d files queued":"%d archivos en cola.","File: %s, size: %d, max file size: %d":"Archivo: %s, tamaño: %d, tamaño máximo de archivo: %d","Drag files here.":"Arrastre archivos aquí","Runtime ran out of available memory.":"No hay memoria disponible.","File count error.":"Error en contador de archivos.","File extension error.":"Error de extensión de archivo.","Error: File too large:":"Error: archivo demasiado grande:","Add Files":"Agregar archivos"}); +CKEDITOR.plugins.setLang('jsplus_bootstrap_gallery', 'es', { + jsplus_image_title: "Insertar imagen", + jsplus_preview_title: "Insertar imagen con vista previa", + jsplus_file_title: "Insertar archivo", + jsplus_gallery_title: "Insert gallery", // gallery + jsplus_bootstrap_gallery_title: "Insert Bootstrap gallery", // bs gallery + + jsplus_bootstrap_gallery_col_count: "Columns", + + file_filter_name: "All supported files", + + resize: "Tamaño máx", + resize_up: "Ampliarse si una imagen pequeña", + resize_thumb: "Previa", + download_label: "Descargar archivo", + status_file_upload: "Cargando archivo...", + status_file_upload_success: "Archivo cargado con satisfactoriamente. Pulse aceptar para continuar", + status_file_upload_wait: "Cargando archivo. Por favor, espere...", + status_file_upload_fail: "No ha sido posible cargar el archivo. Pruebe otra vez o utiice otro archivo.", + label_send_to_server: "Subir al servidor", + label_no_file: "No has subido ningún archivo", + label_no_support: "Loading...", + + select_files_first: 'Seleccione los archivos primero', + + btn_ok: "OK", + btn_cancel: "Cancelar" +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/ru.js b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/ru.js new file mode 100644 index 0000000..832cb4e --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lang/ru.js @@ -0,0 +1,30 @@ +plupload.addI18n({"Stop Upload":"\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0443","Upload URL might be wrong or doesn't exist.":"\u0410\u0434\u0440\u0435\u0441 \u0437\u0430\u0440\u0433\u0443\u0437\u043a\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0438\u043b\u0438 \u043e\u043d \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.","tb":"\u0442\u0431","Size":"\u0420\u0430\u0437\u043c\u0435\u0440","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","Init error.":"\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.","Add files to the upload queue and click the start button.":"\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b\".","Filename":"\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430","Image format either wrong or not supported.":"\u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0438\u043b\u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.","Status":"\u0421\u0442\u0430\u0442\u0443\u0441","HTTP Error.":"\u041e\u0448\u0438\u0431\u043a\u0430 HTTP.","Start Upload":"\u041d\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443","mb":"\u043c\u0431","kb":"\u043a\u0431","Duplicate file error.":"\u0422\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.","File size error.":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430.","N\/A":"N\/A","gb":"\u0433\u0431","Error: Invalid file extension:":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0423 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435:","Select files":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b","%s already present in the queue.":"%s \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.","File: %s":"\u0424\u0430\u0439\u043b: %s","b":"\u0431","Uploaded %d\/%d files":"\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d\/%d \u0444\u0430\u0439\u043b\u043e\u0432","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"\u0417\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0440\u0430\u0437 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e %d \u0444\u0430\u0439\u043b(\u043e\u0432). \u041b\u0438\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u044b\u043b\u0438 \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b.","%d files queued":"\u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 %d \u0444\u0430\u0439\u043b(\u043e\u0432)","File: %s, size: %d, max file size: %d":"\u0424\u0430\u0439\u043b: %s, \u0440\u0430\u0437\u043c\u0435\u0440: %d, \u043c\u0430\u043a\u0441. \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430: %d","Drag files here.":"\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u044e\u0434\u0430.","Runtime ran out of available memory.":"\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0430 \u043b\u0438\u043c\u0438\u0442 \u0434\u043e\u0441\u0442\u0443\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.","File count error.":"\u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432.","File extension error.":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430.","Error: File too large:":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0424\u0430\u0439\u043b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439:","Add Files":"\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0430\u0439\u043b\u044b"}); +CKEDITOR.plugins.setLang('jsplus_bootstrap_gallery', 'ru', { + jsplus_image_title: "Вставить изображение", + jsplus_preview_title: "Вставить изображение с превью", + jsplus_file_title: "Вставить файл", + jsplus_gallery_title: "Вставить галерею", + jsplus_bootstrap_gallery_title: "Вставить Bootstrap галерею", + + jsplus_bootstrap_gallery_col_count: "Колонок", + + file_filter_name: "Все поддерживаемые типы файлов", + + resize: "Макс. размер", + resize_up: "Масштабировать в сторону увеличения", + resize_thumb: "Превью", + download_label: "Скачать файл", + status_file_upload: "Загрузка файла...", + status_file_upload_success: "Файл успешно загружен, нажмите ОК для продолжения", + status_file_upload_wait: "Файл загружается. Подождите...", + status_file_upload_fail: "Не удалось загрузить файл. Попытайтесь снова или попробуйте загрузить другой файл.", + label_send_to_server: "Отправить на сервер", + label_no_file: "Вы еще не загрузили файл на сервер", + label_no_support: "Загрузка...", + + select_files_first: 'Укажите файлы', + + btn_ok: "OK", + btn_cancel: "Отмена" + } +); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/css/jquery.plupload.queue.css b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/css/jquery.plupload.queue.css new file mode 100644 index 0000000..2cfe59c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/css/jquery.plupload.queue.css @@ -0,0 +1,183 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + display: -moz-inline-box !important; /* FF < 3*/ + display: inline-block !important; + font: normal 12px sans-serif !important; + text-decoration: none !important; + color: #42454a !important; + border: 1px solid #bababa !important; + padding: 2px 8px 3px 20px !important; + margin-right: 4px !important; + background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center !important; + outline: 0 !important; + + /* Optional rounded corners for browsers that support it */ + -moz-border-radius: 3px !important; + -khtml-border-radius: 3px !important; + -webkit-border-radius: 3px !important; + border-radius: 3px !important; +} + +.plupload_button:hover { + color: #000 !important; + text-decoration: none !important; +} + +.plupload_disabled, a.plupload_disabled:hover { + color: #737373 !important; + border-color: #c5c5c5 !important; + background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center !important; + cursor: default !important; +} + +.plupload_add { + background-position: -181px center !important; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif !important; + width: 100% !important; +} + +.plupload_container { + padding: 8px !important; + background: url('../img/transp50.png') !important; + /*-moz-border-radius: 5px !important;*/ +} + +.plupload_container input { + border: 1px solid #DDD !important; + font: normal 11px Verdana,sans-serif !important; + width: 98% !important; +} + +.plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x !important;} +.plupload_header_content { + background: url('../img/backgrounds.gif') no-repeat 0 -317px !important; + min-height: 56px !important; + padding-left: 60px !important; + color: #FFF !important; +} +.plupload_header_title { + font: normal 18px sans-serif !important; + padding: 6px 0 3px !important; +} +.plupload_header_text { + font: normal 12px sans-serif !important; +} + +.plupload_filelist { + margin: 0 !important; + padding: 0 !important; + list-style: none !important; +} + +.plupload_scroll .plupload_filelist { + height: 185px !important; + background: #F5F5F5 !important; + overflow-y: scroll !important; +} + +.plupload_filelist li { + padding: 10px 8px !important; + background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px !important; + border-bottom: 1px solid #DDD !important; +} + +.plupload_filelist_header, .plupload_filelist_footer { + background: #DFDFDF !important; + padding: 8px 8px !important; + color: #42454A !important; +} +.plupload_filelist_header { + border-top: 1px solid #EEE !important; + border-bottom: 1px solid #CDCDCD !important; +} + +.plupload_filelist_footer {border-top: 1px solid #FFF !important; /*height: 22px;*/ line-height: 20px !important; vertical-align: middle !important;} +.plupload_file_name {float: left !important; overflow: hidden} +.plupload_file_status {color: #777 !important;} +.plupload_file_status span {color: #42454A !important;} +.plupload_file_size, .plupload_file_status, .plupload_progress { + float: right !important; + width: 80px !important; +} +.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right !important;} + +.plupload_filelist .plupload_file_name {width: 205px} + +.plupload_file_action { + float: right !important; + width: 16px !important; + height: 16px !important; + margin-left: 15px !important; +} + +.plupload_file_action * { + display: none !important; + width: 16px !important; + height: 16px !important; +} + +li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px !important;} +li.plupload_done {color:#AAA} + +li.plupload_delete a { + background: url('../img/delete.gif') !important; +} + +li.plupload_failed a { + background: url('../img/error.gif') !important; + cursor: default !important; +} + +li.plupload_done a { + background: url('../img/done.gif') !important; + cursor: default !important; +} + +.plupload_progress, .plupload_upload_status { + display: none; +} + +.plupload_progress_container { + margin-top: 3px !important; + border: 1px solid #CCC !important; + background: #FFF !important; + padding: 1px !important; +} +.plupload_progress_bar { + width: 0px; + height: 7px !important; + background: #CDEB8B !important; +} + +.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { + margin-right: 17px !important; +} + +/* Floats */ + +.plupload_clear,.plupload_clearer {clear: both !important;} +.plupload_clearer, .plupload_progress_bar { + display: block !important; + font-size: 0 !important; + line-height: 0 !important; +} + +li.plupload_droptext { + background: transparent !important; + text-align: center !important; + vertical-align: middle !important; + border: 0 !important; + line-height: 165px !important; +} + +.dlg_jsplus_plupload .cke_dialog_contents_body { padding: 0 !important; } +.dlg_jsplus_plupload .cke_dialog_ui_vbox_child { padding: 0 !important; } +.plupload_container { padding: 0 !important; } +.plupload_header { display: none !important; } +.plupload2_filelist { height: 290px !important; } \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/backgrounds.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/backgrounds.gif new file mode 100644 index 0000000..39e33eb Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/backgrounds.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons-disabled.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons-disabled.png new file mode 100644 index 0000000..afa11af Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons-disabled.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons.png new file mode 100644 index 0000000..153e738 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/buttons.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/delete.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/delete.gif new file mode 100644 index 0000000..78ca8b3 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/delete.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/done.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/done.gif new file mode 100644 index 0000000..29f3ed7 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/done.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/error.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/error.gif new file mode 100644 index 0000000..4682b63 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/error.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/throbber.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/throbber.gif new file mode 100644 index 0000000..4ae8b16 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/throbber.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/transp50.png b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/transp50.png new file mode 100644 index 0000000..eb0efe1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/img/transp50.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.swf b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.swf new file mode 100644 index 0000000..89df26a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.swf differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.xap b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.xap new file mode 100644 index 0000000..dbb880c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/lib/uploader.xap differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/plugin.js new file mode 100644 index 0000000..b5c6414 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_gallery/plugin.js @@ -0,0 +1,51 @@ +(function(){function ad(){return"ckeditor";}function d(j){return j.elementMode==3;}function w(j){return j.name.replace(/\[/,"_").replace(/\]/,"_");}function f(j){return j.container.$;}function b(j){return j.document.$;}function F(j){return j.getSnapshot();}function J(aw,j){aw.loadSnapshot(j);}function Q(aw){if(aw.getSelection()==null){return null;}var j=aw.getSelection().getStartElement();if(j&&j.$){return j.$;}return null;}function N(){return CKEDITOR.basePath;}function an(){return e("jsplus_bootstrap_gallery");}function e(j){return CKEDITOR.plugins.getPath(j);}function E(){return CKEDITOR.version.charAt(0)=="3"?3:4;}function p(ax,aw){if(E()==3){var j=(aw.indexOf("jsplus_bootstrap_gallery_")==-1)?("jsplus_bootstrap_gallery_"+aw):aw;if(typeof(ax.lang[j])!=="undefined"){return ax.lang[j];}else{console.log("(v3) editor.lang['jsplus_bootstrap_gallery'] not defined");}}else{if(typeof(ax.lang["jsplus_bootstrap_gallery"])!=="undefined"){if(typeof(ax.lang["jsplus_bootstrap_gallery"][aw])!=="undefined"){return ax.lang["jsplus_bootstrap_gallery"][aw];}else{console.log("editor.lang['jsplus_bootstrap_gallery']['"+aw+"'] not defined");}}else{console.log("editor.lang['jsplus_bootstrap_gallery'] not defined");}}return"";}function O(aw,j){return L(aw,"jsplus_bootstrap_gallery_"+j);}function L(aw,j){var ax=aw.config[j];return ax;}function o(j,aw){P("jsplus_bootstrap_gallery_"+j,aw);}function P(j,aw){CKEDITOR.config[j]=aw;}function aj(ax,aw){var j=CKEDITOR.dom.element.createFromHtml(aw);ax.insertElement(j);}function l(){return"";}var K=0;var z=1;var D=2;function i(j,ay,aw){var ax=null;if(aw==K){ax=CKEDITOR.TRISTATE_DISABLED;}else{if(aw==z){ax=CKEDITOR.TRISTATE_OFF;}else{if(aw==D){ax=CKEDITOR.TRISTATE_ON;}}}if(ax!=null&&j.ui&&j.ui.get(ay)){j.ui.get(ay).setState(ax);}}function G(j,aw){j.on("selectionChange",function(ax){aw(ax.editor);});}function y(aw,j,ax){if(j=="beforeGetOutputHTML"){aw.on("toDataFormat",function(ay){return ax(aw,ay.data.dataValue);},null,null,4);return;}aw.on(j,(function(){var ay=aw;return function(){ax(ay);};})());}function q(ax,j,aA,ay,az,aw){ax.addCommand(j,{exec:az});ax.ui.addButton(j,{title:p(ax,ay.replace(/^jsplus_/,"")),label:p(ax,ay.replace(/^jsplus_/,"")),icon:an()+"icons/"+aA+".png",command:aA});}function k(j){return j.mode=="wysiwyg";}function Y(aw,j,ax){CKEDITOR.plugins.add(aw,{icons:aw,lang:j,init:function(ay){ax(ay);}});}function c(){JSDialog.Config.skin=null;JSDialog.Config.templateDialog='";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");t(document,".jsdialog_plugin_jsplus_bootstrap_gallery.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_gallery.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_gallery.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_gallery .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_gallery .cke_dialog_contents { padding: 0; }"); +}(function(aw,j){if(typeof module==="object"&&typeof module.exports==="object"){module.exports=aw.document?j(aw,true):function(ax){if(!ax.document){throw new Error("jQuery requires a window with a document");}return j(ax);};}else{j(aw);}})(typeof window!=="undefined"?window:this,function(cc,bR){function ca(bn){var j=bn.length,bt=b8.type(bn);if(bt==="function"||b8.isWindow(bn)){return false;}if(bn.nodeType===1&&j){return true;}return bt==="array"||j===0||typeof j==="number"&&j>0&&j-1 in bn;}function cv(bn,j,bt){if(b8.isFunction(j)){return b8.grep(bn,function(ct,cn){return !!j.call(ct,cn,ct)!==bt;});}if(j.nodeType){return b8.grep(bn,function(cn){return cn===j!==bt;});}if(typeof j==="string"){if(cR.test(j)){return b8.filter(j,bn,bt);}j=b8.filter(j,bn);}return b8.grep(bn,function(cn){return b8.inArray(cn,j)>=0!==bt;});}function cW(bn,j){do{bn=bn[j];}while(bn&&bn.nodeType!==1);return bn;}function cj(bn){var j=cG[bn]={};b8.each(bn.match(cB)||[],function(bt,cn){j[cn]=true;});return j;}function cA(){if(cs.addEventListener){cs.removeEventListener("DOMContentLoaded",cN,false);cc.removeEventListener("load",cN,false);}else{cs.detachEvent("onreadystatechange",cN);cc.detachEvent("onload",cN);}}function cN(){if(cs.addEventListener||event.type==="load"||cs.readyState==="complete"){cA();b8.ready();}}function bV(cn,bn,ct){if(ct===undefined&&cn.nodeType===1){var bt="data-"+bn.replace(cL,"-$1").toLowerCase();ct=cn.getAttribute(bt);if(typeof ct==="string"){try{ct=ct==="true"?true:ct==="false"?false:ct==="null"?null:+ct+""===ct?+ct:cP.test(ct)?b8.parseJSON(ct):ct;}catch(j){}b8.data(cn,bn,ct);}else{ct=undefined;}}return ct;}function cx(bn){var j;for(j in bn){if(j==="data"&&b8.isEmptyObject(bn[j])){continue;}if(j!=="toJSON"){return false;}}return true;}function cr(di,dl,j,cn){if(!b8.acceptData(di)){return;}var dm,bn,dk=b8.expando,dj=di.nodeType,ct=dj?b8.cache:di,bt=dj?di[dk]:di[dk]&&dk;if((!bt||!ct[bt]||!cn&&!ct[bt].data)&&j===undefined&&typeof dl==="string"){return;}if(!bt){if(dj){bt=di[dk]=bZ.pop()||b8.guid++;}else{bt=dk;}}if(!ct[bt]){ct[bt]=dj?{}:{toJSON:b8.noop};}if(typeof dl==="object"||typeof dl==="function"){if(cn){ct[bt]=b8.extend(ct[bt],dl);}else{ct[bt].data=b8.extend(ct[bt].data,dl);}}bn=ct[bt];if(!cn){if(!bn.data){bn.data={};}bn=bn.data;}if(j!==undefined){bn[b8.camelCase(dl)]=j;}if(typeof dl==="string"){dm=bn[dl];if(dm==null){dm=bn[b8.camelCase(dl)];}}else{dm=bn;}return dm;}function bK(di,bt,dk){if(!b8.acceptData(di)){return;}var ct,bn,cn=di.nodeType,dj=cn?b8.cache:di,j=cn?di[b8.expando]:b8.expando;if(!dj[j]){return;}if(bt){ct=dk?dj[j]:dj[j].data;if(ct){if(!b8.isArray(bt)){if(bt in ct){bt=[bt];}else{bt=b8.camelCase(bt);if(bt in ct){bt=[bt];}else{bt=bt.split(" ");}}}else{bt=bt.concat(b8.map(bt,b8.camelCase));}bn=bt.length;while(bn--){delete ct[bt[bn]];}if(dk?!cx(ct):!b8.isEmptyObject(ct)){return;}}}if(!dk){delete dj[j].data;if(!cx(dj[j])){return;}}if(cn){b8.cleanData([di],true);}else{if(b3.deleteExpando||dj!=dj.window){delete dj[j];}else{dj[j]=null;}}}function bs(){return true;}function a1(){return false;}function cC(){try{return cs.activeElement;}catch(j){}}function bl(bn){var j=aP.split("|"),bt=bn.createDocumentFragment();if(bt.createElement){while(j.length){bt.createElement(j.pop());}}return bt;}function aD(ct,bn){var di,cn,j=0,bt=typeof ct.getElementsByTagName!==cV?ct.getElementsByTagName(bn||"*"):typeof ct.querySelectorAll!==cV?ct.querySelectorAll(bn||"*"):undefined;if(!bt){for(bt=[],di=ct.childNodes||ct;(cn=di[j])!=null;j++){if(!bn||b8.nodeName(cn,bn)){bt.push(cn);}else{b8.merge(bt,aD(cn,bn));}}}return bn===undefined||bn&&b8.nodeName(ct,bn)?b8.merge([ct],bt):bt;}function aG(j){if(cK.test(j.type)){j.defaultChecked=j.checked;}}function de(bn,j){return b8.nodeName(bn,"table")&&b8.nodeName(j.nodeType!==11?j:j.firstChild,"tr")?bn.getElementsByTagName("tbody")[0]||bn.appendChild(bn.ownerDocument.createElement("tbody")):bn;}function df(j){j.type=(b8.find.attr(j,"type")!==null)+"/"+j.type;return j;}function c5(bn){var j=aL.exec(bn.type);if(j){bn.type=j[1];}else{bn.removeAttribute("type");}return bn;}function a9(bt,j){var cn,bn=0;for(;(cn=bt[bn])!=null;bn++){b8._data(cn,"globalEval",!j||b8._data(j[bn],"globalEval"));}}function aW(di,bt){if(bt.nodeType!==1||!b8.hasData(di)){return;}var dk,ct,bn,cn=b8._data(di),dj=b8._data(bt,cn),j=cn.events;if(j){delete dj.handle;dj.events={};for(dk in j){for(ct=0,bn=j[dk].length;ct")).appendTo(j.documentElement);j=(bw[0].contentWindow||bw[0].contentDocument).document;j.write();j.close();bt=a0(bn,j);bw.detach();}bg[bn]=bt;}return bt;}function aH(bn,j){return{get:function(){var bt=bn();if(bt==null){return;}if(bt){delete this.get;return;}return(this.get=j).apply(this,arguments);}};}function cd(cn,bn){if(bn in cn){return bn;}var ct=bn.charAt(0).toUpperCase()+bn.slice(1),bt=bn,j=bA.length;while(j--){bn=bA[j]+ct;if(bn in cn){return bn;}}return bt;}function cw(di,bt){var dk,ct,bn,cn=[],dj=0,j=di.length;for(;dj=0&&bt=0;},isEmptyObject:function(bn){var j;for(j in bn){return false;}return true;},isPlainObject:function(bn){var j;if(!bn||b8.type(bn)!=="object"||bn.nodeType||b8.isWindow(bn)){return false;}try{if(bn.constructor&&!cb.call(bn,"constructor")&&!cb.call(bn.constructor.prototype,"isPrototypeOf")){return false;}}catch(bt){return false;}if(b3.ownLast){for(j in bn){return cb.call(bn,j);}}for(j in bn){}return j===undefined||cb.call(bn,j);},type:function(j){if(j==null){return j+"";}return typeof j==="object"||typeof j==="function"?bQ[ch.call(j)]||"object":typeof j;},globalEval:function(j){if(j&&b8.trim(j)){(cc.execScript||function(bn){cc["eval"].call(cc,bn);})(j);}},camelCase:function(j){return j.replace(ce,"ms-").replace(bP,b1);},nodeName:function(bn,j){return bn.nodeName&&bn.nodeName.toLowerCase()===j.toLowerCase();},each:function(ct,bn,dj){var cn,j=0,bt=ct.length,di=ca(ct);if(dj){if(di){for(;jdy.cacheLength){delete j[bt.shift()];}return j[dt+" "]=ct;}var bt=[];return j;}function dz(j){j[dr]=true;return j;}function ek(bt){var j=dB.createElement("div");try{return !!bt(j);}catch(ct){return false;}finally{if(j.parentNode){j.parentNode.removeChild(j);}j=null;}}function es(ct,bt){var dt=ct.split("|"),j=ct.length;while(j--){dy.attrHandle[dt[j]]=bt;}}function eu(ct,j){var dt=j&&ct,bt=dt&&ct.nodeType===1&&j.nodeType===1&&(~j.sourceIndex||em)-(~ct.sourceIndex||em);if(bt){return bt;}if(dt){while(dt=dt.nextSibling){if(dt===j){return -1;}}}return ct?1:-1;}function dl(j){return function(bt){var ct=bt.nodeName.toLowerCase();return ct==="input"&&bt.type===j;};}function dT(j){return function(bt){var ct=bt.nodeName.toLowerCase();return(ct==="input"||ct==="button")&&bt.type===j; +};}function dj(j){return dz(function(bt){bt=+bt;return dz(function(eA,et){var ct,dt=j([],eA.length,bt),ez=dt.length;while(ez--){if(eA[ct=dt[ez]]){eA[ct]=!(et[ct]=eA[ct]);}}});});}function cn(j){return j&&typeof j.getElementsByTagName!==ea&&j;}function dk(){}function eo(ct){var j=0,dt=ct.length,bt="";for(;j1?function(ct,et,dt){var bt=j.length;while(bt--){if(!j[bt](ct,et,dt)){return false;}}return true;}:j[0];}function dQ(dt,bt,et){var ct=0,j=bt.length;for(;ct-1){eM[eG]=!(eB[eG]=eI);}}}}else{eF=bn(eF===eB?eF.splice(eH,eF.length):eF);if(j){j(null,eB,eF,eJ);}else{d6.apply(eB,eF);}}});}function ex(ez){var eD,bt,dt,eE=ez.length,j=dy.relative[ez[0].type],eC=j||dy.relative[" "],eB=j?1:0,ct=en(function(eF){return eF===eD;},eC,true),eA=en(function(eF){return el.call(eD,eF)>-1;},eC,true),et=[function(eG,eH,eF){return !j&&(eF||eH!==dL)||((eD=eH).nodeType?ct(eG,eH,eF):eA(eG,eH,eF));}];for(;eB1&&eq(et),eB>1&&eo(ez.slice(0,eB-1).concat({value:ez[eB-2].type===" "?"*":""})).replace(dn,"$1"),bt,eB0,j=dt.length>0,ct=function(eO,ez,eM,eJ,eB){var eF,eC,eE,eL=0,eA="0",eD=eO&&[],eH=[],eG=dL,eK=eO||j&&dy.find["TAG"]("*",eB),eN=d3+=eG==null?1:Math.random()||0.1,eI=eK.length;if(eB){dL=ez!==dB&&ez;}for(;eA!==eI&&(eF=eK[eA])!=null;eA++){if(j&&eF){eC=0;while(eE=dt[eC++]){if(eE(eF,ez,eM)){eJ.push(eF);break;}}if(eB){d3=eN;}}if(et){if(eF=!eE&&eF){eL--;}if(eO){eD.push(eF);}}}eL+=eA;if(et&&eA!==eL){eC=0;while(eE=bt[eC++]){eE(eD,eH,ez,eM);}if(eO){if(eL>0){while(eA--){if(!(eD[eA]||eH[eA])){eH[eA]=dS.call(eJ);}}}eH=bn(eH);}d6.apply(eJ,eH);if(eB&&!eO&&eH.length>0&&eL+bt.length>1){ep.uniqueSort(eJ);}}if(eB){d3=eN;dL=eG;}return eD;};return et?dz(ct):ct;}var dw,dD,dy,dI,dx,dC,dv,dR,dL,dF,dO,dJ,dB,dN,du,dE,dK,dp,dP,dr="sizzle"+-(new Date),eh=dM.document,d3=0,dq=0,d1=ds(),d8=ds(),ej=ds(),dG=function(bt,j){if(bt===j){dO=true;}return 0;},ea=typeof undefined,em=1<<31,d7={}.hasOwnProperty,d9=[],dS=d9.pop,ei=d9.push,d6=d9.push,ee=d9.slice,el=d9.indexOf||function(bt){var j=0,ct=this.length;for(;j+~]|"+eg+")"+eg+"*"),dZ=new RegExp("="+eg+"*([^\\]'\"]*?)"+eg+"*\\]","g"),er=new RegExp(d0),ec=new RegExp("^"+dA+"$"),eb={ID:new RegExp("^#("+ed+")"),CLASS:new RegExp("^\\.("+ed+")"),TAG:new RegExp("^("+ed.replace("w","w*")+")"),ATTR:new RegExp("^"+d4),PSEUDO:new RegExp("^"+d0),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+eg+"*(even|odd|(([+-]|)(\\d*)n|)"+eg+"*(?:([+-]|)"+eg+"*(\\d+)|))"+eg+"*\\)|)","i"),bool:new RegExp("^(?:"+dH+")$","i"),needsContext:new RegExp("^"+eg+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+eg+"*((?:-\\d)?\\d*)"+eg+"*\\)|)(?=[^-]|$)","i")},d5=/^(?:input|select|textarea|button)$/i,ef=/^h\d$/i,dV=/^[^{]+\{\s*\[native \w/,dU=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ey=/[+~]/,d2=/'|\\/g,dW=new RegExp("\\\\([\\da-f]{1,6}"+eg+"?|("+eg+")|.)","ig"),ev=function(ct,j,dt){var bt="0x"+j-65536; +return bt!==bt||dt?j:bt<0?String.fromCharCode(bt+65536):String.fromCharCode(bt>>10|55296,bt&1023|56320);};try{d6.apply(d9=ee.call(eh.childNodes),eh.childNodes);d9[eh.childNodes.length].nodeType;}catch(dm){d6={apply:d9.length?function(bt,j){ei.apply(bt,ee.call(j));}:function(ct,j){var dt=ct.length,bt=0;while(ct[dt++]=j[bt++]){}ct.length=dt-1;}};}dD=ep.support={};dx=ep.isXML=function(bt){var j=bt&&(bt.ownerDocument||bt).documentElement;return j?j.nodeName!=="HTML":false;};dJ=ep.setDocument=function(ct){var bt,j=ct?ct.ownerDocument||ct:eh,dt=j.defaultView;if(j===dB||j.nodeType!==9||!j.documentElement){return dB;}dB=j;dN=j.documentElement;du=!dx(j);if(dt&&dt!==dt.top){if(dt.addEventListener){dt.addEventListener("unload",function(){dJ();},false);}else{if(dt.attachEvent){dt.attachEvent("onunload",function(){dJ();});}}}dD.attributes=ek(function(et){et.className="i";return !et.getAttribute("className");});dD.getElementsByTagName=ek(function(et){et.appendChild(j.createComment(""));return !et.getElementsByTagName("*").length;});dD.getElementsByClassName=dV.test(j.getElementsByClassName)&&ek(function(et){et.innerHTML="
      ";et.firstChild.className="i";return et.getElementsByClassName("i").length===2;});dD.getById=ek(function(et){dN.appendChild(et).id=dr;return !j.getElementsByName||!j.getElementsByName(dr).length;});if(dD.getById){dy.find["ID"]=function(ez,et){if(typeof et.getElementById!==ea&&du){var eA=et.getElementById(ez);return eA&&eA.parentNode?[eA]:[];}};dy.filter["ID"]=function(ez){var et=ez.replace(dW,ev);return function(eA){return eA.getAttribute("id")===et;};};}else{delete dy.find["ID"];dy.filter["ID"]=function(ez){var et=ez.replace(dW,ev);return function(eA){var eB=typeof eA.getAttributeNode!==ea&&eA.getAttributeNode("id");return eB&&eB.value===et;};};}dy.find["TAG"]=dD.getElementsByTagName?function(ez,et){if(typeof et.getElementsByTagName!==ea){return et.getElementsByTagName(ez);}}:function(eC,ez){var eD,eB=[],et=0,eA=ez.getElementsByTagName(eC);if(eC==="*"){while(eD=eA[et++]){if(eD.nodeType===1){eB.push(eD);}}return eB;}return eA;};dy.find["CLASS"]=dD.getElementsByClassName&&function(ez,et){if(typeof et.getElementsByClassName!==ea&&du){return et.getElementsByClassName(ez);}};dK=[];dE=[];if(dD.qsa=dV.test(j.querySelectorAll)){ek(function(et){et.innerHTML="";if(et.querySelectorAll("[msallowclip^='']").length){dE.push("[*^$]="+eg+"*(?:''|\"\")");}if(!et.querySelectorAll("[selected]").length){dE.push("\\["+eg+"*(?:value|"+dH+")");}if(!et.querySelectorAll(":checked").length){dE.push(":checked");}});ek(function(ez){var et=j.createElement("input");et.setAttribute("type","hidden");ez.appendChild(et).setAttribute("name","D");if(ez.querySelectorAll("[name=d]").length){dE.push("name"+eg+"*[*^$|!~]?=");}if(!ez.querySelectorAll(":enabled").length){dE.push(":enabled",":disabled");}ez.querySelectorAll("*,:x");dE.push(",.*:");});}if(dD.matchesSelector=dV.test(dp=dN.matches||dN.webkitMatchesSelector||dN.mozMatchesSelector||dN.oMatchesSelector||dN.msMatchesSelector)){ek(function(et){dD.disconnectedMatch=dp.call(et,"div");dp.call(et,"[s!='']:x");dK.push("!=",d0);});}dE=dE.length&&new RegExp(dE.join("|"));dK=dK.length&&new RegExp(dK.join("|"));bt=dV.test(dN.compareDocumentPosition);dP=bt||dV.test(dN.contains)?function(eA,et){var eB=eA.nodeType===9?eA.documentElement:eA,ez=et&&et.parentNode;return eA===ez||!!(ez&&ez.nodeType===1&&(eB.contains?eB.contains(ez):eA.compareDocumentPosition&&eA.compareDocumentPosition(ez)&16));}:function(ez,et){if(et){while(et=et.parentNode){if(et===ez){return true;}}}return false;};dG=bt?function(eA,et){if(eA===et){dO=true;return 0;}var ez=!eA.compareDocumentPosition-!et.compareDocumentPosition;if(ez){return ez;}ez=(eA.ownerDocument||eA)===(et.ownerDocument||et)?eA.compareDocumentPosition(et):1;if(ez&1||!dD.sortDetached&&et.compareDocumentPosition(eA)===ez){if(eA===j||eA.ownerDocument===eh&&dP(eh,eA)){return -1;}if(et===j||et.ownerDocument===eh&&dP(eh,et)){return 1;}return dF?el.call(dF,eA)-el.call(dF,et):0;}return ez&4?-1:1;}:function(eD,eA){if(eD===eA){dO=true;return 0;}var eF,eC=0,eB=eD.parentNode,eE=eA.parentNode,ez=[eD],et=[eA];if(!eB||!eE){return eD===j?-1:eA===j?1:eB?-1:eE?1:dF?el.call(dF,eD)-el.call(dF,eA):0;}else{if(eB===eE){return eu(eD,eA);}}eF=eD;while(eF=eF.parentNode){ez.unshift(eF);}eF=eA;while(eF=eF.parentNode){et.unshift(eF);}while(ez[eC]===et[eC]){eC++;}return eC?eu(ez[eC],et[eC]):ez[eC]===eh?-1:et[eC]===eh?1:0;};return j;};ep.matches=function(bt,j){return ep(bt,null,null,j);};ep.matchesSelector=function(dt,bt){if((dt.ownerDocument||dt)!==dB){dJ(dt);}bt=bt.replace(dZ,"='$1']");if(dD.matchesSelector&&du&&(!dK||!dK.test(bt))&&(!dE||!dE.test(bt))){try{var ct=dp.call(dt,bt);if(ct||dD.disconnectedMatch||dt.document&&dt.document.nodeType!==11){return ct;}}catch(j){}}return ep(bt,dB,null,[dt]).length>0;};ep.contains=function(bt,j){if((bt.ownerDocument||bt)!==dB){dJ(bt);}return dP(bt,j);}; +ep.attr=function(dt,bt){if((dt.ownerDocument||dt)!==dB){dJ(dt);}var j=dy.attrHandle[bt.toLowerCase()],ct=j&&d7.call(dy.attrHandle,bt.toLowerCase())?j(dt,bt,!du):undefined;return ct!==undefined?ct:dD.attributes||!du?dt.getAttribute(bt):(ct=dt.getAttributeNode(bt))&&ct.specified?ct.value:null;};ep.error=function(j){throw new Error("Syntax error, unrecognized expression: "+j);};ep.uniqueSort=function(et){var bt,dt=[],j=0,ct=0;dO=!dD.detectDuplicates;dF=!dD.sortStable&&et.slice(0);et.sort(dG);if(dO){while(bt=et[ct++]){if(bt===et[ct]){j=dt.push(ct);}}while(j--){et.splice(dt[j],1);}}dF=null;return et;};dI=ep.getText=function(dt){var j,et="",ct=0,bt=dt.nodeType;if(!bt){while(j=dt[ct++]){et+=dI(j);}}else{if(bt===1||bt===9||bt===11){if(typeof dt.textContent==="string"){return dt.textContent;}else{for(dt=dt.firstChild;dt;dt=dt.nextSibling){et+=dI(dt);}}}else{if(bt===3||bt===4){return dt.nodeValue;}}}return et;};dy=ep.selectors={cacheLength:50,createPseudo:dz,match:eb,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(j){j[1]=j[1].replace(dW,ev);j[3]=(j[3]||j[4]||j[5]||"").replace(dW,ev);if(j[2]==="~="){j[3]=" "+j[3]+" ";}return j.slice(0,4);},CHILD:function(j){j[1]=j[1].toLowerCase();if(j[1].slice(0,3)==="nth"){if(!j[3]){ep.error(j[0]);}j[4]=+(j[4]?j[5]+(j[6]||1):2*(j[3]==="even"||j[3]==="odd"));j[5]=+(j[7]+j[8]||j[3]==="odd");}else{if(j[3]){ep.error(j[0]);}}return j;},PSEUDO:function(bt){var j,ct=!bt[6]&&bt[2];if(eb["CHILD"].test(bt[0])){return null;}if(bt[3]){bt[2]=bt[4]||bt[5]||"";}else{if(ct&&er.test(ct)&&(j=dC(ct,true))&&(j=ct.indexOf(")",ct.length-j)-ct.length)){bt[0]=bt[0].slice(0,j);bt[2]=ct.slice(0,j);}}return bt.slice(0,3);}},filter:{TAG:function(bt){var j=bt.replace(dW,ev).toLowerCase();return bt==="*"?function(){return true;}:function(ct){return ct.nodeName&&ct.nodeName.toLowerCase()===j;};},CLASS:function(bt){var j=d1[bt+" "];return j||(j=new RegExp("(^|"+eg+")"+bt+"("+eg+"|$)"))&&d1(bt,function(ct){return j.test(typeof ct.className==="string"&&ct.className||typeof ct.getAttribute!==ea&&ct.getAttribute("class")||"");});},ATTR:function(bt,j,ct){return function(et){var dt=ep.attr(et,bt);if(dt==null){return j==="!=";}if(!j){return true;}dt+="";return j==="="?dt===ct:j==="!="?dt!==ct:j==="^="?ct&&dt.indexOf(ct)===0:j==="*="?ct&&dt.indexOf(ct)>-1:j==="$="?ct&&dt.slice(-ct.length)===ct:j==="~="?(" "+dt+" ").indexOf(ct)>-1:j==="|="?dt===ct||dt.slice(0,ct.length+1)===ct+"-":false;};},CHILD:function(ez,ct,eB,et,bt){var dt=ez.slice(0,3)!=="nth",eA=ez.slice(-4)!=="last",j=ct==="of-type";return et===1&&bt===0?function(eC){return !!eC.parentNode;}:function(eO,eD,eM){var eI,eF,eK,eG,eC,eJ,eN=dt!==eA?"nextSibling":"previousSibling",eE=eO.parentNode,eH=j&&eO.nodeName.toLowerCase(),eL=!eM&&!j;if(eE){if(dt){while(eN){eK=eO;while(eK=eK[eN]){if(j?eK.nodeName.toLowerCase()===eH:eK.nodeType===1){return false;}}eJ=eN=ez==="only"&&!eJ&&"nextSibling";}return true;}eJ=[eA?eE.firstChild:eE.lastChild];if(eA&&eL){eF=eE[dr]||(eE[dr]={});eI=eF[ez]||[];eC=eI[0]===d3&&eI[1];eG=eI[0]===d3&&eI[2];eK=eC&&eE.childNodes[eC];while(eK=++eC&&eK&&eK[eN]||(eG=eC=0)||eJ.pop()){if(eK.nodeType===1&&++eG&&eK===eO){eF[ez]=[d3,eC,eG];break;}}}else{if(eL&&(eI=(eO[dr]||(eO[dr]={}))[ez])&&eI[0]===d3){eG=eI[1];}else{while(eK=++eC&&eK&&eK[eN]||(eG=eC=0)||eJ.pop()){if((j?eK.nodeName.toLowerCase()===eH:eK.nodeType===1)&&++eG){if(eL){(eK[dr]||(eK[dr]={}))[ez]=[d3,eG];}if(eK===eO){break;}}}}}eG-=bt;return eG===et||eG%et===0&&eG/et>=0;}};},PSEUDO:function(ct,bt){var dt,j=dy.pseudos[ct]||dy.setFilters[ct.toLowerCase()]||ep.error("unsupported pseudo: "+ct);if(j[dr]){return j(bt);}if(j.length>1){dt=[ct,ct,"",bt];return dy.setFilters.hasOwnProperty(ct.toLowerCase())?dz(function(eA,eC){var ez,et=j(eA,bt),eB=et.length;while(eB--){ez=el.call(eA,et[eB]);eA[ez]=!(eC[ez]=et[eB]);}}):function(et){return j(et,0,dt);};}return j;}},pseudos:{not:dz(function(ct){var j=[],dt=[],bt=dv(ct.replace(dn,"$1"));return bt[dr]?dz(function(eC,eA,eE,ez){var eB,eD=bt(eC,null,ez,[]),et=eC.length;while(et--){if(eB=eD[et]){eC[et]=!(eA[et]=eB);}}}):function(eA,et,ez){j[0]=eA;bt(j,null,ez,dt);return !dt.pop();};}),has:dz(function(j){return function(bt){return ep(j,bt).length>0;};}),contains:dz(function(j){return function(bt){return(bt.textContent||bt.innerText||dI(bt)).indexOf(j)>-1;};}),lang:dz(function(j){if(!ec.test(j||"")){ep.error("unsupported lang: "+j);}j=j.replace(dW,ev).toLowerCase();return function(bt){var ct;do{if(ct=du?bt.lang:bt.getAttribute("xml:lang")||bt.getAttribute("lang")){ct=ct.toLowerCase();return ct===j||ct.indexOf(j+"-")===0;}}while((bt=bt.parentNode)&&bt.nodeType===1);return false;};}),target:function(j){var bt=dM.location&&dM.location.hash;return bt&&bt.slice(1)===j.id;},root:function(j){return j===dN;},focus:function(j){return j===dB.activeElement&&(!dB.hasFocus||dB.hasFocus())&&!!(j.type||j.href||~j.tabIndex);},enabled:function(j){return j.disabled===false; +},disabled:function(j){return j.disabled===true;},checked:function(bt){var j=bt.nodeName.toLowerCase();return j==="input"&&!!bt.checked||j==="option"&&!!bt.selected;},selected:function(j){if(j.parentNode){j.parentNode.selectedIndex;}return j.selected===true;},empty:function(j){for(j=j.firstChild;j;j=j.nextSibling){if(j.nodeType<6){return false;}}return true;},parent:function(j){return !dy.pseudos["empty"](j);},header:function(j){return ef.test(j.nodeName);},input:function(j){return d5.test(j.nodeName);},button:function(bt){var j=bt.nodeName.toLowerCase();return j==="input"&&bt.type==="button"||j==="button";},text:function(bt){var j;return bt.nodeName.toLowerCase()==="input"&&bt.type==="text"&&((j=bt.getAttribute("type"))==null||j.toLowerCase()==="text");},first:dj(function(){return[0];}),last:dj(function(bt,j){return[j-1];}),eq:dj(function(bt,j,ct){return[ct<0?ct+j:ct];}),even:dj(function(bt,j){var ct=0;for(;ct=0;){ct.push(bt);}return ct;}),gt:dj(function(ct,j,dt){var bt=dt<0?dt+j:dt;for(;++bt2&&(bt=et[0]).type==="ID"&&dD.getById&&eD.nodeType===9&&du&&dy.relative[et[1].type]){eD=(dy.find["ID"](bt.matches[0].replace(dW,ev),eD)||[])[0];if(!eD){return ct;}else{if(j){eD=eD.parentNode;}}ez=ez.slice(et.shift().value.length);}eC=eb["needsContext"].test(ez)?0:et.length;while(eC--){bt=et[eC];if(dy.relative[eB=bt.type]){break;}if(dt=dy.find[eB]){if(eE=dt(bt.matches[0].replace(dW,ev),ey.test(et[0].type)&&cn(eD.parentNode)||eD)){et.splice(eC,1);ez=eE.length&&eo(et);if(!ez){d6.apply(ct,eE);return ct;}break;}}}}(j||dv(ez,eA))(eE,eD,!du,ct,ey.test(ez)&&cn(eD.parentNode)||eD);return ct;};dD.sortStable=dr.split("").sort(dG).join("")===dr;dD.detectDuplicates=!!dO;dJ();dD.sortDetached=ek(function(j){return j.compareDocumentPosition(dB.createElement("div"))&1;});if(!ek(function(j){j.innerHTML="";return j.firstChild.getAttribute("href")==="#";})){es("type|href|height|width",function(bt,j,ct){if(!ct){return bt.getAttribute(j,j.toLowerCase()==="type"?1:2);}});}if(!dD.attributes||!ek(function(j){j.innerHTML="";j.firstChild.setAttribute("value","");return j.firstChild.getAttribute("value")==="";})){es("value",function(bt,j,ct){if(!ct&&bt.nodeName.toLowerCase()==="input"){return bt.defaultValue;}});}if(!ek(function(j){return j.getAttribute("disabled")==null;})){es(dH,function(ct,j,dt){var bt;if(!dt){return ct[j]===true?j.toLowerCase():(bt=ct.getAttributeNode(j))&&bt.specified?bt.value:null;}});}return ep;}(cc);b8.find=bL;b8.expr=bL.selectors;b8.expr[":"]=b8.expr.pseudos;b8.unique=bL.uniqueSort;b8.text=bL.getText;b8.isXMLDoc=bL.isXML;b8.contains=bL.contains;var cg=b8.expr.match.needsContext;var bO=/^<(\w+)\s*\/?>(?:<\/\1>|)$/;var cR=/^.[^:#\[\.,]*$/;b8.filter=function(bt,j,cn){var bn=j[0];if(cn){bt=":not("+bt+")";}return j.length===1&&bn.nodeType===1?b8.find.matchesSelector(bn,bt)?[bn]:[]:b8.find.matches(bt,b8.grep(j,function(ct){return ct.nodeType===1;}));};b8.fn.extend({find:function(cn){var bn,ct=[],bt=this,j=bt.length;if(typeof cn!=="string"){return this.pushStack(b8(cn).filter(function(){for(bn=0;bn1?b8.unique(ct):ct);ct.selector=this.selector?this.selector+" "+cn:cn;return ct;},filter:function(j){return this.pushStack(cv(this,j||[],false));},not:function(j){return this.pushStack(cv(this,j||[],true));},is:function(j){return !!cv(this,typeof j==="string"&&cg.test(j)?b8(j):j||[],false).length;}});var bN,cs=cc.document,cD=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,cU=b8.fn.init=function(bt,j){var cn,bn;if(!bt){return this;}if(typeof bt==="string"){if(bt.charAt(0)==="<"&&bt.charAt(bt.length-1)===">"&&bt.length>=3){cn=[null,bt,null]; +}else{cn=cD.exec(bt);}if(cn&&(cn[1]||!j)){if(cn[1]){j=j instanceof b8?j[0]:j;b8.merge(this,b8.parseHTML(cn[1],j&&j.nodeType?j.ownerDocument||j:cs,true));if(bO.test(cn[1])&&b8.isPlainObject(j)){for(cn in j){if(b8.isFunction(this[cn])){this[cn](j[cn]);}else{this.attr(cn,j[cn]);}}}return this;}else{bn=cs.getElementById(cn[2]);if(bn&&bn.parentNode){if(bn.id!==cn[2]){return bN.find(bt);}this.length=1;this[0]=bn;}this.context=cs;this.selector=bt;return this;}}else{if(!j||j.jquery){return(j||bN).find(bt);}else{return this.constructor(j).find(bt);}}}else{if(bt.nodeType){this.context=this[0]=bt;this.length=1;return this;}else{if(b8.isFunction(bt)){return typeof bN.ready!=="undefined"?bN.ready(bt):bt(b8);}}}if(bt.selector!==undefined){this.selector=bt.selector;this.context=bt.context;}return b8.makeArray(bt,this);};cU.prototype=b8.fn;bN=b8(cs);var b4=/^(?:parents|prev(?:Until|All))/,cH={children:true,contents:true,next:true,prev:true};b8.extend({dir:function(cn,bn,ct){var bt=[],j=cn[bn];while(j&&j.nodeType!==9&&(ct===undefined||j.nodeType!==1||!b8(j).is(ct))){if(j.nodeType===1){bt.push(j);}j=j[bn];}return bt;},sibling:function(bn,j){var bt=[];for(;bn;bn=bn.nextSibling){if(bn.nodeType===1&&bn!==j){bt.push(bn);}}return bt;}});b8.fn.extend({has:function(bt){var j,cn=b8(bt,this),bn=cn.length;return this.filter(function(){for(j=0;j-1:dj.nodeType===1&&b8.find.matchesSelector(dj,ct))){bt.push(dj);break;}}}return this.pushStack(bt.length>1?b8.unique(bt):bt);},index:function(j){if(!j){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1;}if(typeof j==="string"){return b8.inArray(this[0],b8(j));}return b8.inArray(j.jquery?j[0]:j,this);},add:function(bn,j){return this.pushStack(b8.unique(b8.merge(this.get(),b8(bn,j))));},addBack:function(j){return this.add(j==null?this.prevObject:this.prevObject.filter(j));}});b8.each({parent:function(bn){var j=bn.parentNode;return j&&j.nodeType!==11?j:null;},parents:function(j){return b8.dir(j,"parentNode");},parentsUntil:function(bn,j,bt){return b8.dir(bn,"parentNode",bt);},next:function(j){return cW(j,"nextSibling");},prev:function(j){return cW(j,"previousSibling");},nextAll:function(j){return b8.dir(j,"nextSibling");},prevAll:function(j){return b8.dir(j,"previousSibling");},nextUntil:function(bn,j,bt){return b8.dir(bn,"nextSibling",bt);},prevUntil:function(bn,j,bt){return b8.dir(bn,"previousSibling",bt);},siblings:function(j){return b8.sibling((j.parentNode||{}).firstChild,j);},children:function(j){return b8.sibling(j.firstChild);},contents:function(j){return b8.nodeName(j,"iframe")?j.contentDocument||j.contentWindow.document:b8.merge([],j.childNodes);}},function(bn,j){b8.fn[bn]=function(ct,cn){var bt=b8.map(this,j,ct);if(bn.slice(-5)!=="Until"){cn=ct;}if(cn&&typeof cn==="string"){bt=b8.filter(cn,bt);}if(this.length>1){if(!cH[bn]){bt=b8.unique(bt);}if(b4.test(bn)){bt=bt.reverse();}}return this.pushStack(bt);};});var cB=/\S+/g;var cG={};b8.Callbacks=function(dj){dj=typeof dj==="string"?cG[dj]||cj(dj):b8.extend({},dj);var dm,bt,j,ct,dn,bn,dl=[],dk=!dj.once&&[],di=function(dp){bt=dj.memory&&dp;j=true;dn=bn||0;bn=0;ct=dl.length;dm=true;for(;dl&&dn-1){dl.splice(dp,1);if(dm){if(dp<=ct){ct--;}if(dp<=dn){dn--;}}}});}return this;},has:function(dp){return dp?b8.inArray(dp,dl)>-1:!!(dl&&dl.length);},empty:function(){dl=[];ct=0;return this;},disable:function(){dl=dk=bt=undefined;return this;},disabled:function(){return !dl;},lock:function(){dk=undefined;if(!bt){cn.disable();}return this;},locked:function(){return !dk;},fireWith:function(dp,dq){if(dl&&(!j||dk)){dq=dq||[];dq=[dp,dq.slice?dq.slice():dq];if(dm){dk.push(dq);}else{di(dq);}}return this;},fire:function(){cn.fireWith(this,arguments);return this;},fired:function(){return !!j;}};return cn;};b8.extend({Deferred:function(cn){var bn=[["resolve","done",b8.Callbacks("once memory"),"resolved"],["reject","fail",b8.Callbacks("once memory"),"rejected"],["notify","progress",b8.Callbacks("memory")]],ct="pending",bt={state:function(){return ct;},always:function(){j.done(arguments).fail(arguments);return this;},then:function(){var di=arguments;return b8.Deferred(function(dj){b8.each(bn,function(dk,dl){var dm=b8.isFunction(di[dk])&&di[dk]; +j[dl[1]](function(){var dn=dm&&dm.apply(this,arguments);if(dn&&b8.isFunction(dn.promise)){dn.promise().done(dj.resolve).fail(dj.reject).progress(dj.notify);}else{dj[dl[0]+"With"](this===bt?dj.promise():this,dm?[dn]:arguments);}});});di=null;}).promise();},promise:function(di){return di!=null?b8.extend(di,bt):bt;}},j={};bt.pipe=bt.then;b8.each(bn,function(dk,dj){var dl=dj[2],di=dj[3];bt[dj[1]]=dl.add;if(di){dl.add(function(){ct=di;},bn[dk^1][2].disable,bn[2][2].lock);}j[dj[0]]=function(){j[dj[0]+"With"](this===j?bt:this,arguments);return this;};j[dj[0]+"With"]=dl.fireWith;});bt.promise(j);if(cn){cn.call(j,j);}return j;},when:function(di){var dl=0,bn=bU.call(arguments),cn=bn.length,dm=cn!==1||di&&b8.isFunction(di.promise)?cn:0,j=dm===1?di:b8.Deferred(),dk=function(dp,dn,dq){return function(dr){dn[dp]=this;dq[dp]=arguments.length>1?bU.call(arguments):dr;if(dq===dj){j.notifyWith(dn,dq);}else{if(!--dm){j.resolveWith(dn,dq);}}};},dj,ct,bt;if(cn>1){dj=new Array(cn);ct=new Array(cn);bt=new Array(cn);for(;dl0){return;}cS.resolveWith(cs,[b8]);if(b8.fn.triggerHandler){b8(cs).triggerHandler("ready");b8(cs).off("ready");}}});b8.ready.promise=function(bn){if(!cS){cS=b8.Deferred();if(cs.readyState==="complete"){setTimeout(b8.ready);}else{if(cs.addEventListener){cs.addEventListener("DOMContentLoaded",cN,false);cc.addEventListener("load",cN,false);}else{cs.attachEvent("onreadystatechange",cN);cc.attachEvent("onload",cN);var cn=false;try{cn=cc.frameElement==null&&cs.documentElement;}catch(bt){}if(cn&&cn.doScroll){(function j(){if(!b8.isReady){try{cn.doScroll("left");}catch(ct){return setTimeout(j,50);}cA();b8.ready();}})();}}}}return cS.promise(bn);};var cV=typeof undefined;var b5;for(b5 in b8(b3)){break;}b3.ownLast=b5!=="0";b3.inlineBlockNeedsLayout=false;b8(function(){var bt,j,cn,bn;cn=cs.getElementsByTagName("body")[0];if(!cn||!cn.style){return;}j=cs.createElement("div");bn=cs.createElement("div");bn.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";cn.appendChild(bn).appendChild(j);if(typeof j.style.zoom!==cV){j.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";b3.inlineBlockNeedsLayout=bt=j.offsetWidth===3;if(bt){cn.style.zoom=1;}}cn.removeChild(bn);});(function(){var bn=cs.createElement("div");if(b3.deleteExpando==null){b3.deleteExpando=true;try{delete bn.test;}catch(j){b3.deleteExpando=false;}}bn=null;})();b8.acceptData=function(bn){var j=b8.noData[(bn.nodeName+" ").toLowerCase()],bt=+bn.nodeType||1;return bt!==1&&bt!==9?false:!j||j!==true&&bn.getAttribute("classid")===j;};var cP=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,cL=/([A-Z])/g;b8.extend({cache:{},noData:{"applet ":true,"embed ":true,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(j){j=j.nodeType?b8.cache[j[b8.expando]]:j[b8.expando];return !!j&&!cx(j);},data:function(bn,j,bt){return cr(bn,j,bt);},removeData:function(bn,j){return bK(bn,j);},_data:function(bn,j,bt){return cr(bn,j,bt,true);},_removeData:function(bn,j){return bK(bn,j,true);}});b8.fn.extend({data:function(ct,bn){var dj,cn,j,bt=this[0],di=bt&&bt.attributes;if(ct===undefined){if(this.length){j=b8.data(bt);if(bt.nodeType===1&&!b8._data(bt,"parsedAttrs")){dj=di.length;while(dj--){if(di[dj]){cn=di[dj].name;if(cn.indexOf("data-")===0){cn=b8.camelCase(cn.slice(5));bV(bt,cn,j[cn]);}}}b8._data(bt,"parsedAttrs",true);}}return j;}if(typeof ct==="object"){return this.each(function(){b8.data(this,ct);});}return arguments.length>1?this.each(function(){b8.data(this,ct,bn);}):bt?bV(bt,ct,b8.data(bt,ct)):undefined;},removeData:function(j){return this.each(function(){b8.removeData(this,j);});}});b8.extend({queue:function(bt,j,cn){var bn;if(bt){j=(j||"fx")+"queue";bn=b8._data(bt,j);if(cn){if(!bn||b8.isArray(cn)){bn=b8._data(bt,j,b8.makeArray(cn));}else{bn.push(cn);}}return bn||[];}},dequeue:function(ct,bn){bn=bn||"fx";var dj=b8.queue(ct,bn),cn=dj.length,j=dj.shift(),bt=b8._queueHooks(ct,bn),di=function(){b8.dequeue(ct,bn);};if(j==="inprogress"){j=dj.shift();cn--;}if(j){if(bn==="fx"){dj.unshift("inprogress");}delete bt.stop;j.call(ct,di,bt);}if(!cn&&bt){bt.empty.fire();}},_queueHooks:function(bn,j){var bt=j+"queueHooks";return b8._data(bn,bt)||b8._data(bn,bt,{empty:b8.Callbacks("once memory").add(function(){b8._removeData(bn,j+"queue");b8._removeData(bn,bt);})});}});b8.fn.extend({queue:function(bn,j){var bt=2;if(typeof bn!=="string"){j=bn;bn="fx";bt--;}if(arguments.length
      a";b3.leadingWhitespace=j.firstChild.nodeType===3;b3.tbody=!j.getElementsByTagName("tbody").length;b3.htmlSerialize=!!j.getElementsByTagName("link").length;b3.html5Clone=cs.createElement("nav").cloneNode(true).outerHTML!=="<:nav>";bt.type="checkbox";bt.checked=true;cn.appendChild(bt);b3.appendChecked=bt.checked;j.innerHTML="";b3.noCloneChecked=!!j.cloneNode(true).lastChild.defaultValue;cn.appendChild(j);j.innerHTML="";b3.checkClone=j.cloneNode(true).cloneNode(true).lastChild.checked;b3.noCloneEvent=true;if(j.attachEvent){j.attachEvent("onclick",function(){b3.noCloneEvent=false;});j.cloneNode(true).click();}if(b3.deleteExpando==null){b3.deleteExpando=true;try{delete j.test;}catch(bn){b3.deleteExpando=false;}}})();(function(){var j,bt,bn=cs.createElement("div");for(j in {submit:true,change:true,focusin:true}){bt="on"+j;if(!(b3[j+"Bubbles"]=bt in cc)){bn.setAttribute(bt,"t");b3[j+"Bubbles"]=bn.attributes[bt].expando===false;}}bn=null;})();var cI=/^(?:input|select|textarea)$/i,cy=/^key/,cO=/^(?:mouse|pointer|contextmenu)|click/,cm=/^(?:focusinfocus|focusoutblur)$/,ck=/^([^.]*)(?:\.(.+)|)$/;b8.event={global:{},add:function(dm,dt,cn,j,dj){var du,bt,ds,dq,dl,di,dp,bn,dn,dr,ct,dk=b8._data(dm);if(!dk){return;}if(cn.handler){dq=cn;cn=dq.handler;dj=dq.selector;}if(!cn.guid){cn.guid=b8.guid++;}if(!(bt=dk.events)){bt=dk.events={};}if(!(di=dk.handle)){di=dk.handle=function(dv){return typeof b8!==cV&&(!dv||b8.event.triggered!==dv.type)?b8.event.dispatch.apply(di.elem,arguments):undefined;};di.elem=dm;}dt=(dt||"").match(cB)||[""];ds=dt.length;while(ds--){du=ck.exec(dt[ds])||[];dn=ct=du[1];dr=(du[2]||"").split(".").sort();if(!dn){continue;}dl=b8.event.special[dn]||{};dn=(dj?dl.delegateType:dl.bindType)||dn;dl=b8.event.special[dn]||{};dp=b8.extend({type:dn,origType:ct,data:j,handler:cn,guid:cn.guid,selector:dj,needsContext:dj&&b8.expr.match.needsContext.test(dj),namespace:dr.join(".")},dq);if(!(bn=bt[dn])){bn=bt[dn]=[];bn.delegateCount=0;if(!dl.setup||dl.setup.call(dm,j,dr,di)===false){if(dm.addEventListener){dm.addEventListener(dn,di,false);}else{if(dm.attachEvent){dm.attachEvent("on"+dn,di);}}}}if(dl.add){dl.add.call(dm,dp);if(!dp.handler.guid){dp.handler.guid=cn.guid;}}if(dj){bn.splice(bn.delegateCount++,0,dp);}else{bn.push(dp);}b8.event.global[dn]=true;}dm=null;},remove:function(dm,dt,cn,j,dj){var du,bt,ds,dq,dl,di,dp,bn,dn,dr,ct,dk=b8.hasData(dm)&&b8._data(dm);if(!dk||!(di=dk.events)){return;}dt=(dt||"").match(cB)||[""];dl=dt.length;while(dl--){ds=ck.exec(dt[dl])||[];dn=ct=ds[1];dr=(ds[2]||"").split(".").sort();if(!dn){for(dn in di){b8.event.remove(dm,dn+dt[dl],cn,j,true);}continue;}dp=b8.event.special[dn]||{};dn=(j?dp.delegateType:dp.bindType)||dn;bn=di[dn]||[];ds=ds[2]&&new RegExp("(^|\\.)"+dr.join("\\.(?:.*\\.|)")+"(\\.|$)");dq=du=bn.length;while(du--){bt=bn[du];if((dj||ct===bt.origType)&&(!cn||cn.guid===bt.guid)&&(!ds||ds.test(bt.namespace))&&(!j||j===bt.selector||j==="**"&&bt.selector)){bn.splice(du,1);if(bt.selector){bn.delegateCount--;}if(dp.remove){dp.remove.call(dm,bt);}}}if(dq&&!bn.length){if(!dp.teardown||dp.teardown.call(dm,dr,dk.handle)===false){b8.removeEvent(dm,dn,dk.handle);}delete di[dn];}}if(b8.isEmptyObject(di)){delete dk.handle;b8._removeData(dm,"events");}},trigger:function(dr,cn,j,dj){var ds,bt,dq,dn,di,dm,bn,dl=[j||cs],dp=cb.call(dr,"type")?dr.type:dr,ct=cb.call(dr,"namespace")?dr.namespace.split("."):[];dq=dm=j=j||cs;if(j.nodeType===3||j.nodeType===8){return;}if(cm.test(dp+b8.event.triggered)){return;}if(dp.indexOf(".")>=0){ct=dp.split(".");dp=ct.shift();ct.sort();}bt=dp.indexOf(":")<0&&"on"+dp; +dr=dr[b8.expando]?dr:new b8.Event(dp,typeof dr==="object"&&dr);dr.isTrigger=dj?2:3;dr.namespace=ct.join(".");dr.namespace_re=dr.namespace?new RegExp("(^|\\.)"+ct.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;dr.result=undefined;if(!dr.target){dr.target=j;}cn=cn==null?[dr]:b8.makeArray(cn,[dr]);di=b8.event.special[dp]||{};if(!dj&&di.trigger&&di.trigger.apply(j,cn)===false){return;}if(!dj&&!di.noBubble&&!b8.isWindow(j)){dn=di.delegateType||dp;if(!cm.test(dn+dp)){dq=dq.parentNode;}for(;dq;dq=dq.parentNode){dl.push(dq);dm=dq;}if(dm===(j.ownerDocument||cs)){dl.push(dm.defaultView||dm.parentWindow||cc);}}bn=0;while((dq=dl[bn++])&&!dr.isPropagationStopped()){dr.type=bn>1?dn:di.bindType||dp;ds=(b8._data(dq,"events")||{})[dr.type]&&b8._data(dq,"handle");if(ds){ds.apply(dq,cn);}ds=bt&&dq[bt];if(ds&&ds.apply&&b8.acceptData(dq)){dr.result=ds.apply(dq,cn);if(dr.result===false){dr.preventDefault();}}}dr.type=dp;if(!dj&&!dr.isDefaultPrevented()){if((!di._default||di._default.apply(dl.pop(),cn)===false)&&b8.acceptData(j)){if(bt&&j[dp]&&!b8.isWindow(j)){dm=j[bt];if(dm){j[bt]=null;}b8.event.triggered=dp;try{j[dp]();}catch(dk){}b8.event.triggered=undefined;if(dm){j[bt]=dm;}}}}return dr.result;},dispatch:function(di){di=b8.event.fix(di);var dl,bn,cn,dm,j,dk=[],dj=bU.call(arguments),ct=(b8._data(this,"events")||{})[di.type]||[],bt=b8.event.special[di.type]||{};dj[0]=di;di.delegateTarget=this;if(bt.preDispatch&&bt.preDispatch.call(this,di)===false){return;}dk=b8.event.handlers.call(this,di,ct);dl=0;while((dm=dk[dl++])&&!di.isPropagationStopped()){di.currentTarget=dm.elem;j=0;while((cn=dm.handlers[j++])&&!di.isImmediatePropagationStopped()){if(!di.namespace_re||di.namespace_re.test(cn.namespace)){di.handleObj=cn;di.data=cn.data;bn=((b8.event.special[cn.origType]||{}).handle||cn.handler).apply(dm.elem,dj);if(bn!==undefined){if((di.result=bn)===false){di.preventDefault();di.stopPropagation();}}}}}if(bt.postDispatch){bt.postDispatch.call(this,di);}return di.result;},handlers:function(ct,dk){var bt,j,cn,dl,bn=[],dj=dk.delegateCount,di=ct.target;if(dj&&di.nodeType&&(!ct.button||ct.type!=="click")){for(;di!=this;di=di.parentNode||this){if(di.nodeType===1&&(di.disabled!==true||ct.type!=="click")){cn=[];for(dl=0;dl=0:b8.find(bt,this,null,[di]).length;}if(cn[bt]){cn.push(j);}}if(cn.length){bn.push({elem:di,handlers:cn});}}}}if(dj]","i"),aT=/^\s+/,cZ=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bh=/<([\w:]+)/,db=/\s*$/g,a6={option:[1,""],legend:[1,"
      ","
      "],area:[1,"",""],param:[1,"",""],thead:[1,"","
      "],tr:[2,"","
      "],col:[2,"","
      "],td:[3,"","
      "],_default:b3.htmlSerialize?[0,"",""]:[1,"X
      ","
      "]},c6=bl(cs),cl=c6.appendChild(cs.createElement("div")); +a6.optgroup=a6.option;a6.tbody=a6.tfoot=a6.colgroup=a6.caption=a6.thead;a6.th=a6.td;b8.extend({clone:function(ct,dk,bt){var j,cn,dl,bn,dj,di=b8.contains(ct.ownerDocument,ct);if(b3.html5Clone||b8.isXMLDoc(ct)||!b0.test("<"+ct.nodeName+">")){dl=ct.cloneNode(true);}else{cl.innerHTML=ct.outerHTML;cl.removeChild(dl=cl.firstChild);}if((!b3.noCloneEvent||!b3.noCloneChecked)&&(ct.nodeType===1||ct.nodeType===11)&&!b8.isXMLDoc(ct)){j=aD(dl);dj=aD(ct);for(bn=0;(cn=dj[bn])!=null;++bn){if(j[bn]){az(cn,j[bn]);}}}if(dk){if(bt){dj=dj||aD(ct);j=j||aD(dl);for(bn=0;(cn=dj[bn])!=null;bn++){aW(cn,j[bn]);}}else{aW(ct,dl);}}j=aD(dl,"script");if(j.length>0){a9(j,!di&&aD(ct,"script"));}j=dj=cn=null;return dl;},buildFragment:function(dk,dr,cn,j){var di,ds,bt,dq,dn,dj,dm,bn=dk.length,dl=bl(dr),dp=[],ct=0;for(;ct")+dm[2];di=dm[0];while(di--){dq=dq.lastChild;}if(!b3.leadingWhitespace&&aT.test(ds)){dp.push(dr.createTextNode(aT.exec(ds)[0]));}if(!b3.tbody){ds=dn==="table"&&!db.test(ds)?dq.firstChild:dm[1]===""&&!db.test(ds)?dq:0;di=ds&&ds.childNodes.length;while(di--){if(b8.nodeName(dj=ds.childNodes[di],"tbody")&&!dj.childNodes.length){ds.removeChild(dj);}}}b8.merge(dp,dq.childNodes);dq.textContent="";while(dq.firstChild){dq.removeChild(dq.firstChild);}dq=dl.lastChild;}}}}if(dq){dl.removeChild(dq);}if(!b3.appendChecked){b8.grep(aD(dp,"input"),aG);}ct=0;while(ds=dp[ct++]){if(j&&b8.inArray(ds,j)!==-1){continue;}bt=b8.contains(ds.ownerDocument,ds);dq=aD(dl.appendChild(ds),"script");if(bt){a9(dq);}if(cn){di=0;while(ds=dq[di++]){if(bC.test(ds.type||"")){cn.push(ds);}}}}dq=null;return dl;},cleanData:function(di,dm){var j,cn,dn,bt,dl=0,dk=b8.expando,ct=b8.cache,dj=b3.deleteExpando,bn=b8.event.special;for(;(j=di[dl])!=null;dl++){if(dm||b8.acceptData(j)){dn=j[dk];bt=dn&&ct[dn];if(bt){if(bt.events){for(cn in bt.events){if(bn[cn]){b8.event.remove(j,cn);}else{b8.removeEvent(j,cn,bt.handle);}}}if(ct[dn]){delete ct[dn];if(dj){delete j[dk];}else{if(typeof j.removeAttribute!==cV){j.removeAttribute(dk);}else{j[dk]=null;}}bZ.push(dn);}}}}}});b8.fn.extend({text:function(j){return c7(this,function(bn){return bn===undefined?b8.text(this):this.empty().append((this[0]&&this[0].ownerDocument||cs).createTextNode(bn));},null,j,arguments.length);},append:function(){return this.domManip(arguments,function(bn){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var j=de(this,bn);j.appendChild(bn);}});},prepend:function(){return this.domManip(arguments,function(bn){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var j=de(this,bn);j.insertBefore(bn,j.firstChild);}});},before:function(){return this.domManip(arguments,function(j){if(this.parentNode){this.parentNode.insertBefore(j,this);}});},after:function(){return this.domManip(arguments,function(j){if(this.parentNode){this.parentNode.insertBefore(j,this.nextSibling);}});},remove:function(cn,bn){var ct,bt=cn?b8.filter(cn,this):this,j=0;for(;(ct=bt[j])!=null;j++){if(!bn&&ct.nodeType===1){b8.cleanData(aD(ct));}if(ct.parentNode){if(bn&&b8.contains(ct.ownerDocument,ct)){a9(aD(ct,"script"));}ct.parentNode.removeChild(ct);}}return this;},empty:function(){var bn,j=0;for(;(bn=this[j])!=null;j++){if(bn.nodeType===1){b8.cleanData(aD(bn,false));}while(bn.firstChild){bn.removeChild(bn.firstChild);}if(bn.options&&b8.nodeName(bn,"select")){bn.options.length=0;}}return this;},clone:function(bn,j){bn=bn==null?false:bn;j=j==null?bn:j;return this.map(function(){return b8.clone(this,bn,j);});},html:function(j){return c7(this,function(ct){var bt=this[0]||{},di=0,cn=this.length;if(ct===undefined){return bt.nodeType===1?bt.innerHTML.replace(ba,""):undefined;}if(typeof ct==="string"&&!aX.test(ct)&&(b3.htmlSerialize||!b0.test(ct))&&(b3.leadingWhitespace||!aT.test(ct))&&!a6[(bh.exec(ct)||["",""])[1].toLowerCase()]){ct=ct.replace(cZ,"<$1>");try{for(;di1&&typeof dn==="string"&&!b3.checkClone&&bF.test(dn)){return this.each(function(dt){var ds=bn.eq(dt);if(ct){dj[0]=dn.call(this,dt,ds.html());}ds.domManip(dj,dq);});}if(dl){dm=b8.buildFragment(dj,this[0].ownerDocument,false,this);cn=dm.firstChild;if(dm.childNodes.length===1){dm=cn;}if(cn){bt=b8.map(aD(dm,"script"),df); +dr=bt.length;for(;di
      t
      ";dl=dm.getElementsByTagName("td");dl[0].style.cssText="margin:0;border:0;padding:0;display:none";dj=dl[0].offsetHeight===0;if(dj){dl[0].style.display="";dl[1].style.display="none";dj=dl[0].offsetHeight===0;}dp.removeChild(dn);}var cn,dk,di,bt,ct,dj,bn;cn=cs.createElement("div");cn.innerHTML="
      a";di=cn.getElementsByTagName("a")[0];dk=di&&di.style;if(!dk){return;}dk.cssText="float:left;opacity:.5";b3.opacity=dk.opacity==="0.5";b3.cssFloat=!!dk.cssFloat;cn.style.backgroundClip="content-box";cn.cloneNode(true).style.backgroundClip="";b3.clearCloneStyle=cn.style.backgroundClip==="content-box";b3.boxSizing=dk.boxSizing===""||dk.MozBoxSizing===""||dk.WebkitBoxSizing==="";b8.extend(b3,{reliableHiddenOffsets:function(){if(dj==null){j();}return dj;},boxSizingReliable:function(){if(ct==null){j();}return ct;},pixelPosition:function(){if(bt==null){j();}return bt;},reliableMarginRight:function(){if(bn==null){j();}return bn;}});})();b8.swap=function(ct,bn,dj,cn){var j,bt,di={};for(bt in bn){di[bt]=ct.style[bt];ct.style[bt]=bn[bt];}j=dj.apply(ct,cn||[]);for(bt in bn){ct.style[bt]=di[bt];}return j;};var ay=/alpha\([^)]*\)/i,cz=/opacity\s*=\s*([^)]*)/,bx=/^(none|table(?!-c[ea]).+)/,aC=new RegExp("^("+cp+")(.*)$","i"),cQ=new RegExp("^([+-])=("+cp+")","i"),cT={position:"absolute",visibility:"hidden",display:"block"},bI={letterSpacing:"0",fontWeight:"400"},bA=["Webkit","O","Moz","ms"];b8.extend({cssHooks:{opacity:{get:function(bn,j){if(j){var bt=c1(bn,"opacity");return bt===""?"1":bt;}}}},cssNumber:{columnCount:true,fillOpacity:true,flexGrow:true,flexShrink:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b3.cssFloat?"cssFloat":"styleFloat"},style:function(di,dl,bt,j){if(!di||di.nodeType===3||di.nodeType===8||!di.style){return; +}var cn,dm,bn,dk=b8.camelCase(dl),dj=di.style;dl=b8.cssProps[dk]||(b8.cssProps[dk]=cd(dj,dk));bn=b8.cssHooks[dl]||b8.cssHooks[dk];if(bt!==undefined){dm=typeof bt;if(dm==="string"&&(cn=cQ.exec(bt))){bt=(cn[1]+1)*cn[2]+parseFloat(b8.css(di,dl));dm="number";}if(bt==null||bt!==bt){return;}if(dm==="number"&&!b8.cssNumber[dk]){bt+="px";}if(!b3.clearCloneStyle&&bt===""&&dl.indexOf("background")===0){dj[dl]="inherit";}if(!bn||!("set" in bn)||(bt=bn.set(di,bt,j))!==undefined){try{dj[dl]=bt;}catch(ct){}}}else{if(bn&&"get" in bn&&(cn=bn.get(di,false,j))!==undefined){return cn;}return dj[dl];}},css:function(di,bt,dk,ct){var bn,cn,dj,j=b8.camelCase(bt);bt=b8.cssProps[j]||(b8.cssProps[j]=cd(di.style,j));dj=b8.cssHooks[bt]||b8.cssHooks[j];if(dj&&"get" in dj){cn=dj.get(di,true,dk);}if(cn===undefined){cn=c1(di,bt,ct);}if(cn==="normal"&&bt in bI){cn=bI[bt];}if(dk===""||dk){bn=parseFloat(cn);return dk===true||b8.isNumeric(bn)?bn||0:cn;}return cn;}});b8.each(["height","width"],function(bn,j){b8.cssHooks[j]={get:function(cn,ct,bt){if(ct){return bx.test(b8.css(cn,"display"))&&cn.offsetWidth===0?b8.swap(cn,cT,function(){return aK(cn,j,bt);}):aK(cn,j,bt);}},set:function(ct,di,cn){var bt=cn&&aS(ct);return bX(ct,di,cn?bE(ct,j,cn,b3.boxSizing&&b8.css(ct,"boxSizing",false,bt)==="border-box",bt):0);}};});if(!b3.opacity){b8.cssHooks.opacity={get:function(bn,j){return cz.test((j&&bn.currentStyle?bn.currentStyle.filter:bn.style.filter)||"")?0.01*parseFloat(RegExp.$1)+"":j?"1":"";},set:function(ct,bn){var di=ct.style,cn=ct.currentStyle,j=b8.isNumeric(bn)?"alpha(opacity="+bn*100+")":"",bt=cn&&cn.filter||di.filter||"";di.zoom=1;if((bn>=1||bn==="")&&b8.trim(bt.replace(ay,""))===""&&di.removeAttribute){di.removeAttribute("filter");if(bn===""||cn&&!cn.filter){return;}}di.filter=ay.test(bt)?bt.replace(ay,j):bt+" "+j;}};}b8.cssHooks.marginRight=aH(b3.reliableMarginRight,function(bn,j){if(j){return b8.swap(bn,{display:"inline-block"},c1,[bn,"marginRight"]);}});b8.each({margin:"",padding:"",border:"Width"},function(bn,j){b8.cssHooks[bn+j]={expand:function(di){var ct=0,bt={},cn=typeof di==="string"?di.split(" "):[di];for(;ct<4;ct++){bt[bn+co[ct]+j]=cn[ct]||cn[ct-2]||cn[0];}return bt;}};if(!aw.test(bn)){b8.cssHooks[bn+j].set=bX;}});b8.fn.extend({css:function(bn,j){return c7(this,function(dj,cn,dl){var di,bt,ct={},dk=0;if(b8.isArray(cn)){di=aS(dj);bt=cn.length;for(;dk1);},show:function(){return cw(this,true);},hide:function(){return cw(this);},toggle:function(j){if(typeof j==="boolean"){return j?this.show():this.hide();}return this.each(function(){if(cq(this)){b8(this).show();}else{b8(this).hide();}});}});b8.Tween=da;da.prototype={constructor:da,init:function(ct,bn,di,cn,j,bt){this.elem=ct;this.prop=di;this.easing=j||"swing";this.options=bn;this.start=this.now=this.cur();this.end=cn;this.unit=bt||(b8.cssNumber[di]?"":"px");},cur:function(){var j=da.propHooks[this.prop];return j&&j.get?j.get(this):da.propHooks._default.get(this);},run:function(bn){var j,bt=da.propHooks[this.prop];if(this.options.duration){this.pos=j=b8.easing[this.easing](bn,this.options.duration*bn,0,1,this.options.duration);}else{this.pos=j=bn;}this.now=(this.end-this.start)*j+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this);}if(bt&&bt.set){bt.set(this);}else{da.propHooks._default.set(this);}return this;}};da.prototype.init.prototype=da.prototype;da.propHooks={_default:{get:function(bn){var j;if(bn.elem[bn.prop]!=null&&(!bn.elem.style||bn.elem.style[bn.prop]==null)){return bn.elem[bn.prop];}j=b8.css(bn.elem,bn.prop,"");return !j||j==="auto"?0:j;},set:function(j){if(b8.fx.step[j.prop]){b8.fx.step[j.prop](j);}else{if(j.elem.style&&(j.elem.style[b8.cssProps[j.prop]]!=null||b8.cssHooks[j.prop])){b8.style(j.elem,j.prop,j.now+j.unit);}else{j.elem[j.prop]=j.now;}}}}};da.propHooks.scrollTop=da.propHooks.scrollLeft={set:function(j){if(j.elem.nodeType&&j.elem.parentNode){j.elem[j.prop]=j.now;}}};b8.easing={linear:function(j){return j;},swing:function(j){return 0.5-Math.cos(j*Math.PI)/2;}};b8.fx=da.prototype.init;b8.fx.step={};var bq,be,bv=/^(?:toggle|show|hide)$/,a4=new RegExp("^(?:([+-])=|)("+cp+")([a-z%]*)$","i"),cM=/queueHooks$/,bp=[bj],bd={"*":[function(ct,dk){var bt=this.createTween(ct,dk),j=bt.cur(),cn=a4.exec(dk),dl=cn&&cn[3]||(b8.cssNumber[ct]?"":"px"),bn=(b8.cssNumber[ct]||dl!=="px"&&+j)&&a4.exec(b8.css(bt.elem,ct)),dj=1,di=20;if(bn&&bn[3]!==dl){dl=dl||bn[3];cn=cn||[];bn=+j||1;do{dj=dj||".5";bn=bn/dj;b8.style(bt.elem,ct,bn+dl);}while(dj!==(dj=bt.cur()/j)&&dj!==1&&--di);}if(cn){bn=bt.start=+bn||+j||0;bt.unit=dl;bt.end=cn[1]?bn+(cn[1]+1)*cn[2]:+cn[2];}return bt;}]};b8.Animation=b8.extend(bT,{tweener:function(cn,bn){if(b8.isFunction(cn)){bn=cn;cn=["*"];}else{cn=cn.split(" ");}var ct,bt=0,j=cn.length;for(;bt
      a";bt=bn.getElementsByTagName("a")[0];ct=cs.createElement("select");j=ct.appendChild(cs.createElement("option"));cn=bn.getElementsByTagName("input")[0];bt.style.cssText="top:1px";b3.getSetAttribute=bn.className!=="t";b3.style=/top/.test(bt.getAttribute("style"));b3.hrefNormalized=bt.getAttribute("href")==="/a";b3.checkOn=!!cn.value;b3.optSelected=j.selected;b3.enctype=!!cs.createElement("form").enctype;ct.disabled=true;b3.optDisabled=!j.disabled;cn=cs.createElement("input");cn.setAttribute("value","");b3.input=cn.getAttribute("value")==="";cn.value="t";cn.setAttribute("type","radio");b3.radioValue=cn.value==="t";})();var aZ=/\r/g;b8.fn.extend({val:function(cn){var bn,ct,bt,j=this[0];if(!arguments.length){if(j){bn=b8.valHooks[j.type]||b8.valHooks[j.nodeName.toLowerCase()];if(bn&&"get" in bn&&(ct=bn.get(j,"value"))!==undefined){return ct;}ct=j.value;return typeof ct==="string"?ct.replace(aZ,""):ct==null?"":ct;}return;}bt=b8.isFunction(cn);return this.each(function(dj){var di;if(this.nodeType!==1){return;}if(bt){di=cn.call(this,dj,b8(this).val());}else{di=cn;}if(di==null){di="";}else{if(typeof di==="number"){di+="";}else{if(b8.isArray(di)){di=b8.map(di,function(dk){return dk==null?"":dk+"";});}}}bn=b8.valHooks[this.type]||b8.valHooks[this.nodeName.toLowerCase()];if(!bn||!("set" in bn)||bn.set(this,di,"value")===undefined){this.value=di;}});}});b8.extend({valHooks:{option:{get:function(bn){var j=b8.find.attr(bn,"value");return j!=null?j:b8.trim(b8.text(bn));}},select:{get:function(ct){var dk,bt,j=ct.options,cn=ct.selectedIndex,dl=ct.type==="select-one"||cn<0,bn=dl?null:[],dj=dl?cn+1:j.length,di=cn<0?dj:dl?cn:0;for(;di=0){try{ct.selected=dk=true;}catch(j){ct.scrollHeight;}}else{ct.selected=false;}}if(!dk){di.selectedIndex=-1;}return bn;}}}});b8.each(["radio","checkbox"],function(){b8.valHooks[this]={set:function(bn,j){if(b8.isArray(j)){return bn.checked=b8.inArray(b8(bn).val(),j)>=0;}}};if(!b3.checkOn){b8.valHooks[this].get=function(j){return j.getAttribute("value")===null?"on":j.value;};}});var bH,bD,aN=b8.expr.attrHandle,c4=/^(?:checked|selected)$/i,a8=b3.getSetAttribute,c9=b3.input;b8.fn.extend({attr:function(bn,j){return c7(this,b8.attr,bn,j,arguments.length>1);},removeAttr:function(j){return this.each(function(){b8.removeAttr(this,j);});}});b8.extend({attr:function(ct,bn,di){var cn,j,bt=ct.nodeType;if(!ct||bt===3||bt===8||bt===2){return;}if(typeof ct.getAttribute===cV){return b8.prop(ct,bn,di);}if(bt!==1||!b8.isXMLDoc(ct)){bn=bn.toLowerCase();cn=b8.attrHooks[bn]||(b8.expr.match.bool.test(bn)?bD:bH);}if(di!==undefined){if(di===null){b8.removeAttr(ct,bn);}else{if(cn&&"set" in cn&&(j=cn.set(ct,di,bn))!==undefined){return j;}else{ct.setAttribute(bn,di+"");return di;}}}else{if(cn&&"get" in cn&&(j=cn.get(ct,bn))!==null){return j;}else{j=b8.find.attr(ct,bn);return j==null?undefined:j;}}},removeAttr:function(ct,bn){var di,cn,j=0,bt=bn&&bn.match(cB);if(bt&&ct.nodeType===1){while(di=bt[j++]){cn=b8.propFix[di]||di;if(b8.expr.match.bool.test(di)){if(c9&&a8||!c4.test(di)){ct[cn]=false;}else{ct[b8.camelCase("default-"+di)]=ct[cn]=false;}}else{b8.attr(ct,di,"");}ct.removeAttribute(a8?di:cn);}}},attrHooks:{type:{set:function(bn,j){if(!b3.radioValue&&j==="radio"&&b8.nodeName(bn,"input")){var bt=bn.value;bn.setAttribute("type",j);if(bt){bn.value=bt;}return j;}}}}});bD={set:function(bn,j,bt){if(j===false){b8.removeAttr(bn,bt);}else{if(c9&&a8||!c4.test(bt)){bn.setAttribute(!a8&&b8.propFix[bt]||bt,bt);}else{bn[b8.camelCase("default-"+bt)]=bn[bt]=true;}}return bt;}};b8.each(b8.expr.match.bool.source.match(/\w+/g),function(bn,j){var bt=aN[j]||b8.find.attr;aN[j]=c9&&a8||!c4.test(j)?function(dk,ct,dj){var cn,di;if(!dj){di=aN[ct];aN[ct]=cn;cn=bt(dk,ct,dj)!=null?ct.toLowerCase():null;aN[ct]=di;}return cn;}:function(ct,cn,di){if(!di){return ct[b8.camelCase("default-"+cn)]?cn.toLowerCase():null;}};});if(!c9||!a8){b8.attrHooks.value={set:function(bn,j,bt){if(b8.nodeName(bn,"input")){bn.defaultValue=j;}else{return bH&&bH.set(bn,j,bt);}}};}if(!a8){bH={set:function(bt,j,cn){var bn=bt.getAttributeNode(cn);if(!bn){bt.setAttributeNode(bn=bt.ownerDocument.createAttribute(cn));}bn.value=j+="";if(cn==="value"||j===bt.getAttribute(cn)){return j;}}};aN.id=aN.name=aN.coords=function(bt,j,cn){var bn;if(!cn){return(bn=bt.getAttributeNode(j))&&bn.value!==""?bn.value:null;}};b8.valHooks.button={get:function(bn,j){var bt=bn.getAttributeNode(j);if(bt&&bt.specified){return bt.value;}},set:bH.set};b8.attrHooks.contenteditable={set:function(bn,j,bt){bH.set(bn,j===""?false:j,bt);}};b8.each(["width","height"],function(bn,j){b8.attrHooks[j]={set:function(bt,cn){if(cn===""){bt.setAttribute(j,"auto");return cn;}}};});}if(!b3.style){b8.attrHooks.style={get:function(j){return j.style.cssText||undefined;},set:function(bn,j){return bn.style.cssText=j+"";}};}var cu=/^(?:input|select|textarea|button|object)$/i,aF=/^(?:a|area)$/i;b8.fn.extend({prop:function(bn,j){return c7(this,b8.prop,bn,j,arguments.length>1);},removeProp:function(j){j=b8.propFix[j]||j;return this.each(function(){try{this[j]=undefined;delete this[j];}catch(bn){}});}});b8.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(ct,bn,dj){var cn,j,bt,di=ct.nodeType;if(!ct||di===3||di===8||di===2){return;}bt=di!==1||!b8.isXMLDoc(ct);if(bt){bn=b8.propFix[bn]||bn;j=b8.propHooks[bn];}if(dj!==undefined){return j&&"set" in j&&(cn=j.set(ct,dj,bn))!==undefined?cn:ct[bn]=dj;}else{return j&&"get" in j&&(cn=j.get(ct,bn))!==null?cn:ct[bn];}},propHooks:{tabIndex:{get:function(bn){var j=b8.find.attr(bn,"tabindex");return j?parseInt(j,10):cu.test(bn.nodeName)||aF.test(bn.nodeName)&&bn.href?0:-1;}}}});if(!b3.hrefNormalized){b8.each(["href","src"],function(bn,j){b8.propHooks[j]={get:function(bt){return bt.getAttribute(j,4);}};});}if(!b3.optSelected){b8.propHooks.selected={get:function(bn){var j=bn.parentNode;if(j){j.selectedIndex;if(j.parentNode){j.parentNode.selectedIndex;}}return null;}};}b8.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){b8.propFix[this.toLowerCase()]=this;});if(!b3.enctype){b8.propFix.enctype="encoding";}var aI=/[\t\r\n\f]/g;b8.fn.extend({addClass:function(di){var dl,bt,j,cn,dm,bn,dk=0,dj=this.length,ct=typeof di==="string"&&di;if(b8.isFunction(di)){return this.each(function(dn){b8(this).addClass(di.call(this,dn,this.className));});}if(ct){dl=(di||"").match(cB)||[];for(;dk=0){j=j.replace(" "+cn+" "," ");}}bn=di?b8.trim(j):"";if(bt.className!==bn){bt.className=bn;}}}}return this;},toggleClass:function(bn,j){var bt=typeof bn;if(typeof j==="boolean"&&bt==="string"){return j?this.addClass(bn):this.removeClass(bn);}if(b8.isFunction(bn)){return this.each(function(cn){b8(this).toggleClass(bn.call(this,cn,this.className,j),j);});}return this.each(function(){if(bt==="string"){var ct,dj=0,cn=b8(this),di=bn.match(cB)||[];while(ct=di[dj++]){if(cn.hasClass(ct)){cn.removeClass(ct);}else{cn.addClass(ct);}}}else{if(bt===cV||bt==="boolean"){if(this.className){b8._data(this,"__className__",this.className);}this.className=this.className||bn===false?"":b8._data(this,"__className__")||"";}}});},hasClass:function(bt){var j=" "+bt+" ",cn=0,bn=this.length;for(;cn=0){return true;}}return false;}});b8.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error contextmenu").split(" "),function(bn,j){b8.fn[j]=function(bt,cn){return arguments.length>0?this.on(j,null,bt,cn):this.trigger(j);};});b8.fn.extend({hover:function(bn,j){return this.mouseenter(bn).mouseleave(j||bn);},bind:function(bn,j,bt){return this.on(bn,null,j,bt);},unbind:function(bn,j){return this.off(bn,null,j);},delegate:function(bt,j,cn,bn){return this.on(j,bt,cn,bn);},undelegate:function(bn,j,bt){return arguments.length===1?this.off(bn,"**"):this.off(j,bn||"**",bt);}});var dg=b8.now();var dh=/\?/;var c8=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;b8.parseJSON=function(bn){if(cc.JSON&&cc.JSON.parse){return cc.JSON.parse(bn+"");}var cn,bt=null,j=b8.trim(bn+"");return j&&!b8.trim(j.replace(c8,function(dk,di,ct,dj){if(cn&&di){bt=0;}if(bt===0){return dk;}cn=ct||di;bt+=!dj-!ct;return"";}))?Function("return "+j)():b8.error("Invalid JSON: "+bn);};b8.parseXML=function(bn){var cn,bt;if(!bn||typeof bn!=="string"){return null;}try{if(cc.DOMParser){bt=new DOMParser;cn=bt.parseFromString(bn,"text/xml");}else{cn=new ActiveXObject("Microsoft.XMLDOM");cn.async="false";cn.loadXML(bn);}}catch(j){cn=undefined;}if(!cn||!cn.documentElement||cn.getElementsByTagName("parsererror").length){b8.error("Invalid XML: "+bn);}return cn;};var bc,aY,aB=/#.*$/,by=/([?&])_=[^&]*/,bi=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,a3=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,bo=/^(?:GET|HEAD)$/,ax=/^\/\//,aR=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,aU={},c3={},a7="*/".concat("*");try{aY=location.href;}catch(aJ){aY=cs.createElement("a");aY.href="";aY=aY.href;}bc=aR.exec(aY.toLowerCase())||[];b8.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:aY,type:"GET",isLocal:a3.test(bc[1]),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":a7,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":b8.parseJSON,"text xml":b8.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(bn,j){return j?bz(bz(bn,b8.ajaxSettings),j):bz(b8.ajaxSettings,bn);},ajaxPrefilter:aA(aU),ajaxTransport:aA(c3),ajax:function(dw,dk){function bt(dG,dK,dC,dB){var dF,dE,dH,dJ,dD,dI=dK;if(dz===2){return;}dz=2;if(dp){clearTimeout(dp);}dA=undefined;dl=dB||"";dj.readyState=dG>0?4:0;dF=dG>=200&&dG<300||dG===304;if(dC){dJ=aE(ds,dj,dC);}dJ=cX(ds,dJ,dj,dF);if(dF){if(ds.ifModified){dD=dj.getResponseHeader("Last-Modified");if(dD){b8.lastModified[dt]=dD;}dD=dj.getResponseHeader("etag");if(dD){b8.etag[dt]=dD;}}if(dG===204||ds.type==="HEAD"){dI="nocontent";}else{if(dG===304){dI="notmodified";}else{dI=dJ.state;dE=dJ.data;dH=dJ.error;dF=!dH;}}}else{dH=dI;if(dG||!dI){dI="error";if(dG<0){dG=0;}}}dj.status=dG;dj.statusText=(dK||dI)+"";if(dF){dx.resolveWith(dy,[dE,dI,dj]);}else{dx.rejectWith(dy,[dj,dI,dH]);}dj.statusCode(dr);dr=undefined;if(di){dn.trigger(dF?"ajaxSuccess":"ajaxError",[dj,ds,dF?dE:dH]);}ct.fireWith(dy,[dj,dI]);if(di){dn.trigger("ajaxComplete",[dj,ds]);if(!--b8.active){b8.event.trigger("ajaxStop");}}}if(typeof dw==="object"){dk=dw; +dw=undefined;}dk=dk||{};var dq,dm,dt,dl,dp,di,dA,dv,ds=b8.ajaxSetup({},dk),dy=ds.context||ds,dn=ds.context&&(dy.nodeType||dy.jquery)?b8(dy):b8.event,dx=b8.Deferred(),ct=b8.Callbacks("once memory"),dr=ds.statusCode||{},du={},bn={},dz=0,cn="canceled",dj={readyState:0,getResponseHeader:function(dC){var dB;if(dz===2){if(!dv){dv={};while(dB=bi.exec(dl)){dv[dB[1].toLowerCase()]=dB[2];}}dB=dv[dC.toLowerCase()];}return dB==null?null:dB;},getAllResponseHeaders:function(){return dz===2?dl:null;},setRequestHeader:function(dC,dB){var dD=dC.toLowerCase();if(!dz){dC=bn[dD]=bn[dD]||dC;du[dC]=dB;}return this;},overrideMimeType:function(dB){if(!dz){ds.mimeType=dB;}return this;},statusCode:function(dC){var dB;if(dC){if(dz<2){for(dB in dC){dr[dB]=[dr[dB],dC[dB]];}}else{dj.always(dC[dj.status]);}}return this;},abort:function(dC){var dB=dC||cn;if(dA){dA.abort(dB);}bt(0,dB);return this;}};dx.promise(dj).complete=ct.add;dj.success=dj.done;dj.error=dj.fail;ds.url=((dw||ds.url||aY)+"").replace(aB,"").replace(ax,bc[1]+"//");ds.type=dk.method||dk.type||ds.method||ds.type;ds.dataTypes=b8.trim(ds.dataType||"*").toLowerCase().match(cB)||[""];if(ds.crossDomain==null){dq=aR.exec(ds.url.toLowerCase());ds.crossDomain=!!(dq&&(dq[1]!==bc[1]||dq[2]!==bc[2]||(dq[3]||(dq[1]==="http:"?"80":"443"))!==(bc[3]||(bc[1]==="http:"?"80":"443"))));}if(ds.data&&ds.processData&&typeof ds.data!=="string"){ds.data=b8.param(ds.data,ds.traditional);}cJ(aU,ds,dk,dj);if(dz===2){return dj;}di=ds.global;if(di&&b8.active++===0){b8.event.trigger("ajaxStart");}ds.type=ds.type.toUpperCase();ds.hasContent=!bo.test(ds.type);dt=ds.url;if(!ds.hasContent){if(ds.data){dt=ds.url+=(dh.test(dt)?"&":"?")+ds.data;delete ds.data;}if(ds.cache===false){ds.url=by.test(dt)?dt.replace(by,"$1_="+dg++):dt+(dh.test(dt)?"&":"?")+"_="+dg++;}}if(ds.ifModified){if(b8.lastModified[dt]){dj.setRequestHeader("If-Modified-Since",b8.lastModified[dt]);}if(b8.etag[dt]){dj.setRequestHeader("If-None-Match",b8.etag[dt]);}}if(ds.data&&ds.hasContent&&ds.contentType!==false||dk.contentType){dj.setRequestHeader("Content-Type",ds.contentType);}dj.setRequestHeader("Accept",ds.dataTypes[0]&&ds.accepts[ds.dataTypes[0]]?ds.accepts[ds.dataTypes[0]]+(ds.dataTypes[0]!=="*"?", "+a7+"; q=0.01":""):ds.accepts["*"]);for(dm in ds.headers){dj.setRequestHeader(dm,ds.headers[dm]);}if(ds.beforeSend&&(ds.beforeSend.call(dy,dj,ds)===false||dz===2)){return dj.abort();}cn="abort";for(dm in {success:1,error:1,complete:1}){dj[dm](ds[dm]);}dA=cJ(c3,ds,dk,dj);if(!dA){bt(-1,"No Transport");}else{dj.readyState=1;if(di){dn.trigger("ajaxSend",[dj,ds]);}if(ds.async&&ds.timeout>0){dp=setTimeout(function(){dj.abort("timeout");},ds.timeout);}try{dz=1;dA.send(du,bt);}catch(j){if(dz<2){bt(-1,j);}else{throw j;}}}return dj;},getJSON:function(bn,j,bt){return b8.get(bn,j,bt,"json");},getScript:function(bn,j){return b8.get(bn,undefined,j,"script");}});b8.each(["get","post"],function(bn,j){b8[j]=function(ct,di,cn,bt){if(b8.isFunction(di)){bt=bt||cn;cn=di;di=undefined;}return b8.ajax({url:ct,type:j,dataType:bt,data:di,success:cn});};});b8.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(bn,j){b8.fn[j]=function(bt){return this.on(j,bt);};});b8._evalUrl=function(j){return b8.ajax({url:j,type:"GET",dataType:"script",async:false,global:false,"throws":true});};b8.fn.extend({wrapAll:function(bn){if(b8.isFunction(bn)){return this.each(function(bt){b8(this).wrapAll(bn.call(this,bt));});}if(this[0]){var j=b8(bn,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){j.insertBefore(this[0]);}j.map(function(){var bt=this;while(bt.firstChild&&bt.firstChild.nodeType===1){bt=bt.firstChild;}return bt;}).append(this);}return this;},wrapInner:function(j){if(b8.isFunction(j)){return this.each(function(bn){b8(this).wrapInner(j.call(this,bn));});}return this.each(function(){var bn=b8(this),bt=bn.contents();if(bt.length){bt.wrapAll(j);}else{bn.append(j);}});},wrap:function(bn){var j=b8.isFunction(bn);return this.each(function(bt){b8(this).wrapAll(j?bn.call(this,bt):bn);});},unwrap:function(){return this.parent().each(function(){if(!b8.nodeName(this,"body")){b8(this).replaceWith(this.childNodes);}}).end();}});b8.expr.filters.hidden=function(j){return j.offsetWidth<=0&&j.offsetHeight<=0||!b3.reliableHiddenOffsets()&&(j.style&&j.style.display||b8.css(j,"display"))==="none";};b8.expr.filters.visible=function(j){return !b8.expr.filters.hidden(j);};var cY=/%20/g,bJ=/\[\]$/,bB=/\r?\n/g,ci=/^(?:submit|button|image|reset|file)$/i,cF=/^(?:input|select|textarea|keygen)/i;b8.param=function(cn,bn){var ct,bt=[],j=function(dj,di){di=b8.isFunction(di)?di():di==null?"":di;bt[bt.length]=encodeURIComponent(dj)+"="+encodeURIComponent(di);};if(bn===undefined){bn=b8.ajaxSettings&&b8.ajaxSettings.traditional;}if(b8.isArray(cn)||cn.jquery&&!b8.isPlainObject(cn)){b8.each(cn,function(){j(this.name,this.value);});}else{for(ct in cn){b6(ct,cn[ct],bn,j);}}return bt.join("&").replace(cY,"+");};b8.fn.extend({serialize:function(){return b8.param(this.serializeArray()); +},serializeArray:function(){return this.map(function(){var j=b8.prop(this,"elements");return j?b8.makeArray(j):this;}).filter(function(){var j=this.type;return this.name&&!b8(this).is(":disabled")&&cF.test(this.nodeName)&&!ci.test(j)&&(this.checked||!cK.test(j));}).map(function(bn,j){var bt=b8(this).val();return bt==null?null:b8.isArray(bt)?b8.map(bt,function(cn){return{name:j.name,value:cn.replace(bB,"\r\n")};}):{name:j.name,value:bt.replace(bB,"\r\n")};}).get();}});b8.ajaxSettings.xhr=cc.ActiveXObject!==undefined?function(){return !this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&br()||bf();}:br;var bG=0,aM={},dc=b8.ajaxSettings.xhr();if(cc.ActiveXObject){b8(cc).on("unload",function(){for(var j in aM){aM[j](undefined,true);}});}b3.cors=!!dc&&"withCredentials" in dc;dc=b3.ajax=!!dc;if(dc){b8.ajaxTransport(function(bn){if(!bn.crossDomain||b3.cors){var j;return{send:function(dj,ct){var bt,cn=bn.xhr(),di=++bG;cn.open(bn.type,bn.url,bn.async,bn.username,bn.password);if(bn.xhrFields){for(bt in bn.xhrFields){cn[bt]=bn.xhrFields[bt];}}if(bn.mimeType&&cn.overrideMimeType){cn.overrideMimeType(bn.mimeType);}if(!bn.crossDomain&&!dj["X-Requested-With"]){dj["X-Requested-With"]="XMLHttpRequest";}for(bt in dj){if(dj[bt]!==undefined){cn.setRequestHeader(bt,dj[bt]+"");}}cn.send(bn.hasContent&&bn.data||null);j=function(dq,dn){var dm,dl,dp;if(j&&(dn||cn.readyState===4)){delete aM[di];j=undefined;cn.onreadystatechange=b8.noop;if(dn){if(cn.readyState!==4){cn.abort();}}else{dp={};dm=cn.status;if(typeof cn.responseText==="string"){dp.text=cn.responseText;}try{dl=cn.statusText;}catch(dk){dl="";}if(!dm&&bn.isLocal&&!bn.crossDomain){dm=dp.text?200:404;}else{if(dm===1223){dm=204;}}}}if(dp){ct(dm,dl,dp,cn.getAllResponseHeaders());}};if(!bn.async){j();}else{if(cn.readyState===4){setTimeout(j);}else{cn.onreadystatechange=aM[di]=j;}}},abort:function(){if(j){j(undefined,true);}}};}});}b8.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(j){b8.globalEval(j);return j;}}});b8.ajaxPrefilter("script",function(j){if(j.cache===undefined){j.cache=false;}if(j.crossDomain){j.type="GET";j.global=false;}});b8.ajaxTransport("script",function(bn){if(bn.crossDomain){var j,bt=cs.head||b8("head")[0]||cs.documentElement;return{send:function(ct,cn){j=cs.createElement("script");j.async=true;if(bn.scriptCharset){j.charset=bn.scriptCharset;}j.src=bn.url;j.onload=j.onreadystatechange=function(di,dj){if(dj||!j.readyState||/loaded|complete/.test(j.readyState)){j.onload=j.onreadystatechange=null;if(j.parentNode){j.parentNode.removeChild(j);}j=null;if(!dj){cn(200,"success");}}};bt.insertBefore(j,bt.firstChild);},abort:function(){if(j){j.onload(undefined,true);}}};}});var bu=[],a2=/(=)\?(?=&|$)|\?\?/;b8.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var j=bu.pop()||b8.expando+"_"+dg++;this[j]=true;return j;}});b8.ajaxPrefilter("json jsonp",function(bt,dj,ct){var bn,cn,di,j=bt.jsonp!==false&&(a2.test(bt.url)?"url":typeof bt.data==="string"&&!(bt.contentType||"").indexOf("application/x-www-form-urlencoded")&&a2.test(bt.data)&&"data");if(j||bt.dataTypes[0]==="jsonp"){bn=bt.jsonpCallback=b8.isFunction(bt.jsonpCallback)?bt.jsonpCallback():bt.jsonpCallback;if(j){bt[j]=bt[j].replace(a2,"$1"+bn);}else{if(bt.jsonp!==false){bt.url+=(dh.test(bt.url)?"&":"?")+bt.jsonp+"="+bn;}}bt.converters["script json"]=function(){if(!di){b8.error(bn+" was not called");}return di[0];};bt.dataTypes[0]="json";cn=cc[bn];cc[bn]=function(){di=arguments;};ct.always(function(){cc[bn]=cn;if(bt[bn]){bt.jsonpCallback=dj.jsonpCallback;bu.push(bn);}if(di&&b8.isFunction(cn)){cn(di[0]);}di=cn=undefined;});return"script";}});b8.parseHTML=function(cn,bn,ct){if(!cn||typeof cn!=="string"){return null;}if(typeof bn==="boolean"){ct=bn;bn=false;}bn=bn||cs;var bt=bO.exec(cn),j=!ct&&[];if(bt){return[bn.createElement(bt[1])];}bt=b8.buildFragment([cn],bn,j);if(j&&j.length){b8(j).remove();}return b8.merge([],bt.childNodes);};var cE=b8.fn.load;b8.fn.load=function(di,bt,dk){if(typeof di!=="string"&&cE){return cE.apply(this,arguments);}var ct,bn,cn,dj=this,j=di.indexOf(" ");if(j>=0){ct=b8.trim(di.slice(j,di.length));di=di.slice(0,j);}if(b8.isFunction(bt)){dk=bt;bt=undefined;}else{if(bt&&typeof bt==="object"){cn="POST";}}if(dj.length>0){b8.ajax({url:di,type:cn,dataType:"html",data:bt}).done(function(dl){bn=arguments;dj.html(ct?b8("
      ").append(b8.parseHTML(dl)).find(ct):dl);}).complete(dk&&function(dm,dl){dj.each(dk,bn||[dm.responseText,dl,dm]);});}return this;};b8.expr.filters.animated=function(j){return b8.grep(b8.timers,function(bn){return j===bn.elem;}).length;};var bm=cc.document.documentElement;b8.offset={setOffset:function(dk,dp,cn){var j,di,dq,bt,dn,dm,dj,ct=b8.css(dk,"position"),dl=b8(dk),bn={};if(ct==="static"){dk.style.position="relative";}dn=dl.offset();dq=b8.css(dk,"top");dm=b8.css(dk,"left");dj=(ct==="absolute"||ct==="fixed")&&b8.inArray("auto",[dq,dm])>-1; +if(dj){j=dl.position();bt=j.top;di=j.left;}else{bt=parseFloat(dq)||0;di=parseFloat(dm)||0;}if(b8.isFunction(dp)){dp=dp.call(dk,cn,dn);}if(dp.top!=null){bn.top=dp.top-dn.top+bt;}if(dp.left!=null){bn.left=dp.left-dn.left+di;}if("using" in dp){dp.using.call(dk,bn);}else{dl.css(bn);}}};b8.fn.extend({offset:function(ct){if(arguments.length){return ct===undefined?this:this.each(function(dj){b8.offset.setOffset(this,ct,dj);});}var bn,di,cn={top:0,left:0},j=this[0],bt=j&&j.ownerDocument;if(!bt){return;}bn=bt.documentElement;if(!b8.contains(bn,j)){return cn;}if(typeof j.getBoundingClientRect!==cV){cn=j.getBoundingClientRect();}di=aQ(bt);return{top:cn.top+(di.pageYOffset||bn.scrollTop)-(bn.clientTop||0),left:cn.left+(di.pageXOffset||bn.scrollLeft)-(bn.clientLeft||0)};},position:function(){if(!this[0]){return;}var bt,j,cn={top:0,left:0},bn=this[0];if(b8.css(bn,"position")==="fixed"){j=bn.getBoundingClientRect();}else{bt=this.offsetParent();j=this.offset();if(!b8.nodeName(bt[0],"html")){cn=bt.offset();}cn.top+=b8.css(bt[0],"borderTopWidth",true);cn.left+=b8.css(bt[0],"borderLeftWidth",true);}return{top:j.top-cn.top-b8.css(bn,"marginTop",true),left:j.left-cn.left-b8.css(bn,"marginLeft",true)};},offsetParent:function(){return this.map(function(){var j=this.offsetParent||bm;while(j&&!b8.nodeName(j,"html")&&b8.css(j,"position")==="static"){j=j.offsetParent;}return j||bm;});}});b8.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(bn,j){var bt=/Y/.test(j);b8.fn[bn]=function(cn){return c7(this,function(dk,dj,ct){var di=aQ(dk);if(ct===undefined){return di?j in di?di[j]:di.document.documentElement[dj]:dk[dj];}if(di){di.scrollTo(!bt?ct:b8(di).scrollLeft(),bt?ct:b8(di).scrollTop());}else{dk[dj]=ct;}},bn,cn,arguments.length,null);};});b8.each(["top","left"],function(bn,j){b8.cssHooks[j]=aH(b3.pixelPosition,function(bt,cn){if(cn){cn=c1(bt,j);return aO.test(cn)?b8(bt).position()[j]+"px":cn;}});});b8.each({Height:"height",Width:"width"},function(bn,j){b8.each({padding:"inner"+bn,content:j,"":"outer"+bn},function(cn,bt){b8.fn[bt]=function(dj,ct){var di=arguments.length&&(cn||typeof dj!=="boolean"),dk=cn||(dj===true||ct===true?"margin":"border");return c7(this,function(dm,dp,dn){var dl;if(b8.isWindow(dm)){return dm.document.documentElement["client"+bn];}if(dm.nodeType===9){dl=dm.documentElement;return Math.max(dm.body["scroll"+bn],dl["scroll"+bn],dm.body["offset"+bn],dl["offset"+bn],dl["client"+bn]);}return dn===undefined?b8.css(dm,dp,dk):b8.style(dm,dp,dn,dk);},j,di?dj:undefined,di,null);};});});b8.fn.size=function(){return this.length;};b8.fn.andSelf=b8.fn.addBack;if(typeof define==="function"&&define.amd){define("jquery",[],function(){return b8;});}var bb=cc.jQuery,b2=cc.$;b8.noConflict=function(j){if(cc.$===b8){cc.$=b2;}if(j&&cc.jQuery===b8){cc.jQuery=bb;}return b8;};if(typeof bR===cV){cc.jQuery=cc.$=b8;}return b8;});var H=jQuery.noConflict();!function(bv,bd){function bk(bD,bB){for(var bE,j=[],bC=0;bC0&&bC(bQ,function(bS,bR){bS!==bO&&(bG(bN[bR])===bG(bS)&&~bJ(bG(bS),["array","object"])?bL(bN[bR],bS):bN[bR]=bS);});}),bN;},bC=function(bR,bP){var bT,bO,bQ,bS;if(bR){try{bT=bR.length;}catch(bN){bT=bS;}if(bT===bS){for(bO in bR){if(bR.hasOwnProperty(bO)&&bP(bR[bO],bO)===!1){return;}}}else{for(bQ=0;bT>bQ;bQ++){if(bP(bR[bQ],bQ)===!1){return;}}}}},bE=function(bN){var bO;if(!bN||"object"!==bG(bN)){return !0;}for(bO in bN){return !1;}return !0;},j=function(bO,bR){function bN(bS){"function"===bG(bO[bS])&&bO[bS](function(bT){++bSbQ;bQ++){if(bO[bQ]===bP){return bQ;}}}return -1;},bM=function(bO,bQ){var bN=[];"array"!==bG(bO)&&(bO=[bO]),"array"!==bG(bQ)&&(bQ=[bQ]);for(var bP in bO){-1===bJ(bO[bP],bQ)&&bN.push(bO[bP]);}return bN.length?bN:!1;},bK=function(bP,bO){var bN=[];return bC(bP,function(bQ){-1!==bJ(bQ,bO)&&bN.push(bQ);}),bN.length?bN:null;},bI=function(bO){var bN,bP=[];for(bN=0;bNbO;bO++){bQ+=Math.floor(65535*Math.random()).toString(32);}return(bP||"o_")+bQ+(bN++).toString(32);};}(),bH=function(bN){return bN?String.prototype.trim?String.prototype.trim.call(bN):bN.toString().replace(/^\s*/,"").replace(/\s*$/,""):bN;},bF=function(bO){if("string"!=typeof bO){return bO;}var bN={t:1099511627776,g:1073741824,m:1048576,k:1024},bP;return bO=/^([0-9]+)([mgk]?)$/.exec(bO.toLowerCase().replace(/[^0-9mkg]/g,"")),bP=bO[2],bO=+bO[1],bN.hasOwnProperty(bP)&&(bO*=bN[bP]),bO;};return{guid:bD,typeOf:bG,extend:bL,each:bC,isEmptyObj:bE,inSeries:j,inParallel:bB,inArray:bJ,arrayDiff:bM,arrayIntersect:bK,toArray:bI,trim:bH,parseSizeStr:bF};}),bq(bx,[bc],function(bB){var j={};return{addI18n:function(bC){return bB.extend(j,bC);},translate:function(bC){return j[bC]||bC;},_:function(bC){return this.translate(bC);},sprintf:function(bC){var bD=[].slice.call(arguments,1);return bC.replace(/%[a-z]/g,function(){var bE=bD.shift();return"undefined"!==bB.typeOf(bE)?bE:"";});}};}),bq(bm,[bc,bx],function(bC,bB){var bD="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",j={mimes:{},extensions:{},addMimeType:function(bH){var bF=bH.split(/,/),bI,bE,bG;for(bI=0;bIbI;bI++){if(bJ[bI]!=bM[bI]){if(bJ[bI]=bL(bJ[bI]),bM[bI]=bL(bM[bI]),bJ[bI]bM[bI]){bG=1;break;}}}if(!bH){return bG;}switch(bH){case">":case"gt":return bG>0;case">=":case"ge":return bG>=0;case"<=":case"le":return 0>=bG;case"==":case"=":case"eq":return 0===bG;case"<>":case"!=":case"ne":return 0!==bG;case"":case"<":case"lt":return 0>bG;default:return null;}}var bE=function(bW){var bK="",bP="?",bS="function",bM="undefined",bO="object",bZ="major",bL="model",bI="name",bY="type",bR="vendor",bX="version",bV="architecture",bT="console",bN="mobile",bQ="tablet",bU={has:function(b1,b0){return -1!==b0.toLowerCase().indexOf(b1.toLowerCase());},lowerize:function(b0){return b0.toLowerCase();}},bH={rgx:function(){for(var b9,b1=0,b7,ca,b8,b6,b2,b5,b4=arguments;b10?2==b6.length?b9[b6[0]]=typeof b6[1]==bS?b6[1].call(this,b5):b6[1]:3==b6.length?b9[b6[0]]=typeof b6[1]!==bS||b6[1].exec&&b6[1].test?b5?b5.replace(b6[1],b6[2]):bW:b5?b6[1].call(this,b5,b6[2]):bW:4==b6.length&&(b9[b6[0]]=b5?b6[3].call(this,b5.replace(b6[1],b6[2])):bW):b9[b6]=b5?b5:bW;}break;}}if(b2){break;}}return b9;},str:function(b2,b1){for(var b3 in b1){if(typeof b1[b3]===bO&&b1[b3].length>0){for(var b0=0;b0=9);},use_data_uri_of:function(bG){return bF.use_data_uri&&33000>bG||bF.use_data_uri_over32kb();},use_fileinput:function(){var bG=document.createElement("input");return bG.setAttribute("type","file"),!bG.disabled;}};return function(bH){var bG=[].slice.call(arguments);return bG.shift(),"function"===bD.typeOf(bF[bH])?bF[bH].apply(this,bG):!!bF[bH];};}(),bC={can:j,browser:bE.browser.name,version:parseFloat(bE.browser.major),os:bE.os.name,osVersion:bE.os.version,verComp:bB,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return bC.OS=bC.os,bC;}),bq(bu,[bw],function(bF){var bC=function(bI){return"string"!=typeof bI?bI:document.getElementById(bI);},bH=function(bJ,bI){if(!bJ.className){return !1;}var bK=new RegExp("(^|\\s+)"+bI+"(\\s+|$)");return bK.test(bJ.className);},bB=function(bJ,bI){bH(bJ,bI)||(bJ.className=bJ.className?bJ.className.replace(/\s+$/,"")+" "+bI:bI);},bE=function(bJ,bI){if(bJ.className){var bK=new RegExp("(^|\\s+)"+bI+"(\\s+|$)");bJ.className=bJ.className.replace(bK,function(bM,bL,bN){return" "===bL&&" "===bN?" ":"";});}},bG=function(bJ,bI){return bJ.currentStyle?bJ.currentStyle[bI]:window.getComputedStyle?window.getComputedStyle(bJ,null)[bI]:void 0;},j=function(bP,bK){function bL(bU){var bS,bV,bR=0,bT=0;return bU&&(bV=bU.getBoundingClientRect(),bS="CSS1Compat"===bQ.compatMode?bQ.documentElement:bQ.body,bR=bV.left+bS.scrollLeft,bT=bV.top+bS.scrollTop),{x:bR,y:bT};}var bI=0,bJ=0,bN,bQ=document,bO,bM;if(bP=bP,bK=bK||bQ.body,bP&&bP.getBoundingClientRect&&"IE"===bF.browser&&(!bQ.documentMode||bQ.documentMode<8)){return bO=bL(bP),bM=bL(bK),{x:bO.x-bM.x,y:bO.y-bM.y};}for(bN=bP;bN&&bN!=bK&&bN.nodeType;){bI+=bN.offsetLeft||0,bJ+=bN.offsetTop||0,bN=bN.offsetParent;}for(bN=bP.parentNode;bN&&bN!=bK&&bN.nodeType;){bI-=bN.scrollLeft||0,bJ-=bN.scrollTop||0,bN=bN.parentNode;}return{x:bI,y:bJ};},bD=function(bI){return{w:bI.offsetWidth||bI.clientWidth,h:bI.offsetHeight||bI.clientHeight};};return{get:bC,hasClass:bH,addClass:bB,removeClass:bE,getStyle:bG,getPos:j,getSize:bD};}),bq(br,[bc],function(bB){function j(bD,bC){var bE;for(bE in bD){if(bD[bE]===bC){return bE;}}return null;}return{RuntimeError:function(){function bD(bE){this.code=bE,this.name=j(bC,bE),this.message=this.name+": RuntimeError "+this.code;}var bC={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return bB.extend(bD,bC),bD.prototype=Error.prototype,bD;}(),OperationNotAllowedException:function(){function bC(bD){this.code=bD,this.name="OperationNotAllowedException";}return bB.extend(bC,{NOT_ALLOWED_ERR:1}),bC.prototype=Error.prototype,bC;}(),ImageError:function(){function bD(bE){this.code=bE,this.name=j(bC,bE),this.message=this.name+": ImageError "+this.code;}var bC={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return bB.extend(bD,bC),bD.prototype=Error.prototype,bD;}(),FileException:function(){function bD(bE){this.code=bE,this.name=j(bC,bE),this.message=this.name+": FileException "+this.code;}var bC={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return bB.extend(bD,bC),bD.prototype=Error.prototype,bD;}(),DOMException:function(){function bD(bE){this.code=bE,this.name=j(bC,bE),this.message=this.name+": DOMException "+this.code;}var bC={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25}; +return bB.extend(bD,bC),bD.prototype=Error.prototype,bD;}(),EventException:function(){function bC(bD){this.code=bD,this.name="EventException";}return bB.extend(bC,{UNSPECIFIED_EVENT_TYPE_ERR:0}),bC.prototype=Error.prototype,bC;}()};}),bq(bi,[br,bc],function(bB,j){function bC(){var bD={};j.extend(this,{uid:null,init:function(){this.uid||(this.uid=j.guid("uid_"));},addEventListener:function(bI,bF,bH,bJ){var bE=this,bG;return bI=j.trim(bI),/\s/.test(bI)?void j.each(bI.split(/\s+/),function(bK){bE.addEventListener(bK,bF,bH,bJ);}):(bI=bI.toLowerCase(),bH=parseInt(bH,10)||0,bG=bD[this.uid]&&bD[this.uid][bI]||[],bG.push({fn:bF,priority:bH,scope:bJ||this}),bD[this.uid]||(bD[this.uid]={}),void (bD[this.uid][bI]=bG));},hasEventListener:function(bE){return bE?!(!bD[this.uid]||!bD[this.uid][bE]):!!bD[this.uid];},removeEventListener:function(bG,bE){bG=bG.toLowerCase();var bF=bD[this.uid]&&bD[this.uid][bG],bH;if(bF){if(bE){for(bH=bF.length-1;bH>=0;bH--){if(bF[bH].fn===bE){bF.splice(bH,1);break;}}}else{bF=[];}bF.length||(delete bD[this.uid][bG],j.isEmptyObj(bD[this.uid])&&delete bD[this.uid]);}},removeAllEventListeners:function(){bD[this.uid]&&delete bD[this.uid];},dispatchEvent:function(bH){var bE,bF,bK,bM,bL={},bJ=!0,bG;if("string"!==j.typeOf(bH)){if(bM=bH,"string"!==j.typeOf(bM.type)){throw new bB.EventException(bB.EventException.UNSPECIFIED_EVENT_TYPE_ERR);}bH=bM.type,bM.total!==bG&&bM.loaded!==bG&&(bL.total=bM.total,bL.loaded=bM.loaded),bL.async=bM.async||!1;}if(-1!==bH.indexOf("::")?!function(bN){bE=bN[0],bH=bN[1];}(bH.split("::")):bE=this.uid,bH=bH.toLowerCase(),bF=bD[bE]&&bD[bE][bH]){bF.sort(function(bO,bN){return bN.priority-bO.priority;}),bK=[].slice.call(arguments),bK.shift(),bL.type=bH,bK.unshift(bL);var bI=[];j.each(bF,function(bN){bK[0].target=bN.scope,bI.push(bL.async?function(bO){setTimeout(function(){bO(bN.fn.apply(bN.scope,bK)===!1);},1);}:function(bO){bO(bN.fn.apply(bN.scope,bK)===!1);});}),bI.length&&j.inSeries(bI,function(bN){bJ=!bN;});}return bJ;},bind:function(){this.addEventListener.apply(this,arguments);},unbind:function(){this.removeEventListener.apply(this,arguments);},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments);},trigger:function(){return this.dispatchEvent.apply(this,arguments);},convertEventPropsToHandlers:function(bF){var bG;"array"!==j.typeOf(bF)&&(bF=[bF]);for(var bE=0;bE>16&255,bG=bO>>8&255,bQ=255&bO,bI[bL++]=64==bP?String.fromCharCode(bE):64==bJ?String.fromCharCode(bE,bG):String.fromCharCode(bE,bG,bQ);}while(bM>18&63,bR=bO>>12&63,bP=bO>>6&63,bJ=63&bO,bI[bL++]=bK.charAt(bT)+bK.charAt(bR)+bK.charAt(bP)+bK.charAt(bJ);}while(bNbE;bE++){bK+=String.fromCharCode(bI[bE]);}return bK;}}j.call(this),bB.extend(this,{uid:bB.guid("uid_"),readAsBinaryString:function(bE){return bD.call(this,"readAsBinaryString",bE);},readAsDataURL:function(bE){return bD.call(this,"readAsDataURL",bE);},readAsText:function(bE){return bD.call(this,"readAsText",bE);}});};}),bq(aY,[br,bc,a8],function(bC,bB,bD){function j(){var bF,bE=[];bB.extend(this,{append:function(bI,bJ){var bG=this,bH=bB.typeOf(bJ);bJ instanceof bD?bF={name:bI,value:bJ}:"array"===bH?(bI+="[]",bB.each(bJ,function(bK){bG.append(bI,bK);})):"object"===bH?bB.each(bJ,function(bL,bK){bG.append(bI+"["+bK+"]",bL);}):"null"===bH||"undefined"===bH||"number"===bH&&isNaN(bJ)?bG.append(bI,"false"):bE.push({name:bI,value:bJ.toString()});},hasBlob:function(){return !!this.getBlob();},getBlob:function(){return bF&&bF.value||null;},getBlobName:function(){return bF&&bF.name||null;},each:function(bG){bB.each(bE,function(bH){bG(bH.value,bH.name);}),bF&&bG(bF.value,bF.name);},destroy:function(){bF=null,bE=[];}});}return j;}),bq(aE,[bc,br,bi,bl,aF,bs,a9,a8,aC,aY,bw,bm],function(bO,bC,bH,bK,bE,bG,bR,bD,bB,bQ,bJ,bP){function bN(){this.uid=bO.guid("uid_");}function bL(){function ce(ck,cj){return b1.hasOwnProperty(ck)?1===arguments.length?bJ.can("define_property")?b1[ck]:b6[ck]:void (bJ.can("define_property")?b1[ck]=cj:b6[ck]=cj):void 0;}function b8(ck){function cj(){cf&&(cf.destroy(),cf=null),cl.dispatchEvent("loadend"),cl=null;}function cm(cn){cf.bind("LoadStart",function(co){ce("readyState",bL.LOADING),cl.dispatchEvent("readystatechange"),cl.dispatchEvent(co),b2&&cl.upload.dispatchEvent(co);}),cf.bind("Progress",function(co){ce("readyState")!==bL.LOADING&&(ce("readyState",bL.LOADING),cl.dispatchEvent("readystatechange")),cl.dispatchEvent(co);}),cf.bind("UploadProgress",function(co){b2&&cl.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:co.total,loaded:co.loaded});}),cf.bind("Load",function(co){ce("readyState",bL.DONE),ce("status",Number(cn.exec.call(cf,"XMLHttpRequest","getStatus")||0)),ce("statusText",bF[ce("status")]||""),ce("response",cn.exec.call(cf,"XMLHttpRequest","getResponse",ce("responseType"))),~bO.inArray(ce("responseType"),["text",""])?ce("responseText",ce("response")):"document"===ce("responseType")&&ce("responseXML",ce("response")),bS=cn.exec.call(cf,"XMLHttpRequest","getAllResponseHeaders"),cl.dispatchEvent("readystatechange"),ce("status")>0?(b2&&cl.upload.dispatchEvent(co),cl.dispatchEvent(co)):(bY=!0,cl.dispatchEvent("error")),cj();}),cf.bind("Abort",function(co){cl.dispatchEvent(co),cj();}),cf.bind("Error",function(co){bY=!0,ce("readyState",bL.DONE),cl.dispatchEvent("readystatechange"),ca=!0,cl.dispatchEvent(co),cj();}),cn.exec.call(cf,"XMLHttpRequest","send",{url:b9,method:ci,async:b5,user:ch,password:bV,headers:b3,mimeType:cd,encoding:bT,responseType:cl.responseType,withCredentials:cl.withCredentials,options:bW},ck);}var cl=this;bZ=(new Date).getTime(),cf=new bR,"string"==typeof bW.required_caps&&(bW.required_caps=bG.parseCaps(bW.required_caps)),bW.required_caps=bO.extend({},bW.required_caps,{return_response_type:cl.responseType}),ck instanceof bQ&&(bW.required_caps.send_multipart=!0),b0||(bW.required_caps.do_cors=!0),bW.ruid?cm(cf.connectRuntime(bW)):(cf.bind("RuntimeInit",function(co,cn){cm(cn);}),cf.bind("RuntimeError",function(co,cn){cl.dispatchEvent("RuntimeError",cn); +}),cf.connectRuntime(bW));}function cg(){ce("responseText",""),ce("responseXML",null),ce("response",null),ce("status",0),ce("statusText",""),bZ=cb=null;}var b6=this,b1={timeout:0,readyState:bL.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},b5=!0,b9,ci,b3={},ch,bV,bT=null,cd=null,bU=!1,bX=!1,b2=!1,ca=!1,bY=!1,b0=!1,bZ,cb,b7=null,b4=null,bW={},cf,bS="",cc;bO.extend(this,b1,{uid:bO.guid("uid_"),upload:new bN,open:function(cn,ck,cm,cl,co){var cj;if(!cn||!ck){throw new bC.DOMException(bC.DOMException.SYNTAX_ERR);}if(/[\u0100-\uffff]/.test(cn)||bK.utf8_encode(cn)!==cn){throw new bC.DOMException(bC.DOMException.SYNTAX_ERR);}if(~bO.inArray(cn.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(ci=cn.toUpperCase()),~bO.inArray(ci,["CONNECT","TRACE","TRACK"])){throw new bC.DOMException(bC.DOMException.SECURITY_ERR);}if(ck=bK.utf8_encode(ck),cj=bE.parseUrl(ck),b0=bE.hasSameOrigin(cj),b9=bE.resolveUrl(ck),(cl||co)&&!b0){throw new bC.DOMException(bC.DOMException.INVALID_ACCESS_ERR);}if(ch=cl||cj.user,bV=co||cj.pass,b5=cm||!0,b5===!1&&(ce("timeout")||ce("withCredentials")||""!==ce("responseType"))){throw new bC.DOMException(bC.DOMException.INVALID_ACCESS_ERR);}bU=!b5,bX=!1,b3={},cg.call(this),ce("readyState",bL.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange");},setRequestHeader:function(ck,cl){var cj=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(ce("readyState")!==bL.OPENED||bX){throw new bC.DOMException(bC.DOMException.INVALID_STATE_ERR);}if(/[\u0100-\uffff]/.test(ck)||bK.utf8_encode(ck)!==ck){throw new bC.DOMException(bC.DOMException.SYNTAX_ERR);}return ck=bO.trim(ck).toLowerCase(),~bO.inArray(ck,cj)||/^(proxy\-|sec\-)/.test(ck)?!1:(b3[ck]?b3[ck]+=", "+cl:b3[ck]=cl,!0);},getAllResponseHeaders:function(){return bS||"";},getResponseHeader:function(cj){return cj=cj.toLowerCase(),bY||~bO.inArray(cj,["set-cookie","set-cookie2"])?null:bS&&""!==bS&&(cc||(cc={},bO.each(bS.split(/\r\n/),function(ck){var cl=ck.split(/:\s+/);2===cl.length&&(cl[0]=bO.trim(cl[0]),cc[cl[0].toLowerCase()]={header:cl[0],value:bO.trim(cl[1])});})),cc.hasOwnProperty(cj))?cc[cj].header+": "+cc[cj].value:null;},overrideMimeType:function(cj){var ck,cl;if(~bO.inArray(ce("readyState"),[bL.LOADING,bL.DONE])){throw new bC.DOMException(bC.DOMException.INVALID_STATE_ERR);}if(cj=bO.trim(cj.toLowerCase()),/;/.test(cj)&&(ck=cj.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(cj=ck[1],ck[2]&&(cl=ck[2])),!bP.mimes[cj]){throw new bC.DOMException(bC.DOMException.SYNTAX_ERR);}b7=cj,b4=cl;},send:function(cl,cj){if(bW="string"===bO.typeOf(cj)?{ruid:cj}:cj?cj:{},this.convertEventPropsToHandlers(bI),this.upload.convertEventPropsToHandlers(bI),this.readyState!==bL.OPENED||bX){throw new bC.DOMException(bC.DOMException.INVALID_STATE_ERR);}if(cl instanceof bD){bW.ruid=cl.ruid,cd=cl.type||"application/octet-stream";}else{if(cl instanceof bQ){if(cl.hasBlob()){var ck=cl.getBlob();bW.ruid=ck.ruid,cd=ck.type||"application/octet-stream";}}else{"string"==typeof cl&&(bT="UTF-8",cd="text/plain;charset=UTF-8",cl=bK.utf8_encode(cl));}}this.withCredentials||(this.withCredentials=bW.required_caps&&bW.required_caps.send_browser_cookies&&!b0),b2=!bU&&this.upload.hasEventListener(),bY=!1,ca=!cl,bU||(bX=!0),b8.call(this,cl);},abort:function(){if(bY=!0,bU=!1,~bO.inArray(ce("readyState"),[bL.UNSENT,bL.OPENED,bL.DONE])){ce("readyState",bL.UNSENT);}else{if(ce("readyState",bL.DONE),bX=!1,!cf){throw new bC.DOMException(bC.DOMException.INVALID_STATE_ERR);}cf.getRuntime().exec.call(cf,"XMLHttpRequest","abort",ca),ca=!0;}},destroy:function(){cf&&("function"===bO.typeOf(cf.destroy)&&cf.destroy(),cf=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null);}});}var bF={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"}; +bN.prototype=bH.instance;var bI=["loadstart","progress","abort","error","load","timeout","loadend"],bM=1,j=2;return bL.UNSENT=0,bL.OPENED=1,bL.HEADERS_RECEIVED=2,bL.LOADING=3,bL.DONE=4,bL.prototype=bH.instance,bL;}),bq(aJ,[bc,bl,bb,bi],function(bD,bB,bE,j){function bC(){function bH(){bG=bJ=0,bK=this.result=null;}function bF(bP,bQ){var bO=this;bM=bQ,bO.bind("TransportingProgress",function(bR){bJ=bR.loaded,bG>bJ&&-1===bD.inArray(bO.state,[bC.IDLE,bC.DONE])&&bL.call(bO);},999),bO.bind("TransportingComplete",function(){bJ=bG,bO.state=bC.DONE,bK=null,bO.result=bM.exec.call(bO,"Transporter","getAsBlob",bP||"");},999),bO.state=bC.BUSY,bO.trigger("TransportingStarted"),bL.call(bO);}function bL(){var bP=this,bQ,bO=bG-bJ;bI>bO&&(bI=bO),bQ=bB.btoa(bK.substr(bJ,bI)),bM.exec.call(bP,"Transporter","receive",bQ,bG);}var bN,bM,bK,bG,bJ,bI;bE.call(this),bD.extend(this,{uid:bD.guid("uid_"),state:bC.IDLE,result:null,transport:function(bQ,bS,bR){var bO=this;if(bR=bD.extend({chunk_size:204798},bR),(bN=bR.chunk_size%3)&&(bR.chunk_size+=3-bN),bI=bR.chunk_size,bH.call(this),bK=bQ,bG=bQ.length,"string"===bD.typeOf(bR)||bR.ruid){bF.call(bO,bS,this.connectRuntime(bR));}else{var bP=function(bU,bT){bO.unbind("RuntimeInit",bP),bF.call(bO,bS,bT);};this.bind("RuntimeInit",bP),this.connectRuntime(bR);}},abort:function(){var bO=this;bO.state=bC.IDLE,bM&&(bM.exec.call(bO,"Transporter","clear"),bO.trigger("TransportingAborted")),bH.call(bO);},destroy:function(){this.unbindAll(),bM=null,this.disconnectRuntime(),bH.call(this);}});}return bC.IDLE=0,bC.BUSY=1,bC.DONE=2,bC.prototype=j.instance,bC;}),bq(aP,[bc,bu,br,aC,aE,bs,bb,aJ,bw,bi,a8,ba,bl],function(bI,bN,bD,bF,j,bC,bL,bO,bM,bK,bE,bJ,bH){function bG(){function bR(bU){bU||(bU=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=bU.size,this.width=bU.width,this.height=bU.height,this.type=bU.type,this.meta=bU.meta,""===this.name&&(this.name=bU.name);}function bT(bV){var bU=bI.typeOf(bV);try{if(bV instanceof bG){if(!bV.size){throw new bD.DOMException(bD.DOMException.INVALID_STATE_ERR);}bP.apply(this,arguments);}else{if(bV instanceof bE){if(!~bI.inArray(bV.type,["image/jpeg","image/png"])){throw new bD.ImageError(bD.ImageError.WRONG_FORMAT);}bS.apply(this,arguments);}else{if(-1!==bI.inArray(bU,["blob","file"])){bT.call(this,new bJ(null,bV),arguments[1]);}else{if("string"===bU){/^data:[^;]*;base64,/.test(bV)?bT.call(this,new bE(null,{data:bV}),arguments[1]):bQ.apply(this,arguments);}else{if("node"!==bU||"img"!==bV.nodeName.toLowerCase()){throw new bD.DOMException(bD.DOMException.TYPE_MISMATCH_ERR);}bT.call(this,bV.src,arguments[1]);}}}}}catch(bW){this.trigger("error",bW.code);}}function bP(bV,bW){var bU=this.connectRuntime(bV.ruid);this.ruid=bU.uid,bU.exec.call(this,"Image","loadFromImage",bV,"undefined"===bI.typeOf(bW)?!0:bW);}function bS(bV,bX){function bU(bY){bW.ruid=bY.uid,bY.exec.call(bW,"Image","loadFromBlob",bV);}var bW=this;bW.name=bV.name||"",bV.isDetached()?(this.bind("RuntimeInit",function(bZ,bY){bU(bY);}),bX&&"string"==typeof bX.required_caps&&(bX.required_caps=bC.parseCaps(bX.required_caps)),this.connectRuntime(bI.extend({required_caps:{access_image_binary:!0,resize_image:!0}},bX))):bU(this.connectRuntime(bV.ruid));}function bQ(bW,bV){var bX=this,bU;bU=new j,bU.open("get",bW),bU.responseType="blob",bU.onprogress=function(bY){bX.trigger(bY);},bU.onload=function(){bS.call(bX,bU.response,!0);},bU.onerror=function(bY){bX.trigger(bY);},bU.onloadend=function(){bU.destroy();},bU.bind("RuntimeError",function(bZ,bY){bX.trigger("RuntimeError",bY);}),bU.send(null,bV);}bL.call(this),bI.extend(this,{uid:bI.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments);},load:function(){this.bind("Load Resize",function(){bR.call(this);},999),this.convertEventPropsToHandlers(bB),bT.apply(this,arguments);},downsize:function(bV){var bU={width:this.width,height:this.height,crop:!1,preserveHeaders:!0};bV="object"==typeof bV?bI.extend(bU,bV):bI.extend(bU,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size){throw new bD.DOMException(bD.DOMException.INVALID_STATE_ERR);}if(this.width>bG.MAX_RESIZE_WIDTH||this.height>bG.MAX_RESIZE_HEIGHT){throw new bD.ImageError(bD.ImageError.MAX_RESOLUTION_ERR);}this.getRuntime().exec.call(this,"Image","downsize",bV.width,bV.height,bV.crop,bV.preserveHeaders);}catch(bW){this.trigger("error",bW.code);}},crop:function(bV,bU,bW){this.downsize(bV,bU,!0,bW);},getAsCanvas:function(){if(!bM.can("create_canvas")){throw new bD.RuntimeError(bD.RuntimeError.NOT_SUPPORTED_ERR);}var bU=this.connectRuntime(this.ruid);return bU.exec.call(this,"Image","getAsCanvas");},getAsBlob:function(bV,bU){if(!this.size){throw new bD.DOMException(bD.DOMException.INVALID_STATE_ERR);}return bV||(bV="image/jpeg"),"image/jpeg"!==bV||bU||(bU=90),this.getRuntime().exec.call(this,"Image","getAsBlob",bV,bU);},getAsDataURL:function(bV,bU){if(!this.size){throw new bD.DOMException(bD.DOMException.INVALID_STATE_ERR); +}return this.getRuntime().exec.call(this,"Image","getAsDataURL",bV,bU);},getAsBinaryString:function(bV,bU){var bW=this.getAsDataURL(bV,bU);return bH.atob(bW.substring(bW.indexOf("base64,")+7));},embed:function(bZ){function bU(){if(bM.can("create_canvas")){var b7=b4.getAsCanvas();if(b7){return bZ.appendChild(b7),b7=null,b4.destroy(),void bW.trigger("embedded");}}var b8=b4.getAsDataURL(b2,bY);if(!b8){throw new bD.ImageError(bD.ImageError.WRONG_FORMAT);}if(bM.can("use_data_uri_of",b8.length)){bZ.innerHTML='',b4.destroy(),bW.trigger("embedded");}else{var b9=new bO;b9.bind("TransportingComplete",function(){b6=bW.connectRuntime(this.result.ruid),bW.bind("Embedded",function(){bI.extend(b6.getShimContainer().style,{top:"0px",left:"0px",width:b4.width+"px",height:b4.height+"px"}),b6=null;},999),b6.exec.call(bW,"ImageView","display",this.result.uid,bX,b0),b4.destroy();}),b9.transport(bH.atob(b8.substring(b8.indexOf("base64,")+7)),b2,bI.extend({},bV,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:bZ}));}}var bW=this,b4,b2,bY,b1,bV=arguments[1]||{},bX=this.width,b0=this.height,b6;try{if(!(bZ=bN.get(bZ))){throw new bD.DOMException(bD.DOMException.INVALID_NODE_TYPE_ERR);}if(!this.size){throw new bD.DOMException(bD.DOMException.INVALID_STATE_ERR);}if(this.width>bG.MAX_RESIZE_WIDTH||this.height>bG.MAX_RESIZE_HEIGHT){throw new bD.ImageError(bD.ImageError.MAX_RESOLUTION_ERR);}if(b2=bV.type||this.type||"image/jpeg",bY=bV.quality||90,b1="undefined"!==bI.typeOf(bV.crop)?bV.crop:!1,bV.width){bX=bV.width,b0=bV.height||bX;}else{var b3=bN.getSize(bZ);b3.w&&b3.h&&(bX=b3.w,b0=b3.h);}return b4=new bG,b4.bind("Resize",function(){bU.call(bW);}),b4.bind("Load",function(){b4.downsize(bX,b0,b1,!1);}),b4.clone(this,!1),b4;}catch(b5){this.trigger("error",b5.code);}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll();}});}var bB=["progress","load","error","resize","embedded"];return bG.MAX_RESIZE_WIDTH=6500,bG.MAX_RESIZE_HEIGHT=6500,bG.prototype=bK.instance,bG;}),bq(aV,[bc,br,bs,bw],function(bE,bC,bG,bB){function bD(bI){var bK=this,bJ=bG.capTest,bH=bG.capTrue,bL=bE.extend({access_binary:bJ(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return bK.can("access_binary")&&!!j.Image;},display_media:bJ(bB.can("create_canvas")||bB.can("use_data_uri_over32kb")),do_cors:bJ(window.XMLHttpRequest&&"withCredentials" in new XMLHttpRequest),drag_and_drop:bJ(function(){var bM=document.createElement("div");return("draggable" in bM||"ondragstart" in bM&&"ondrop" in bM)&&("IE"!==bB.browser||bB.version>9);}()),filter_by_extension:bJ(function(){return"Chrome"===bB.browser&&bB.version>=28||"IE"===bB.browser&&bB.version>=10;}()),return_response_headers:bH,return_response_type:function(bM){return"json"===bM&&window.JSON?!0:bB.can("return_response_type",bM);},return_status_code:bH,report_upload_progress:bJ(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return bK.can("access_binary")&&bB.can("create_canvas");},select_file:function(){return bB.can("use_fileinput")&&window.File;},select_folder:function(){return bK.can("select_file")&&"Chrome"===bB.browser&&bB.version>=21;},select_multiple:function(){return !(!bK.can("select_file")||"Safari"===bB.browser&&"Windows"===bB.os||"iOS"===bB.os&&bB.verComp(bB.osVersion,"7.0.4","<"));},send_binary_string:bJ(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:bJ(window.XMLHttpRequest),send_multipart:function(){return !!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||bK.can("send_binary_string");},slice_blob:bJ(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return bK.can("slice_blob")&&bK.can("send_multipart");},summon_file_dialog:bJ(function(){return"Firefox"===bB.browser&&bB.version>=4||"Opera"===bB.browser&&bB.version>=12||"IE"===bB.browser&&bB.version>=10||!!~bE.inArray(bB.browser,["Chrome","Safari"]);}()),upload_filesize:bH},arguments[2]);bG.call(this,bI,arguments[1]||bF,bL),bE.extend(this,{init:function(){this.trigger("Init");},destroy:function(bM){return function(){bM.call(bK),bM=bK=null;};}(this.destroy)}),bE.extend(this.getShim(),j);}var bF="html5",j={};return bG.addConstructor(bF,bD),j;}),bq(aK,[aV,a8],function(bB,j){function bC(){function bD(bH,bF,bI){var bE;if(!window.File.prototype.slice){return(bE=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?bE.call(bH,bF,bI):null;}try{return bH.slice(),bH.slice(bF,bI);}catch(bG){return bH.slice(bF,bI-bF);}}this.slice=function(){return new j(this.getRuntime().uid,bD.apply(this,arguments));};}return bB.Blob=bC;}),bq(aM,[bc],function(bF){function bC(){this.returnValue=!1;}function bH(){this.cancelBubble=!0;}var bB={},bE="moxie_"+bF.guid(),bG=function(bM,bJ,bL,bK){var bN,bI;bJ=bJ.toLowerCase(),bM.addEventListener?(bN=bL,bM.addEventListener(bJ,bN,!1)):bM.attachEvent&&(bN=function(){var bO=window.event; +bO.target||(bO.target=bO.srcElement),bO.preventDefault=bC,bO.stopPropagation=bH,bL(bO);},bM.attachEvent("on"+bJ,bN)),bM[bE]||(bM[bE]=bF.guid()),bB.hasOwnProperty(bM[bE])||(bB[bM[bE]]={}),bI=bB[bM[bE]],bI.hasOwnProperty(bJ)||(bI[bJ]=[]),bI[bJ].push({func:bN,orig:bL,key:bK});},j=function(bK,bO,bM){var bI,bL;if(bO=bO.toLowerCase(),bK[bE]&&bB[bK[bE]]&&bB[bK[bE]][bO]){bI=bB[bK[bE]][bO];for(var bJ=bI.length-1;bJ>=0&&(bI[bJ].orig!==bM&&bI[bJ].key!==bM||(bK.removeEventListener?bK.removeEventListener(bO,bI[bJ].func,!1):bK.detachEvent&&bK.detachEvent("on"+bO,bI[bJ].func),bI[bJ].orig=null,bI[bJ].func=null,bI.splice(bJ,1),bM===bL));bJ--){}if(bI.length||delete bB[bK[bE]][bO],bF.isEmptyObj(bB[bK[bE]])){delete bB[bK[bE]];try{delete bK[bE];}catch(bN){bK[bE]=bL;}}}},bD=function(bI,bJ){bI&&bI[bE]&&bF.each(bB[bI[bE]],function(bL,bK){j(bI,bK,bJ);});};return{addEvent:bG,removeEvent:j,removeAllEvents:bD};}),bq(aL,[aV,bc,bu,aM,bm,bw],function(bE,bC,bG,bB,bD,bF){function j(){var bI=[],bH;bC.extend(this,{init:function(bS){var bR=this,bQ=bR.getRuntime(),bL,bP,bO,bM,bJ,bK;bH=bS,bI=[],bO=bH.accept.mimes||bD.extList2mimes(bH.accept,bQ.can("filter_by_extension")),bP=bQ.getShimContainer(),bP.innerHTML='",bL=bG.get(bQ.uid),bC.extend(bL.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),bM=bG.get(bH.browse_button),bQ.can("summon_file_dialog")&&("static"===bG.getStyle(bM,"position")&&(bM.style.position="relative"),bJ=parseInt(bG.getStyle(bM,"z-index"),10)||1,bM.style.zIndex=bJ,bP.style.zIndex=bJ-1,bB.addEvent(bM,"click",function(bU){var bT=bG.get(bQ.uid);bT&&!bT.disabled&&bT.click(),bU.preventDefault();},bR.uid)),bK=bQ.can("summon_file_dialog")?bM:bP,bB.addEvent(bK,"mouseover",function(){bR.trigger("mouseenter");},bR.uid),bB.addEvent(bK,"mouseout",function(){bR.trigger("mouseleave");},bR.uid),bB.addEvent(bK,"mousedown",function(){bR.trigger("mousedown");},bR.uid),bB.addEvent(bG.get(bH.container),"mouseup",function(){bR.trigger("mouseup");},bR.uid),bL.onchange=function bN(){if(bI=[],bH.directory?bC.each(this.files,function(bU){"."!==bU.name&&bI.push(bU);}):bI=[].slice.call(this.files),"IE"!==bF.browser&&"IEMobile"!==bF.browser){this.value="";}else{var bT=this.cloneNode(!0);this.parentNode.replaceChild(bT,this),bT.onchange=bN;}bR.trigger("change");},bR.trigger({type:"ready",async:!0}),bP=null;},getFiles:function(){return bI;},disable:function(bL){var bK=this.getRuntime(),bJ;(bJ=bG.get(bK.uid))&&(bJ.disabled=!!bL);},destroy:function(){var bJ=this.getRuntime(),bK=bJ.getShim(),bL=bJ.getShimContainer();bB.removeAllEvents(bL,this.uid),bB.removeAllEvents(bH&&bG.get(bH.container),this.uid),bB.removeAllEvents(bH&&bG.get(bH.browse_button),this.uid),bL&&(bL.innerHTML=""),bK.removeInstance(this.uid),bI=bH=bL=bK=null;}});}return bE.FileInput=j;}),bq(aW,[aV,bc,bu,aM,bm],function(bD,bB,bF,j,bC){function bE(){function bK(bQ){if(!bQ.dataTransfer||!bQ.dataTransfer.types){return !1;}var bR=bB.toArray(bQ.dataTransfer.types||[]);return -1!==bB.inArray("Files",bR)||-1!==bB.inArray("public.file-url",bR)||-1!==bB.inArray("application/x-moz-file",bR);}function bG(bR){for(var bS=[],bQ=0;bQ=4&&bH.version<7,bX="Android Browser"===bH.browser,bR=!1;if(bN=bY.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),bL=bQ(),bL.open(bY.method,bY.url,bY.async,bY.user,bY.password),bW instanceof bB){bW.isDetached()&&(bR=!0),bW=bW.getSource();}else{if(bW instanceof bG){if(bW.hasBlob()){if(bW.getBlob().isDetached()){bW=bP.call(bU,bW),bR=!0;}else{if((bS||bX)&&"blob"===bI.typeOf(bW.getBlob().getSource())&&window.FileReader){return void bO.call(bU,bY,bW);}}}if(bW instanceof bG){var bV=new window.FormData;bW.each(function(b0,bZ){b0 instanceof bB?bV.append(bZ,b0.getSource()):bV.append(bZ,b0);}),bW=bV;}}}bL.upload?(bY.withCredentials&&(bL.withCredentials=!0),bL.addEventListener("load",function(bZ){bU.trigger(bZ);}),bL.addEventListener("error",function(bZ){bU.trigger(bZ);}),bL.addEventListener("progress",function(bZ){bU.trigger(bZ);}),bL.upload.addEventListener("progress",function(bZ){bU.trigger({type:"UploadProgress",loaded:bZ.loaded,total:bZ.total});})):bL.onreadystatechange=function bT(){switch(bL.readyState){case 1:break;case 2:break;case 3:var b1,bZ;try{bD.hasSameOrigin(bY.url)&&(b1=bL.getResponseHeader("Content-Length")||0),bL.responseText&&(bZ=bL.responseText.length);}catch(b0){b1=bZ=0;}bU.trigger({type:"progress",lengthComputable:!!b1,total:parseInt(b1,10),loaded:bZ});break;case 4:bL.onreadystatechange=function(){},bU.trigger(0===bL.status?"error":"load");}},bI.isEmptyObj(bY.headers)||bI.each(bY.headers,function(b0,bZ){bL.setRequestHeader(bZ,b0);}),""!==bY.responseType&&"responseType" in bL&&(bL.responseType="json"!==bY.responseType||bH.can("return_response_type","json")?bY.responseType:"text"),bR?bL.sendAsBinary?bL.sendAsBinary(bW):!function(){for(var b0=new Uint8Array(bW.length),bZ=0;bZbF;bF++){bG|=bD.charCodeAt(bI+bF)<bI;bI++){bK+=String.fromCharCode(bH>>Math.abs(bF+8*bI)&255);}bE(bK,bJ,bG);}var bB=!1,bD;return{II:function(bF){return bF===bd?bB:void (bB=bF);},init:function(bF){bB=!1,bD=bF;},SEGMENT:function(bH,bG,bF){switch(arguments.length){case 1:return bD.substr(bH,bD.length-bH-1);case 2:return bD.substr(bH,bG);case 3:bE(bF,bH,bG);break;default:return bD;}},BYTE:function(bF){return bC(bF,1);},SHORT:function(bF){return bC(bF,2);},LONG:function(bG,bF){return bF===bd?bC(bG,4):void j(bG,bF,4);},SLONG:function(bF){var bG=bC(bF,4);return bG>2147483647?bG-4294967296:bG;},STRING:function(bG,bH){var bF="";for(bH+=bG;bH>bG;bG++){bF+=String.fromCharCode(bC(bG,1));}return bF;}};};}),bq(bn,[aI],function(bB){return function j(bH){var bD=[],bF,bG,bC,bE=0;if(bF=new bB,bF.init(bH),65496===bF.SHORT(0)){for(bG=2;bG<=bH.length;){if(bC=bF.SHORT(bG),bC>=65488&&65495>=bC){bG+=2;}else{if(65498===bC||65497===bC){break;}bE=bF.SHORT(bG+2)+2,bC>=65505&&65519>=bC&&bD.push({hex:bC,name:"APP"+(15&bC),start:bG,length:bE,segment:bF.SEGMENT(bG,bE)}),bG+=bE;}}return bF.init(null),{headers:bD,restore:function(bJ){var bI,bK;for(bF.init(bJ),bG=65504==bF.SHORT(2)?4+bF.SHORT(4):2,bK=0,bI=bD.length;bI>bK;bK++){bF.SEGMENT(bG,0,bD[bK].segment),bG+=bD[bK].length;}return bJ=bF.SEGMENT(),bF.init(null),bJ;},strip:function(bJ){var bL,bI,bK;for(bI=new j(bJ),bL=bI.headers,bI.purge(),bF.init(bJ),bK=bL.length;bK--;){bF.SEGMENT(bL[bK].start,bL[bK].length,"");}return bJ=bF.SEGMENT(),bF.init(null),bJ;},get:function(bK){for(var bI=[],bL=0,bJ=bD.length;bJ>bL;bL++){bD[bL].name===bK.toUpperCase()&&bI.push(bD[bL].segment);}return bI;},set:function(bL,bJ){var bN=[],bK,bM,bI;for("string"==typeof bJ?bN.push(bJ):bN=bJ,bK=bM=0,bI=bD.length;bI>bK&&(bD[bK].name===bL.toUpperCase()&&(bD[bK].segment=bN[bM],bD[bK].length=bN[bM].length,bM++),!(bM>=bN.length));bK++){}},purge:function(){bD=[],bF.init(null),bF=null;}};}};}),bq(aB,[bc,aI],function(bB,bC){return function j(){function bG(bU,bO){var bQ=bE.SHORT(bU),bL,bN,bX,bW,bV,bT,bR,bM,bP=[],bS={};for(bL=0;bQ>bL;bL++){if(bR=bT=bU+12*bL+2,bX=bO[bE.SHORT(bR)],bX!==bd){switch(bW=bE.SHORT(bR+=2),bV=bE.LONG(bR+=2),bR+=4,bP=[],bW){case 1:case 7:for(bV>4&&(bR=bE.LONG(bR)+bK.tiffHeader),bN=0;bV>bN;bN++){bP[bN]=bE.BYTE(bR+bN);}break;case 2:bV>4&&(bR=bE.LONG(bR)+bK.tiffHeader),bS[bX]=bE.STRING(bR,bV-1);continue;case 3:for(bV>2&&(bR=bE.LONG(bR)+bK.tiffHeader),bN=0;bV>bN;bN++){bP[bN]=bE.SHORT(bR+2*bN);}break;case 4:for(bV>1&&(bR=bE.LONG(bR)+bK.tiffHeader),bN=0;bV>bN;bN++){bP[bN]=bE.LONG(bR+4*bN);}break;case 5:for(bR=bE.LONG(bR)+bK.tiffHeader,bN=0;bV>bN;bN++){bP[bN]=bE.LONG(bR+4*bN)/bE.LONG(bR+4*bN+4);}break;case 9:for(bR=bE.LONG(bR)+bK.tiffHeader,bN=0;bV>bN;bN++){bP[bN]=bE.SLONG(bR+4*bN);}break;case 10:for(bR=bE.LONG(bR)+bK.tiffHeader,bN=0;bV>bN;bN++){bP[bN]=bE.SLONG(bR+4*bN)/bE.SLONG(bR+4*bN+4);}break;default:continue;}bM=1==bV?bP[0]:bP,bS[bX]=bD.hasOwnProperty(bX)&&"object"!=typeof bM?bD[bX][bM]:bM;}}return bS;}function bI(){var bL=bK.tiffHeader;return bE.II(18761==bE.SHORT(bL)),42!==bE.SHORT(bL+=2)?!1:(bK.IFD0=bK.tiffHeader+bE.LONG(bL+=2),bF=bG(bK.IFD0,bH.tiff),"ExifIFDPointer" in bF&&(bK.exifIFD=bK.tiffHeader+bF.ExifIFDPointer,delete bF.ExifIFDPointer),"GPSInfoIFDPointer" in bF&&(bK.gpsIFD=bK.tiffHeader+bF.GPSInfoIFDPointer,delete bF.GPSInfoIFDPointer),!0);}function bJ(bR,bU,bN){var bP,bL,bM,bT=0;if("string"==typeof bU){var bO=bH[bR.toLowerCase()];for(var bS in bO){if(bO[bS]===bU){bU=bS;break;}}}bP=bK[bR.toLowerCase()+"IFD"],bL=bE.SHORT(bP);for(var bQ=0;bL>bQ;bQ++){if(bM=bP+12*bQ+2,bE.SHORT(bM)==bU){bT=bM+8;break;}}return bT?(bE.LONG(bT,bN),!0):!1;}var bE,bH,bF,bK={},bD;return bE=new bC,bH={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},bD={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(bL){return bK={tiffHeader:10},bL!==bd&&bL.length?(bE.init(bL),65505===bE.SHORT(0)&&"EXIF\x00"===bE.STRING(4,5).toUpperCase()?bI():!1):!1; +},TIFF:function(){return bF;},EXIF:function(){var bL;if(bL=bG(bK.exifIFD,bH.exif),bL.ExifVersion&&"array"===bB.typeOf(bL.ExifVersion)){for(var bN=0,bM="";bN=65472&&65475>=bP){return bQ+=5,{height:bL.SHORT(bQ),width:bL.SHORT(bQ+=2)};}bR=bL.SHORT(bQ+=2),bQ+=bR-2;}return null;}function bO(){bK&&bH&&bL&&(bK.purge(),bH.purge(),bL.init(null),bN=bJ=bH=bK=bL=null);}var bN,bL,bH,bK,bJ,bI;if(bN=bG,bL=new j,bL.init(bN),65496!==bL.SHORT(0)){throw new bB.ImageError(bB.ImageError.WRONG_FORMAT);}bH=new bF(bG),bK=new bC,bI=!!bK.init(bH.get("app1")[0]),bJ=bM.call(this),bD.extend(this,{type:"image/jpeg",size:bN.length,width:bJ&&bJ.width||0,height:bJ&&bJ.height||0,setExif:function(bP,bQ){return bI?("object"===bD.typeOf(bP)?bD.each(bP,function(bS,bR){bK.setExif(bR,bS);}):bK.setExif(bP,bQ),void bH.set("app1",bK.getBinary())):!1;},writeHeaders:function(){return arguments.length?bH.restore(arguments[0]):bN=bH.restore(bN);},stripHeaders:function(bP){return bH.strip(bP);},purge:function(){bO.call(this);}}),bI&&(this.meta={tiff:bK.TIFF(),exif:bK.EXIF(),gps:bK.GPS()});}return bE;}),bq(a7,[br,bc,aI],function(bC,bB,bD){function j(bH){function bE(){var bO,bN;return bO=bK.call(this,8),"IHDR"==bO.type?(bN=bO.start,{width:bL.LONG(bN),height:bL.LONG(bN+=4)}):null;}function bF(){bL&&(bL.init(null),bM=bI=bJ=bG=bL=null);}function bK(bQ){var bO,bR,bN,bP;return bO=bL.LONG(bQ),bR=bL.STRING(bQ+=4,4),bN=bQ+=4,bP=bL.LONG(bQ+bO),{length:bO,type:bR,start:bN,CRC:bP};}var bM,bL,bJ,bG,bI;bM=bH,bL=new bD,bL.init(bM),function(){var bO=0,bP=0,bN=[35152,20039,3338,6666];for(bP=0;bPbR;){for(var bG=bR+bS>bX?bX-bR:bS,bD=0;bM>bD;){var bF=bD+bS>bM?bM-bD:bS;bL.clearRect(0,0,bS,bS),bL.drawImage(bT,-bD,-bR);var bI=bD*bJ/bM+bV<<0,bY=Math.ceil(bF*bJ/bM),bE=bR*bH/bX/bN+bO<<0,bW=Math.ceil(bG*bH/bX/bN);bU.drawImage(bQ,0,0,bF,bG,bI,bE,bY,bW),bD+=bS;}bR+=bS;}bQ=bL=null;}function j(bG){var bE=bG.naturalWidth,bH=bG.naturalHeight;if(bE*bH>1048576){var bD=document.createElement("canvas");bD.width=bD.height=1;var bF=bD.getContext("2d");return bF.drawImage(bG,-bE+1,0),0===bF.getImageData(0,0,1,1).data[3];}return !1;}function bC(bI,bM,bF){var bH=document.createElement("canvas");bH.width=1,bH.height=bF;var bD=bH.getContext("2d");bD.drawImage(bI,0,0);for(var bE=bD.getImageData(0,0,1,bF).data,bK=0,bN=bF,bL=bF;bL>bK;){var bJ=bE[4*(bL-1)+3];0===bJ?bN=bL:bK=bL,bL=bN+bK>>1;}bH=null;var bG=bL/bF;return 0===bG?1:bG;}return{isSubsampled:j,renderTo:bB};}),bq(ay,[aV,bc,br,bl,ba,aS,bg,bm,bw],function(bE,bI,bC,bD,j,bB,bG,bJ,bH){function bF(){function bR(){if(!b0&&!bV){throw new bC.ImageError(bC.DOMException.INVALID_STATE_ERR);}return b0||bV;}function bT(b1){return bD.atob(b1.substring(b1.indexOf("base64,")+7));}function bM(b2,b1){return"data:"+(b1||"")+";base64,"+bD.btoa(b2);}function bS(b2){var b1=this;bV=new Image,bV.onerror=function(){bP.call(this),b1.trigger("error",bC.ImageError.WRONG_FORMAT);},bV.onload=function(){b1.trigger("load");},bV.src=/^data:[^;]*;base64,/.test(b2)?b2:bM(b2,bW.type);}function bQ(b4,b2){var b1=this,b3;return window.FileReader?(b3=new FileReader,b3.onload=function(){b2(this.result);},b3.onerror=function(){b1.trigger("error",bC.ImageError.WRONG_FORMAT);},b3.readAsDataURL(b4),void 0):b2(b4.getAsDataURL());}function bO(b3,b5,b1,b2){var cb=this,ce,cd,ca=0,b4=0,b9,b8,b6,b7;if(bN=b2,b7=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==bI.inArray(b7,[5,6,7,8])){var cc=b3;b3=b5,b5=cc; +}return b9=bR(),b1?(b3=Math.min(b3,b9.width),b5=Math.min(b5,b9.height),ce=Math.max(b3/b9.width,b5/b9.height)):ce=Math.min(b3/b9.width,b5/b9.height),ce>1&&!b1&&b2?void this.trigger("Resize"):(b0||(b0=document.createElement("canvas")),b8=Math.round(b9.width*ce),b6=Math.round(b9.height*ce),b1?(b0.width=b3,b0.height=b5,b8>b3&&(ca=Math.round((b8-b3)/2)),b6>b5&&(b4=Math.round((b6-b5)/2))):(b0.width=b8,b0.height=b6),bN||bL(b0.width,b0.height,b7),bK.call(this,b9,b0,-ca,-b4,b8,b6),this.width=b0.width,this.height=b0.height,bU=!0,void cb.trigger("Resize"));}function bK(b5,b2,b7,b1,b4,b6){if("iOS"===bH.OS){bG.renderTo(b5,b2,{width:b4,height:b6,x:b7,y:b1});}else{var b3=b2.getContext("2d");b3.drawImage(b5,b7,b1,b4,b6);}}function bL(b3,b2,b4){switch(b4){case 5:case 6:case 7:case 8:b0.width=b2,b0.height=b3;break;default:b0.width=b3,b0.height=b2;}var b1=b0.getContext("2d");switch(b4){case 2:b1.translate(b3,0),b1.scale(-1,1);break;case 3:b1.translate(b3,b2),b1.rotate(Math.PI);break;case 4:b1.translate(0,b2),b1.scale(1,-1);break;case 5:b1.rotate(0.5*Math.PI),b1.scale(1,-1);break;case 6:b1.rotate(0.5*Math.PI),b1.translate(0,-b2);break;case 7:b1.rotate(0.5*Math.PI),b1.translate(b3,-b2),b1.scale(-1,1);break;case 8:b1.rotate(-0.5*Math.PI),b1.translate(-b3,0);}}function bP(){bX&&(bX.purge(),bX=null),bY=bV=b0=bW=null,bU=!1;}var bZ=this,bV,bX,b0,bY,bW,bU=!1,bN=!0;bI.extend(this,{loadFromBlob:function(b4){var b2=this,b1=b2.getRuntime(),b3=arguments.length>1?arguments[1]:!0;if(!b1.can("access_binary")){throw new bC.RuntimeError(bC.RuntimeError.NOT_SUPPORTED_ERR);}return bW=b4,b4.isDetached()?(bY=b4.getSource(),void bS.call(this,bY)):void bQ.call(this,b4.getSource(),function(b5){b3&&(bY=bT(b5)),bS.call(b2,b5);});},loadFromImage:function(b2,b1){this.meta=b2.meta,bW=new j(null,{name:b2.name,size:b2.size,type:b2.type}),bS.call(this,b1?bY=b2.getAsBinaryString():b2.getAsDataURL());},getInfo:function(){var b1=this.getRuntime(),b2;return !bX&&bY&&b1.can("access_image_binary")&&(bX=new bB(bY)),b2={width:bR().width||0,height:bR().height||0,type:bW.type||bJ.getFileMime(bW.name),size:bY&&bY.length||bW.size||0,name:bW.name||"",meta:bX&&bX.meta||this.meta||{}};},downsize:function(){bO.apply(this,arguments);},getAsCanvas:function(){return b0&&(b0.id=this.uid+"_canvas"),b0;},getAsBlob:function(b2,b1){return b2!==this.type&&bO.call(this,this.width,this.height,!1),new j(null,{name:bW.name||"",type:b2,data:bZ.getAsBinaryString.call(this,b2,b1)});},getAsDataURL:function(b2){var b1=arguments[1]||90;if(!bU){return bV.src;}if("image/jpeg"!==b2){return b0.toDataURL("image/png");}try{return b0.toDataURL("image/jpeg",b1/100);}catch(b3){return b0.toDataURL("image/jpeg");}},getAsBinaryString:function(b3,b2){if(!bU){return bY||(bY=bT(bZ.getAsDataURL(b3,b2))),bY;}if("image/jpeg"!==b3){bY=bT(bZ.getAsDataURL(b3,b2));}else{var b4;b2||(b2=90);try{b4=b0.toDataURL("image/jpeg",b2/100);}catch(b1){b4=b0.toDataURL("image/jpeg");}bY=bT(b4),bX&&(bY=bX.stripHeaders(bY),bN&&(bX.meta&&bX.meta.exif&&bX.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),bY=bX.writeHeaders(bY)),bX.purge(),bX=null);}return bU=!1,bY;},destroy:function(){bZ=null,bP.call(this),this.getRuntime().getShim().removeInstance(this.uid);}});}return bE.Image=bF;}),bq(bp,[bc,bw,bu,br,bs],function(bE,bH,bC,bD,j){function bB(){var bK;try{bK=navigator.plugins["Shockwave Flash"],bK=bK.description;}catch(bJ){try{bK=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");}catch(bL){bK="0.0";}}return bK=bK.match(/\d+/g),parseFloat(bK[0]+"."+bK[1]);}function bF(bK){var bL=this,bJ;bK=bE.extend({swf_url:bH.swf_url},bK),j.call(this,bK,bI,{access_binary:function(bM){return bM&&"browser"===bL.mode;},access_image_binary:function(bM){return bM&&"browser"===bL.mode;},display_media:j.capTrue,do_cors:j.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===bL.mode;},resize_image:j.capTrue,return_response_headers:!1,return_response_type:function(bM){return"json"===bM&&window.JSON?!0:!bE.arrayDiff(bM,["","text","document"])||"browser"===bL.mode;},return_status_code:function(bM){return"browser"===bL.mode||!bE.arrayDiff(bM,[200,404]);},select_file:j.capTrue,select_multiple:j.capTrue,send_binary_string:function(bM){return bM&&"browser"===bL.mode;},send_browser_cookies:function(bM){return bM&&"browser"===bL.mode;},send_custom_headers:function(bM){return bM&&"browser"===bL.mode;},send_multipart:j.capTrue,slice_blob:function(bM){return bM&&"browser"===bL.mode;},stream_upload:function(bM){return bM&&"browser"===bL.mode;},summon_file_dialog:!1,upload_filesize:function(bM){return bE.parseSizeStr(bM)<=2097152||"client"===bL.mode;},use_http_method:function(bM){return !bE.arrayDiff(bM,["GET","POST"]);}},{access_binary:function(bM){return bM?"browser":"client";},access_image_binary:function(bM){return bM?"browser":"client";},report_upload_progress:function(bM){return bM?"browser":"client";},return_response_type:function(bM){return bE.arrayDiff(bM,["","text","json","document"])?"browser":["client","browser"]; +},return_status_code:function(bM){return bE.arrayDiff(bM,[200,404])?"browser":["client","browser"];},send_binary_string:function(bM){return bM?"browser":"client";},send_browser_cookies:function(bM){return bM?"browser":"client";},send_custom_headers:function(bM){return bM?"browser":"client";},stream_upload:function(bM){return bM?"client":"browser";},upload_filesize:function(bM){return bE.parseSizeStr(bM)>=2097152?"client":"browser";}},"client"),bB()<10&&(this.mode=!1),bE.extend(this,{getShim:function(){return bC.get(this.uid);},shimExec:function(bN,bM){var bO=[].slice.call(arguments,2);return bL.getShim().exec(this.uid,bN,bM,bO);},init:function(){var bO,bM,bN;bN=this.getShimContainer(),bE.extend(bN.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),bO='',"IE"===bH.browser?(bM=document.createElement("div"),bN.appendChild(bM),bM.outerHTML=bO,bM=bN=null):bN.innerHTML=bO,bJ=setTimeout(function(){bL&&!bL.initialized&&bL.trigger("Error",new bD.RuntimeError(bD.RuntimeError.NOT_INIT_ERR));},5000);},destroy:function(bM){return function(){bM.call(bL),clearTimeout(bJ),bK=bJ=bM=bL=null;};}(this.destroy)},bG);}var bI="flash",bG={};return j.addConstructor(bI,bF),bG;}),bq(aA,[bp,a8],function(bB,j){var bC={slice:function(bF,bH,bD,bE){var bG=this.getRuntime();return 0>bH?bH=Math.max(bF.size+bH,0):bH>0&&(bH=Math.min(bH,bF.size)),0>bD?bD=Math.max(bF.size+bD,0):bD>0&&(bD=Math.min(bD,bF.size)),bF=bG.shimExec.call(this,"Blob","slice",bH,bD,bE||""),bF&&(bF=new j(bG.uid,bF)),bF;}};return bB.Blob=bC;}),bq(az,[bp],function(bB){var j={init:function(bC){this.getRuntime().shimExec.call(this,"FileInput","init",{name:bC.name,accept:bC.accept,multiple:bC.multiple}),this.trigger("ready");}};return bB.FileInput=j;}),bq(ax,[bp,bl],function(bD,bB){function bE(bF,bG){switch(bG){case"readAsText":return bB.atob(bF,"utf8");case"readAsBinaryString":return bB.atob(bF);case"readAsDataURL":return bF;}return null;}var j="",bC={read:function(bH,bF){var bG=this,bI=bG.getRuntime();return"readAsDataURL"===bH&&(j="data:"+(bF.type||"")+";base64,"),bG.bind("Progress",function(bJ,bK){bK&&(j+=bE(bK,bH));}),bI.shimExec.call(this,"FileReader","readAsBase64",bF.uid);},getResult:function(){return j;},destroy:function(){j=null;}};return bD.FileReader=bC;}),bq(a6,[bp,bl],function(bC,bB){function bD(bE,bF){switch(bF){case"readAsText":return bB.atob(bE,"utf8");case"readAsBinaryString":return bB.atob(bE);case"readAsDataURL":return bE;}return null;}var j={read:function(bH,bF){var bE,bG=this.getRuntime();return(bE=bG.shimExec.call(this,"FileReaderSync","readAsBase64",bF.uid))?("readAsDataURL"===bH&&(bE="data:"+(bF.type||"")+";base64,"+bE),bD(bE,bH,bF.type)):null;}};return bC.FileReaderSync=j;}),bq(aO,[bp,bc,a8,ba,aC,aY,aJ],function(bF,bC,bH,bB,bE,bG,j){var bD={send:function(bM,bK){function bI(){bM.transport=bJ.mode,bJ.shimExec.call(bO,"XMLHttpRequest","send",bM,bK);}function bQ(bS,bR){bJ.shimExec.call(bO,"XMLHttpRequest","appendBlob",bS,bR.uid),bK=null,bI();}function bP(bS,bR){var bT=new j;bT.bind("TransportingComplete",function(){bR(this.result);}),bT.transport(bS.getSource(),bS.type,{ruid:bJ.uid});}var bO=this,bJ=bO.getRuntime();if(bC.isEmptyObj(bM.headers)||bC.each(bM.headers,function(bS,bR){bJ.shimExec.call(bO,"XMLHttpRequest","setRequestHeader",bR,bS.toString());}),bK instanceof bG){var bN;if(bK.each(function(bS,bR){bS instanceof bH?bN=bR:bJ.shimExec.call(bO,"XMLHttpRequest","append",bR,bS);}),bK.hasBlob()){var bL=bK.getBlob();bL.isDetached()?bP(bL,function(bR){bL.destroy(),bQ(bN,bR);}):bQ(bN,bL);}else{bK=null,bI();}}else{bK instanceof bH?bK.isDetached()?bP(bK,function(bR){bK.destroy(),bK=bR.uid,bI();}):(bK=bK.uid,bI()):bI();}},getResponse:function(bJ){var bL,bK,bI=this.getRuntime();if(bK=bI.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(bK=new bB(bI.uid,bK),"blob"===bJ){return bK;}try{if(bL=new bE,~bC.inArray(bJ,["","text"])){return bL.readAsText(bK);}if("json"===bJ&&window.JSON){return JSON.parse(bL.readAsText(bK));}}finally{bK.destroy();}}return null;},abort:function(bJ){var bI=this.getRuntime();bI.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort");}};return bF.XMLHttpRequest=bD;}),bq(aw,[bp,a8],function(bB,j){var bC={getAsBlob:function(bE){var bF=this.getRuntime(),bD=bF.shimExec.call(this,"Transporter","getAsBlob",bE);return bD?new j(bF.uid,bD):null;}};return bB.Transporter=bC;}),bq(aN,[bp,bc,aJ,a8,aC],function(bD,bB,bF,j,bC){var bE={loadFromBlob:function(bJ){function bH(bL){bI.shimExec.call(bG,"Image","loadFromBlob",bL.uid),bG=bI=null; +}var bG=this,bI=bG.getRuntime();if(bJ.isDetached()){var bK=new bF;bK.bind("TransportingComplete",function(){bH(bK.result.getSource());}),bK.transport(bJ.getSource(),bJ.type,{ruid:bI.uid});}else{bH(bJ.getSource());}},loadFromImage:function(bH){var bG=this.getRuntime();return bG.shimExec.call(this,"Image","loadFromImage",bH.uid);},getAsBlob:function(bI,bG){var bJ=this.getRuntime(),bH=bJ.shimExec.call(this,"Image","getAsBlob",bI,bG);return bH?new j(bJ.uid,bH):null;},getAsDataURL:function(){var bH=this.getRuntime(),bG=bH.Image.getAsBlob.apply(this,arguments),bI;return bG?(bI=new bC,bI.readAsDataURL(bG)):null;}};return bD.Image=bE;}),bq(aH,[bc,bw,bu,br,bs],function(bE,bH,bC,bD,j){function bB(bO){var bT=!1,bL=null,bN,bJ,bK,bR,bU,bS=0;try{try{bL=new ActiveXObject("AgControl.AgControl"),bL.IsVersionSupported(bO)&&(bT=!0),bL=null;}catch(bQ){var bM=navigator.plugins["Silverlight Plug-In"];if(bM){for(bN=bM.description,"1.0.30226.2"===bN&&(bN="2.0.30226.2"),bJ=bN.split(".");bJ.length>3;){bJ.pop();}for(;bJ.length<4;){bJ.push(0);}for(bK=bO.split(".");bK.length>4;){bK.pop();}do{bR=parseInt(bK[bS],10),bU=parseInt(bJ[bS],10),bS++;}while(bS=bR&&!isNaN(bR)&&(bT=!0);}}}catch(bP){bT=!1;}return bT;}function bF(bK){var bL=this,bJ;bK=bE.extend({xap_url:bH.xap_url},bK),j.call(this,bK,bI,{access_binary:j.capTrue,access_image_binary:j.capTrue,display_media:j.capTrue,do_cors:j.capTrue,drag_and_drop:!1,report_upload_progress:j.capTrue,resize_image:j.capTrue,return_response_headers:function(bM){return bM&&"client"===bL.mode;},return_response_type:function(bM){return"json"!==bM?!0:!!window.JSON;},return_status_code:function(bM){return"client"===bL.mode||!bE.arrayDiff(bM,[200,404]);},select_file:j.capTrue,select_multiple:j.capTrue,send_binary_string:j.capTrue,send_browser_cookies:function(bM){return bM&&"browser"===bL.mode;},send_custom_headers:function(bM){return bM&&"client"===bL.mode;},send_multipart:j.capTrue,slice_blob:j.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:j.capTrue,use_http_method:function(bM){return"client"===bL.mode||!bE.arrayDiff(bM,["GET","POST"]);}},{return_response_headers:function(bM){return bM?"client":"browser";},return_status_code:function(bM){return bE.arrayDiff(bM,[200,404])?"client":["client","browser"];},send_browser_cookies:function(bM){return bM?"browser":"client";},send_custom_headers:function(bM){return bM?"client":"browser";},use_http_method:function(bM){return bE.arrayDiff(bM,["GET","POST"])?"client":["client","browser"];}}),bB("2.0.31005.0")&&"Opera"!==bH.browser||(this.mode=!1),bE.extend(this,{getShim:function(){return bC.get(this.uid).content.Moxie;},shimExec:function(bN,bM){var bO=[].slice.call(arguments,2);return bL.getShim().exec(this.uid,bN,bM,bO);},init:function(){var bM;bM=this.getShimContainer(),bM.innerHTML='',bJ=setTimeout(function(){bL&&!bL.initialized&&bL.trigger("Error",new bD.RuntimeError(bD.RuntimeError.NOT_INIT_ERR));},"Windows"!==bH.OS?10000:5000);},destroy:function(bM){return function(){bM.call(bL),clearTimeout(bJ),bK=bJ=bM=bL=null;};}(this.destroy)},bG);}var bI="silverlight",bG={};return j.addConstructor(bI,bF),bG;}),bq(bh,[aH,bc,aA],function(bB,j,bC){return bB.Blob=j.extend({},bC);}),bq(bt,[aH],function(bB){var j={init:function(bD){function bC(bF){for(var bE="",bG=0;bGbL;bL++){bM=bI.keys[bL],bJ=bI[bM],bJ&&(/^(\d|[1-9]\d+)$/.test(bJ)?bJ=parseInt(bJ,10):/^\d*\.\d+$/.test(bJ)&&(bJ=parseFloat(bJ)),bD.meta[bK][bM]=bJ);}}}),bD.width=parseInt(bE.width,10),bD.height=parseInt(bE.height,10),bD.size=parseInt(bE.size,10),bD.type=bE.type,bD.name=bE.name,bD;}});}),bq(a5,[bc,br,bs,bw],function(bE,bC,bG,bB){function bD(bI){var bK=this,bJ=bG.capTest,bH=bG.capTrue;bG.call(this,bI,bF,{access_binary:bJ(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:bJ(j.Image&&(bB.can("create_canvas")||bB.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:bJ(function(){return"Chrome"===bB.browser&&bB.version>=28||"IE"===bB.browser&&bB.version>=10;}()),resize_image:function(){return j.Image&&bK.can("access_binary")&&bB.can("create_canvas");},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(bL){return"json"===bL&&window.JSON?!0:!!~bE.inArray(bL,["text","document",""]);},return_status_code:function(bL){return !bE.arrayDiff(bL,[200,404]);},select_file:function(){return bB.can("use_fileinput");},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return bK.can("select_file");},summon_file_dialog:bJ(function(){return"Firefox"===bB.browser&&bB.version>=4||"Opera"===bB.browser&&bB.version>=12||!!~bE.inArray(bB.browser,["Chrome","Safari"]);}()),upload_filesize:bH,use_http_method:function(bL){return !bE.arrayDiff(bL,["GET","POST"]);}}),bE.extend(this,{init:function(){this.trigger("Init");},destroy:function(bL){return function(){bL.call(bK),bL=bK=null;};}(this.destroy)}),bE.extend(this.getShim(),j);}var bF="html4",j={};return bG.addConstructor(bF,bD),j;}),bq(aZ,[a5,bc,bu,aM,bm,bw],function(bE,bC,bG,bB,bD,bF){function j(){function bK(){var bQ=this,bN=bQ.getRuntime(),bT,bR,bO,bS,bM,bP;bP=bC.guid("uid_"),bT=bN.getShimContainer(),bH&&(bO=bG.get(bH+"_form"),bO&&bC.extend(bO.style,{top:"100%"})),bS=document.createElement("form"),bS.setAttribute("id",bP+"_form"),bS.setAttribute("method","post"),bS.setAttribute("enctype","multipart/form-data"),bS.setAttribute("encoding","multipart/form-data"),bC.extend(bS.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),bM=document.createElement("input"),bM.setAttribute("id",bP),bM.setAttribute("type","file"),bM.setAttribute("name",bL.name||"Filedata"),bM.setAttribute("accept",bI.join(",")),bC.extend(bM.style,{fontSize:"999px",opacity:0}),bS.appendChild(bM),bT.appendChild(bS),bC.extend(bM.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===bF.browser&&bF.version<10&&bC.extend(bM.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),bM.onchange=function(){var bV;this.value&&(bV=this.files?this.files[0]:{name:this.value},bJ=[bV],this.onchange=function(){},bK.call(bQ),bQ.bind("change",function bU(){var bX=bG.get(bP),bW=bG.get(bP+"_form"),bY;bQ.unbind("change",bU),bQ.files.length&&bX&&bW&&(bY=bQ.files[0],bX.setAttribute("id",bY.uid),bW.setAttribute("id",bY.uid+"_form"),bW.setAttribute("target",bY.uid+"_iframe")),bX=bW=null;},998),bM=bS=null,bQ.trigger("change"));},bN.can("summon_file_dialog")&&(bR=bG.get(bL.browse_button),bB.removeEvent(bR,"click",bQ.uid),bB.addEvent(bR,"click",function(bU){bM&&!bM.disabled&&bM.click(),bU.preventDefault();},bQ.uid)),bH=bP,bT=bO=bR=null;}var bH,bJ=[],bI=[],bL;bC.extend(this,{init:function(bN){var bP=this,bM=bP.getRuntime(),bO;bL=bN,bI=bN.accept.mimes||bD.extList2mimes(bN.accept,bM.can("filter_by_extension")),bO=bM.getShimContainer(),function(){var bS,bR,bQ;bS=bG.get(bN.browse_button),bM.can("summon_file_dialog")&&("static"===bG.getStyle(bS,"position")&&(bS.style.position="relative"),bR=parseInt(bG.getStyle(bS,"z-index"),10)||1,bS.style.zIndex=bR,bO.style.zIndex=bR-1),bQ=bM.can("summon_file_dialog")?bS:bO,bB.addEvent(bQ,"mouseover",function(){bP.trigger("mouseenter");},bP.uid),bB.addEvent(bQ,"mouseout",function(){bP.trigger("mouseleave");},bP.uid),bB.addEvent(bQ,"mousedown",function(){bP.trigger("mousedown");},bP.uid),bB.addEvent(bG.get(bN.container),"mouseup",function(){bP.trigger("mouseup");},bP.uid),bS=null;}(),bK.call(this),bO=null,bP.trigger({type:"ready",async:!0});},getFiles:function(){return bJ;},disable:function(bN){var bM;(bM=bG.get(bH))&&(bM.disabled=!!bN);},destroy:function(){var bO=this.getRuntime(),bM=bO.getShim(),bN=bO.getShimContainer();bB.removeAllEvents(bN,this.uid),bB.removeAllEvents(bL&&bG.get(bL.container),this.uid),bB.removeAllEvents(bL&&bG.get(bL.browse_button),this.uid),bN&&(bN.innerHTML=""),bM.removeInstance(this.uid),bH=bJ=bI=bL=bN=bM=null;}});}return bE.FileInput=j;}),bq(a2,[a5,aT],function(bB,j){return bB.FileReader=j;}),bq(aG,[a5,bc,bu,aF,br,aM,a8,aY],function(bE,bH,bC,bD,j,bB,bF,bI){function bG(){function bL(bT){var bQ=this,bP,bS,bN,bR,bO=!1;if(bJ){if(bP=bJ.id.replace(/_iframe$/,""),bS=bC.get(bP+"_form")){for(bN=bS.getElementsByTagName("input"),bR=bN.length; +bR--;){switch(bN[bR].getAttribute("type")){case"hidden":bN[bR].parentNode.removeChild(bN[bR]);break;case"file":bO=!0;}}bN=[],bO||bS.parentNode.removeChild(bS),bS=null;}setTimeout(function(){bB.removeEvent(bJ,"load",bQ.uid),bJ.parentNode&&bJ.parentNode.removeChild(bJ);var bU=bQ.getRuntime().getShimContainer();bU.children.length||bU.parentNode.removeChild(bU),bU=bJ=null,bT();},1);}}var bK,bM,bJ;bH.extend(this,{send:function(bS,bR){function bP(){var bX=bO.getShimContainer()||document.body,bW=document.createElement("div");bW.innerHTML='',bJ=bW.firstChild,bX.appendChild(bJ),bB.addEvent(bJ,"load",function(){var bZ;try{bZ=bJ.contentWindow.document||bJ.contentDocument||window.frames[bJ.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(bZ.title)?bK=bZ.title.replace(/^(\d+).*$/,"$1"):(bK=200,bM=bH.trim(bZ.body.innerHTML),bN.trigger({type:"progress",loaded:bM.length,total:bM.length}),bU&&bN.trigger({type:"uploadprogress",loaded:bU.size||1025,total:bU.size||1025}));}catch(bY){if(!bD.hasSameOrigin(bS.url)){return void bL.call(bN,function(){bN.trigger("error");});}bK=404;}bL.call(bN,function(){bN.trigger("load");});},bN.uid);}var bN=this,bO=bN.getRuntime(),bQ,bV,bT,bU;if(bK=bM=null,bR instanceof bI&&bR.hasBlob()){if(bU=bR.getBlob(),bQ=bU.uid,bT=bC.get(bQ),bV=bC.get(bQ+"_form"),!bV){throw new j.DOMException(j.DOMException.NOT_FOUND_ERR);}}else{bQ=bH.guid("uid_"),bV=document.createElement("form"),bV.setAttribute("id",bQ+"_form"),bV.setAttribute("method",bS.method),bV.setAttribute("enctype","multipart/form-data"),bV.setAttribute("encoding","multipart/form-data"),bV.setAttribute("target",bQ+"_iframe"),bO.getShimContainer().appendChild(bV);}bR instanceof bI&&bR.each(function(bX,bY){if(bX instanceof bF){bT&&bT.setAttribute("name",bY);}else{var bW=document.createElement("input");bH.extend(bW,{type:"hidden",name:bY,value:bX}),bT?bV.insertBefore(bW,bT):bV.appendChild(bW);}}),bV.setAttribute("action",bS.url),bP(),bV.submit(),bN.trigger("loadstart");},getStatus:function(){return bK;},getResponse:function(bN){if("json"===bN&&"string"===bH.typeOf(bM)&&window.JSON){try{return JSON.parse(bM.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""));}catch(bO){return null;}}return bM;},abort:function(){var bN=this;bJ&&bJ.contentWindow&&(bJ.contentWindow.stop?bJ.contentWindow.stop():bJ.contentWindow.document.execCommand?bJ.contentWindow.document.execCommand("Stop"):bJ.src="about:blank"),bL.call(this,function(){bN.dispatchEvent("abort");});}});}return bE.XMLHttpRequest=bG;}),bq(a0,[a5,ay],function(bB,j){return bB.Image=j;}),bz([bc,bx,bm,bw,bu,br,bi,bl,bs,bb,a8,ba,aU,bA,a9,by,aF,aC,aY,aE,aJ,aP,aM]);}(this);(function(ax){var j={},ay=ax.moxie.core.utils.Basic.inArray;return function aw(aB){var az,aA;for(az in aB){aA=typeof aB[az],aA==="object"&&!~ay(az,["Exceptions","Env","Mime"])?aw(aB[az]):aA==="function"&&(j[az]=aB[az]);}}(ax.moxie),j.Env=ax.moxie.core.utils.Env,j.Mime=ax.moxie.core.utils.Mime,j.Exceptions=ax.moxie.core.Exceptions,ax.mOxie=j,ax.o||(ax.o=j),j;})(this);(function(az,aw,aB){function ax(aE){function aD(aJ,aH,aI){var aG={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};aG[aJ]?aF[aG[aJ]]=aH:aI||(aF[aJ]=aH);}var aC=aE.required_features,aF={};if(typeof aC=="string"){aA.each(aC.split(/\s*,\s*/),function(aG){aD(aG,!0);});}else{if(typeof aC=="object"){aA.each(aC,function(aH,aG){aD(aG,aH);});}else{if(aC===!0){aE.chunk_size>0&&(aF.slice_blob=!0);if(aE.resize.enabled||!aE.multipart){aF.send_binary_string=!0;}aA.each(aE,function(aH,aG){aD(aG,!!aH,!0);});}}}return aF;}var ay=az.setTimeout,j={},aA={VERSION:"2.1.2",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:aw.mimes,ua:aw.ua,typeOf:aw.typeOf,extend:aw.extend,guid:aw.guid,get:function(aF){var aE=[],aC;aw.typeOf(aF)!=="array"&&(aF=[aF]);var aD=aF.length;while(aD--){aC=aw.get(aF[aD]),aC&&aE.push(aC);}return aE.length?aE:null;},each:aw.each,getPos:aw.getPos,getSize:aw.getSize,xmlEncode:function(aD){var aC={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},aE=/[<>&\"\']/g;return aD?(""+aD).replace(aE,function(aF){return aC[aF]?"&"+aC[aF]+";":aF;}):aD;},toArray:aw.toArray,inArray:aw.inArray,addI18n:aw.addI18n,translate:aw.translate,isEmptyObj:aw.isEmptyObj,hasClass:aw.hasClass,addClass:aw.addClass,removeClass:aw.removeClass,getStyle:aw.getStyle,addEvent:aw.addEvent,removeEvent:aw.removeEvent,removeAllEvents:aw.removeAllEvents,cleanName:function(aD){var aC,aE;aE=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"]; +for(aC=0;aC0?"&":"?")+aE),aD;},formatSize:function(aE){function aC(aG,aF){return Math.round(aG*Math.pow(10,aF))/Math.pow(10,aF);}if(aE===aB||/\D/.test(aE)){return aA.translate("N/A");}var aD=Math.pow(1024,4);return aE>aD?aC(aE/aD,1)+" "+aA.translate("tb"):aE>(aD/=1024)?aC(aE/aD,1)+" "+aA.translate("gb"):aE>(aD/=1024)?aC(aE/aD,1)+" "+aA.translate("mb"):aE>1024?Math.round(aE/1024)+" "+aA.translate("kb"):aE+" "+aA.translate("b");},parseSize:aw.parseSizeStr,predictRuntime:function(aE,aF){var aD,aC;return aD=new aA.Uploader(aE),aC=aw.Runtime.thatCan(aD.getOption().required_features,aF||aE.runtimes),aD.destroy(),aC;},addFileFilter:function(aD,aC){j[aD]=aC;}};aA.addFileFilter("mime_types",function(aD,aC,aE){aD.length&&!aD.regexp.test(aC.name)?(this.trigger("Error",{code:aA.FILE_EXTENSION_ERROR,message:aA.translate("File extension error."),file:aC}),aE(!1)):aE(!0);}),aA.addFileFilter("max_file_size",function(aE,aC,aF){var aD;aE=aA.parseSize(aE),aC.size!==aD&&aE&&aC.size>aE?(this.trigger("Error",{code:aA.FILE_SIZE_ERROR,message:aA.translate("File size error."),file:aC}),aF(!1)):aF(!0);}),aA.addFileFilter("prevent_duplicates",function(aE,aC,aF){if(aE){var aD=this.files.length;while(aD--){if(aC.name===this.files[aD].name&&aC.size===this.files[aD].size){this.trigger("Error",{code:aA.FILE_DUPLICATE_ERROR,message:aA.translate("Duplicate file error."),file:aC}),aF(!1);return;}}}aF(!0);}),aA.Uploader=function(aY){function aW(){var a5,a4=0,a6;if(this.state==aA.STARTED){for(a6=0;a60?Math.ceil(a4.loaded/a4.size*100):100,a1();}function a1(){var a5,a4;aZ.reset();for(a5=0;a50?Math.ceil(aZ.uploaded/aX.length*100):0:(aZ.bytesPerSec=Math.ceil(aZ.loaded/((+(new Date)-aQ||1)/1000)),aZ.percent=aZ.size>0?Math.ceil(aZ.loaded/aZ.size*100):0);}function aK(){var a4=a0[0]||aV[0];return a4?a4.getRuntime().uid:!1;}function aN(a5,a6){if(a5.ruid){var a4=aw.Runtime.getInfo(a5.ruid);if(a4){return a4.can(a6);}}return !1;}function aD(){this.bind("FilesAdded FilesRemoved",function(a4){a4.trigger("QueueChanged"),a4.refresh();}),this.bind("CancelUpload",aE),this.bind("BeforeUpload",aP),this.bind("UploadFile",aU),this.bind("UploadProgress",aH),this.bind("StateChanged",aR),this.bind("QueueChanged",a1),this.bind("Error",a3),this.bind("FileUploaded",aG),this.bind("Destroy",aO);}function aJ(a8,a9){var a7=this,a5=0,a6=[],a4={runtime_order:a8.runtimes,required_caps:a8.required_features,preferred_caps:aT,swf_url:a8.flash_swf_url,xap_url:a8.silverlight_xap_url};aA.each(a8.runtimes.split(/\s*,\s*/),function(ba){a8[ba]&&(a4[ba]=a8[ba]);}),a8.browse_button&&aA.each(a8.browse_button,function(ba){a6.push(function(bc){var bb=new aw.FileInput(aA.extend({},a4,{accept:a8.filters.mime_types,name:a8.file_data_name,multiple:a8.multi_selection,container:a8.container,browse_button:ba}));bb.onready=function(){var bd=aw.Runtime.getInfo(this.ruid);aw.extend(a7.features,{chunks:bd.can("slice_blob"),multipart:bd.can("send_multipart"),multi_selection:bd.can("select_multiple")}),a5++,a0.push(this),bc();},bb.onchange=function(){a7.addFile(this.files);},bb.bind("mouseenter mouseleave mousedown mouseup",function(bd){aL||(a8.browse_button_hover&&("mouseenter"===bd.type?aw.addClass(ba,a8.browse_button_hover):"mouseleave"===bd.type&&aw.removeClass(ba,a8.browse_button_hover)),a8.browse_button_active&&("mousedown"===bd.type?aw.addClass(ba,a8.browse_button_active):"mouseup"===bd.type&&aw.removeClass(ba,a8.browse_button_active)));}),bb.bind("mousedown",function(){a7.trigger("Browse");}),bb.bind("error runtimeerror",function(){bb=null,bc();}),bb.init();});}),a8.drop_element&&aA.each(a8.drop_element,function(ba){a6.push(function(bc){var bb=new aw.FileDrop(aA.extend({},a4,{drop_zone:ba}));bb.onready=function(){var bd=aw.Runtime.getInfo(this.ruid);a7.features.dragdrop=bd.can("drag_and_drop"),a5++,aV.push(this),bc();},bb.ondrop=function(){a7.addFile(this.files);},bb.bind("error runtimeerror",function(){bb=null,bc();}),bb.init();});}),aw.inSeries(a6,function(){typeof a9=="function"&&a9(a5);});}function aC(a7,a6,a4){var a5=new aw.Image;try{a5.onload=function(){if(a6.width>this.width&&a6.height>this.height&&a6.quality===aB&&a6.preserve_headers&&!a6.crop){return this.destroy(),a4(a7); +}a5.downsize(a6.width,a6.height,a6.crop,a6.preserve_headers);},a5.onresize=function(){a4(this.getAsBlob(a7.type,a6.quality)),this.destroy();},a5.onerror=function(){a4(a7);},a5.load(a7);}catch(a8){a4(a7);}}function aF(a8,a9,a6){function a7(bc,ba,bd){var bb=a2[bc];switch(bc){case"max_file_size":bc==="max_file_size"&&(a2.max_file_size=a2.filters.max_file_size=ba);break;case"chunk_size":if(ba=aA.parseSize(ba)){a2[bc]=ba,a2.send_file_name=!0;}break;case"multipart":a2[bc]=ba,ba||(a2.send_file_name=!0);break;case"unique_names":a2[bc]=ba,ba&&(a2.send_file_name=!0);break;case"filters":aA.typeOf(ba)==="array"&&(ba={mime_types:ba}),bd?aA.extend(a2.filters,ba):a2.filters=ba,ba.mime_types&&(a2.filters.mime_types.regexp=function(bf){var be=[];return aA.each(bf,function(bg){aA.each(bg.extensions.split(/,/),function(bh){/^\s*\*\s*$/.test(bh)?be.push("\\.*"):be.push("\\."+bh.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"));});}),new RegExp("("+be.join("|")+")$","i");}(a2.filters.mime_types));break;case"resize":bd?aA.extend(a2.resize,ba,{enabled:!0}):a2.resize=ba;break;case"prevent_duplicates":a2.prevent_duplicates=a2.filters.prevent_duplicates=!!ba;break;case"browse_button":case"drop_element":ba=aA.get(ba);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a2[bc]=ba,bd||(a4=!0);break;default:a2[bc]=ba;}bd||a5.trigger("OptionChanged",bc,ba,bb);}var a5=this,a4=!1;typeof a8=="object"?aA.each(a8,function(bb,ba){a7(ba,bb,a6);}):a7(a8,a9,a6),a6?(a2.required_features=ax(aA.extend({},a2)),aT=ax(aA.extend({},a2,{required_features:!0}))):a4&&(a5.trigger("Destroy"),aJ.call(a5,a2,function(ba){ba?(a5.runtime=aw.Runtime.getInfo(aK()).type,a5.trigger("Init",{runtime:a5.runtime}),a5.trigger("PostInit")):a5.trigger("Error",{code:aA.INIT_ERROR,message:aA.translate("Init error.")});}));}function aP(a6,a4){if(a6.settings.unique_names){var a7=a4.name.match(/\.([^.]+)$/),a5="part";a7&&(a5=a7[1]),a4.target_name=a4.id+"."+a5;}}function aU(a9,a5){function a7(){bc-->0?ay(a4,1000):(a5.loaded=a8,a9.trigger("Error",{code:aA.HTTP_ERROR,message:aA.translate("HTTP Error."),file:a5,response:aS.responseText,status:aS.status,responseHeaders:aS.getAllResponseHeaders()}));}function a4(){var bg,be,bf={},bh;if(a5.status!==aA.UPLOADING||a9.state===aA.STOPPED){return;}a9.settings.send_file_name&&(bf.name=a5.target_name||a5.name),bd&&bb.chunks&&ba.size>bd?(bh=Math.min(bd,ba.size-a8),bg=ba.slice(a8,a8+bh)):(bh=ba.size,bg=ba),bd&&bb.chunks&&(a9.settings.send_chunk_number?(bf.chunk=Math.ceil(a8/bd),bf.chunks=Math.ceil(ba.size/bd)):(bf.offset=a8,bf.total=ba.size)),aS=new aw.XMLHttpRequest,aS.upload&&(aS.upload.onprogress=function(bi){a5.loaded=Math.min(a5.size,a8+bi.loaded),a9.trigger("UploadProgress",a5);}),aS.onload=function(){if(aS.status>=400){a7();return;}bc=a9.settings.max_retries,bh=ba.size?(a5.size!=a5.origSize&&(ba.destroy(),ba=null),a9.trigger("UploadProgress",a5),a5.status=aA.DONE,a9.trigger("FileUploaded",a5,{response:aS.responseText,status:aS.status,responseHeaders:aS.getAllResponseHeaders()})):ay(a4,1);},aS.onerror=function(){a7();},aS.onloadend=function(){this.destroy(),aS=null;},a9.settings.multipart&&bb.multipart?(aS.open("post",a6,!0),aA.each(a9.settings.headers,function(bj,bi){aS.setRequestHeader(bi,bj);}),be=new aw.FormData,aA.each(aA.extend(bf,a9.settings.multipart_params),function(bj,bi){be.append(bi,bj);}),be.append(a9.settings.file_data_name,bg),aS.send(be,{runtime_order:a9.settings.runtimes,required_caps:a9.settings.required_features,preferred_caps:aT,swf_url:a9.settings.flash_swf_url,xap_url:a9.settings.silverlight_xap_url})):(a6=aA.buildUrl(a9.settings.url,aA.extend(bf,a9.settings.multipart_params)),aS.open("post",a6,!0),aS.setRequestHeader("Content-Type","application/octet-stream"),aA.each(a9.settings.headers,function(bj,bi){aS.setRequestHeader(bi,bj);}),aS.send(bg,{runtime_order:a9.settings.runtimes,required_caps:a9.settings.required_features,preferred_caps:aT,swf_url:a9.settings.flash_swf_url,xap_url:a9.settings.silverlight_xap_url}));}var a6=a9.settings.url,bd=a9.settings.chunk_size,bc=a9.settings.max_retries,bb=a9.features,a8=0,ba;a5.loaded&&(a8=a5.loaded=bd?bd*Math.floor(a5.loaded/bd):0),ba=a5.getSource(),a9.settings.resize.enabled&&aN(ba,"send_binary_string")&&!!~aw.inArray(ba.type,["image/jpeg","image/png"])?aC.call(this,ba,a9.settings.resize,function(be){ba=be,a5.size=be.size,a4();}):a4();}function aH(a5,a4){aI(a4);}function aR(a5){if(a5.state==aA.STARTED){aQ=+(new Date);}else{if(a5.state==aA.STOPPED){for(var a4=a5.files.length-1;a4>=0;a4--){a5.files[a4].status==aA.UPLOADING&&(a5.files[a4].status=aA.QUEUED,a1());}}}}function aE(){aS&&aS.abort();}function aG(a4){a1(),ay(function(){aW.call(a4); +},1);}function a3(a5,a4){a4.code===aA.INIT_ERROR?a5.destroy():a4.file&&(a4.file.status=aA.FAILED,aI(a4.file),a5.state==aA.STARTED&&(a5.trigger("CancelUpload"),ay(function(){aW.call(a5);},1)));}function aO(a4){a4.stop(),aA.each(aX,function(a5){a5.destroy();}),aX=[],a0.length&&(aA.each(a0,function(a5){a5.destroy();}),a0=[]),aV.length&&(aA.each(aV,function(a5){a5.destroy();}),aV=[]),aT={},aL=!1,aQ=aS=null,aZ.reset();}var aM=aA.guid(),a2,aX=[],aT={},a0=[],aV=[],aQ,aZ,aL=!1,aS;a2={runtimes:aw.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},aF.call(this,aY,null,!0),aZ=new aA.QueueProgress,aA.extend(this,{id:aM,uid:aM,state:aA.STOPPED,features:{},runtime:null,files:aX,settings:a2,total:aZ,init:function(){var a4=this;typeof a2.preinit=="function"?a2.preinit(a4):aA.each(a2.preinit,function(a5,a6){a4.bind(a6,a5);}),aD.call(this);if(!a2.browse_button||!a2.url){this.trigger("Error",{code:aA.INIT_ERROR,message:aA.translate("Init error.")});return;}aJ.call(this,a2,function(a5){typeof a2.init=="function"?a2.init(a4):aA.each(a2.init,function(a6,a7){a4.bind(a7,a6);}),a5?(a4.runtime=aw.Runtime.getInfo(aK()).type,a4.trigger("Init",{runtime:a4.runtime}),a4.trigger("PostInit")):a4.trigger("Error",{code:aA.INIT_ERROR,message:aA.translate("Init error.")});});},setOption:function(a5,a4){aF.call(this,a5,a4,!this.runtime);},getOption:function(a4){return a4?a2[a4]:a2;},refresh:function(){a0.length&&aA.each(a0,function(a4){a4.trigger("Refresh");}),this.trigger("Refresh");},start:function(){this.state!=aA.STARTED&&(this.state=aA.STARTED,this.trigger("StateChanged"),aW.call(this));},stop:function(){this.state!=aA.STOPPED&&(this.state=aA.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"));},disableBrowse:function(){aL=arguments[0]!==aB?arguments[0]:!0,a0.length&&aA.each(a0,function(a4){a4.disable(aL);}),this.trigger("DisableBrowse",aL);},getFile:function(a5){var a4;for(a4=aX.length-1;a4>=0;a4--){if(aX[a4].id===a5){return aX[a4];}}},addFile:function(a9,bb){function ba(bd,be){var bc=[];aw.each(a7.settings.filters,function(bf,bg){j[bg]&&bc.push(function(bh){j[bg].call(a7,bf,bd,function(bi){bh(!bi);});});}),aw.inSeries(bc,be);}function a8(bd){var bc=aw.typeOf(bd);if(bd instanceof aw.File){if(!bd.ruid&&!bd.isDetached()){if(!a4){return !1;}bd.ruid=a4,bd.connectRuntime(a4);}a8(new aA.File(bd));}else{bd instanceof aw.Blob?(a8(bd.getSource()),bd.destroy()):bd instanceof aA.File?(bb&&(bd.name=bb),a6.push(function(be){ba(bd,function(bf){bf||(aX.push(bd),a5.push(bd),a7.trigger("FileFiltered",bd)),ay(be,1);});})):aw.inArray(bc,["file","blob"])!==-1?a8(new aw.File(null,bd)):bc==="node"&&aw.typeOf(bd.files)==="filelist"?aw.each(bd.files,a8):bc==="array"&&(bb=null,aw.each(bd,a8));}}var a7=this,a6=[],a5=[],a4;a4=aK(),a8(a9),a6.length&&aw.inSeries(a6,function(){a5.length&&a7.trigger("FilesAdded",a5);});},removeFile:function(a5){var a4=typeof a5=="string"?a5:a5.id;for(var a6=aX.length-1;a6>=0;a6--){if(aX[a6].id===a4){return this.splice(a6,1)[0];}}},splice:function(a7,a5){var a6=aX.splice(a7===aB?0:a7,a5===aB?aX.length:a5),a4=!1;return this.state==aA.STARTED&&(aA.each(a6,function(a8){if(a8.status===aA.UPLOADING){return a4=!0,!1;}}),a4&&this.stop()),this.trigger("FilesRemoved",a6),aA.each(a6,function(a8){a8.destroy();}),a4&&this.start(),a6;},bind:function(a6,a4,a7){var a5=this;aA.Uploader.prototype.bind.call(this,a6,function(){var a8=[].slice.call(arguments);return a8.splice(0,1,a5),a4.apply(this,a8);},0,a7);},destroy:function(){this.trigger("Destroy"),a2=aZ=null,this.unbindAll();}});},aA.Uploader.prototype=aw.EventTarget.instance,aA.File=function(){function aD(aE){aA.extend(this,{id:aA.guid(),name:aE.name||aE.fileName,type:aE.type||"",size:aE.size||aE.fileSize,origSize:aE.size||aE.fileSize,loaded:0,percent:0,status:aA.QUEUED,lastModifiedDate:aE.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var aF=this.getSource().getSource();return aw.inArray(aw.typeOf(aF),["blob","file"])!==-1?aF:null;},getSource:function(){return aC[this.id]?aC[this.id]:null;},destroy:function(){var aF=this.getSource();aF&&(aF.destroy(),delete aC[this.id]);}}),aC[this.id]=aE;}var aC={};return aD;}(),aA.QueueProgress=function(){var aC=this;aC.size=0,aC.loaded=0,aC.uploaded=0,aC.failed=0,aC.queued=0,aC.percent=0,aC.bytesPerSec=0,aC.reset=function(){aC.size=aC.loaded=aC.uploaded=aC.failed=aC.queued=aC.percent=aC.bytesPerSec=0;};},az.plupload=aA;})(window,mOxie);(function(ay,aw){function ax(aA){return plupload.translate(aA)||aA;}function j(aA,aB){aB.contents().each(function(aC,aD){aD=ay(aD),aD.is(".plupload")||aD.remove();}),aB.prepend('
      '+'
      '+'
      '+'
      '+'
      '+ax("Select files")+"
      "+'
      '+ax("Add files to the upload queue and click the start button.")+"
      "+"
      "+"
      "+'
      '+'
      '+'
      '+ax("Filename")+"
      "+'
       
      '+'
      '+ax("Status")+"
      "+'
      '+ax("Size")+"
      "+'
       
      '+"
      "+'
        '+'"+"
        "+"
        "+"
        "+''+"
        "); +}var az={};ay.fn.pluploadQueue=function(aA){return aA?(this.each(function(){function aI(aJ){var aL;aJ.status==plupload.DONE&&(aL="plupload_done"),aJ.status==plupload.FAILED&&(aL="plupload_failed"),aJ.status==plupload.QUEUED&&(aL="plupload_delete"),aJ.status==plupload.UPLOADING&&(aL="plupload_uploading");var aK=ay("#"+aJ.id).attr("class",aL).find("a").css("display","block");aJ.hint&&aK.attr("title",aJ.hint);}function aE(){ay("span.plupload_total_status",aC).html(aD.total.percent+"%"),ay("div.plupload_progress_bar",aC).css("width",aD.total.percent+"%"),ay("span.plupload_upload_status",aC).html(aw.sprintf(ax("Uploaded %d/%d files"),aD.total.uploaded,aD.files.length));}function aG(){var aL=ay("ul.plupload_filelist",aC).html(""),aJ=0,aK;ay.each(aD.files,function(aM,aN){aK="",aN.status==plupload.DONE&&(aN.target_name&&(aK+=''),aK+='',aK+='',aJ++,ay("#"+aF+"_count").val(aJ)),aL.append('
      • '+'
        '+aN.name+"
        "+'
        '+'
        '+aN.percent+"%
        "+'
        '+plupload.formatSize(aN.size)+"
        "+'
         
        '+aK+"
      • "),aI(aN),ay("#"+aN.id+".plupload_delete a").click(function(aO){ay("#"+aN.id).remove(),aD.removeFile(aN),aO.preventDefault();});}),ay("span.plupload_total_file_size",aC).html(plupload.formatSize(aD.total.size)),aD.total.queued===0?ay("span.plupload_add_text",aC).html(ax("Add Files")):ay("span.plupload_add_text",aC).html(aw.sprintf(ax("%d files queued"),aD.total.queued)),ay("a.plupload_start",aC).toggleClass("plupload_disabled",aD.files.length==aD.total.uploaded+aD.total.failed),aL[0].scrollTop=aL[0].scrollHeight,aE(),!aD.files.length&&aD.features.dragdrop&&aD.settings.dragdrop&&ay("#"+aF+"_filelist").append('
      • '+ax("Drag files here.")+"
      • ");}function aH(){delete az[aF],aD.destroy(),aC.html(aB),aD=aC=aB=null;}var aD,aC,aF,aB;aC=ay(this),aF=aC.attr("id"),aF||(aF=plupload.guid(),aC.attr("id",aF)),aB=aC.html(),j(aF,aC),aA=ay.extend({dragdrop:!0,browse_button:aF+"_browse",container:aF},aA),aA.dragdrop&&(aA.drop_element=aF+"_filelist"),aD=new plupload.Uploader(aA),az[aF]=aD,aD.bind("UploadFile",function(aJ,aK){ay("#"+aK.id).addClass("plupload_current_file");}),aD.bind("Init",function(aJ,aK){!aA.unique_names&&aA.rename&&aC.on("click","#"+aF+"_filelist div.plupload_file_name span",function(aQ){var aO=ay(aQ.target),aM,aN,aP,aL="";aM=aJ.getFile(aO.parents("li")[0].id),aP=aM.name,aN=/^(.+)(\.[^.]+)$/.exec(aP),aN&&(aP=aN[1],aL=aN[2]),aO.hide().after(''),aO.next().val(aP).focus().blur(function(){aO.show().next().remove();}).keydown(function(aR){var aS=ay(this);aR.keyCode==13&&(aR.preventDefault(),aM.name=aS.val()+aL,aO.html(aM.name),aS.blur());});}),ay("#"+aF+"_container").attr("title","Using runtime: "+aK.runtime),ay("a.plupload_start",aC).click(function(aL){ay(this).hasClass("plupload_disabled")||aD.start(),aL.preventDefault();}),ay("a.plupload_stop",aC).click(function(aL){aL.preventDefault(),aD.stop();}),ay("a.plupload_start",aC).addClass("plupload_disabled");}),aD.bind("Error",function(aK,aM){var aJ=aM.file,aL;aJ&&(aL=aM.message,aM.details&&(aL+=" ("+aM.details+")"),aM.code==plupload.FILE_SIZE_ERROR&&alert(ax("Error: File too large:")+" "+aJ.name),aM.code==plupload.FILE_EXTENSION_ERROR&&alert(ax("Error: Invalid file extension:")+" "+aJ.name),aJ.hint=aL,ay("#"+aJ.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",aL)),aM.code===plupload.INIT_ERROR&&setTimeout(function(){aH();},1);}),aD.bind("PostInit",function(aJ){aJ.settings.dragdrop&&aJ.features.dragdrop&&ay("#"+aF+"_filelist").append('
      • '+ax("Drag files here.")+"
      • ");}),aD.init(),aD.bind("StateChanged",function(){aD.state===plupload.STARTED?(ay("li.plupload_delete a,div.plupload_buttons",aC).hide(),aD.disableBrowse(!0),ay("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",aC).css("display","block"),ay("span.plupload_upload_status",aC).html("Uploaded "+aD.total.uploaded+"/"+aD.files.length+" files"),aA.multiple_queues&&ay("span.plupload_total_status,span.plupload_total_file_size",aC).show()):(aG(),ay("a.plupload_stop,div.plupload_progress",aC).hide(),ay("a.plupload_delete",aC).css("display","block"),aA.multiple_queues&&aD.total.uploaded+aD.total.failed==aD.files.length&&(ay(".plupload_buttons,.plupload_upload_status",aC).css("display","inline"),aD.disableBrowse(!1),ay(".plupload_start",aC).addClass("plupload_disabled"),ay("span.plupload_total_status,span.plupload_total_file_size",aC).hide()));}),aD.bind("FilesAdded",aG),aD.bind("FilesRemoved",function(){var aJ=ay("#"+aF+"_filelist").scrollTop(); +aG(),ay("#"+aF+"_filelist").scrollTop(aJ);}),aD.bind("FileUploaded",function(aK,aJ){aI(aJ);}),aD.bind("UploadProgress",function(aJ,aK){ay("#"+aK.id+" div.plupload_file_status",aC).html(aK.percent+"%"),aI(aK),aE();}),aA.setup&&aA.setup(aD);}),this):az[ay(this[0]).attr("id")];};})(H,mOxie);function C(j,az,ax){if(typeof az=="undefined"){az=true;}if(typeof ax=="undefined"){ax=" ";}if(typeof(j)=="undefined"){return"";}var aA=1000;if(j=aA);return j.toFixed(1)+ax+aw[ay]+(az?"b":"");}function W(j){return j.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function al(j){return j.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ac(j){var aw=document.createElement("div");aw.innerHTML=j;return aw.childNodes;}function ah(j){return j.getElementsByTagName("head")[0];}function af(j){return j.getElementsByTagName("body")[0];}function ap(ax,az){var j=ax.getElementsByTagName("link");var ay=false;for(var aw=j.length-1;aw>=0;aw--){if(j[aw].href==az){j[aw].parentNode.removeChild(j[aw]);}}}function U(ay,aA){if(!ay){return;}var j=ay.getElementsByTagName("link");var az=false;for(var aw=0;aw-1){aw.splice(aw.indexOf(j),1);}var ay=aw.join(" ").trim();if(ay.length>0){ax.className=ay;}else{if(ax.hasAttribute("class")){ax.removeAttribute("class");}}}function a(j){if(typeof(j.className)==="undefined"||j.className==null){return[];}return j.className.split(/\s+/);}function av(ay,j){var ax=a(ay);for(var aw=0;aw-1){az[aA.substr(0,j).trim()]=aA.substr(j+1);}else{az[aA]="";}}return az;}function aa(ax,aw){var ay=R(ax);for(var j in ay){var az=ay[j];if(j==aw){return az;}}return null;}function V(ay,ax,j){var az=R(ay);for(var aw in az){var aA=az[aw];if(aw==ax&&aA==j){return true;}}return false;}function v(ax,aw,j){var ay=R(ax);ay[aw]=j;m(ax,ay);}function T(aw,j){var ax=R(aw);delete ax[j];m(aw,ax);}function m(aw,ay){var ax=[];for(var j in ay){ax.push(j+":"+ay[j]);}if(ax.length>0){aw.setAttribute("style",ax.join(";"));}else{if(aw.hasAttribute("style")){aw.removeAttribute("style");}}}function s(az,aw){var ax;if(Object.prototype.toString.call(aw)==="[object Array]"){ax=aw;}else{ax=[aw];}for(var ay=0;ay-1){j.push(az.childNodes[ay]);}}return j;}var h=1;P("jsplus_uploader_url",e("jsplus_uploader")+"uploader.php");o("runtimes","html5,flash,html4,silverlight,browserplus,gears");o("auto_upload",true);if(h==101||h==102||h==104||h==1||h==2){o("allowed_ext","jpg,jpeg,gif,png,bmp,tif,tiff");}else{if(h==103){o("allowed_ext","*");}}if(h==101||h==102||h==104||h==1||h==2){o("default_img_resize",true);o("default_img_resize_width",800);o("default_img_resize_height",600);o("default_img_resize_enlarge",false);o("img_resize_show",true);}if(h==102||h==104||h==1||h==2){o("default_thumb_resize_width",200);o("default_thumb_resize_height",200);o("default_thumb_resize_enlarge",false);o("thumb_resize_show",true);}if(h==1||h==2){o("default_col_count",3);o("col_count_show",true);}if(h==101){o("template","");}else{if(h==102){o("template","");}else{if(h==103){o("template","
        "+''+"Download file"+"
        "); +}else{if(h==104){o("template","");o("template_wrap","");}else{if(h==1){o("template","
        "+"
        "+""+""+""+""+"
        "+"
        ");o("template_wrap","");}else{if(h==2){o("template","
        "+"
        "+""+""+""+""+"
        "+"
        ");o("template_wrap","");}}}}}}var I=[];var Z=false;var aq=null;var U=function(ay,aA){var j=ay.getElementsByTagName("link");var az=false;for(var aw=0;awax?aB:ax;};var ay=function(){if(aB==0){return ax;}if(ax==0){return aB;}return aB'+"
        "+B(j);}function B(aw){if(h==103){return"";}var j="";if(h==1||h==2){var j='"+'"; +}var ax="";if(h==102||h==104||h==1||h==2){var ax='"+'";}var aA="";if(h==101||h==102||h==104||h==1||h==2){var aA='"+'"; +}var az="";if(ax.length>0||aA.length>0||j.length>0){var ay=(O(aw,"img_resize_show")||O(aw,"thumb_resize_show")||O(aw,"col_count_show"))?10:0;az='
        '+ax+aA+j+"
        ";}return az;}function ai(ay,ax){if(typeof(window["jsplus_bootstrap_gallery_insert_range"])!="undefined"&&window["jsplus_bootstrap_gallery_insert_range"]!=null){var j=window["jsplus_bootstrap_gallery_insert_range"];window["jsplus_bootstrap_gallery_insert_range"]=null;var aB;if(j.startContainer){aB=j.startContainer;if(aB.nodeType==document.TEXT_NODE){aB=aB.parentNode;}else{if(j.startOffset0){az.start();return false;}else{alert(p(ay,"select_files_first"));}return false;}if(h==101||h==102||h==103){for(var j=0;j=0){aw+="&";}else{aw+="?";}aw+="client=plupload&";if(h==101){aw+="type=Images";}else{if(h==102||h==104||h==1||h==2){aw+="type=Images&makeThumb=true";}else{if(h==103){aw+="type=Files";}}}var j=H(".jsplus_bootstrap_gallery-plupload2-"+w(ay)).pluploadQueue({runtimes:O(ay,"runtimes"),url:aw,unique_names:true,filters:az,flash_swf_url:an()+"lib/uploader.swf",silverlight_xap_url:an()+"lib/uploader.xap",preinit:{Init:function(aC,aB){if(O(ay,"auto_upload")){H(".plupload_button.plupload_start").remove();}if(typeof(window["jsplus_bootstrap_gallery_upload_dropped_files_value"])!=="undefined"&&window["jsplus_bootstrap_gallery_upload_dropped_files_value"]!=null){var aA=window["jsplus_bootstrap_gallery_upload_dropped_files_value"];for(var aD=0;aD0){aD+="&iw="+aA;}aA=H("#jsplus_bootstrap_gallery-img-resize-height-"+w(ay)).val();aB=aA.match(/^\d+$/);if(aB!=null&&aB.length==1&&aA>0){aD+="&ih="+aA;}if(H("#jsplus_bootstrap_gallery-img-resize-up-"+w(ay)).hasClass("jsplus_bootstrap_gallery-checked")){aD+="&ie=1";}}}if(h==102||h==104||h==1||h==2){aA=H("#jsplus_bootstrap_gallery-thumb-resize-width-"+w(ay)).val();aB=aA.match(/^\d+$/);if(aB!=null&&aB.length==1&&aA>0){aD+="&tw="+aA;}aA=H("#jsplus_bootstrap_gallery-thumb-resize-height-"+w(ay)).val();aB=aA.match(/^\d+$/);if(aB!=null&&aB.length==1&&aA>0){aD+="&th="+aA;}if(H("#jsplus_bootstrap_gallery-thumb-resize-up-"+w(ay)).hasClass("jsplus_bootstrap_gallery-checked")){aD+="&te=1";}}if(h==101||h==102||h==104||h==1||h==2){if(aD.length>0){aE.settings.url=aw+aD;}}},FileUploaded:function(aD,aB,aA){if(aA.response.substr(0,1)=="!"){aD.trigger("Error",{code:500,message:aA.response.substr(1),details:"",file:aB}); +}else{var aC=aA.response;aC=aC.replace(/^
        (.*?)<\/pre>$/i,"$1");if(I[I.length-1]!=aC){I.push(aC.trim());}}},Error:function(aB,aA){var aC=aA.message;if(aC.toLowerCase().substr("exten")>-1){aC+="\nAllowed file exntesions: "+allowedExt.replace(",",", ");}alert(aC);},UploadComplete:function(aA){if(O(ay,"auto_upload")){if(I.length>0){r(ax);}else{aA.destroy();ag(ay,ax);}}}}});return j;}function n(){aq.pluploadQueue().destroy();}function r(j){j.getButton("ok").click();}function at(ax,j){var aw=j.getElement().getFirst();aw.setAttribute("class",aw.getAttribute("class")+" dlg_jsplus_plupload");}function A(aB){var j=false;var aC=aB.getSelection().getStartElement().$;do{if(aC.className!=null){var ay=aC.className.split(" ");if(ay.indexOf("jsplus_bootstrap_gallery")!==-1){j=true;break;}}if(aC.parentElement!=null&&aC.parentElement.tagName.toLowerCase()!="body"&&aC.parentElement!==b(aB)){aC=aC.parentElement;}else{break;}}while(true);if(j){for(var ax=0;ax'+S(ax)+"
        "}]}]};});window["jsplus_bootstrap_gallery_upload_dropped_files"]=function(az,ay,ax,aA){window["jsplus_bootstrap_gallery_upload_dropped_files_value"]=az;window["jsplus_bootstrap_gallery_insert_range"]=ax;window["jsplus_bootstrap_gallery_event_target"]=aA;ay.openDialog("jsplus_bootstrap_gallery-"+w(ay));};}});})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.config.php b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.config.php new file mode 100644 index 0000000..e3631fd --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.config.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.php b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.php new file mode 100644 index 0000000..094f5cc --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/gen.php @@ -0,0 +1,95 @@ + $left - $rleft, + "top" => $top - $rtop, + "width" => $rright - $rleft + 1, + "height" => $rbottom - $rtop + 1 ); +} + + +if (!isset($_GET['code'])) + die("`code` parameter not set"); + +if (!isset($_GET['size'])) + die("`size` parameter not set"); + +if (!isset($_GET['color'])) + die("`color` parameter not set"); +$colorHtml = strtolower($_GET['color']); +if (!preg_match('/^[0-9a-f]{6}$/', $colorHtml) == 1) + die('Incorrect color code'); + +$colorR = base_convert(substr($colorHtml, 0, 2), 16, 10); +$colorG = base_convert(substr($colorHtml, 2, 2), 16, 10); +$colorB = base_convert(substr($colorHtml, 4, 2), 16, 10); + +$code = intval($_GET['code']); +$size = intval($_GET['size']); + +if ($code < 0 || $code > 65535) + die('Incorrect `code` value'); + +if ($size < $config['minSize']) + $size = $config['minSize']; + +if ($size > $config['maxSize']) + $size = $config['maxSize']; + +$fontFile = dirname(__FILE__).'/icons.ttf'; +$text = html_entity_decode('&#' . $code . ';', ENT_COMPAT, 'UTF-8'); + +$dim = calculateTextBox($size, 0, $fontFile, $text); + +$width = $dim['width']; +$height = $dim['height']; +$left = $dim['left']; +$top = $dim['top']; + +$img = @imagecreatetruecolor($width, $height) or die("Cannot Initialize new GD image stream. Check GD library in installed on server and selected font for existence."); +imagesavealpha($img, true); +$trans_colour = imagecolorallocatealpha($img, 0, 0, 0, 127); +imagefill($img, 0, 0, $trans_colour); + +$color = imagecolorallocate($img, $colorR, $colorG, $colorB); + +imagettftext($img, $size, 0, $left, $top, $color, $fontFile, $text); + +header("Content-type: image/png"); +imagepng($img); +imagedestroy($img); + +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/icons.ttf b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/icons.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/fonts/icons.ttf differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/icons/jsplus_bootstrap_icons.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/icons/jsplus_bootstrap_icons.png new file mode 100644 index 0000000..44b5a2c Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/icons/jsplus_bootstrap_icons.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/search.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/search.png new file mode 100644 index 0000000..0fec009 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/search.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_in.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_in.png new file mode 100644 index 0000000..2902bf1 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_in.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_out.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_out.png new file mode 100644 index 0000000..5ffe731 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/images/zoom_out.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/arrow.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/arrow.gif new file mode 100644 index 0000000..246478a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/arrow.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/cross.gif b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/cross.gif new file mode 100644 index 0000000..0ee9c7a Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/cross.gif differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/demo.html b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/demo.html new file mode 100644 index 0000000..cb86066 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/demo.html @@ -0,0 +1,12 @@ + + + jscolor demo + + + + + + Click here: + + + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hs.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hs.png new file mode 100644 index 0000000..3d94486 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hs.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hv.png b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hv.png new file mode 100644 index 0000000..1c5e01f Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/hv.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/jscolor.js b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/jscolor.js new file mode 100644 index 0000000..a816f4c --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_icons/jscolor/jscolor.js @@ -0,0 +1,4 @@ +var jscolor={dir:"",bindClass:"jsplus-icons-color-box",binding:true,preloading:true,install:function(){jscolor.addEvent(window,"load",jscolor.init);},init:function(){if(jscolor.binding){jscolor.bind();}if(jscolor.preloading){jscolor.preload();}},getDir:function(){if(!jscolor.dir){var a=jscolor.detectDir();jscolor.dir=a!==false?a:"jscolor/";}return jscolor.dir;},detectDir:function(){var c=location.href;var d=document.getElementsByTagName("base");for(var a=0;aM[L]?(-E[L]+K[L]+H[L]/2>M[L]/2&&K[L]+H[L]-p[L]>=0?K[L]+H[L]-p[L]:K[L]):K[L],-E[J]+K[J]+H[J]+p[J]-G+G*I>M[J]?(-E[J]+K[J]+H[J]/2>M[J]/2&&K[J]+H[J]-G-G*I>=0?K[J]+H[J]-G-G*I:K[J]+H[J]-G+G*I):(K[J]+H[J]-G+G*I>=0?K[J]+H[J]-G+G*I:K[J]+H[J]-G-G*I)];}k(F[L],F[J]);}};this.importColor=function(){if(!a){this.exportColor();}else{if(!this.adjust){if(!this.fromString(a.value,x)){D.style.backgroundImage=D.jscStyle.backgroundImage;D.style.backgroundColor=D.jscStyle.backgroundColor;D.style.color=D.jscStyle.color;this.exportColor(x|C);}}else{if(!this.required&&/^\s*$/.test(a.value)){a.value="";D.style.backgroundImage=D.jscStyle.backgroundImage;D.style.backgroundColor=D.jscStyle.backgroundColor;D.style.color=D.jscStyle.color;this.exportColor(x|C);}else{if(this.fromString(a.value)){}else{this.exportColor();}}}}};this.exportColor=function(p){if(!(p&x)&&a){var E=this.toString();if(this.caps){E=E.toUpperCase();}if(this.hash){E="#"+E;}a.value=E;}if(!(p&C)&&D){D.style.backgroundImage="none";}if(!(p&v)&&u()){r();}if(!(p&e)&&u()){A();}};this.fromHSV=function(G,F,E,p){if(G!==null){G=Math.max(0,this.minH,Math.min(6,this.maxH,G));}if(F!==null){F=Math.max(0,this.minS,Math.min(1,this.maxS,F));}if(E!==null){E=Math.max(0,this.minV,Math.min(1,this.maxV,E));}this.rgb=h(G===null?this.hsv[0]:(this.hsv[0]=G),F===null?this.hsv[1]:(this.hsv[1]=F),E===null?this.hsv[2]:(this.hsv[2]=E));this.exportColor(p);};this.fromRGB=function(I,H,p,E){if(I!==null){I=Math.max(0,Math.min(1,I));}if(H!==null){H=Math.max(0,Math.min(1,H));}if(p!==null){p=Math.max(0,Math.min(1,p));}var G=y(I===null?this.rgb[0]:I,H===null?this.rgb[1]:H,p===null?this.rgb[2]:p);if(G[0]!==null){this.hsv[0]=Math.max(0,this.minH,Math.min(6,this.maxH,G[0]));}if(G[2]!==0){this.hsv[1]=G[1]===null?null:Math.max(0,this.minS,Math.min(1,this.maxS,G[1]));}this.hsv[2]=G[2]===null?null:Math.max(0,this.minV,Math.min(1,this.maxV,G[2]));var F=h(this.hsv[0],this.hsv[1],this.hsv[2]);this.rgb[0]=F[0];this.rgb[1]=F[1];this.rgb[2]=F[2];this.exportColor(E);};this.fromString=function(F,E){var p=F.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);if(!p){return false;}else{if(p[1].length===6){this.fromRGB(parseInt(p[1].substr(0,2),16)/255,parseInt(p[1].substr(2,2),16)/255,parseInt(p[1].substr(4,2),16)/255,E);}else{this.fromRGB(parseInt(p[1].charAt(0)+p[1].charAt(0),16)/255,parseInt(p[1].charAt(1)+p[1].charAt(1),16)/255,parseInt(p[1].charAt(2)+p[1].charAt(2),16)/255,E);}return true;}};this.toString=function(){return((256|Math.round(255*this.rgb[0])).toString(16).substr(1)+(256|Math.round(255*this.rgb[1])).toString(16).substr(1)+(256|Math.round(255*this.rgb[2])).toString(16).substr(1));};function y(I,H,E){var J=Math.min(Math.min(I,H),E);var F=Math.max(Math.max(I,H),E);var p=F-J;if(p===0){return[null,0,F];}var G=I===J?3+(E-H)/p:(H===J?5+(I-E)/p:1+(H-I)/p);return[G===6?0:G,p/F,F];}function h(H,G,E){if(H===null){return[E,E,E];}var F=Math.floor(H);var I=F%2?H-F:1-(H-F);var p=E*(1-G);var J=E*(1-G*I);switch(F){case 6:case 0:return[E,J,p];case 1:return[J,E,p];case 2:return[p,E,J];case 3:return[p,J,E];case 4:return[J,p,E];case 5:return[E,p,J];}}function g(){delete jscolor.picker.owner;document.getElementsByTagName("body")[0].removeChild(jscolor.picker.boxB);}function k(L,K){if(!jscolor.picker){jscolor.picker={box:document.createElement("div"),boxB:document.createElement("div"),pad:document.createElement("div"),padB:document.createElement("div"),padM:document.createElement("div"),sld:document.createElement("div"),sldB:document.createElement("div"),sldM:document.createElement("div"),btn:document.createElement("div"),btnS:document.createElement("span"),btnT:document.createTextNode(l.pickerCloseText)}; +for(var I=0,J=4;I'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");z(document,".jsdialog_plugin_jsplus_bootstrap_icons.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_icons.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_icons.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_icons .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_icons .cke_dialog_contents { padding: 0; }"); +}function ah(){var aD=false;if(aD){var aH=window.location.hostname;var aG=0;var aE;var aF;if(aH.length!=0){for(aE=0,l=aH.length;aE'+''+''+aF+""+"
        ";}else{if(p==1){aE+='
        '+''+''+aF+""+"
        ";}else{if(p==2){aE+='
        '+''+''+aF+""+"
        "; +}else{if(p==3){aE+='
        '+''+ao[aD]+""+"
        ";}}}}}return aE;}function aA(aI,aH){aI=aI.replace(/
        /g,"");if(aH==0){return aI;}var aE="";var aD=0;while(aI.length>0){var aG=aI.charAt(0);aE+=aG;aD++;if(aD>=aH&&aG=="-"){aE+="
        ";aD=0;}aI=aI.substr(1);}if(aE.indexOf("
        ")==-1){var aF=aE.lastIndexOf("-");if(aE.length-aF>=aH){aE=aE.substr(0,aF+1)+"
        "+aE.substr(aF+1);}}if(aE.indexOf("
        ")===0){aE=aE.substr(4,aE.length-4);}return aE;}function f(aD){if(aD===""){return false;}if(aD==="inherit"){return false;}if(aD==="transparent"){return false;}var aE=document.createElement("img");aE.style.color="rgb(0, 0, 0)";aE.style.color=aD;if(aE.style.color!=="rgb(0, 0, 0)"){return true;}aE.style.color="rgb(255, 255, 255)";aE.style.color=aD;return aE.style.color!=="rgb(255, 255, 255)";}var ak="black";function t(aH){var aD=document.getElementById("jsplus_bootstrap_icons-color-"+C(aH)).value;if(f(aD)){var aG=document.getElementsByClassName("jsplus_bootstrap_icons-glyphicon");for(var aE=0;aEj){aO=j;}var aL=document.getElementsByClassName("jsplus_bootstrap_icons-icon");for(var aG=0;aG=24){aJ.style.display="initial";aJ.style.marginTop="0";aJ.style.marginLeft="10px";aJ.innerHTML=aA(aJ.innerHTML,0);aJ.style.fontSize="14px";aJ.style.lineHeight="16px";}else{if(aO>=24&&af<24){aJ.style.display="block";aJ.style.marginTop="10px";aJ.style.marginLeft="0";aJ.innerHTML=aA(aJ.innerHTML,6);var aE=aJ.innerHTML.match(/
        /g);if(aE!=null){c=aE.length;}else{c=0;}if(c>=2){aJ.style.fontSize="10px";aJ.style.lineHeight="10px";}else{if(c==1){aJ.style.fontSize="14px";aJ.style.lineHeight="14px";}else{aJ.style.fontSize="14px";aJ.style.lineHeight="16px";}}}}}var aN=document.getElementById("jsplus_bootstrap_icons-zoom-in-"+C(aK));if(aOn){aI.style.cursor="pointer";aI.style.filter="";aI.style.opacity="";}else{aI.style.cursor="arrow";aI.style.filter="alpha(opacity=25)";aI.style.opacity="0.25";}af=aO;}}var M=null;function D(){var aD=this;if(this.tagName.toLowerCase()!="div"){aD=this.parentElement;}M=aD;H();}function H(){var aE=document.getElementsByClassName("jsplus_bootstrap_icons-icon");for(var aF=0;aF0){var aI=aA(aD.getElementsByClassName("jsplus_bootstrap_icons-title")[0].innerHTML,0).trim();if(aI.length==0||aI.indexOf(aJ)!=-1){aD.style.display="inline-block";}else{aD.style.display="none";if(M==aD){aD.style.outline="";aD.style.backgroundColor="";M=null;}}}}}function Y(aH){var aK=T(aH,"images_generator_url");var aN=T(aH,"bitmap_allowed");var aO=T(aH,"default_as_bitmap");var aE=T(aH,"default_size");var aM=T(aH,"default_add_size_to_style");var aL=T(aH,"default_color");var aI=T(aH,"default_add_color_to_style");var aG=T(aH,"icons_panel_height");var aD=''+''; +var aJ='";var aF='"+''+""+''+'"+'"+'"+'"+""+""+'"+'"+'"+'"+""+""+"
        '+(p==3?aJ:aD)+"'+''+w(aH,"size")+":"+"'+''+''+''+"'+'"+"
        '+(p==3?aD:aJ)+"'+''+w(aH,"color")+":"+"'+''+"'+'"+"
        "+'
        '+'
        '+g(aH)+"
        ";return aF;}function I(aH){document.getElementById("jsplus_bootstrap_icons-zoom-in-"+C(aH)).onclick=function(){var aP=af;if(aP<20){aP+=2;}else{if(aP<36){aP+=4;}else{if(aP<64){aP+=12;}else{aP+=24;}}}if(aP>j){aP=j;}document.getElementById("jsplus_bootstrap_icons-size-"+C(aH)).value=aP;J(aH);};document.getElementById("jsplus_bootstrap_icons-zoom-out-"+C(aH)).onclick=function(){var aP=af;if(aP<=20){aP-=2;}else{if(aP<=36){aP-=4;}else{if(aP<=64){aP-=12;}else{aP-=24;}}}if(aP';ar(aL,aJ);}else{if(aH||aN){aE=(aH?("font-size:"+af+"px;"):"")+(aN?("color:"+ak):"");}if(aE.length>0){aE=' style="'+aE+'"';}if(p==0){var aJ='";}else{if(p==1){var aJ='";}else{if(p==2){var aJ='";}else{if(p==3){var aJ=""+aO+"";}}}}ar(aL,aJ);}}function G(aD,aH,aF){if(typeof aH=="undefined"){aH=true;}if(typeof aF=="undefined"){aF=" ";}if(typeof(aD)=="undefined"){return"";}var aI=1000;if(aD=aI);return aD.toFixed(1)+aF+aE[aG]+(aH?"b":"");}function ac(aD){return aD.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function au(aD){return aD.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ai(aD){var aE=document.createElement("div");aE.innerHTML=aD;return aE.childNodes;}function aq(aD){return aD.getElementsByTagName("head")[0];}function am(aD){return aD.getElementsByTagName("body")[0];}function ay(aF,aH){var aD=aF.getElementsByTagName("link");var aG=false;for(var aE=aD.length-1;aE>=0;aE--){if(aD[aE].href==aH){aD[aE].parentNode.removeChild(aD[aE]);}}}function aa(aG,aI){if(!aG){return;}var aD=aG.getElementsByTagName("link");var aH=false;for(var aE=0;aE-1){aE.splice(aE.indexOf(aD),1);}var aG=aE.join(" ").trim();if(aG.length>0){aF.className=aG;}else{if(aF.hasAttribute("class")){aF.removeAttribute("class");}}}function a(aD){if(typeof(aD.className)==="undefined"||aD.className==null){return[];}return aD.className.split(/\s+/);}function aC(aG,aD){var aF=a(aG);for(var aE=0;aE-1){aH[aI.substr(0,aD).trim()]=aI.substr(aD+1);}else{aH[aI]="";}}return aH;}function ag(aF,aE){var aG=X(aF);for(var aD in aG){var aH=aG[aD];if(aD==aE){return aH;}}return null;}function ab(aG,aF,aD){var aH=X(aG);for(var aE in aH){var aI=aH[aE];if(aE==aF&&aI==aD){return true;}}return false;}function B(aF,aE,aD){var aG=X(aF);aG[aE]=aD;u(aF,aG);}function Z(aE,aD){var aF=X(aE);delete aF[aD];u(aE,aF);}function u(aE,aG){var aF=[];for(var aD in aG){aF.push(aD+":"+aG[aD]);}if(aF.length>0){aE.setAttribute("style",aF.join(";"));}else{if(aE.hasAttribute("style")){aE.removeAttribute("style");}}}function y(aH,aE){var aF;if(Object.prototype.toString.call(aE)==="[object Array]"){aF=aE;}else{aF=[aE];}for(var aG=0;aG-1){aD.push(aH.childNodes[aG]);}}return aD;}CKEDITOR.plugins.add("jsplus_bootstrap_icons",{lang:"en",icons:"jsplus_bootstrap_icons",init:function(aD){var aE=this.path;aD.on("contentDom",function(){var aF=aD.document.$;CKEDITOR.dtd.$removeEmpty["span"]=false;ap(aD);});aD.addCommand("jsplus_bootstrap_icons-"+C(aD),new CKEDITOR.dialogCommand("jsplus_bootstrap_icons-"+C(aD)));aD.ui.addButton("jsplus_bootstrap_icons",{title:w(aD,"jsplus_bootstrap_icons_title"),icon:this.path+"icons/jsplus_bootstrap_icons.png",command:"jsplus_bootstrap_icons-"+C(aD)});CKEDITOR.dialog.add("jsplus_bootstrap_icons-"+C(aD),function(aF){return{title:w(aF,"jsplus_bootstrap_icons_title"),minWidth:540,width:540,resizable:false,onShow:function(){I(aF);},onOk:function(){A(aF);},contents:[{id:"tab1-"+C(aF),label:"",title:"",expand:true,padding:0,elements:[{id:"icons_jsplus_bootstrap_icons-"+C(aF),type:"html",html:Y(aF)}]}]}; +});}});})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_include/bootstrap_styles.css b/libraries/ckeditor/plugins/jsplus_bootstrap_include/bootstrap_styles.css new file mode 100644 index 0000000..adc9cdb --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_include/bootstrap_styles.css @@ -0,0 +1,519 @@ +/* Buttons */ +.jsplus_bootstrap_button_preview button, +input, +{ + margin: 0; + font: inherit; + color: inherit; +} +.jsplus_bootstrap_button_preview button { + overflow: visible; +} +.jsplus_bootstrap_button_preview button { + text-transform: none; +} +.jsplus_bootstrap_button_preview button, +.jsplus_bootstrap_button_preview input[type="button"], +.jsplus_bootstrap_button_preview input[type="reset"], +.jsplus_bootstrap_button_preview input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +.jsplus_bootstrap_button_preview button[disabled], +.jsplus_bootstrap_button_preview input[disabled] { + cursor: default; +} +.jsplus_bootstrap_button_preview button::-moz-focus-inner, +.jsplus_bootstrap_button_preview input::-moz-focus-inner { + padding: 0; + border: 0; +} + + +.jsplus_bootstrap_button_preview .btn > .caret, +.dropup > .jsplus_bootstrap_button_preview .btn > .caret { + border-top-color: #000 !important; +} + +.jsplus_bootstrap_button_preview .btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.jsplus_bootstrap_button_preview .btn:focus, +.jsplus_bootstrap_button_preview .btn:active:focus, +.jsplus_bootstrap_button_preview .btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.jsplus_bootstrap_button_preview .btn:hover, +.jsplus_bootstrap_button_preview .btn:focus { + color: #333; + text-decoration: none; +} +.jsplus_bootstrap_button_preview .btn:active, +.jsplus_bootstrap_button_preview .btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.jsplus_bootstrap_button_preview .btn.disabled, +.jsplus_bootstrap_button_preview .btn[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.jsplus_bootstrap_button_preview .btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.jsplus_bootstrap_button_preview .btn-default:hover, +.jsplus_bootstrap_button_preview .btn-default:focus, +.jsplus_bootstrap_button_preview .btn-default:active, +.jsplus_bootstrap_button_preview .btn-default.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.jsplus_bootstrap_button_preview .btn-default:active, +.jsplus_bootstrap_button_preview .btn-default.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-default { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-default.disabled, +.jsplus_bootstrap_button_preview .btn-default[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-default, +.jsplus_bootstrap_button_preview .btn-default.disabled:hover, +.jsplus_bootstrap_button_preview .btn-default[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-default:hover, +.jsplus_bootstrap_button_preview .btn-default.disabled:focus, +.jsplus_bootstrap_button_preview .btn-default[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-default:focus, +.jsplus_bootstrap_button_preview .btn-default.disabled:active, +.jsplus_bootstrap_button_preview .btn-default[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-default:active, +.jsplus_bootstrap_button_preview .btn-default.disabled.active, +.jsplus_bootstrap_button_preview .btn-default[disabled].active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.jsplus_bootstrap_button_preview .btn-default .badge { + color: #fff; + background-color: #333; +} +.jsplus_bootstrap_button_preview .btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd; +} +.jsplus_bootstrap_button_preview .btn-primary:hover, +.jsplus_bootstrap_button_preview .btn-primary:focus, +.jsplus_bootstrap_button_preview .btn-primary:active, +.jsplus_bootstrap_button_preview .btn-primary.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3071a9; + border-color: #285e8e; +} +.jsplus_bootstrap_button_preview .btn-primary:active, +.jsplus_bootstrap_button_preview .btn-primary.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-primary { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-primary.disabled, +.jsplus_bootstrap_button_preview .btn-primary[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-primary, +.jsplus_bootstrap_button_preview .btn-primary.disabled:hover, +.jsplus_bootstrap_button_preview .btn-primary[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-primary:hover, +.jsplus_bootstrap_button_preview .btn-primary.disabled:focus, +.jsplus_bootstrap_button_preview .btn-primary[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-primary:focus, +.jsplus_bootstrap_button_preview .btn-primary.disabled:active, +.jsplus_bootstrap_button_preview .btn-primary[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-primary:active, +.jsplus_bootstrap_button_preview .btn-primary.disabled.active, +.jsplus_bootstrap_button_preview .btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +.jsplus_bootstrap_button_preview .btn-primary .badge { + color: #428bca; + background-color: #fff; +} +.jsplus_bootstrap_button_preview .btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.jsplus_bootstrap_button_preview .btn-success:hover, +.jsplus_bootstrap_button_preview .btn-success:focus, +.jsplus_bootstrap_button_preview .btn-success:active, +.jsplus_bootstrap_button_preview .btn-success.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.jsplus_bootstrap_button_preview .btn-success:active, +.jsplus_bootstrap_button_preview .btn-success.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-success { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-success.disabled, +.jsplus_bootstrap_button_preview .btn-success[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-success, +.jsplus_bootstrap_button_preview .btn-success.disabled:hover, +.jsplus_bootstrap_button_preview .btn-success[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-success:hover, +.jsplus_bootstrap_button_preview .btn-success.disabled:focus, +.jsplus_bootstrap_button_preview .btn-success[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-success:focus, +.jsplus_bootstrap_button_preview .btn-success.disabled:active, +.jsplus_bootstrap_button_preview .btn-success[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-success:active, +.jsplus_bootstrap_button_preview .btn-success.disabled.active, +.jsplus_bootstrap_button_preview .btn-success[disabled].active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.jsplus_bootstrap_button_preview .btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.jsplus_bootstrap_button_preview .btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.jsplus_bootstrap_button_preview .btn-info:hover, +.jsplus_bootstrap_button_preview .btn-info:focus, +.jsplus_bootstrap_button_preview .btn-info:active, +.jsplus_bootstrap_button_preview .btn-info.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.jsplus_bootstrap_button_preview .btn-info:active, +.jsplus_bootstrap_button_preview .btn-info.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-info { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-info.disabled, +.jsplus_bootstrap_button_preview .btn-info[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-info, +.jsplus_bootstrap_button_preview .btn-info.disabled:hover, +.jsplus_bootstrap_button_preview .btn-info[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-info:hover, +.jsplus_bootstrap_button_preview .btn-info.disabled:focus, +.jsplus_bootstrap_button_preview .btn-info[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-info:focus, +.jsplus_bootstrap_button_preview .btn-info.disabled:active, +.jsplus_bootstrap_button_preview .btn-info[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-info:active, +.jsplus_bootstrap_button_preview .btn-info.disabled.active, +.jsplus_bootstrap_button_preview .btn-info[disabled].active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.jsplus_bootstrap_button_preview .btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.jsplus_bootstrap_button_preview .btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.jsplus_bootstrap_button_preview .btn-warning:hover, +.jsplus_bootstrap_button_preview .btn-warning:focus, +.jsplus_bootstrap_button_preview .btn-warning:active, +.jsplus_bootstrap_button_preview .btn-warning.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.jsplus_bootstrap_button_preview .btn-warning:active, +.jsplus_bootstrap_button_preview .btn-warning.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-warning { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-warning.disabled, +.jsplus_bootstrap_button_preview .btn-warning[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-warning, +.jsplus_bootstrap_button_preview .btn-warning.disabled:hover, +.jsplus_bootstrap_button_preview .btn-warning[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-warning:hover, +.jsplus_bootstrap_button_preview .btn-warning.disabled:focus, +.jsplus_bootstrap_button_preview .btn-warning[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-warning:focus, +.jsplus_bootstrap_button_preview .btn-warning.disabled:active, +.jsplus_bootstrap_button_preview .btn-warning[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-warning:active, +.jsplus_bootstrap_button_preview .btn-warning.disabled.active, +.jsplus_bootstrap_button_preview .btn-warning[disabled].active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.jsplus_bootstrap_button_preview .btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.jsplus_bootstrap_button_preview .btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.jsplus_bootstrap_button_preview .btn-danger:hover, +.jsplus_bootstrap_button_preview .btn-danger:focus, +.jsplus_bootstrap_button_preview .btn-danger:active, +.jsplus_bootstrap_button_preview .btn-danger.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.jsplus_bootstrap_button_preview .btn-danger:active, +.jsplus_bootstrap_button_preview .btn-danger.active, +.jsplus_bootstrap_button_preview .open > .dropdown-toggle.btn-danger { + background-image: none; +} +.jsplus_bootstrap_button_preview .btn-danger.disabled, +.jsplus_bootstrap_button_preview .btn-danger[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-danger, +.jsplus_bootstrap_button_preview .btn-danger.disabled:hover, +.jsplus_bootstrap_button_preview .btn-danger[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-danger:hover, +.jsplus_bootstrap_button_preview .btn-danger.disabled:focus, +.jsplus_bootstrap_button_preview .btn-danger[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-danger:focus, +.jsplus_bootstrap_button_preview .btn-danger.disabled:active, +.jsplus_bootstrap_button_preview .btn-danger[disabled]:active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-danger:active, +.jsplus_bootstrap_button_preview .btn-danger.disabled.active, +.jsplus_bootstrap_button_preview .btn-danger[disabled].active, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.jsplus_bootstrap_button_preview .btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.jsplus_bootstrap_button_preview .btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} +.jsplus_bootstrap_button_preview .btn-link, +.jsplus_bootstrap_button_preview .btn-link:active, +.jsplus_bootstrap_button_preview .btn-link[disabled], +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.jsplus_bootstrap_button_preview .btn-link, +.jsplus_bootstrap_button_preview .btn-link:hover, +.jsplus_bootstrap_button_preview .btn-link:focus, +.jsplus_bootstrap_button_preview .btn-link:active { + border-color: transparent; +} +.jsplus_bootstrap_button_preview .btn-link:hover, +.jsplus_bootstrap_button_preview .btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +.jsplus_bootstrap_button_preview .btn-link[disabled]:hover, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-link:hover, +.jsplus_bootstrap_button_preview .btn-link[disabled]:focus, +.jsplus_bootstrap_button_preview fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.jsplus_bootstrap_button_preview .btn-lg, +.jsplus_bootstrap_button_preview .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.jsplus_bootstrap_button_preview .btn-sm, +.jsplus_bootstrap_button_preview .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.jsplus_bootstrap_button_preview .btn-xs, +.jsplus_bootstrap_button_preview .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.jsplus_bootstrap_button_preview .btn-block { + display: block; + width: 100%; +} +.jsplus_bootstrap_button_preview .btn-block + .btn-block { + margin-top: 5px; +} +.jsplus_bootstrap_button_preview input[type="submit"].btn-block, +.jsplus_bootstrap_button_preview input[type="reset"].btn-block, +.jsplus_bootstrap_button_preview input[type="button"].btn-block { + width: 100%; +} + +/* Labels */ +.jsplus_bootstrap_label_preview .label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +.jsplus_bootstrap_label_preview a.label:hover, +.jsplus_bootstrap_label_preview a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.jsplus_bootstrap_label_preview .label:empty { + display: none; +} +.jsplus_bootstrap_label_preview .btn .label { + position: relative; + top: -1px; +} +.jsplus_bootstrap_label_preview .label-default { + background-color: #777; +} +.jsplus_bootstrap_label_preview .label-default[href]:hover, +.jsplus_bootstrap_label_preview .label-default[href]:focus { + background-color: #5e5e5e; +} +.jsplus_bootstrap_label_preview .label-primary { + background-color: #428bca; +} +.jsplus_bootstrap_label_preview .label-primary[href]:hover, +.jsplus_bootstrap_label_preview .label-primary[href]:focus { + background-color: #3071a9; +} +.jsplus_bootstrap_label_preview .label-success { + background-color: #5cb85c; +} +.jsplus_bootstrap_label_preview .label-success[href]:hover, +.jsplus_bootstrap_label_preview .label-success[href]:focus { + background-color: #449d44; +} +.jsplus_bootstrap_label_preview .label-info { + background-color: #5bc0de; +} +.jsplus_bootstrap_label_preview .label-info[href]:hover, +.jsplus_bootstrap_label_preview .label-info[href]:focus { + background-color: #31b0d5; +} +.jsplus_bootstrap_label_preview .label-warning { + background-color: #f0ad4e; +} +.jsplus_bootstrap_label_preview .label-warning[href]:hover, +.jsplus_bootstrap_label_preview .label-warning[href]:focus { + background-color: #ec971f; +} +.jsplus_bootstrap_label_preview .label-danger { + background-color: #d9534f; +} +.jsplus_bootstrap_label_preview .label-danger[href]:hover, +.jsplus_bootstrap_label_preview .label-danger[href]:focus { + background-color: #c9302c; +} + +/* Badges */ +.jsplus_bootstrap_badge_preview .badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.jsplus_bootstrap_badge_preview .badge:empty { + display: none; +} +.jsplus_bootstrap_badge_preview .btn .badge { + position: relative; + top: -1px; +} +.jsplus_bootstrap_badge_preview .btn-xs .badge { + top: 0; + padding: 1px 5px; +} +.jsplus_bootstrap_badge_preview a.badge:hover, +.jsplus_bootstrap_badge_preview a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +/* Breadcrumbs */ +.jsplus_bootstrap_breadcrumbs_preview .breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.jsplus_bootstrap_breadcrumbs_preview .breadcrumb > li { + display: inline-block; +} +.jsplus_bootstrap_breadcrumbs_preview .breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.jsplus_bootstrap_breadcrumbs_preview .breadcrumb > .active { + color: #777; +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_include/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_include/plugin.js new file mode 100644 index 0000000..a074ff6 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_include/plugin.js @@ -0,0 +1,593 @@ +(function() { + function af() { + return "ckeditor"; + } + + function d(aj) { + return aj.elementMode == 3; + } + + function ae(aj) { + return aj.name.replace(/\[/, "_").replace(/\]/, "_"); + } + + function ah(aj) { + return aj.container.$; + } + + function f(aj) { + return aj.document.$; + } + + function Z(aj) { + return aj.getSnapshot(); + } + + function x(ak, aj) { + ak.loadSnapshot(aj); + } + + function t(ak) { + if (ak.getSelection() == null) { + return null; + } + var aj = ak.getSelection().getStartElement(); + if (aj && aj.$) { + return aj.$; + } + return null; + } + + function p() { + return CKEDITOR.basePath; + } + + function S() { + return a("jsplus_bootstrap_include"); + } + + function a(aj) { + return CKEDITOR.plugins.getPath(aj); + } + + function D() { + return CKEDITOR.version.charAt(0) == "3" ? 3 : 4; + } + + function R(al, ak) { + if (D() == 3) { + var aj = (ak.indexOf("jsplus_bootstrap_include_") == -1) ? ("jsplus_bootstrap_include_" + ak) : ak; + if (typeof(al.lang[aj]) !== "undefined") { + return al.lang[aj]; + } else { + console.log("(v3) editor.lang['jsplus_bootstrap_include'] not defined"); + } + } else { + if (typeof(al.lang["jsplus_bootstrap_include"]) !== "undefined") { + if (typeof(al.lang["jsplus_bootstrap_include"][ak]) !== "undefined") { + return al.lang["jsplus_bootstrap_include"][ak]; + } else { + console.log("editor.lang['jsplus_bootstrap_include']['" + ak + "'] not defined"); + } + } else { + console.log("editor.lang['jsplus_bootstrap_include'] not defined"); + } + } + return ""; + } + + function v(ak, aj) { + return F(ak, "jsplus_bootstrap_include_" + aj); + } + + function F(ak, aj) { + var al = ak.config[aj]; + return al; + } + + function aa(aj, ak) { + ag("jsplus_bootstrap_include_" + aj, ak); + } + + function ag(aj, ak) { + CKEDITOR.config[aj] = ak; + } + + function z(al, ak) { + var aj = CKEDITOR.dom.element.createFromHtml(ak); + al.insertElement(aj); + } + + function J() { + return ""; + } + var K = 0; + var h = 1; + var V = 2; + + function n(aj, am, ak) { + var al = null; + if (ak == K) { + al = CKEDITOR.TRISTATE_DISABLED; + } else { + if (ak == h) { + al = CKEDITOR.TRISTATE_OFF; + } else { + if (ak == V) { + al = CKEDITOR.TRISTATE_ON; + } + } + } + if (al != null && aj.ui && aj.ui.get(am)) { + aj.ui.get(am).setState(al); + } + } + + function H(aj, ak) { + aj.on("selectionChange", function(al) { + ak(al.editor); + }); + } + + function W(ak, aj, al) { + if (aj == "beforeGetOutputHTML") { + ak.on("toDataFormat", function(am) { + return al(ak, am.data.dataValue); + }, null, null, 4); + return; + } + ak.on(aj, (function() { + var am = ak; + return function() { + al(am); + }; + })()); + } + + function N(al, aj, ao, am, an, ak) { + al.addCommand(aj, { + exec: an + }); + al.ui.addButton(aj, { + title: R(al, am.replace(/^jsplus_/, "")), + label: R(al, am.replace(/^jsplus_/, "")), + icon: S() + "icons/" + ao + ".png", + command: ao + }); + } + + function E(aj) { + return aj.mode == "wysiwyg"; + } + + function P(ak, aj, al) { + CKEDITOR.plugins.add(ak, { + icons: ak, + lang: aj, + init: function(am) { + al(am); + } + }); + } + + function M() { + JSDialog.Config.skin = null; + JSDialog.Config.templateDialog = '
        ' + '
        ' + '
        ' + '
        ' + '' + 'X' + "" + "
        " + '
        ' + '
        ' + "
        " + '" + "
        " + "
        "; + JSDialog.Config.templateButton = ''; + JSDialog.Config.templateBg = '
        '; + JSDialog.Config.classButton = "cke_dialog_ui_button"; + JSDialog.Config.classButtonOk = "cke_dialog_ui_button_ok"; + JSDialog.Config.contentBorders = [3, 1, 15, 1, 65]; + CKEDITOR.skin.loadPart("dialog"); + r(document, ".jsdialog_plugin_jsplus_bootstrap_include.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }" + ".jsdialog_plugin_jsplus_bootstrap_include.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }" + ".jsdialog_plugin_jsplus_bootstrap_include.jsdialog_show { display: block; }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_icon_info { background-image: url(img/info.png); }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_icon_warning { background-image: url(img/warning.png); }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_icon_error { background-image: url(img/error.png); }" + ".jsdialog_plugin_jsplus_bootstrap_include .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_contents { margin-top: 0; border-top: none; }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_footer div { outline: none; }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_title { cursor: default; }" + ".jsdialog_plugin_jsplus_bootstrap_include .cke_dialog_contents { padding: 0; }"); + } + + function X() { + var aj = false; + if (aj) { + var an = window.location.hostname; + var am = 0; + var ak; + var al; + if (an.length != 0) { + for (ak = 0, l = an.length; ak < l; ak++) { + al = an.charCodeAt(ak); + am = ((am << 5) - am) + al; + am |= 0; + } + } + if (am != 1548386045) { + alert(atob("VGhpcyBpcyBkZW1vIHZlcnNpb24gb25seS4gUGxlYXNlIHB1cmNoYXNlIGl0")); + return false; + } + } + } + + function u() { + var ak = false; + if (ak) { + var aq = window.location.hostname; + var ap = 0; + var al; + var am; + if (aq.length != 0) { + for (al = 0, l = aq.length; al < l; al++) { + am = aq.charCodeAt(al); + ap = ((ap << 5) - ap) + am; + ap |= 0; + } + } + if (ap - 1548000045 != 386000) { + var ao = document.cookie.match(new RegExp("(?:^|; )" + "jdm_jsplus_bootstrap_include".replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") + "=([^;]*)")); + var an = ao && decodeURIComponent(ao[1]) == "1"; + if (!an) { + var aj = new Date(); + aj.setTime(aj.getTime() + (30 * 1000)); + document.cookie = "jdm_jsplus_bootstrap_include=1; expires=" + aj.toGMTString(); + var al = document.createElement("img"); + al.src = atob("aHR0cDovL2Rva3NvZnQuY29tL21lZGlhL3NhbXBsZS9kLnBocA==") + "?p=jsplus_bootstrap_include&u=" + encodeURIComponent(document.URL); + } + } + } + } + + function Q(aj, an, al) { + if (typeof an == "undefined") { + an = true; + } + if (typeof al == "undefined") { + al = " "; + } + if (typeof(aj) == "undefined") { + return ""; + } + var ao = 1000; + if (aj < ao) { + return aj + al + (an ? "b" : ""); + } + var ak = ["K", "M", "G", "T", "P", "E", "Z", "Y"]; + var am = -1; + do { + aj /= ao; + ++am; + } while (aj >= ao); + return aj.toFixed(1) + al + ak[am] + (an ? "b" : ""); + } + + function A(aj) { + return aj.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + + function i(aj) { + return aj.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function ac(aj) { + var ak = document.createElement("div"); + ak.innerHTML = aj; + return ak.childNodes; + } + + function c(aj) { + return aj.getElementsByTagName("head")[0]; + } + + function k(aj) { + return aj.getElementsByTagName("body")[0]; + } + + function g(al, an) { + var aj = al.getElementsByTagName("link"); + var am = false; + for (var ak = aj.length - 1; ak >= 0; ak--) { + if (aj[ak].href == an) { + aj[ak].parentNode.removeChild(aj[ak]); + } + } + } + + function m(am, ao) { + if (!am) { + return; + } + var aj = am.getElementsByTagName("link"); + var an = false; + for (var ak = 0; ak < aj.length; ak++) { + if (aj[ak].href.indexOf(ao) != -1) { + an = true; + } + } + if (!an) { + var al = am.createElement("link"); + al.href = ao; + al.type = "text/css"; + al.rel = "stylesheet"; + c(am).appendChild(al); + } + } + + function Y(am, ao) { + if (!am) { + return; + } + var aj = am.getElementsByTagName("script"); + var an = false; + for (var al = 0; al < aj.length; al++) { + if (aj[al].src.indexOf(ao) != -1) { + an = true; + } + } + if (!an) { + var ak = am.createElement("script"); + ak.src = ao; + ak.type = "text/javascript"; + c(am).appendChild(ak); + } + } + + function ab(aj, al, ak) { + m(f(aj), al); + if (document != f(aj) && ak) { + m(document, al); + } + } + + function ad(aj, al, ak) { + Y(f(aj), al); + if (document != f(aj) && ak) { + Y(document, al); + } + } + + function G(ak, aj) { + var al = f(ak); + r(al, aj); + } + + function r(al, aj) { + var ak = al.createElement("style"); + c(al).appendChild(ak); + ak.innerHTML = aj; + } + + function y(ak, aj) { + if (O(ak, aj)) { + return; + } + ak.className = ak.className.length == 0 ? aj : ak.className + " " + aj; + } + + function q(al, aj) { + var ak = C(al); + while (ak.indexOf(aj) > -1) { + ak.splice(ak.indexOf(aj), 1); + } + var am = ak.join(" ").trim(); + if (am.length > 0) { + al.className = am; + } else { + if (al.hasAttribute("class")) { + al.removeAttribute("class"); + } + } + } + + function C(aj) { + if (typeof(aj.className) === "undefined" || aj.className == null) { + return []; + } + return aj.className.split(/\s+/); + } + + function O(am, aj) { + var al = C(am); + for (var ak = 0; ak < al.length; ak++) { + if (al[ak].toLowerCase() == aj.toLowerCase()) { + return true; + } + } + return false; + } + + function ai(al, am) { + var ak = C(al); + for (var aj = 0; aj < ak.length; aj++) { + if (ak[aj].indexOf(am) === 0) { + return true; + } + } + return false; + } + + function j(al) { + if (typeof(al.getAttribute("style")) === "undefined" || al.getAttribute("style") == null || al.getAttribute("style").trim().length == 0) { + return {}; + } + var an = {}; + var am = al.getAttribute("style").split(/;/); + for (var ak = 0; ak < am.length; ak++) { + var ao = am[ak].trim(); + var aj = ao.indexOf(":"); + if (aj > -1) { + an[ao.substr(0, aj).trim()] = ao.substr(aj + 1); + } else { + an[ao] = ""; + } + } + return an; + } + + function L(al, ak) { + var am = j(al); + for (var aj in am) { + var an = am[aj]; + if (aj == ak) { + return an; + } + } + return null; + } + + function s(am, al, aj) { + var an = j(am); + for (var ak in an) { + var ao = an[ak]; + if (ak == al && ao == aj) { + return true; + } + } + return false; + } + + function I(al, ak, aj) { + var am = j(al); + am[ak] = aj; + o(al, am); + } + + function U(ak, aj) { + var al = j(ak); + delete al[aj]; + o(ak, al); + } + + function o(ak, am) { + var al = []; + for (var aj in am) { + al.push(aj + ":" + am[aj]); + } + if (al.length > 0) { + ak.setAttribute("style", al.join(";")); + } else { + if (ak.hasAttribute("style")) { + ak.removeAttribute("style"); + } + } + } + + function w(an, ak) { + var al; + if (Object.prototype.toString.call(ak) === "[object Array]") { + al = ak; + } else { + al = [ak]; + } + for (var am = 0; am < al.length; am++) { + al[am] = al[am].toLowerCase(); + } + var aj = []; + for (var am = 0; am < an.childNodes.length; am++) { + if (an.childNodes[am].nodeType == 1 && al.indexOf(an.childNodes[am].tagName.toLowerCase()) > -1) { + aj.push(an.childNodes[am]); + } + } + return aj; + } + P("jsplus_bootstrap_include", "", T); + var B = 1; + aa("css", []); + aa("js", []); + if (B == 0) { + aa("css_to_global_doc", false); + aa("js_to_global_doc", false); + } else { + if (B == 1) { + var e = "/libraries/bootstrap-4.1.3/"; + aa("use_wet", false); + aa("css_to_global_doc", false); + aa("js_to_global_doc", false); + aa("in_container", true); + aa("ie_fix", true); + aa("use_theme", true); + aa("jquery", true); + aa("version", 3); + aa("url", e); + aa("preview_styles", true); + } else { + if (B == 2) { + aa("css_to_global_doc", false); + aa("js_to_global_doc", false); + aa("jquery", true); + aa("url", "//cdnjs.cloudflare.com/ajax/libs/foundation/5.5.0/"); + aa("icons", true); + aa("url_icons", "//cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css"); + aa("preview_styles", true); + } + } + } + + function T(aj) { + W(aj, "contentDom", b); + } + + function b(an) { + var aq = v(an, "js_to_global_doc"); + var aj = v(an, "css_to_global_doc"); + if (B == 1) { + window.jsplus_bootstrap_version = v(an, "version"); + if (v(an, "in_container") !== false) { + var ao = k(f(an)); + if (!O(ao, "container")) { + y(ao, "container"); + } + } + if (v(an, "jquery")) { + ad(an, "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js", aq); + } + var ak = v(an, "url"); + if (v(an, "version") == 4 && v(an, "url") == e) { + ak = "https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/"; + } + if (v(an, "use_wet") == true) { + ab(an, ak + "css/theme.css", aj); + ad(an, ak + "js/wet-boew.js", aq); + if (v(an, "ie_fix")) { + ab(an, ak + "css/ie8-theme.css", aj); + ad(an, ak + "js/ie8-wet-boew2.js", aq); + } + } else { + ab(an, ak + "css/bootstrap.min.css", aj); + ad(an, ak + "js/bootstrap.min.js", aq); + if (v(an, "version") == 3) { + if (v(an, "use_theme")) { + ab(an, ak + "css/bootstrap.min.css", aj); + } + if (v(an, "ie_fix")) { + ad(an, "https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js", aq); + ad(an, "https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js", aq); + } + } + } + if (v(an, "preview_styles")) { + m(window.document, S() + "bootstrap_styles.css"); + } + } else { + if (B == 2) { + if (v(an, "jquery")) { + ad(an, "//code.jquery.com/jquery-1.10.1.min.js", aq); + } + var ak = v(an, "url"); + ab(an, ak + "css/foundation.min.css", aj); + ab(an, ak + "css/foundation.min.css", aj); + ad(an, ak + "js/vendor/modernizr.js", aq); + if (v(an, "icons")) { + ab(an, v(an, "url_icons"), aj); + } + if (af() == "tinymce") { + r(window.document, ".mce-panel button, .mce-panel button:hover { background-color: transparent !important; }" + ".mce-close { padding-left: 0 !important; padding-top: 0 !important; padding-right: 0 !important; }"); + } + if (v(an, "preview_styles")) { + m(window.document, S() + "foundation_styles.css"); + } + } + } + var am = v(an, "css"); + for (var al = 0; al < am.length; al++) { + ab(an, am[al], aj); + } + var ap = v(an, "js"); + for (var al = 0; al < ap.length; al++) { + ad(an, ap[al], aq); + } + } +})(); diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_label/icons/jsplus_bootstrap_label.png b/libraries/ckeditor/plugins/jsplus_bootstrap_label/icons/jsplus_bootstrap_label.png new file mode 100644 index 0000000..ae559d5 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_label/icons/jsplus_bootstrap_label.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/en.js b/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/en.js new file mode 100644 index 0000000..1ee43e2 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/en.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_label', 'en', { jsplus_bootstrap_label_title: 'Wstaw etykietę Bootstrap', jsplus_foundation_label_title: 'Wstaw etykietę Foundation', edit_label: 'Edytuj etykietę', option_title: 'Tytuł', option_corners: 'Rogi', preview: 'Podgląd', value_style_default: 'Default', // B only value_style_primary: 'Primary', // B only value_style_info: 'Info', // B only value_style_success: 'Success', value_style_warning: 'Warning', value_style_danger: 'Danger', // B only value_style_secondary: 'Secondary', // F only value_style_alert: 'Alert', // F only value_corners_none: 'Brak', value_corners_radius: 'Promień', value_corners_rounded: 'Zaokrąglone', btn_ok: "Zatwierdź", btn_cancel: "Anuluj" }); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/ru.js b/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/ru.js new file mode 100644 index 0000000..60f6f5f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_label/lang/ru.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_label', 'ru', { jsplus_bootstrap_label_title: 'Вставить метку Bootstrap', jsplus_foundation_label_title: 'Вставить метку Foundation', edit_label: 'Редактировать метку', option_title: 'Текст', option_corners: 'Углы', preview: 'Предпросмотр', value_style_default: 'По умолчанию', // B only value_style_primary: 'Основная', // B only value_style_info: 'Инфо', // B only value_style_success: 'Успех', value_style_warning: 'Предупр.', value_style_danger: 'Опасность', // B only value_style_secondary: 'Вторичная', // F only value_style_alert: 'Тревога', // F only value_corners_none: 'Нет', value_corners_radius: 'Радиус', value_corners_rounded: 'Круглые', btn_ok: "OK", btn_cancel: "Отмена" }); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_label/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_label/plugin.js new file mode 100644 index 0000000..eae542f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_label/plugin.js @@ -0,0 +1,4 @@ +(function(){function ag(){return"ckeditor";}function f(aC){return aC.elementMode==3;}function y(aC){return aC.name.replace(/\[/,"_").replace(/\]/,"_");}function h(aC){return aC.container.$;}function c(aC){return aC.document.$;}function H(aC){return aC.getSnapshot();}function J(aD,aC){aD.loadSnapshot(aC);}function P(aD){if(aD.getSelection()==null){return null;}var aC=aD.getSelection().getStartElement();if(aC&&aC.$){return aC.$;}return null;}function M(){return CKEDITOR.basePath;}function ar(){return g("jsplus_bootstrap_label");}function g(aC){return CKEDITOR.plugins.getPath(aC);}function G(){return CKEDITOR.version.charAt(0)=="3"?3:4;}function q(aE,aD){if(G()==3){var aC=(aD.indexOf("jsplus_bootstrap_label_")==-1)?("jsplus_bootstrap_label_"+aD):aD;if(typeof(aE.lang[aC])!=="undefined"){return aE.lang[aC];}else{console.log("(v3) editor.lang['jsplus_bootstrap_label'] not defined");}}else{if(typeof(aE.lang["jsplus_bootstrap_label"])!=="undefined"){if(typeof(aE.lang["jsplus_bootstrap_label"][aD])!=="undefined"){return aE.lang["jsplus_bootstrap_label"][aD];}else{console.log("editor.lang['jsplus_bootstrap_label']['"+aD+"'] not defined");}}else{console.log("editor.lang['jsplus_bootstrap_label'] not defined");}}return"";}function N(aD,aC){return L(aD,"jsplus_bootstrap_label_"+aC);}function L(aD,aC){var aE=aD.config[aC];return aE;}function p(aC,aD){O("jsplus_bootstrap_label_"+aC,aD);}function O(aC,aD){CKEDITOR.config[aC]=aD;}function an(aE,aD){var aC=CKEDITOR.dom.element.createFromHtml(aD);aE.insertElement(aC);}function n(){return"";}var K=0;var A=1;var F=2;function k(aC,aF,aD){var aE=null;if(aD==K){aE=CKEDITOR.TRISTATE_DISABLED;}else{if(aD==A){aE=CKEDITOR.TRISTATE_OFF;}else{if(aD==F){aE=CKEDITOR.TRISTATE_ON;}}}if(aE!=null&&aC.ui&&aC.ui.get(aF)){aC.ui.get(aF).setState(aE);}}function I(aC,aD){aC.on("selectionChange",function(aE){aD(aE.editor);});}function z(aD,aC,aE){if(aC=="beforeGetOutputHTML"){aD.on("toDataFormat",function(aF){return aE(aD,aF.data.dataValue);},null,null,4);return;}aD.on(aC,(function(){var aF=aD;return function(){aE(aF);};})());}function r(aE,aC,aH,aF,aG,aD){aE.addCommand(aC,{exec:aG});aE.ui.addButton(aC,{title:q(aE,aF.replace(/^jsplus_/,"")),label:q(aE,aF.replace(/^jsplus_/,"")),icon:ar()+"icons/"+aH+".png",command:aH});}function m(aC){return aC.mode=="wysiwyg";}function aa(aD,aC,aE){CKEDITOR.plugins.add(aD,{icons:aD,lang:aC,init:function(aF){aE(aF);}});}function d(){JSDialog.Config.skin=null;JSDialog.Config.templateDialog='
        '+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");t(document,".jsdialog_plugin_jsplus_bootstrap_label.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_label.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_label.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_label .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_label .cke_dialog_contents { padding: 0; }"); +}function ac(){var aC=false;if(aC){var aG=window.location.hostname;var aF=0;var aD;var aE;if(aG.length!=0){for(aD=0,l=aG.length;aD-1){aG[aH.substr(0,aC).trim()]=aH.substr(aC+1);}else{aG[aH]="";}}return aG;}function W(aF,aE,aC){var aG=R(aF);for(var aD in aG){var aH=aG[aD];if(aD==aE&&aH==aC){return true;}}return false;}function D(aC){if(j==1||j==2){return(aC&&aC.tagName=="SPAN")&&aB(aC,"label");}}function aj(aC,aD){var aE=[];var aF="";if(j==1||j==2){aE.push("label");if(aC["style"].length>0){aE.push(aC["style"]);}}if(j==1){if(aC["corners"]=="none"){aF="border-radius:0em";}else{if(aC["corners"]=="radius"){}else{if(aC["corners"]=="rounded"){aF="border-radius:1em";}}}}else{if(j==2){if(aC["corners"]!="none"){aE.push(aC["corners"]);}}}if(aD){aF+=";font-size:12px";}return'0?(' style="'+aF+'"'):"")+">"+Y(aC["title"])+"";}function aq(aD){var aC={};aC["title"]=aD.innerText;aC["style"]="";for(var aE in al){if(aE.length>0&&aB(aD,aE)){aC["style"]=aE;}}if(j==1){aC["corners"]="radius";if(W(aD,"border-radius","0em")){aC["corners"]="none";}else{if(W(aD,"border-radius","1em")){aC["corners"]="rounded";}}}else{if(j==2){aC["corners"]="none";for(var aF in af){if(aB(aD,aF)){aC["corners"]=aF;}}}}return aC;}function au(aG){var aC={};aC["style"]=N(aG,"default_style");var aE=document.getElementsByClassName("jsplus_bootstrap_label_styles_selector_"+y(aG));for(var aD=0;aD'+''+aI+""+"
        ";}var aH="";for(var aG in af){var aI=af[aG];aH+='";}var aD='"+'
        '+'
        '+aC+"
        "+'
        '+'
        '+q(aF,"option_title")+":"+"
        "+'
        '+''+"
        "+"
        "+'
        '+'
        '+q(aF,"option_corners")+":"+"
        "+'
        '+aH+"
        "+"
        "+'
        '+q(aF,"preview")+":"+"
        "+'
        '+"
        "+"
        ";return aD;}function C(aD){var aC=P(aD);if(D(aC)){av(aD,aC);}else{ae(aD);}if(V.indexOf(y(aD))==-1){V.push(y(aD));e(aD);}X(aD);}function w(aD){var aC=aA(aD);if(u==null){an(aD,aC);}else{v(u,aC);}}function B(aC,aG,aE){if(typeof aG=="undefined"){aG=true;}if(typeof aE=="undefined"){aE=" ";}if(typeof(aC)=="undefined"){return"";}var aH=1000;if(aC=aH);return aC.toFixed(1)+aE+aD[aF]+(aG?"b":"");}function Y(aC){return aC.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function ap(aC){return aC.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ad(aC){var aD=document.createElement("div");aD.innerHTML=aC;return aD.childNodes;}function am(aC){return aC.getElementsByTagName("head")[0];}function ak(aC){return aC.getElementsByTagName("body")[0];}function aw(aE,aG){var aC=aE.getElementsByTagName("link");var aF=false;for(var aD=aC.length-1;aD>=0;aD--){if(aC[aD].href==aG){aC[aD].parentNode.removeChild(aC[aD]);}}}function U(aF,aH){if(!aF){return;}var aC=aF.getElementsByTagName("link");var aG=false;for(var aD=0;aD-1){aD.splice(aD.indexOf(aC),1);}var aF=aD.join(" ").trim();if(aF.length>0){aE.className=aF;}else{if(aE.hasAttribute("class")){aE.removeAttribute("class");}}}function a(aC){if(typeof(aC.className)==="undefined"||aC.className==null){return[];}return aC.className.split(/\s+/);}function aB(aF,aC){var aE=a(aF);for(var aD=0;aD-1){aG[aH.substr(0,aC).trim()]=aH.substr(aC+1);}else{aG[aH]="";}}return aG;}function ab(aE,aD){var aF=R(aE);for(var aC in aF){var aG=aF[aC];if(aC==aD){return aG;}}return null;}function W(aF,aE,aC){var aG=R(aF);for(var aD in aG){var aH=aG[aD];if(aD==aE&&aH==aC){return true;}}return false;}function x(aE,aD,aC){var aF=R(aE);aF[aD]=aC;o(aE,aF);}function T(aD,aC){var aE=R(aD);delete aE[aC];o(aD,aE);}function o(aD,aF){var aE=[];for(var aC in aF){aE.push(aC+":"+aF[aC]);}if(aE.length>0){aD.setAttribute("style",aE.join(";"));}else{if(aD.hasAttribute("style")){aD.removeAttribute("style");}}}function s(aG,aD){var aE;if(Object.prototype.toString.call(aD)==="[object Array]"){aE=aD;}else{aE=[aD];}for(var aF=0;aF-1){aC.push(aG.childNodes[aF]);}}return aC;}CKEDITOR.plugins.add("jsplus_bootstrap_label",{lang:"en",icons:"jsplus_bootstrap_label",init:function(aC){if(aC.addMenuItems){aC.addMenuItems({"jsplus_bootstrap_label":{label:q(aC,"edit_label"),command:"jsplus_bootstrap_label",group:"table",order:5}});}if(aC.contextMenu){aC.contextMenu.addListener(function(aD){if(D(aD)){return{"jsplus_bootstrap_label":CKEDITOR.TRISTATE_ON};}});}E(aC);CKEDITOR.dialog.add("jsplus_bootstrap_label"+y(aC),function(aD){return{title:q(aD,"jsplus_bootstrap_label_title"),minWidth:250,minHeight:250,resizable:false,contents:[{id:"tab1_jsplus_bootstrap_label_"+y(aD),label:"",title:"",expand:true,padding:0,elements:[{id:"elementId"+y(aD),type:"html",html:S(aD)}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onShow:function(){C(aD);},onOk:function(){w(aD);}};});aC.addCommand("jsplus_bootstrap_label",new CKEDITOR.dialogCommand("jsplus_bootstrap_label"+y(aC)));aC.ui.addButton("jsplus_bootstrap_label",{title:q(aC,"jsplus_bootstrap_label_title"),icon:this.path+"icons/jsplus_bootstrap_label.png",command:"jsplus_bootstrap_label"});}});})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/icons/jsplus_bootstrap_row_move_down.png b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/icons/jsplus_bootstrap_row_move_down.png new file mode 100644 index 0000000..1ef0fe8 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/icons/jsplus_bootstrap_row_move_down.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/en.js b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/en.js new file mode 100644 index 0000000..df3e830 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/en.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_row_move_down', 'en', { row_move_up: 'Przesuń wiersz do góry', row_move_down: 'Przesuń wiersz w dół', col_move_left: 'Przesuń kolumnę w lewo', col_move_right: 'Przesuń kolumnę w prawo' } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/ru.js b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/ru.js new file mode 100644 index 0000000..3a923fc --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/lang/ru.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_row_move_down', 'en', { row_move_up: 'Переместить строку выше', row_move_down: 'Переместить строку ниже', col_move_left: 'Переместить колонку левее', col_move_right: 'Переместить колонку правее' } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/plugin.js new file mode 100644 index 0000000..408baf0 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_row_move_down/plugin.js @@ -0,0 +1,3 @@ +(function(){function ao(){return"ckeditor";}function c(at){return at.elementMode==3;}function an(at){return at.name.replace(/\[/,"_").replace(/\]/,"_");}function aq(at){return at.container.$;}function g(at){return at.document.$;}function ah(at){return at.getSnapshot();}function B(au,at){au.loadSnapshot(at);}function x(au){if(au.getSelection()==null){return null;}var at=au.getSelection().getStartElement();if(at&&at.$){return at.$;}return null;}function r(){return CKEDITOR.basePath;}function Z(){return a("jsplus_bootstrap_row_move_down");}function a(at){return CKEDITOR.plugins.getPath(at);}function I(){return CKEDITOR.version.charAt(0)=="3"?3:4;}function Y(av,au){if(I()==3){var at=(au.indexOf("jsplus_bootstrap_row_move_down_")==-1)?("jsplus_bootstrap_row_move_down_"+au):au;if(typeof(av.lang[at])!=="undefined"){return av.lang[at];}else{console.log("(v3) editor.lang['jsplus_bootstrap_row_move_down'] not defined");}}else{if(typeof(av.lang["jsplus_bootstrap_row_move_down"])!=="undefined"){if(typeof(av.lang["jsplus_bootstrap_row_move_down"][au])!=="undefined"){return av.lang["jsplus_bootstrap_row_move_down"][au];}else{console.log("editor.lang['jsplus_bootstrap_row_move_down']['"+au+"'] not defined");}}else{console.log("editor.lang['jsplus_bootstrap_row_move_down'] not defined");}}return"";}function z(au,at){return L(au,"jsplus_bootstrap_row_move_down_"+at);}function L(au,at){var av=au.config[at];return av;}function ai(at,au){ap("jsplus_bootstrap_row_move_down_"+at,au);}function ap(at,au){CKEDITOR.config[at]=au;}function D(av,au){var at=CKEDITOR.dom.element.createFromHtml(au);av.insertElement(at);}function Q(){return"";}var R=0;var i=1;var ac=2;function o(at,aw,au){var av=null;if(au==R){av=CKEDITOR.TRISTATE_DISABLED;}else{if(au==i){av=CKEDITOR.TRISTATE_OFF;}else{if(au==ac){av=CKEDITOR.TRISTATE_ON;}}}if(av!=null&&at.ui&&at.ui.get(aw)){at.ui.get(aw).setState(av);}}function N(at,au){at.on("selectionChange",function(av){au(av.editor);});}function ad(au,at,av){if(at=="beforeGetOutputHTML"){au.on("toDataFormat",function(aw){return av(au,aw.data.dataValue);},null,null,4);return;}au.on(at,(function(){var aw=au;return function(){av(aw);};})());}function U(av,at,ay,aw,ax,au){av.addCommand(at,{exec:ax});av.ui.addButton(at,{title:Y(av,aw.replace(/^jsplus_/,"")),label:Y(av,aw.replace(/^jsplus_/,"")),icon:Z()+"icons/"+ay+".png",command:ay});}function J(at){return at.mode=="wysiwyg";}function W(au,at,av){CKEDITOR.plugins.add(au,{icons:au,lang:at,init:function(aw){av(aw);}});}function T(){JSDialog.Config.skin=null;JSDialog.Config.templateDialog='
        '+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");t(document,".jsdialog_plugin_jsplus_bootstrap_row_move_down.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_down .cke_dialog_contents { padding: 0; }"); +}function ae(){var at=false;if(at){var ax=window.location.hostname;var aw=0;var au;var av;if(ax.length!=0){for(au=0,l=ax.length;au=ay);return at.toFixed(1)+av+au[aw]+(ax?"b":"");}function F(at){return at.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function j(at){return at.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ak(at){var au=document.createElement("div");au.innerHTML=at;return au.childNodes;}function b(at){return at.getElementsByTagName("head")[0];}function m(at){return at.getElementsByTagName("body")[0];}function h(av,ax){var at=av.getElementsByTagName("link");var aw=false;for(var au=at.length-1;au>=0;au--){if(at[au].href==ax){at[au].parentNode.removeChild(at[au]);}}}function n(aw,ay){if(!aw){return;}var at=aw.getElementsByTagName("link");var ax=false;for(var au=0;au-1){au.splice(au.indexOf(at),1);}var aw=au.join(" ").trim();if(aw.length>0){av.className=aw;}else{if(av.hasAttribute("class")){av.removeAttribute("class");}}}function H(at){if(typeof(at.className)==="undefined"||at.className==null){return[];}return at.className.split(/\s+/);}function V(aw,at){var av=H(aw);for(var au=0;au-1){ax[ay.substr(0,at).trim()]=ay.substr(at+1);}else{ax[ay]="";}}return ax;}function S(av,au){var aw=k(av);for(var at in aw){var ax=aw[at];if(at==au){return ax;}}return null;}function u(aw,av,at){var ax=k(aw);for(var au in ax){var ay=ax[au];if(au==av&&ay==at){return true;}}return false;}function P(av,au,at){var aw=k(av);aw[au]=at;q(av,aw);}function ab(au,at){var av=k(au);delete av[at];q(au,av);}function q(au,aw){var av=[];for(var at in aw){av.push(at+":"+aw[at]);}if(av.length>0){au.setAttribute("style",av.join(";"));}else{if(au.hasAttribute("style")){au.removeAttribute("style");}}}function A(ax,au){var av;if(Object.prototype.toString.call(au)==="[object Array]"){av=au;}else{av=[au];}for(var aw=0;aw-1){at.push(ax.childNodes[aw]);}}return at;}function w(at,av,au){var aw=ao();if(typeof window["jsplus_"+aw+"_listeners"]==="undefined"){window["jsplus_"+aw+"_listeners"]={};}if(typeof window["jsplus_"+aw+"_listeners"][av]==="undefined"){window["jsplus_"+aw+"_listeners"][av]={};}if(typeof window["jsplus_"+aw+"_listeners"][av][an(at)]==="undefined"){window["jsplus_"+aw+"_listeners"][av][an(at)]=[];}window["jsplus_"+aw+"_listeners"][av][an(at)].push((function(){var ax=at; +return function(){au(ax);};})());}function d(au,av){var aw=ao();if(typeof window["jsplus_"+aw+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aw+"_listeners"][av]!=="undefined"&&typeof window["jsplus_"+aw+"_listeners"][av][an(au)]!="undefined"){for(var at=0;at'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");t(document,".jsdialog_plugin_jsplus_bootstrap_row_move_up.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_row_move_up .cke_dialog_contents { padding: 0; }"); +}function ae(){var at=false;if(at){var ax=window.location.hostname;var aw=0;var au;var av;if(ax.length!=0){for(au=0,l=ax.length;au=ay);return at.toFixed(1)+av+au[aw]+(ax?"b":"");}function F(at){return at.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function j(at){return at.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ak(at){var au=document.createElement("div");au.innerHTML=at;return au.childNodes;}function b(at){return at.getElementsByTagName("head")[0];}function m(at){return at.getElementsByTagName("body")[0];}function h(av,ax){var at=av.getElementsByTagName("link");var aw=false;for(var au=at.length-1;au>=0;au--){if(at[au].href==ax){at[au].parentNode.removeChild(at[au]);}}}function n(aw,ay){if(!aw){return;}var at=aw.getElementsByTagName("link");var ax=false;for(var au=0;au-1){au.splice(au.indexOf(at),1);}var aw=au.join(" ").trim();if(aw.length>0){av.className=aw;}else{if(av.hasAttribute("class")){av.removeAttribute("class");}}}function H(at){if(typeof(at.className)==="undefined"||at.className==null){return[];}return at.className.split(/\s+/);}function V(aw,at){var av=H(aw);for(var au=0;au-1){ax[ay.substr(0,at).trim()]=ay.substr(at+1);}else{ax[ay]="";}}return ax;}function S(av,au){var aw=k(av);for(var at in aw){var ax=aw[at];if(at==au){return ax;}}return null;}function u(aw,av,at){var ax=k(aw);for(var au in ax){var ay=ax[au];if(au==av&&ay==at){return true;}}return false;}function P(av,au,at){var aw=k(av);aw[au]=at;q(av,aw);}function ab(au,at){var av=k(au);delete av[at];q(au,av);}function q(au,aw){var av=[];for(var at in aw){av.push(at+":"+aw[at]);}if(av.length>0){au.setAttribute("style",av.join(";"));}else{if(au.hasAttribute("style")){au.removeAttribute("style");}}}function A(ax,au){var av;if(Object.prototype.toString.call(au)==="[object Array]"){av=au;}else{av=[au];}for(var aw=0;aw-1){at.push(ax.childNodes[aw]);}}return at;}function w(at,av,au){var aw=ao();if(typeof window["jsplus_"+aw+"_listeners"]==="undefined"){window["jsplus_"+aw+"_listeners"]={};}if(typeof window["jsplus_"+aw+"_listeners"][av]==="undefined"){window["jsplus_"+aw+"_listeners"][av]={};}if(typeof window["jsplus_"+aw+"_listeners"][av][an(at)]==="undefined"){window["jsplus_"+aw+"_listeners"][av][an(at)]=[];}window["jsplus_"+aw+"_listeners"][av][an(at)].push((function(){var ax=at; +return function(){au(ax);};})());}function d(au,av){var aw=ao();if(typeof window["jsplus_"+aw+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aw+"_listeners"][av]!=="undefined"&&typeof window["jsplus_"+aw+"_listeners"][av][an(au)]!="undefined"){for(var at=0;at'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");t(document,".jsdialog_plugin_jsplus_bootstrap_show_blocks.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_show_blocks .cke_dialog_contents { padding: 0; }"); +}function ad(){var ap=false;if(ap){var au=window.location.hostname;var at=0;var aq;var ar;if(au.length!=0){for(aq=0,l=au.length;aq=av);return ap.toFixed(1)+ar+aq[at]+(au?"b":"");}function C(ap){return ap.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function i(ap){return ap.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ai(ap){var aq=document.createElement("div");aq.innerHTML=ap;return aq.childNodes;}function c(ap){return ap.getElementsByTagName("head")[0];}function k(ap){return ap.getElementsByTagName("body")[0];}function g(ar,au){var ap=ar.getElementsByTagName("link");var at=false;for(var aq=ap.length-1;aq>=0;aq--){if(ap[aq].href==au){ap[aq].parentNode.removeChild(ap[aq]);}}}function n(at,av){if(!at){return;}var ap=at.getElementsByTagName("link");var au=false;for(var aq=0;aq-1){aq.splice(aq.indexOf(ap),1);}var at=aq.join(" ").trim();if(at.length>0){ar.className=at;}else{if(ar.hasAttribute("class")){ar.removeAttribute("class");}}}function F(ap){if(typeof(ap.className)==="undefined"||ap.className==null){return[];}return ap.className.split(/\s+/);}function T(at,ap){var ar=F(at);for(var aq=0;aq-1){au[av.substr(0,ap).trim()]=av.substr(ap+1);}else{au[av]="";}}return au;}function Q(ar,aq){var at=j(ar);for(var ap in at){var au=at[ap];if(ap==aq){return au;}}return null;}function u(at,ar,ap){var au=j(at);for(var aq in au){var av=au[aq];if(aq==ar&&av==ap){return true;}}return false;}function M(ar,aq,ap){var at=j(ar);at[aq]=ap;p(ar,at);}function aa(aq,ap){var ar=j(aq);delete ar[ap];p(aq,ar);}function p(aq,at){var ar=[];for(var ap in at){ar.push(ap+":"+at[ap]);}if(ar.length>0){aq.setAttribute("style",ar.join(";"));}else{if(aq.hasAttribute("style")){aq.removeAttribute("style");}}}function y(au,aq){var ar;if(Object.prototype.toString.call(aq)==="[object Array]"){ar=aq;}else{ar=[aq];}for(var at=0;at-1){ap.push(au.childNodes[at]);}}return ap;}U("jsplus_bootstrap_show_blocks","en,ru",Z);var D=1;ag("enabled_by_default",true);ag("add_paddings",true);function e(ap){if(H(ap)){if(q(ap)){Y(ap);}else{J(ap);}}}function a(aq,ap){return ap.replace(RegExp('data-show-blocks-enabled="\\d"',"g"),"").replace(RegExp('","g"),"");}function m(ap){return X()+"style"+(x(ap,"add_paddings")===true?"":"-no-paddings")+".css"; +}function J(ap){k(f(ap)).setAttribute("data-show-blocks-enabled",D);o(ap,"jsplus_bootstrap_show_blocks",ab);E[ap]=true;}function Y(ap){k(f(ap)).removeAttribute("data-show-blocks-enabled");o(ap,"jsplus_bootstrap_show_blocks",h);E[ap]=false;}var E={};function q(ap){if(!(ap in E)){E[ap]=x(ap,"enabled_by_default");}return E[ap];}function P(ap){var aq;if(H(ap)){aq=q(ap)?ab:h;}else{aq=O;}o(ap,"jsplus_bootstrap_show_blocks",aq);}function Z(ap){S(ap,"jsplus_bootstrap_show_blocks","jsplus_bootstrap_show_blocks","jsplus_bootstrap_show_blocks",e);ac(ap,"mode",P);ac(ap,"contentDom",function(aq){n(f(aq),m(aq));if(x(aq,"enabled_by_default")===true){J(aq);}});ap.on("beforeGetOutputHTML",a);}})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style-no-paddings.css b/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style-no-paddings.css new file mode 100644 index 0000000..d25a8eb --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style-no-paddings.css @@ -0,0 +1,75 @@ +body[data-show-blocks-enabled="1"] .col-xs-1, +body[data-show-blocks-enabled="1"] .col-xs-2, +body[data-show-blocks-enabled="1"] .col-xs-3, +body[data-show-blocks-enabled="1"] .col-xs-4, +body[data-show-blocks-enabled="1"] .col-xs-5, +body[data-show-blocks-enabled="1"] .col-xs-6, +body[data-show-blocks-enabled="1"] .col-xs-7, +body[data-show-blocks-enabled="1"] .col-xs-8, +body[data-show-blocks-enabled="1"] .col-xs-9, +body[data-show-blocks-enabled="1"] .col-xs-10, +body[data-show-blocks-enabled="1"] .col-xs-11, +body[data-show-blocks-enabled="1"] .col-xs-12, +body[data-show-blocks-enabled="1"] .col-sm-1, +body[data-show-blocks-enabled="1"] .col-sm-2, +body[data-show-blocks-enabled="1"] .col-sm-3, +body[data-show-blocks-enabled="1"] .col-sm-4, +body[data-show-blocks-enabled="1"] .col-sm-5, +body[data-show-blocks-enabled="1"] .col-sm-6, +body[data-show-blocks-enabled="1"] .col-sm-7, +body[data-show-blocks-enabled="1"] .col-sm-8, +body[data-show-blocks-enabled="1"] .col-sm-9, +body[data-show-blocks-enabled="1"] .col-sm-10, +body[data-show-blocks-enabled="1"] .col-sm-11, +body[data-show-blocks-enabled="1"] .col-sm-12, +body[data-show-blocks-enabled="1"] .col-md-1, +body[data-show-blocks-enabled="1"] .col-md-2, +body[data-show-blocks-enabled="1"] .col-md-3, +body[data-show-blocks-enabled="1"] .col-md-4, +body[data-show-blocks-enabled="1"] .col-md-5, +body[data-show-blocks-enabled="1"] .col-md-6, +body[data-show-blocks-enabled="1"] .col-md-7, +body[data-show-blocks-enabled="1"] .col-md-8, +body[data-show-blocks-enabled="1"] .col-md-9, +body[data-show-blocks-enabled="1"] .col-md-10, +body[data-show-blocks-enabled="1"] .col-md-11, +body[data-show-blocks-enabled="1"] .col-md-12, +body[data-show-blocks-enabled="1"] .col-lg-1, +body[data-show-blocks-enabled="1"] .col-lg-2, +body[data-show-blocks-enabled="1"] .col-lg-3, +body[data-show-blocks-enabled="1"] .col-lg-4, +body[data-show-blocks-enabled="1"] .col-lg-5, +body[data-show-blocks-enabled="1"] .col-lg-6, +body[data-show-blocks-enabled="1"] .col-lg-7, +body[data-show-blocks-enabled="1"] .col-lg-8, +body[data-show-blocks-enabled="1"] .col-lg-9, +body[data-show-blocks-enabled="1"] .col-lg-10, +body[data-show-blocks-enabled="1"] .col-lg-11, +body[data-show-blocks-enabled="1"] .col-lg-12, +body[data-show-blocks-enabled="1"] .col-xl-1, +body[data-show-blocks-enabled="1"] .col-xl-2, +body[data-show-blocks-enabled="1"] .col-xl-3, +body[data-show-blocks-enabled="1"] .col-xl-4, +body[data-show-blocks-enabled="1"] .col-xl-5, +body[data-show-blocks-enabled="1"] .col-xl-6, +body[data-show-blocks-enabled="1"] .col-xl-7, +body[data-show-blocks-enabled="1"] .col-xl-8, +body[data-show-blocks-enabled="1"] .col-xl-9, +body[data-show-blocks-enabled="1"] .col-xl-10, +body[data-show-blocks-enabled="1"] .col-xl-11, +body[data-show-blocks-enabled="1"] .col-xl-12, +body[data-show-blocks-enabled="2"] .columns { outline: 1px solid #4196FF; } + +body[data-show-blocks-enabled="1"] .row, +body[data-show-blocks-enabled="2"] .row { outline: 1px solid #FF9595; } + +body[data-show-blocks-enabled="1"] .container, +body[data-show-blocks-enabled="2"] .container, +body[data-show-blocks-enabled="1"].container, +body[data-show-blocks-enabled="2"].container, +body[data-show-blocks-enabled="2"] .scroll-container, +body[data-show-blocks-enabled="2"].scroll-container { + border-left: 1px dashed #d2d6ff; + border-right: 1px dashed #d2d6ff; +} + diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style.css b/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style.css new file mode 100644 index 0000000..a45620f --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_show_blocks/style.css @@ -0,0 +1,96 @@ +body[data-show-blocks-enabled="1"] .col-1, +body[data-show-blocks-enabled="1"] .col-2, +body[data-show-blocks-enabled="1"] .col-3, +body[data-show-blocks-enabled="1"] .col-4, +body[data-show-blocks-enabled="1"] .col-5, +body[data-show-blocks-enabled="1"] .col-6, +body[data-show-blocks-enabled="1"] .col-7, +body[data-show-blocks-enabled="1"] .col-8, +body[data-show-blocks-enabled="1"] .col-9, +body[data-show-blocks-enabled="1"] .col-10, +body[data-show-blocks-enabled="1"] .col-11, +body[data-show-blocks-enabled="1"] .col-12, +body[data-show-blocks-enabled="1"] .col-sm-1, +body[data-show-blocks-enabled="1"] .col-sm-2, +body[data-show-blocks-enabled="1"] .col-sm-3, +body[data-show-blocks-enabled="1"] .col-sm-4, +body[data-show-blocks-enabled="1"] .col-sm-5, +body[data-show-blocks-enabled="1"] .col-sm-6, +body[data-show-blocks-enabled="1"] .col-sm-7, +body[data-show-blocks-enabled="1"] .col-sm-8, +body[data-show-blocks-enabled="1"] .col-sm-9, +body[data-show-blocks-enabled="1"] .col-sm-10, +body[data-show-blocks-enabled="1"] .col-sm-11, +body[data-show-blocks-enabled="1"] .col-sm-12, +body[data-show-blocks-enabled="1"] .col-md-1, +body[data-show-blocks-enabled="1"] .col-md-2, +body[data-show-blocks-enabled="1"] .col-md-3, +body[data-show-blocks-enabled="1"] .col-md-4, +body[data-show-blocks-enabled="1"] .col-md-5, +body[data-show-blocks-enabled="1"] .col-md-6, +body[data-show-blocks-enabled="1"] .col-md-7, +body[data-show-blocks-enabled="1"] .col-md-8, +body[data-show-blocks-enabled="1"] .col-md-9, +body[data-show-blocks-enabled="1"] .col-md-10, +body[data-show-blocks-enabled="1"] .col-md-11, +body[data-show-blocks-enabled="1"] .col-md-12, +body[data-show-blocks-enabled="1"] .col-lg-1, +body[data-show-blocks-enabled="1"] .col-lg-2, +body[data-show-blocks-enabled="1"] .col-lg-3, +body[data-show-blocks-enabled="1"] .col-lg-4, +body[data-show-blocks-enabled="1"] .col-lg-5, +body[data-show-blocks-enabled="1"] .col-lg-6, +body[data-show-blocks-enabled="1"] .col-lg-7, +body[data-show-blocks-enabled="1"] .col-lg-8, +body[data-show-blocks-enabled="1"] .col-lg-9, +body[data-show-blocks-enabled="1"] .col-lg-10, +body[data-show-blocks-enabled="1"] .col-lg-11, +body[data-show-blocks-enabled="1"] .col-lg-12, +body[data-show-blocks-enabled="1"] .col-xl-1, +body[data-show-blocks-enabled="1"] .col-xl-2, +body[data-show-blocks-enabled="1"] .col-xl-3, +body[data-show-blocks-enabled="1"] .col-xl-4, +body[data-show-blocks-enabled="1"] .col-xl-5, +body[data-show-blocks-enabled="1"] .col-xl-6, +body[data-show-blocks-enabled="1"] .col-xl-7, +body[data-show-blocks-enabled="1"] .col-xl-8, +body[data-show-blocks-enabled="1"] .col-xl-9, +body[data-show-blocks-enabled="1"] .col-xl-10, +body[data-show-blocks-enabled="1"] .col-xl-11, +body[data-show-blocks-enabled="1"] .col-xl-12, +body[data-show-blocks-enabled="2"] .columns { outline: 1px solid #4196FF; padding-top: 10px; padding-bottom: 10px; } + +body[data-show-blocks-enabled="1"] .row, +body[data-show-blocks-enabled="2"] .row { outline: 1px solid #FF9595; padding-top: 2px; padding-bottom: 2px; margin-top: 8px; margin-bottom: 8px; } + +body[data-show-blocks-enabled="1"] .container, +body[data-show-blocks-enabled="2"] .container, +body[data-show-blocks-enabled="1"].container, +body[data-show-blocks-enabled="2"].container, +body[data-show-blocks-enabled="2"] .scroll-container, +body[data-show-blocks-enabled="2"].scroll-container { + border-left: 1px dashed #d2d6ff; + border-right: 1px dashed #d2d6ff; +} +.cke_editable.container { + padding-top: 10px; + padding-bottom: 10px; + background: #ececec; +} +.cke_editable.container div[class*="hidden"] { + display: block !important; +} +.cke_editable.container .d-xl-none, +.cke_editable.container .d-lg-none, +.cke_editable.container .d-md-none, +.cke_editable.container .d-sm-none, +.cke_editable.container .d-xs-none { + display: block !important; + outline: 1px solid grey; +} +.cke_editable.container .visible-xs, .cke_editable.container .visible-sm, .cke_editable.container .visible-md, .cke_editable.container .visible-lg { + display: block !important; +} +.cke_editable.container hr { + border-top: 1px solid #afaeae; +} \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/icons/jsplus_bootstrap_table_add_cell_left.png b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/icons/jsplus_bootstrap_table_add_cell_left.png new file mode 100644 index 0000000..5d25d06 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/icons/jsplus_bootstrap_table_add_cell_left.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/en.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/en.js new file mode 100644 index 0000000..9c076f5 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/en.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_table_add_cell_left', 'en', { add_row_up: 'Dodaj wiersz powyżej', add_row_down: 'Dodaj wiersz poniżej', add_col_left: 'Dodaj kolumnę po lewej', add_col_right: 'Dodaj kolumnę po prawej', delete_row: 'Usuń wiersz', delete_col: 'Usuń kolumnę', delete_cell: 'Usuń komórkę', merge_cells: 'Połącz komórki', merge_cell_right: 'Połącz z komórką po prawej', merge_cell_down: 'Połącz z komórką na dole', split_cell_vert: 'Podziel komórkę pionowa', split_cell_hor: 'Podziel komórkę poziomo', add_cell_left: 'Dodaj komórkę po lewej', add_cell_right: 'Dodaj komórkę po prawej' } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/ru.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/ru.js new file mode 100644 index 0000000..722e491 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/lang/ru.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_table_add_cell_left', 'en', { add_row_up: 'Добавить строку выше', add_row_down: 'Добавить строку ниже', add_col_left: 'Добавить колонку слева', add_col_right: 'Добавить колонку справа', delete_row: 'Удалить строку', delete_col: 'Удалить колонку', delete_cell: 'Удалить ячейку', merge_cells: 'Объединить ячейки', merge_cell_right: 'Объединить с ячейкой справа', merge_cell_down: 'Объединить с ячейкой снизу', split_cell_vert: 'Разделить ячейку вертикально', split_cell_hor: 'Разделить ячейку горизонтально', add_cell_left: 'Добавить ячейку слева', add_cell_right: 'Добавить ячейку справа' } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/plugin.js new file mode 100644 index 0000000..b8d85b4 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_add_cell_left/plugin.js @@ -0,0 +1,2 @@ +(function(){function s(z){var y=u(z);var A=0;for(var x=0;xA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;A'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");D(document,".jsdialog_plugin_jsplus_bootstrap_table_cell_conf.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_cell_conf .cke_dialog_contents { padding: 0; }"); +}function aG(){var ba=false;if(ba){var be=window.location.hostname;var bd=0;var bb;var bc;if(be.length!=0){for(bb=0,l=be.length;bb',parseValuesFromElement:function(bc){I["features_initial"].tag_name=bc.tagName.toLowerCase();},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_tag_name_"+J(bc)).value=I["features_initial"].tag_name;},parseValuesFromGUI:function(bc){I["features_current"].tag_name=window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_tag_name_"+J(bc)).value;},apply:function(bd){if(I["features_initial"].tag_name==I["features_current"].tag_name.toLowerCase()){return;}if(I["features_current"].tag_name.length>0){var be=document.createElement(I["features_current"].tag_name);for(var bc=0;bc'+'"+'"+"",parseValuesFromElement:function(be){var bd=C(be,"thead");var bc=bd.length>0;I["features_initial"].header=bc;},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_header_"+J(bc)).value=I["features_initial"].header?"added":"removed";},parseValuesFromGUI:function(bc){I["features_current"].header=window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_header_"+J(bc)).value=="added";},apply:function(bg){if(I["features_initial"].header==I["features_current"].header){return;}if(I["features_current"].header===true){var bi=bg.ownerDocument;var bd=bi.createElement("thead");var bc=bi.createElement("tr");bd.appendChild(bc);var bh=m(bg);for(var bf=0;bf',parseValuesFromElement:function(be){var bc=C(be,"caption");var bd=bc.length>0;I["features_initial"].caption=bd?bc[0].innerHTML:"";},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_caption_"+J(bc)).value=I["features_initial"].caption; +},parseValuesFromGUI:function(bc){I["features_current"].caption=window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_caption_"+J(bc)).value;},apply:function(be){if(I["features_initial"].caption==I["features_current"].caption){return;}if(I["features_current"].caption.length>0){var bc=C(be,"caption");var bg=null;if(bc.length>0){bg=bc[0];}else{var bf=be.ownerDocument;bg=bf.createElement("caption");if(be.firstChild!=null){be.insertBefore(bg,be.firstChild);}else{be.appendChild(bg);}}bg.innerHTML=I["features_current"].caption;}else{var bg=C(be,"caption");for(var bd=0;bd'+'"+'"+'"+'"+"",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].horizontalAlign=i(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_cell_conf_feature_cells_horizontal_align_"+J(be);var bg="jsplus_bootstrap_table_cell_conf_feature_cells_horizontal_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].horizontalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].horizontalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_cells_horizontal_align_"+J(be)).value=I["features_initial"].horizontalAlign;},parseValuesFromGUI:function(bc){I["features_current"].horizontalAlign=window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_cells_horizontal_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].horizontalAlign;if(bd!="do_not_change"){aq(ae(bc),bd);}}},{str:"cells_vertical_align",html:'",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].verticalAlign=M(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_cell_conf_feature_cells_vertical_align_"+J(be);var bg="jsplus_bootstrap_table_cell_conf_feature_cells_vertical_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].verticalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].verticalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_cells_vertical_align_"+J(be)).value=I["features_initial"].verticalAlign;},parseValuesFromGUI:function(bc){I["features_current"].verticalAlign=window.document.getElementById("jsplus_bootstrap_table_cell_conf_feature_cells_vertical_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].verticalAlign;if(bd!="do_not_change"){aZ(ae(bc),bd);}}});}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"link",str:"width_100",add_styles:[["width","100%"]]}],[{type:"text",str:"border"},{type:"link",str:"none",add_styles:[["border","none"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["border","black solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"silver",add_styles:[["border","silver solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["border","white solid 1px"]]}]);}if(s!=4){aP[J(bb)].push([{type:"text",str:"background_color"},{type:"link",str:"transparent",add_styles:[["background-color","transparent"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["background-color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["background-color","black"]]}]);}if(s==20||s==21||s==22||s==30||s==31||s==32){aP[J(bb)].push([{type:"text",str:"font_color"},{type:"link",str:"white",add_styles:[["color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["color","black"]]},{type:"text",str:"/",localize:false},{type:"link",str:"gray",add_styles:[["color","gray"]]}]);}if(s==20||s==21||s==22){aP[J(bb)].push([{type:"text",str:"cells_horizontal_align"},{type:"link",str:"left",add_styles:[["text-align","left"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["text-align","center"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["text-align","right"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["text-align"]}]); +aP[J(bb)].push([{type:"text",str:"cells_vertical_align"},{type:"link",str:"top",add_styles:[["vertical-align","top"]]},{type:"text",str:"/",localize:false},{type:"link",str:"middle",add_styles:[["vertical-align","middle"]]},{type:"text",str:"/",localize:false},{type:"link",str:"bottom",add_styles:[["vertical-align","bottom"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["vertical-align"]}]);}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"text",str:"align_table"},{type:"link",str:"left",add_styles:[["margin-left","0"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["margin-left","auto"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["margin-left","auto"],["margin-right","0"]]}]);if(s==1){aP[J(bb)].push([{col:2,type:"text",str:"jsplus_bootstrap_table_cell_conf_striped"},{type:"link",str:"enable",add_classes:["table-striped"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-striped"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_cell_conf_bordered"},{type:"link",str:"enable",add_classes:["table-bordered"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-bordered"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_cell_conf_condensed"},{type:"link",str:"enable",add_classes:["table-condensed"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-condensed"]}]);}}for(var ba=0;ba'+(bc>0?" ":"")+aB(ba)+(bc");}else{if(bb.type=="link"){bd.push(''+aB(ba)+"");}}}return bd.join(" ");}function ax(bf){X(bf);var bd="";var bb=[[],[]];for(var bc=0;bc0||aP[J(bf)].length>0){var ba=aS[J(bf)].length;if(bb[0].length>ba){ba=bb[0].length;}if(bb[1].length>ba){ba=bb[1].length;}bd+=''+"";bd+="";if(aS[J(bf)].length>0){bd+='";}if(bb[0].length>0||bb[1].length>0){bd+='";}bd+="";for(var bc=0;bc";if(aS[J(bf)].length>0){bd+='";bd+='";}if(bb[0].length>0||bb[1].length>0){bd+="";}if(bb[1].length>0){bd+='";}bd+="";}bd+=""+"
        ';bd+=s==4?"":A(bf,"apply_features");bd+="0){bd+=' colspan="2"';}bd+=">";if(bb[0].length>0||bb[1].length>0){bd+=A(bf,"quick_styling");}bd+="
        ';}if(aS[J(bf)].length>bc){bd+=A(bf,aS[J(bf)][bc].str);}if(aS[J(bf)].length>0){bd+="';}if(aS[J(bf)].length>bc){bd+=aS[J(bf)][bc].html;}if(aS[J(bf)].length>0){bd+="";if(bb[0].length>bc){bd+=an(bf,bb[0][bc]);}bd+="';if(bb[1].length>bc){bd+=an(bf,bb[1][bc]);}bd+="
        ";}bd+="";bd+=''+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+"
        '+"
        "+'
        '+A(bf,"classes")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"styles")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"attributes")+"
        "+'"+"
        "+"
        '+A(bf,"desc_classes")+"'+A(bf,"desc_styles")+"'+A(bf,"desc_attrs")+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        "; +return bd.replace(/%id%/g,J(bf));}function R(bb){var ba=av(bb);if(af.length==0||ba==null){return ba;}while(!(af.indexOf(ba.tagName.toLowerCase())>-1)){if(ba.parentNode!=null&&ba.parentNode.tagName!="HTML"){ba=ba.parentNode;}else{return null;}}return ba;}function S(bg){var bb={};var bd=bg.getAttribute("class");bb["classes"]=(bd==null||bd.trim().length==0)?[]:bd.split(/\s+/);var ba=bg.getAttribute("style");var be=(ba==null||ba.trim().length==0)?[]:ba.split(/\s*;\s*/);bb["styles"]=[];var bj;var bh;for(var bc in be){var bk=be[bc];var bf=bk.indexOf(":");if(bf!=-1){bj=bk.substr(0,bf).trim();bh=bk.substr(bf+1).trim();if(bj.length>0&&bh.length>0){bb["styles"].push([bj,bh]);}}}bb["attrs"]=[];var bi=bg.attributes;for(var bf=0;bfbd?bh[bd]:null;if(ba!=null&&(bb==0||be[bb-1]!=ba)){be.push(ba);}}return be;}function aL(ba){var bb=[ba];if(s==30||s==31||s==32){bb=aN(ba);}return bb;}function aV(bj){var ba=aL(bj);I=S(ba[0]);I["features_initial"]=[];I["features_current"]=[];I["dirty_classes"]=[];I["dirty_styles"]=[];I["dirty_attrs"]=[];for(var bk=1;bk0&&I["classes"].indexOf(bn)==-1){I["classes"].push(bn);}}var bj=bm.getElementsByClassName("jsplus_bootstrap_table_cell_conf_styles_name_"+J(bh));var bb=bm.getElementsByClassName("jsplus_bootstrap_table_cell_conf_styles_value_"+J(bh));for(var bg=0;bg0&&bl.length>0){var bk=false;for(var bf=0;bf0&&bl.length>0&&bc!="class"&&bc!="style"){var bk=false;for(var bf=0;bf0){ba[I["attrs"][bb][0]]=I["attrs"][bb][1];}}return ba;}function F(bh,bj){var bi=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bo=this.parentNode.getElementsByTagName("input")[0]; +bo.removeAttribute("readonly");var bq=aw(bo);delete bq["background-color"];bq["width"]="167px";y(bo,bq);var bp=I["dirty_classes"].indexOf(bo.value);if(bp>-1){I["dirty_classes"].splice(bp,1);}this.parentNode.removeChild(this);};var bl=window.document;var bb=bl.getElementById("jsplus_bootstrap_table_cell_conf_classes_"+J(bh));var bn=I["dirty_classes"].indexOf(bj)>-1;var bg=bn?140:167;var bf=bn?"background-color:#eee;":"";var bk=bl.createElement("input");if(bn){bk.setAttribute("readonly","readonly");}bk.setAttribute("class","jsplus_bootstrap_table_cell_conf_class_value_"+J(bh));bk.setAttribute("style",bf+"float:left;width:"+bg+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bk.setAttribute("value",bj);if(bn){var bd=bl.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_cell_conf_dirty_"+J(bh));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bh,"dirty_class"));bd.innerHTML="⚠";}var ba=bl.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_cell_conf_class_delete_"+J(bh));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bh,"del"));ba.innerHTML="-";var bc=bl.createElement("div");var bm=false;if(bj=="cke_show_border"||bj.indexOf("jsplus_advanced_blocks")===0||bj.indexOf("jsplus_bootstrap_advanced_blocks")===0||bj.indexOf("jsplus_foundation_advanced_blocks")===0){bm=true;}bc.setAttribute("style","padding-bottom:5px;height:27px"+(bm?";display:none":""));bc.appendChild(bk);if(bn){bc.appendChild(bd);}bc.appendChild(ba);bb.appendChild(bc);ba.onclick=bi;if(bn){bd.onclick=be;}}function a0(bc,bb,ba){a7(bc,bb,ba,true);}function P(bb,ba,bc){a7(bb,ba,bc,false);}function a7(bj,bb,bn,bp){var bl=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bv=this.parentNode.getElementsByTagName("input");bs=bv[1];bs.removeAttribute("readonly");var bu=aw(bs);delete bu["background-color"];bu["width"]="151px";y(bs,bu);var bs=bv[0];bs.removeAttribute("readonly");ay(bs,"background-color");var br=bp?"dirty_styles":"dirty_attrs";var bt=I[br].indexOf(bs.value);if(bt>-1){I[br].splice(bt,1);}this.parentNode.removeChild(this);};var bq=I[bp?"dirty_styles":"dirty_attrs"].indexOf(bb)>-1;var bf=bq?124:151;var bi=bq?"background-color:#eee;":"";var bo=bp?"styles":"attrs";var bm=window.document;var bk=bm.getElementById("jsplus_bootstrap_table_cell_conf_"+bo+"_"+J(bj));var bh=bm.createElement("input");if(bq){bh.setAttribute("readonly","readonly");}bh.setAttribute("class","jsplus_bootstrap_table_cell_conf_"+bo+"_name_"+J(bj));bh.setAttribute("style",bi+"float:left;width:85px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bh.setAttribute("value",bb);var bg=bm.createElement("input");if(bq){bg.setAttribute("readonly","readonly");}bg.setAttribute("class","jsplus_bootstrap_table_cell_conf_"+bo+"_value_"+J(bj));bg.setAttribute("style",bi+"float:left;width:"+bf+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bg.setAttribute("value",bn);if(bq){var bd=bm.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_cell_conf_dirty_"+J(bj));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bj,bp?"dirty_style":"dirty_attr"));bd.innerHTML="⚠";}var ba=bm.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_cell_conf_"+bo+"_delete_"+J(bj));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bj,"del"));ba.innerHTML="-";var bc=bm.createElement("div");bc.setAttribute("style","padding-bottom:5px;height:27px");bc.appendChild(bh);bc.appendChild(bg);if(bq){bc.appendChild(bd);}bc.appendChild(ba);bk.appendChild(bc);ba.onclick=bl;if(bq){bd.onclick=be;}}function aR(bd){var bf=window.document;var ba=bf.getElementById("jsplus_bootstrap_table_cell_conf_classes_"+J(bd));ba.innerHTML="";for(var bc in I["classes"]){F(bd,I["classes"][bc]);}var be=bf.getElementById("jsplus_bootstrap_table_cell_conf_styles_"+J(bd));be.innerHTML="";for(var bc in I["styles"]){a0(bd,I["styles"][bc][0],I["styles"][bc][1]);}var bb=bf.getElementById("jsplus_bootstrap_table_cell_conf_attrs_"+J(bd));bb.innerHTML="";for(var bc in I["attrs"]){P(bd,I["attrs"][bc][0],I["attrs"][bc][1]);}}function h(bc){window.document.getElementById("jsplus_bootstrap_table_cell_conf_add_class_"+J(bc)).onclick=function(){F(bc,"");};window.document.getElementById("jsplus_bootstrap_table_cell_conf_add_style_"+J(bc)).onclick=function(){a0(bc,"",""); +};window.document.getElementById("jsplus_bootstrap_table_cell_conf_add_attr_"+J(bc)).onclick=function(){P(bc,"","");};var bd=(function(){var be=bc;return function(){var bj=aP[J(bc)][parseInt(this.getAttribute("data-id-1"))][parseInt(this.getAttribute("data-id-2"))];if(bj.hasOwnProperty("add_styles")){for(var bk=0;bk-1){bt.push(bh);}}for(var bq=0;bq0){bb.setAttribute("class",bs);}else{bb.removeAttribute("class");}var bc=aw(bb);var bg={};for(var bq=0;bq=bf);return ba.toFixed(1)+bc+bb[bd]+(be?"b":"");}function aB(ba){return ba.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aY(ba){return ba.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function aK(ba){var bb=document.createElement("div");bb.innerHTML=ba;return bb.childNodes;}function aT(ba){return ba.getElementsByTagName("head")[0];}function aQ(ba){return ba.getElementsByTagName("body")[0];}function a4(bc,be){var ba=bc.getElementsByTagName("link");var bd=false;for(var bb=ba.length-1;bb>=0;bb--){if(ba[bb].href==be){ba[bb].parentNode.removeChild(ba[bb]);}}}function az(bd,bf){if(!bd){return;}var ba=bd.getElementsByTagName("link");var be=false;for(var bb=0;bb-1){bb.splice(bb.indexOf(ba),1);}var bd=bb.join(" ").trim();if(bd.length>0){bc.className=bd;}else{if(bc.hasAttribute("class")){bc.removeAttribute("class");}}}function b(ba){if(typeof(ba.className)==="undefined"||ba.className==null){return[];}return ba.className.split(/\s+/);}function a8(bd,ba){var bc=b(bd);for(var bb=0;bb-1){be[bf.substr(0,ba).trim()]=bf.substr(ba+1);}else{be[bf]="";}}return be;}function aF(bc,bb){var bd=aw(bc);for(var ba in bd){var be=bd[ba];if(ba==bb){return be;}}return null;}function aA(bd,bc,ba){var be=aw(bd);for(var bb in be){var bf=be[bb];if(bb==bc&&bf==ba){return true;}}return false;}function H(bc,bb,ba){var bd=aw(bc);bd[bb]=ba;y(bc,bd);}function ay(bb,ba){var bc=aw(bb);delete bc[ba];y(bb,bc);}function y(bb,bd){var bc=[];for(var ba in bd){bc.push(ba+":"+bd[ba]);}if(bc.length>0){bb.setAttribute("style",bc.join(";"));}else{if(bb.hasAttribute("style")){bb.removeAttribute("style");}}}function C(be,bb){var bc;if(Object.prototype.toString.call(bb)==="[object Array]"){bc=bb;}else{bc=[bb];}for(var bd=0;bd-1){ba.push(be.childNodes[bd]);}}return ba;}function m(bd){var bc=aJ(bd);var be=0;for(var bb=0;bbbe){be=bf.length;}}return be;}function ar(ba){return C(ba,["td","th"]);}function i(be){var bd;for(var ba=0;ba0){return bb;}}return 1;}function aI(ba){if(ba.hasAttribute("rowspan")){var bb=parseInt(ba.getAttribute("rowspan"));if(!isNaN(bb)&&bb>0){return bb;}}return 1;}function aJ(bh){var bc=[];var bi=[null,"tbody","thead","tfoot"];for(var bb=0;bb0){for(var bf=0;bf0){bc.push(bd[bf]);}}return bc;}function p(be){var bf=[];var bd=aJ(be);for(var bc=0;bc0){bc.setAttribute("style",bb);}bc.innerHTML=" ";return bc;}function ah(ba,bc,bb){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]==="undefined"){window["jsplus_"+bd+"_listeners"]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc]==="undefined"){window["jsplus_"+bd+"_listeners"][bc]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc][J(ba)]==="undefined"){window["jsplus_"+bd+"_listeners"][bc][J(ba)]=[];}window["jsplus_"+bd+"_listeners"][bc][J(ba)].push((function(){var be=ba; +return function(){bb(be);};})());}function g(bb,bc){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc][J(bb)]!="undefined"){for(var ba=0;babi){bj.setAttribute("colspan",be+1);return;}}var bc="td";if(bh.length>0){bc=bh[bh.length-1].tagName;}else{if(O(bb)){bc="th";}}for(;bf<=bi;bf++){var bg=a(bj.tagName,ba);bb.appendChild(bg);}}function E(bc,bg,bf){var bd=bc.parentNode.tagName=="THEAD"?"th":"td";var bi=m(bg);var ba=N(bg);var bb=window.document.createElement("tr");for(var be=0;be0){bh.setAttribute("style",ba);}bh.innerHTML=" ";bb.appendChild(bh);}if(bf){bc.parentNode.insertBefore(bb,bc);}else{if(bc.nextSibling!=null){bc.parentNode.insertBefore(bb,bc.nextSibling);}else{bc.parentNode.appendChild(bb);}}return bb;}function T(ba,bb){ah(ba,"table_tools",bb);}function aE(ba){g(ba,"table_tools");}function aH(ba){var bb=ba.parentNode;while(bb!=null){if(bb.tagName=="TABLE"){return bb;}bb=bb.parentNode;}return null;}function x(bl){var bk=aJ(bl);var ba=-1;var bj=[];for(var be=0;be'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");D(document,".jsdialog_plugin_jsplus_bootstrap_table_col_conf.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_conf .cke_dialog_contents { padding: 0; }"); +}function aG(){var ba=false;if(ba){var be=window.location.hostname;var bd=0;var bb;var bc;if(be.length!=0){for(bb=0,l=be.length;bb',parseValuesFromElement:function(bc){I["features_initial"].tag_name=bc.tagName.toLowerCase();},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_tag_name_"+J(bc)).value=I["features_initial"].tag_name;},parseValuesFromGUI:function(bc){I["features_current"].tag_name=window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_tag_name_"+J(bc)).value;},apply:function(bd){if(I["features_initial"].tag_name==I["features_current"].tag_name.toLowerCase()){return;}if(I["features_current"].tag_name.length>0){var be=document.createElement(I["features_current"].tag_name);for(var bc=0;bc'+'"+'"+"",parseValuesFromElement:function(be){var bd=C(be,"thead");var bc=bd.length>0;I["features_initial"].header=bc;},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_header_"+J(bc)).value=I["features_initial"].header?"added":"removed";},parseValuesFromGUI:function(bc){I["features_current"].header=window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_header_"+J(bc)).value=="added";},apply:function(bg){if(I["features_initial"].header==I["features_current"].header){return;}if(I["features_current"].header===true){var bi=bg.ownerDocument;var bd=bi.createElement("thead");var bc=bi.createElement("tr");bd.appendChild(bc);var bh=m(bg);for(var bf=0;bf',parseValuesFromElement:function(be){var bc=C(be,"caption");var bd=bc.length>0;I["features_initial"].caption=bd?bc[0].innerHTML:"";},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_caption_"+J(bc)).value=I["features_initial"].caption; +},parseValuesFromGUI:function(bc){I["features_current"].caption=window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_caption_"+J(bc)).value;},apply:function(be){if(I["features_initial"].caption==I["features_current"].caption){return;}if(I["features_current"].caption.length>0){var bc=C(be,"caption");var bg=null;if(bc.length>0){bg=bc[0];}else{var bf=be.ownerDocument;bg=bf.createElement("caption");if(be.firstChild!=null){be.insertBefore(bg,be.firstChild);}else{be.appendChild(bg);}}bg.innerHTML=I["features_current"].caption;}else{var bg=C(be,"caption");for(var bd=0;bd'+'"+'"+'"+'"+"",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].horizontalAlign=i(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_col_conf_feature_cells_horizontal_align_"+J(be);var bg="jsplus_bootstrap_table_col_conf_feature_cells_horizontal_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].horizontalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].horizontalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_cells_horizontal_align_"+J(be)).value=I["features_initial"].horizontalAlign;},parseValuesFromGUI:function(bc){I["features_current"].horizontalAlign=window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_cells_horizontal_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].horizontalAlign;if(bd!="do_not_change"){aq(ae(bc),bd);}}},{str:"cells_vertical_align",html:'",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].verticalAlign=M(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_col_conf_feature_cells_vertical_align_"+J(be);var bg="jsplus_bootstrap_table_col_conf_feature_cells_vertical_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].verticalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].verticalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_cells_vertical_align_"+J(be)).value=I["features_initial"].verticalAlign;},parseValuesFromGUI:function(bc){I["features_current"].verticalAlign=window.document.getElementById("jsplus_bootstrap_table_col_conf_feature_cells_vertical_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].verticalAlign;if(bd!="do_not_change"){aZ(ae(bc),bd);}}});}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"link",str:"width_100",add_styles:[["width","100%"]]}],[{type:"text",str:"border"},{type:"link",str:"none",add_styles:[["border","none"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["border","black solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"silver",add_styles:[["border","silver solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["border","white solid 1px"]]}]);}if(s!=4){aP[J(bb)].push([{type:"text",str:"background_color"},{type:"link",str:"transparent",add_styles:[["background-color","transparent"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["background-color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["background-color","black"]]}]);}if(s==20||s==21||s==22||s==30||s==31||s==32){aP[J(bb)].push([{type:"text",str:"font_color"},{type:"link",str:"white",add_styles:[["color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["color","black"]]},{type:"text",str:"/",localize:false},{type:"link",str:"gray",add_styles:[["color","gray"]]}]);}if(s==20||s==21||s==22){aP[J(bb)].push([{type:"text",str:"cells_horizontal_align"},{type:"link",str:"left",add_styles:[["text-align","left"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["text-align","center"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["text-align","right"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["text-align"]}]); +aP[J(bb)].push([{type:"text",str:"cells_vertical_align"},{type:"link",str:"top",add_styles:[["vertical-align","top"]]},{type:"text",str:"/",localize:false},{type:"link",str:"middle",add_styles:[["vertical-align","middle"]]},{type:"text",str:"/",localize:false},{type:"link",str:"bottom",add_styles:[["vertical-align","bottom"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["vertical-align"]}]);}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"text",str:"align_table"},{type:"link",str:"left",add_styles:[["margin-left","0"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["margin-left","auto"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["margin-left","auto"],["margin-right","0"]]}]);if(s==1){aP[J(bb)].push([{col:2,type:"text",str:"jsplus_bootstrap_table_col_conf_striped"},{type:"link",str:"enable",add_classes:["table-striped"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-striped"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_col_conf_bordered"},{type:"link",str:"enable",add_classes:["table-bordered"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-bordered"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_col_conf_condensed"},{type:"link",str:"enable",add_classes:["table-condensed"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-condensed"]}]);}}for(var ba=0;ba'+(bc>0?" ":"")+aB(ba)+(bc");}else{if(bb.type=="link"){bd.push(''+aB(ba)+"");}}}return bd.join(" ");}function ax(bf){X(bf);var bd="";var bb=[[],[]];for(var bc=0;bc0||aP[J(bf)].length>0){var ba=aS[J(bf)].length;if(bb[0].length>ba){ba=bb[0].length;}if(bb[1].length>ba){ba=bb[1].length;}bd+=''+"";bd+="";if(aS[J(bf)].length>0){bd+='";}if(bb[0].length>0||bb[1].length>0){bd+='";}bd+="";for(var bc=0;bc";if(aS[J(bf)].length>0){bd+='";bd+='";}if(bb[0].length>0||bb[1].length>0){bd+="";}if(bb[1].length>0){bd+='";}bd+="";}bd+=""+"
        ';bd+=s==4?"":A(bf,"apply_features");bd+="0){bd+=' colspan="2"';}bd+=">";if(bb[0].length>0||bb[1].length>0){bd+=A(bf,"quick_styling");}bd+="
        ';}if(aS[J(bf)].length>bc){bd+=A(bf,aS[J(bf)][bc].str);}if(aS[J(bf)].length>0){bd+="';}if(aS[J(bf)].length>bc){bd+=aS[J(bf)][bc].html;}if(aS[J(bf)].length>0){bd+="";if(bb[0].length>bc){bd+=an(bf,bb[0][bc]);}bd+="';if(bb[1].length>bc){bd+=an(bf,bb[1][bc]);}bd+="
        ";}bd+="";bd+=''+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+"
        '+"
        "+'
        '+A(bf,"classes")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"styles")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"attributes")+"
        "+'"+"
        "+"
        '+A(bf,"desc_classes")+"'+A(bf,"desc_styles")+"'+A(bf,"desc_attrs")+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        "; +return bd.replace(/%id%/g,J(bf));}function R(bb){var ba=av(bb);if(af.length==0||ba==null){return ba;}while(!(af.indexOf(ba.tagName.toLowerCase())>-1)){if(ba.parentNode!=null&&ba.parentNode.tagName!="HTML"){ba=ba.parentNode;}else{return null;}}return ba;}function S(bg){var bb={};var bd=bg.getAttribute("class");bb["classes"]=(bd==null||bd.trim().length==0)?[]:bd.split(/\s+/);var ba=bg.getAttribute("style");var be=(ba==null||ba.trim().length==0)?[]:ba.split(/\s*;\s*/);bb["styles"]=[];var bj;var bh;for(var bc in be){var bk=be[bc];var bf=bk.indexOf(":");if(bf!=-1){bj=bk.substr(0,bf).trim();bh=bk.substr(bf+1).trim();if(bj.length>0&&bh.length>0){bb["styles"].push([bj,bh]);}}}bb["attrs"]=[];var bi=bg.attributes;for(var bf=0;bfbd?bh[bd]:null;if(ba!=null&&(bb==0||be[bb-1]!=ba)){be.push(ba);}}return be;}function aL(ba){var bb=[ba];if(s==30||s==31||s==32){bb=aN(ba);}return bb;}function aV(bj){var ba=aL(bj);I=S(ba[0]);I["features_initial"]=[];I["features_current"]=[];I["dirty_classes"]=[];I["dirty_styles"]=[];I["dirty_attrs"]=[];for(var bk=1;bk0&&I["classes"].indexOf(bn)==-1){I["classes"].push(bn);}}var bj=bm.getElementsByClassName("jsplus_bootstrap_table_col_conf_styles_name_"+J(bh));var bb=bm.getElementsByClassName("jsplus_bootstrap_table_col_conf_styles_value_"+J(bh));for(var bg=0;bg0&&bl.length>0){var bk=false;for(var bf=0;bf0&&bl.length>0&&bc!="class"&&bc!="style"){var bk=false;for(var bf=0;bf0){ba[I["attrs"][bb][0]]=I["attrs"][bb][1];}}return ba;}function F(bh,bj){var bi=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bo=this.parentNode.getElementsByTagName("input")[0]; +bo.removeAttribute("readonly");var bq=aw(bo);delete bq["background-color"];bq["width"]="167px";y(bo,bq);var bp=I["dirty_classes"].indexOf(bo.value);if(bp>-1){I["dirty_classes"].splice(bp,1);}this.parentNode.removeChild(this);};var bl=window.document;var bb=bl.getElementById("jsplus_bootstrap_table_col_conf_classes_"+J(bh));var bn=I["dirty_classes"].indexOf(bj)>-1;var bg=bn?140:167;var bf=bn?"background-color:#eee;":"";var bk=bl.createElement("input");if(bn){bk.setAttribute("readonly","readonly");}bk.setAttribute("class","jsplus_bootstrap_table_col_conf_class_value_"+J(bh));bk.setAttribute("style",bf+"float:left;width:"+bg+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bk.setAttribute("value",bj);if(bn){var bd=bl.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_col_conf_dirty_"+J(bh));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bh,"dirty_class"));bd.innerHTML="⚠";}var ba=bl.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_col_conf_class_delete_"+J(bh));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bh,"del"));ba.innerHTML="-";var bc=bl.createElement("div");var bm=false;if(bj=="cke_show_border"||bj.indexOf("jsplus_advanced_blocks")===0||bj.indexOf("jsplus_bootstrap_advanced_blocks")===0||bj.indexOf("jsplus_foundation_advanced_blocks")===0){bm=true;}bc.setAttribute("style","padding-bottom:5px;height:27px"+(bm?";display:none":""));bc.appendChild(bk);if(bn){bc.appendChild(bd);}bc.appendChild(ba);bb.appendChild(bc);ba.onclick=bi;if(bn){bd.onclick=be;}}function a0(bc,bb,ba){a7(bc,bb,ba,true);}function P(bb,ba,bc){a7(bb,ba,bc,false);}function a7(bj,bb,bn,bp){var bl=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bv=this.parentNode.getElementsByTagName("input");bs=bv[1];bs.removeAttribute("readonly");var bu=aw(bs);delete bu["background-color"];bu["width"]="151px";y(bs,bu);var bs=bv[0];bs.removeAttribute("readonly");ay(bs,"background-color");var br=bp?"dirty_styles":"dirty_attrs";var bt=I[br].indexOf(bs.value);if(bt>-1){I[br].splice(bt,1);}this.parentNode.removeChild(this);};var bq=I[bp?"dirty_styles":"dirty_attrs"].indexOf(bb)>-1;var bf=bq?124:151;var bi=bq?"background-color:#eee;":"";var bo=bp?"styles":"attrs";var bm=window.document;var bk=bm.getElementById("jsplus_bootstrap_table_col_conf_"+bo+"_"+J(bj));var bh=bm.createElement("input");if(bq){bh.setAttribute("readonly","readonly");}bh.setAttribute("class","jsplus_bootstrap_table_col_conf_"+bo+"_name_"+J(bj));bh.setAttribute("style",bi+"float:left;width:85px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bh.setAttribute("value",bb);var bg=bm.createElement("input");if(bq){bg.setAttribute("readonly","readonly");}bg.setAttribute("class","jsplus_bootstrap_table_col_conf_"+bo+"_value_"+J(bj));bg.setAttribute("style",bi+"float:left;width:"+bf+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bg.setAttribute("value",bn);if(bq){var bd=bm.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_col_conf_dirty_"+J(bj));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bj,bp?"dirty_style":"dirty_attr"));bd.innerHTML="⚠";}var ba=bm.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_col_conf_"+bo+"_delete_"+J(bj));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bj,"del"));ba.innerHTML="-";var bc=bm.createElement("div");bc.setAttribute("style","padding-bottom:5px;height:27px");bc.appendChild(bh);bc.appendChild(bg);if(bq){bc.appendChild(bd);}bc.appendChild(ba);bk.appendChild(bc);ba.onclick=bl;if(bq){bd.onclick=be;}}function aR(bd){var bf=window.document;var ba=bf.getElementById("jsplus_bootstrap_table_col_conf_classes_"+J(bd));ba.innerHTML="";for(var bc in I["classes"]){F(bd,I["classes"][bc]);}var be=bf.getElementById("jsplus_bootstrap_table_col_conf_styles_"+J(bd));be.innerHTML="";for(var bc in I["styles"]){a0(bd,I["styles"][bc][0],I["styles"][bc][1]);}var bb=bf.getElementById("jsplus_bootstrap_table_col_conf_attrs_"+J(bd));bb.innerHTML="";for(var bc in I["attrs"]){P(bd,I["attrs"][bc][0],I["attrs"][bc][1]);}}function h(bc){window.document.getElementById("jsplus_bootstrap_table_col_conf_add_class_"+J(bc)).onclick=function(){F(bc,"");};window.document.getElementById("jsplus_bootstrap_table_col_conf_add_style_"+J(bc)).onclick=function(){a0(bc,"",""); +};window.document.getElementById("jsplus_bootstrap_table_col_conf_add_attr_"+J(bc)).onclick=function(){P(bc,"","");};var bd=(function(){var be=bc;return function(){var bj=aP[J(bc)][parseInt(this.getAttribute("data-id-1"))][parseInt(this.getAttribute("data-id-2"))];if(bj.hasOwnProperty("add_styles")){for(var bk=0;bk-1){bt.push(bh);}}for(var bq=0;bq0){bb.setAttribute("class",bs);}else{bb.removeAttribute("class");}var bc=aw(bb);var bg={};for(var bq=0;bq=bf);return ba.toFixed(1)+bc+bb[bd]+(be?"b":"");}function aB(ba){return ba.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aY(ba){return ba.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function aK(ba){var bb=document.createElement("div");bb.innerHTML=ba;return bb.childNodes;}function aT(ba){return ba.getElementsByTagName("head")[0];}function aQ(ba){return ba.getElementsByTagName("body")[0];}function a4(bc,be){var ba=bc.getElementsByTagName("link");var bd=false;for(var bb=ba.length-1;bb>=0;bb--){if(ba[bb].href==be){ba[bb].parentNode.removeChild(ba[bb]);}}}function az(bd,bf){if(!bd){return;}var ba=bd.getElementsByTagName("link");var be=false;for(var bb=0;bb-1){bb.splice(bb.indexOf(ba),1);}var bd=bb.join(" ").trim();if(bd.length>0){bc.className=bd;}else{if(bc.hasAttribute("class")){bc.removeAttribute("class");}}}function b(ba){if(typeof(ba.className)==="undefined"||ba.className==null){return[];}return ba.className.split(/\s+/);}function a8(bd,ba){var bc=b(bd);for(var bb=0;bb-1){be[bf.substr(0,ba).trim()]=bf.substr(ba+1);}else{be[bf]="";}}return be;}function aF(bc,bb){var bd=aw(bc);for(var ba in bd){var be=bd[ba];if(ba==bb){return be;}}return null;}function aA(bd,bc,ba){var be=aw(bd);for(var bb in be){var bf=be[bb];if(bb==bc&&bf==ba){return true;}}return false;}function H(bc,bb,ba){var bd=aw(bc);bd[bb]=ba;y(bc,bd);}function ay(bb,ba){var bc=aw(bb);delete bc[ba];y(bb,bc);}function y(bb,bd){var bc=[];for(var ba in bd){bc.push(ba+":"+bd[ba]);}if(bc.length>0){bb.setAttribute("style",bc.join(";"));}else{if(bb.hasAttribute("style")){bb.removeAttribute("style");}}}function C(be,bb){var bc;if(Object.prototype.toString.call(bb)==="[object Array]"){bc=bb;}else{bc=[bb];}for(var bd=0;bd-1){ba.push(be.childNodes[bd]);}}return ba;}function m(bd){var bc=aJ(bd);var be=0;for(var bb=0;bbbe){be=bf.length;}}return be;}function ar(ba){return C(ba,["td","th"]);}function i(be){var bd;for(var ba=0;ba0){return bb;}}return 1;}function aI(ba){if(ba.hasAttribute("rowspan")){var bb=parseInt(ba.getAttribute("rowspan"));if(!isNaN(bb)&&bb>0){return bb;}}return 1;}function aJ(bh){var bc=[];var bi=[null,"tbody","thead","tfoot"];for(var bb=0;bb0){for(var bf=0;bf0){bc.push(bd[bf]);}}return bc;}function p(be){var bf=[];var bd=aJ(be);for(var bc=0;bc0){bc.setAttribute("style",bb);}bc.innerHTML=" ";return bc;}function ah(ba,bc,bb){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]==="undefined"){window["jsplus_"+bd+"_listeners"]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc]==="undefined"){window["jsplus_"+bd+"_listeners"][bc]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc][J(ba)]==="undefined"){window["jsplus_"+bd+"_listeners"][bc][J(ba)]=[];}window["jsplus_"+bd+"_listeners"][bc][J(ba)].push((function(){var be=ba; +return function(){bb(be);};})());}function g(bb,bc){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc][J(bb)]!="undefined"){for(var ba=0;babi){bj.setAttribute("colspan",be+1);return;}}var bc="td";if(bh.length>0){bc=bh[bh.length-1].tagName;}else{if(O(bb)){bc="th";}}for(;bf<=bi;bf++){var bg=a(bj.tagName,ba);bb.appendChild(bg);}}function E(bc,bg,bf){var bd=bc.parentNode.tagName=="THEAD"?"th":"td";var bi=m(bg);var ba=N(bg);var bb=window.document.createElement("tr");for(var be=0;be0){bh.setAttribute("style",ba);}bh.innerHTML=" ";bb.appendChild(bh);}if(bf){bc.parentNode.insertBefore(bb,bc);}else{if(bc.nextSibling!=null){bc.parentNode.insertBefore(bb,bc.nextSibling);}else{bc.parentNode.appendChild(bb);}}return bb;}function T(ba,bb){ah(ba,"table_tools",bb);}function aE(ba){g(ba,"table_tools");}function aH(ba){var bb=ba.parentNode;while(bb!=null){if(bb.tagName=="TABLE"){return bb;}bb=bb.parentNode;}return null;}function x(bl){var bk=aJ(bl);var ba=-1;var bj=[];for(var be=0;be'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");C(document,".jsdialog_plugin_jsplus_bootstrap_table_col_move_left.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_left .cke_dialog_contents { padding: 0; }"); +}function al(){var aH=false;if(aH){var aL=window.location.hostname;var aK=0;var aI;var aJ;if(aL.length!=0){for(aI=0,l=aL.length;aI=20&&(aJ.tagName=="TD"||aJ.tagName=="TH")){aH[0]=aJ;}}else{if(aJ.tagName=="TABLE"){aH[1]=aJ;}}if(aH[1]!=null){var aM;if(q<20){var aI=B(aH[0].parentNode,"tr");aM=(q<=2&&aI[0]!=aH[0])||(q>2&&aI[aI.length-1]!=aH[0]);}else{var aL=Z(aH[0]);aM=(q<=22&&aL>0)||(q>22&&aLaK+1){aN=aM[aK+1];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}if(aM.length>aK+2){var aL=aM[aK+2];aL.parentNode.insertBefore(aQ,aL);}else{var aJ=aQ.parentNode;aJ.removeChild(aQ);aJ.appendChild(aQ);}return;}if(q==30||q==31||q==32){var aI=d(aQ);if(aI+aK==m){return;}if(aI+aK>aO){var aN;if(aM.length>aI+aK){aN=aM[aI+aK];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}aQ.parentNode.insertBefore(aN,aQ);return;}}}}function h(aH,aJ){var aL=B(aH.parentNode,"tr");for(var aK=0;aK0){aL[aK-1].parentNode.removeChild(aL[aK-1]);if(aK+1=aM);return aH.toFixed(1)+aJ+aI[aK]+(aL?"b":"");}function ah(aH){return aH.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aA(aH){return aH.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ap(aH){var aI=document.createElement("div");aI.innerHTML=aH;return aI.childNodes;}function ax(aH){return aH.getElementsByTagName("head")[0];}function au(aH){return aH.getElementsByTagName("body")[0];}function aD(aJ,aL){var aH=aJ.getElementsByTagName("link");var aK=false;for(var aI=aH.length-1;aI>=0;aI--){if(aH[aI].href==aL){aH[aI].parentNode.removeChild(aH[aI]);}}}function af(aK,aM){if(!aK){return;}var aH=aK.getElementsByTagName("link");var aL=false;for(var aI=0;aI-1){aI.splice(aI.indexOf(aH),1);}var aK=aI.join(" ").trim();if(aK.length>0){aJ.className=aK;}else{if(aJ.hasAttribute("class")){aJ.removeAttribute("class");}}}function b(aH){if(typeof(aH.className)==="undefined"||aH.className==null){return[];}return aH.className.split(/\s+/);}function aG(aK,aH){var aJ=b(aK);for(var aI=0;aI-1){aL[aM.substr(0,aH).trim()]=aM.substr(aH+1);}else{aL[aM]="";}}return aL;}function am(aJ,aI){var aK=ac(aJ);for(var aH in aK){var aL=aK[aH];if(aH==aI){return aL;}}return null;}function ag(aK,aJ,aH){var aL=ac(aK);for(var aI in aL){var aM=aL[aI];if(aI==aJ&&aM==aH){return true;}}return false;}function E(aJ,aI,aH){var aK=ac(aJ);aK[aI]=aH;x(aJ,aK);}function ae(aI,aH){var aJ=ac(aI);delete aJ[aH];x(aI,aJ);}function x(aI,aK){var aJ=[];for(var aH in aK){aJ.push(aH+":"+aK[aH]);}if(aJ.length>0){aI.setAttribute("style",aJ.join(";"));}else{if(aI.hasAttribute("style")){aI.removeAttribute("style");}}}function B(aL,aI){var aJ;if(Object.prototype.toString.call(aI)==="[object Array]"){aJ=aI;}else{aJ=[aI];}for(var aK=0;aK-1){aH.push(aL.childNodes[aK]);}}return aH;}function m(aK){var aJ=aq(aK);var aL=0;for(var aI=0;aIaL){aL=aM.length;}}return aL;}function Y(aH){return B(aH,["td","th"]);}function i(aL){var aK;for(var aH=0;aH0){return aI;}}return 1;}function ao(aH){if(aH.hasAttribute("rowspan")){var aI=parseInt(aH.getAttribute("rowspan"));if(!isNaN(aI)&&aI>0){return aI;}}return 1;}function aq(aO){var aJ=[];var aP=[null,"tbody","thead","tfoot"];for(var aI=0;aI0){for(var aM=0;aM0){aJ.push(aK[aM]);}}return aJ;}function o(aL){var aM=[];var aK=aq(aL);for(var aJ=0;aJ0){aJ.setAttribute("style",aI);}aJ.innerHTML=" ";return aJ;}function S(aH,aJ,aI){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]==="undefined"){window["jsplus_"+aK+"_listeners"]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ][F(aH)]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ][F(aH)]=[];}window["jsplus_"+aK+"_listeners"][aJ][F(aH)].push((function(){var aL=aH;return function(){aI(aL);};})());}function g(aI,aJ){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ][F(aI)]!="undefined"){for(var aH=0;aHaP){aQ.setAttribute("colspan",aL+1);return;}}var aJ="td";if(aO.length>0){aJ=aO[aO.length-1].tagName;}else{if(K(aI)){aJ="th";}}for(;aM<=aP;aM++){var aN=a(aQ.tagName,aH);aI.appendChild(aN);}}function D(aJ,aN,aM){var aK=aJ.parentNode.tagName=="THEAD"?"th":"td";var aP=m(aN);var aH=J(aN);var aI=window.document.createElement("tr");for(var aL=0;aL0){aO.setAttribute("style",aH);}aO.innerHTML=" ";aI.appendChild(aO);}if(aM){aJ.parentNode.insertBefore(aI,aJ);}else{if(aJ.nextSibling!=null){aJ.parentNode.insertBefore(aI,aJ.nextSibling);}else{aJ.parentNode.appendChild(aI);}}return aI;}function L(aH,aI){S(aH,"table_tools",aI);}function ak(aH){g(aH,"table_tools");}function an(aH){var aI=aH.parentNode;while(aI!=null){if(aI.tagName=="TABLE"){return aI;}aI=aI.parentNode;}return null;}function v(aS){var aR=aq(aS);var aH=-1;var aQ=[];for(var aL=0;aL'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");C(document,".jsdialog_plugin_jsplus_bootstrap_table_col_move_right.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_col_move_right .cke_dialog_contents { padding: 0; }"); +}function al(){var aH=false;if(aH){var aL=window.location.hostname;var aK=0;var aI;var aJ;if(aL.length!=0){for(aI=0,l=aL.length;aI=20&&(aJ.tagName=="TD"||aJ.tagName=="TH")){aH[0]=aJ;}}else{if(aJ.tagName=="TABLE"){aH[1]=aJ;}}if(aH[1]!=null){var aM;if(q<20){var aI=B(aH[0].parentNode,"tr");aM=(q<=2&&aI[0]!=aH[0])||(q>2&&aI[aI.length-1]!=aH[0]);}else{var aL=Z(aH[0]);aM=(q<=22&&aL>0)||(q>22&&aLaK+1){aN=aM[aK+1];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}if(aM.length>aK+2){var aL=aM[aK+2];aL.parentNode.insertBefore(aQ,aL);}else{var aJ=aQ.parentNode;aJ.removeChild(aQ);aJ.appendChild(aQ);}return;}if(q==30||q==31||q==32){var aI=d(aQ);if(aI+aK==m){return;}if(aI+aK>aO){var aN;if(aM.length>aI+aK){aN=aM[aI+aK];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}aQ.parentNode.insertBefore(aN,aQ);return;}}}}function h(aH,aJ){var aL=B(aH.parentNode,"tr");for(var aK=0;aK0){aL[aK-1].parentNode.removeChild(aL[aK-1]);if(aK+1=aM);return aH.toFixed(1)+aJ+aI[aK]+(aL?"b":"");}function ah(aH){return aH.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aA(aH){return aH.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ap(aH){var aI=document.createElement("div");aI.innerHTML=aH;return aI.childNodes;}function ax(aH){return aH.getElementsByTagName("head")[0];}function au(aH){return aH.getElementsByTagName("body")[0];}function aD(aJ,aL){var aH=aJ.getElementsByTagName("link");var aK=false;for(var aI=aH.length-1;aI>=0;aI--){if(aH[aI].href==aL){aH[aI].parentNode.removeChild(aH[aI]);}}}function af(aK,aM){if(!aK){return;}var aH=aK.getElementsByTagName("link");var aL=false;for(var aI=0;aI-1){aI.splice(aI.indexOf(aH),1);}var aK=aI.join(" ").trim();if(aK.length>0){aJ.className=aK;}else{if(aJ.hasAttribute("class")){aJ.removeAttribute("class");}}}function b(aH){if(typeof(aH.className)==="undefined"||aH.className==null){return[];}return aH.className.split(/\s+/);}function aG(aK,aH){var aJ=b(aK);for(var aI=0;aI-1){aL[aM.substr(0,aH).trim()]=aM.substr(aH+1);}else{aL[aM]="";}}return aL;}function am(aJ,aI){var aK=ac(aJ);for(var aH in aK){var aL=aK[aH];if(aH==aI){return aL;}}return null;}function ag(aK,aJ,aH){var aL=ac(aK);for(var aI in aL){var aM=aL[aI];if(aI==aJ&&aM==aH){return true;}}return false;}function E(aJ,aI,aH){var aK=ac(aJ);aK[aI]=aH;x(aJ,aK);}function ae(aI,aH){var aJ=ac(aI);delete aJ[aH];x(aI,aJ);}function x(aI,aK){var aJ=[];for(var aH in aK){aJ.push(aH+":"+aK[aH]);}if(aJ.length>0){aI.setAttribute("style",aJ.join(";"));}else{if(aI.hasAttribute("style")){aI.removeAttribute("style");}}}function B(aL,aI){var aJ;if(Object.prototype.toString.call(aI)==="[object Array]"){aJ=aI;}else{aJ=[aI];}for(var aK=0;aK-1){aH.push(aL.childNodes[aK]);}}return aH;}function m(aK){var aJ=aq(aK);var aL=0;for(var aI=0;aIaL){aL=aM.length;}}return aL;}function Y(aH){return B(aH,["td","th"]);}function i(aL){var aK;for(var aH=0;aH0){return aI;}}return 1;}function ao(aH){if(aH.hasAttribute("rowspan")){var aI=parseInt(aH.getAttribute("rowspan"));if(!isNaN(aI)&&aI>0){return aI;}}return 1;}function aq(aO){var aJ=[];var aP=[null,"tbody","thead","tfoot"];for(var aI=0;aI0){for(var aM=0;aM0){aJ.push(aK[aM]);}}return aJ;}function o(aL){var aM=[];var aK=aq(aL);for(var aJ=0;aJ0){aJ.setAttribute("style",aI);}aJ.innerHTML=" ";return aJ;}function S(aH,aJ,aI){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]==="undefined"){window["jsplus_"+aK+"_listeners"]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ][F(aH)]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ][F(aH)]=[];}window["jsplus_"+aK+"_listeners"][aJ][F(aH)].push((function(){var aL=aH;return function(){aI(aL);};})());}function g(aI,aJ){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ][F(aI)]!="undefined"){for(var aH=0;aHaP){aQ.setAttribute("colspan",aL+1);return;}}var aJ="td";if(aO.length>0){aJ=aO[aO.length-1].tagName;}else{if(K(aI)){aJ="th";}}for(;aM<=aP;aM++){var aN=a(aQ.tagName,aH);aI.appendChild(aN);}}function D(aJ,aN,aM){var aK=aJ.parentNode.tagName=="THEAD"?"th":"td";var aP=m(aN);var aH=J(aN);var aI=window.document.createElement("tr");for(var aL=0;aL0){aO.setAttribute("style",aH);}aO.innerHTML=" ";aI.appendChild(aO);}if(aM){aJ.parentNode.insertBefore(aI,aJ);}else{if(aJ.nextSibling!=null){aJ.parentNode.insertBefore(aI,aJ.nextSibling);}else{aJ.parentNode.appendChild(aI);}}return aI;}function L(aH,aI){S(aH,"table_tools",aI);}function ak(aH){g(aH,"table_tools");}function an(aH){var aI=aH.parentNode;while(aI!=null){if(aI.tagName=="TABLE"){return aI;}aI=aI.parentNode;}return null;}function v(aS){var aR=aq(aS);var aH=-1;var aQ=[];for(var aL=0;aL'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");D(document,".jsdialog_plugin_jsplus_bootstrap_table_conf.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_conf .cke_dialog_contents { padding: 0; }"); +}function aG(){var ba=false;if(ba){var be=window.location.hostname;var bd=0;var bb;var bc;if(be.length!=0){for(bb=0,l=be.length;bb',parseValuesFromElement:function(bc){I["features_initial"].tag_name=bc.tagName.toLowerCase();},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_conf_feature_tag_name_"+J(bc)).value=I["features_initial"].tag_name;},parseValuesFromGUI:function(bc){I["features_current"].tag_name=window.document.getElementById("jsplus_bootstrap_table_conf_feature_tag_name_"+J(bc)).value;},apply:function(bd){if(I["features_initial"].tag_name==I["features_current"].tag_name.toLowerCase()){return;}if(I["features_current"].tag_name.length>0){var be=document.createElement(I["features_current"].tag_name);for(var bc=0;bc'+'"+'"+"",parseValuesFromElement:function(be){var bd=C(be,"thead");var bc=bd.length>0;I["features_initial"].header=bc;},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_conf_feature_header_"+J(bc)).value=I["features_initial"].header?"added":"removed";},parseValuesFromGUI:function(bc){I["features_current"].header=window.document.getElementById("jsplus_bootstrap_table_conf_feature_header_"+J(bc)).value=="added";},apply:function(bg){if(I["features_initial"].header==I["features_current"].header){return;}if(I["features_current"].header===true){var bi=bg.ownerDocument;var bd=bi.createElement("thead");var bc=bi.createElement("tr");bd.appendChild(bc);var bh=m(bg);for(var bf=0;bf',parseValuesFromElement:function(be){var bc=C(be,"caption");var bd=bc.length>0;I["features_initial"].caption=bd?bc[0].innerHTML:"";},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_conf_feature_caption_"+J(bc)).value=I["features_initial"].caption; +},parseValuesFromGUI:function(bc){I["features_current"].caption=window.document.getElementById("jsplus_bootstrap_table_conf_feature_caption_"+J(bc)).value;},apply:function(be){if(I["features_initial"].caption==I["features_current"].caption){return;}if(I["features_current"].caption.length>0){var bc=C(be,"caption");var bg=null;if(bc.length>0){bg=bc[0];}else{var bf=be.ownerDocument;bg=bf.createElement("caption");if(be.firstChild!=null){be.insertBefore(bg,be.firstChild);}else{be.appendChild(bg);}}bg.innerHTML=I["features_current"].caption;}else{var bg=C(be,"caption");for(var bd=0;bd'+'"+'"+'"+'"+"",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].horizontalAlign=i(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_conf_feature_cells_horizontal_align_"+J(be);var bg="jsplus_bootstrap_table_conf_feature_cells_horizontal_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].horizontalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].horizontalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_conf_feature_cells_horizontal_align_"+J(be)).value=I["features_initial"].horizontalAlign;},parseValuesFromGUI:function(bc){I["features_current"].horizontalAlign=window.document.getElementById("jsplus_bootstrap_table_conf_feature_cells_horizontal_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].horizontalAlign;if(bd!="do_not_change"){aq(ae(bc),bd);}}},{str:"cells_vertical_align",html:'",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].verticalAlign=M(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_conf_feature_cells_vertical_align_"+J(be);var bg="jsplus_bootstrap_table_conf_feature_cells_vertical_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].verticalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].verticalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_conf_feature_cells_vertical_align_"+J(be)).value=I["features_initial"].verticalAlign;},parseValuesFromGUI:function(bc){I["features_current"].verticalAlign=window.document.getElementById("jsplus_bootstrap_table_conf_feature_cells_vertical_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].verticalAlign;if(bd!="do_not_change"){aZ(ae(bc),bd);}}});}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"link",str:"width_100",add_styles:[["width","100%"]]}],[{type:"text",str:"border"},{type:"link",str:"none",add_styles:[["border","none"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["border","black solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"silver",add_styles:[["border","silver solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["border","white solid 1px"]]}]);}if(s!=4){aP[J(bb)].push([{type:"text",str:"background_color"},{type:"link",str:"transparent",add_styles:[["background-color","transparent"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["background-color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["background-color","black"]]}]);}if(s==20||s==21||s==22||s==30||s==31||s==32){aP[J(bb)].push([{type:"text",str:"font_color"},{type:"link",str:"white",add_styles:[["color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["color","black"]]},{type:"text",str:"/",localize:false},{type:"link",str:"gray",add_styles:[["color","gray"]]}]);}if(s==20||s==21||s==22){aP[J(bb)].push([{type:"text",str:"cells_horizontal_align"},{type:"link",str:"left",add_styles:[["text-align","left"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["text-align","center"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["text-align","right"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["text-align"]}]); +aP[J(bb)].push([{type:"text",str:"cells_vertical_align"},{type:"link",str:"top",add_styles:[["vertical-align","top"]]},{type:"text",str:"/",localize:false},{type:"link",str:"middle",add_styles:[["vertical-align","middle"]]},{type:"text",str:"/",localize:false},{type:"link",str:"bottom",add_styles:[["vertical-align","bottom"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["vertical-align"]}]);}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"text",str:"align_table"},{type:"link",str:"left",add_styles:[["margin-left","0"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["margin-left","auto"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["margin-left","auto"],["margin-right","0"]]}]);if(s==1){aP[J(bb)].push([{col:2,type:"text",str:"jsplus_bootstrap_table_conf_striped"},{type:"link",str:"enable",add_classes:["table-striped"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-striped"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_conf_bordered"},{type:"link",str:"enable",add_classes:["table-bordered"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-bordered"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_conf_condensed"},{type:"link",str:"enable",add_classes:["table-condensed"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-condensed"]}]);}}for(var ba=0;ba'+(bc>0?" ":"")+aB(ba)+(bc");}else{if(bb.type=="link"){bd.push(''+aB(ba)+"");}}}return bd.join(" ");}function ax(bf){X(bf);var bd="";var bb=[[],[]];for(var bc=0;bc0||aP[J(bf)].length>0){var ba=aS[J(bf)].length;if(bb[0].length>ba){ba=bb[0].length;}if(bb[1].length>ba){ba=bb[1].length;}bd+=''+"";bd+="";if(aS[J(bf)].length>0){bd+='";}if(bb[0].length>0||bb[1].length>0){bd+='";}bd+="";for(var bc=0;bc";if(aS[J(bf)].length>0){bd+='";bd+='";}if(bb[0].length>0||bb[1].length>0){bd+="";}if(bb[1].length>0){bd+='";}bd+="";}bd+=""+"
        ';bd+=s==4?"":A(bf,"apply_features");bd+="0){bd+=' colspan="2"';}bd+=">";if(bb[0].length>0||bb[1].length>0){bd+=A(bf,"quick_styling");}bd+="
        ';}if(aS[J(bf)].length>bc){bd+=A(bf,aS[J(bf)][bc].str);}if(aS[J(bf)].length>0){bd+="';}if(aS[J(bf)].length>bc){bd+=aS[J(bf)][bc].html;}if(aS[J(bf)].length>0){bd+="";if(bb[0].length>bc){bd+=an(bf,bb[0][bc]);}bd+="';if(bb[1].length>bc){bd+=an(bf,bb[1][bc]);}bd+="
        ";}bd+="";bd+=''+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+"
        '+"
        "+'
        '+A(bf,"classes")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"styles")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"attributes")+"
        "+'"+"
        "+"
        '+A(bf,"desc_classes")+"'+A(bf,"desc_styles")+"'+A(bf,"desc_attrs")+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        "; +return bd.replace(/%id%/g,J(bf));}function R(bb){var ba=av(bb);if(af.length==0||ba==null){return ba;}while(!(af.indexOf(ba.tagName.toLowerCase())>-1)){if(ba.parentNode!=null&&ba.parentNode.tagName!="HTML"){ba=ba.parentNode;}else{return null;}}return ba;}function S(bg){var bb={};var bd=bg.getAttribute("class");bb["classes"]=(bd==null||bd.trim().length==0)?[]:bd.split(/\s+/);var ba=bg.getAttribute("style");var be=(ba==null||ba.trim().length==0)?[]:ba.split(/\s*;\s*/);bb["styles"]=[];var bj;var bh;for(var bc in be){var bk=be[bc];var bf=bk.indexOf(":");if(bf!=-1){bj=bk.substr(0,bf).trim();bh=bk.substr(bf+1).trim();if(bj.length>0&&bh.length>0){bb["styles"].push([bj,bh]);}}}bb["attrs"]=[];var bi=bg.attributes;for(var bf=0;bfbd?bh[bd]:null;if(ba!=null&&(bb==0||be[bb-1]!=ba)){be.push(ba);}}return be;}function aL(ba){var bb=[ba];if(s==30||s==31||s==32){bb=aN(ba);}return bb;}function aV(bj){var ba=aL(bj);I=S(ba[0]);I["features_initial"]=[];I["features_current"]=[];I["dirty_classes"]=[];I["dirty_styles"]=[];I["dirty_attrs"]=[];for(var bk=1;bk0&&I["classes"].indexOf(bn)==-1){I["classes"].push(bn);}}var bj=bm.getElementsByClassName("jsplus_bootstrap_table_conf_styles_name_"+J(bh));var bb=bm.getElementsByClassName("jsplus_bootstrap_table_conf_styles_value_"+J(bh));for(var bg=0;bg0&&bl.length>0){var bk=false;for(var bf=0;bf0&&bl.length>0&&bc!="class"&&bc!="style"){var bk=false;for(var bf=0;bf0){ba[I["attrs"][bb][0]]=I["attrs"][bb][1];}}return ba;}function F(bh,bj){var bi=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bo=this.parentNode.getElementsByTagName("input")[0];bo.removeAttribute("readonly"); +var bq=aw(bo);delete bq["background-color"];bq["width"]="167px";y(bo,bq);var bp=I["dirty_classes"].indexOf(bo.value);if(bp>-1){I["dirty_classes"].splice(bp,1);}this.parentNode.removeChild(this);};var bl=window.document;var bb=bl.getElementById("jsplus_bootstrap_table_conf_classes_"+J(bh));var bn=I["dirty_classes"].indexOf(bj)>-1;var bg=bn?140:167;var bf=bn?"background-color:#eee;":"";var bk=bl.createElement("input");if(bn){bk.setAttribute("readonly","readonly");}bk.setAttribute("class","jsplus_bootstrap_table_conf_class_value_"+J(bh));bk.setAttribute("style",bf+"float:left;width:"+bg+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bk.setAttribute("value",bj);if(bn){var bd=bl.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_conf_dirty_"+J(bh));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bh,"dirty_class"));bd.innerHTML="⚠";}var ba=bl.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_conf_class_delete_"+J(bh));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bh,"del"));ba.innerHTML="-";var bc=bl.createElement("div");var bm=false;if(bj=="cke_show_border"||bj.indexOf("jsplus_advanced_blocks")===0||bj.indexOf("jsplus_bootstrap_advanced_blocks")===0||bj.indexOf("jsplus_foundation_advanced_blocks")===0){bm=true;}bc.setAttribute("style","padding-bottom:5px;height:27px"+(bm?";display:none":""));bc.appendChild(bk);if(bn){bc.appendChild(bd);}bc.appendChild(ba);bb.appendChild(bc);ba.onclick=bi;if(bn){bd.onclick=be;}}function a0(bc,bb,ba){a7(bc,bb,ba,true);}function P(bb,ba,bc){a7(bb,ba,bc,false);}function a7(bj,bb,bn,bp){var bl=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bv=this.parentNode.getElementsByTagName("input");bs=bv[1];bs.removeAttribute("readonly");var bu=aw(bs);delete bu["background-color"];bu["width"]="151px";y(bs,bu);var bs=bv[0];bs.removeAttribute("readonly");ay(bs,"background-color");var br=bp?"dirty_styles":"dirty_attrs";var bt=I[br].indexOf(bs.value);if(bt>-1){I[br].splice(bt,1);}this.parentNode.removeChild(this);};var bq=I[bp?"dirty_styles":"dirty_attrs"].indexOf(bb)>-1;var bf=bq?124:151;var bi=bq?"background-color:#eee;":"";var bo=bp?"styles":"attrs";var bm=window.document;var bk=bm.getElementById("jsplus_bootstrap_table_conf_"+bo+"_"+J(bj));var bh=bm.createElement("input");if(bq){bh.setAttribute("readonly","readonly");}bh.setAttribute("class","jsplus_bootstrap_table_conf_"+bo+"_name_"+J(bj));bh.setAttribute("style",bi+"float:left;width:85px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bh.setAttribute("value",bb);var bg=bm.createElement("input");if(bq){bg.setAttribute("readonly","readonly");}bg.setAttribute("class","jsplus_bootstrap_table_conf_"+bo+"_value_"+J(bj));bg.setAttribute("style",bi+"float:left;width:"+bf+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bg.setAttribute("value",bn);if(bq){var bd=bm.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_conf_dirty_"+J(bj));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bj,bp?"dirty_style":"dirty_attr"));bd.innerHTML="⚠";}var ba=bm.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_conf_"+bo+"_delete_"+J(bj));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bj,"del"));ba.innerHTML="-";var bc=bm.createElement("div");bc.setAttribute("style","padding-bottom:5px;height:27px");bc.appendChild(bh);bc.appendChild(bg);if(bq){bc.appendChild(bd);}bc.appendChild(ba);bk.appendChild(bc);ba.onclick=bl;if(bq){bd.onclick=be;}}function aR(bd){var bf=window.document;var ba=bf.getElementById("jsplus_bootstrap_table_conf_classes_"+J(bd));ba.innerHTML="";for(var bc in I["classes"]){F(bd,I["classes"][bc]);}var be=bf.getElementById("jsplus_bootstrap_table_conf_styles_"+J(bd));be.innerHTML="";for(var bc in I["styles"]){a0(bd,I["styles"][bc][0],I["styles"][bc][1]);}var bb=bf.getElementById("jsplus_bootstrap_table_conf_attrs_"+J(bd));bb.innerHTML="";for(var bc in I["attrs"]){P(bd,I["attrs"][bc][0],I["attrs"][bc][1]);}}function h(bc){window.document.getElementById("jsplus_bootstrap_table_conf_add_class_"+J(bc)).onclick=function(){F(bc,"");};window.document.getElementById("jsplus_bootstrap_table_conf_add_style_"+J(bc)).onclick=function(){a0(bc,"","");};window.document.getElementById("jsplus_bootstrap_table_conf_add_attr_"+J(bc)).onclick=function(){P(bc,"",""); +};var bd=(function(){var be=bc;return function(){var bj=aP[J(bc)][parseInt(this.getAttribute("data-id-1"))][parseInt(this.getAttribute("data-id-2"))];if(bj.hasOwnProperty("add_styles")){for(var bk=0;bk-1){bt.push(bh);}}for(var bq=0;bq0){bb.setAttribute("class",bs);}else{bb.removeAttribute("class");}var bc=aw(bb);var bg={};for(var bq=0;bq=bf);return ba.toFixed(1)+bc+bb[bd]+(be?"b":"");}function aB(ba){return ba.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aY(ba){return ba.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function aK(ba){var bb=document.createElement("div");bb.innerHTML=ba;return bb.childNodes;}function aT(ba){return ba.getElementsByTagName("head")[0];}function aQ(ba){return ba.getElementsByTagName("body")[0];}function a4(bc,be){var ba=bc.getElementsByTagName("link");var bd=false;for(var bb=ba.length-1;bb>=0;bb--){if(ba[bb].href==be){ba[bb].parentNode.removeChild(ba[bb]);}}}function az(bd,bf){if(!bd){return;}var ba=bd.getElementsByTagName("link");var be=false;for(var bb=0;bb-1){bb.splice(bb.indexOf(ba),1);}var bd=bb.join(" ").trim();if(bd.length>0){bc.className=bd;}else{if(bc.hasAttribute("class")){bc.removeAttribute("class");}}}function b(ba){if(typeof(ba.className)==="undefined"||ba.className==null){return[];}return ba.className.split(/\s+/);}function a8(bd,ba){var bc=b(bd);for(var bb=0;bb-1){be[bf.substr(0,ba).trim()]=bf.substr(ba+1);}else{be[bf]="";}}return be;}function aF(bc,bb){var bd=aw(bc);for(var ba in bd){var be=bd[ba];if(ba==bb){return be;}}return null;}function aA(bd,bc,ba){var be=aw(bd);for(var bb in be){var bf=be[bb];if(bb==bc&&bf==ba){return true;}}return false;}function H(bc,bb,ba){var bd=aw(bc);bd[bb]=ba;y(bc,bd);}function ay(bb,ba){var bc=aw(bb);delete bc[ba];y(bb,bc);}function y(bb,bd){var bc=[];for(var ba in bd){bc.push(ba+":"+bd[ba]);}if(bc.length>0){bb.setAttribute("style",bc.join(";"));}else{if(bb.hasAttribute("style")){bb.removeAttribute("style");}}}function C(be,bb){var bc;if(Object.prototype.toString.call(bb)==="[object Array]"){bc=bb;}else{bc=[bb];}for(var bd=0;bd-1){ba.push(be.childNodes[bd]);}}return ba;}function m(bd){var bc=aJ(bd);var be=0;for(var bb=0;bbbe){be=bf.length;}}return be;}function ar(ba){return C(ba,["td","th"]);}function i(be){var bd;for(var ba=0;ba0){return bb;}}return 1;}function aI(ba){if(ba.hasAttribute("rowspan")){var bb=parseInt(ba.getAttribute("rowspan"));if(!isNaN(bb)&&bb>0){return bb;}}return 1;}function aJ(bh){var bc=[];var bi=[null,"tbody","thead","tfoot"];for(var bb=0;bb0){for(var bf=0;bf0){bc.push(bd[bf]);}}return bc;}function p(be){var bf=[];var bd=aJ(be);for(var bc=0;bc0){bc.setAttribute("style",bb);}bc.innerHTML=" ";return bc;}function ah(ba,bc,bb){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]==="undefined"){window["jsplus_"+bd+"_listeners"]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc]==="undefined"){window["jsplus_"+bd+"_listeners"][bc]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc][J(ba)]==="undefined"){window["jsplus_"+bd+"_listeners"][bc][J(ba)]=[];}window["jsplus_"+bd+"_listeners"][bc][J(ba)].push((function(){var be=ba;return function(){bb(be);};})());}function g(bb,bc){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc][J(bb)]!="undefined"){for(var ba=0; +babi){bj.setAttribute("colspan",be+1);return;}}var bc="td";if(bh.length>0){bc=bh[bh.length-1].tagName;}else{if(O(bb)){bc="th";}}for(;bf<=bi;bf++){var bg=a(bj.tagName,ba);bb.appendChild(bg);}}function E(bc,bg,bf){var bd=bc.parentNode.tagName=="THEAD"?"th":"td";var bi=m(bg);var ba=N(bg);var bb=window.document.createElement("tr");for(var be=0;be0){bh.setAttribute("style",ba);}bh.innerHTML=" ";bb.appendChild(bh);}if(bf){bc.parentNode.insertBefore(bb,bc);}else{if(bc.nextSibling!=null){bc.parentNode.insertBefore(bb,bc.nextSibling);}else{bc.parentNode.appendChild(bb);}}return bb;}function T(ba,bb){ah(ba,"table_tools",bb);}function aE(ba){g(ba,"table_tools");}function aH(ba){var bb=ba.parentNode;while(bb!=null){if(bb.tagName=="TABLE"){return bb;}bb=bb.parentNode;}return null;}function x(bl){var bk=aJ(bl);var ba=-1;var bj=[];for(var be=0;beA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;A'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");x(document,".jsdialog_plugin_jsplus_bootstrap_table_new.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_new.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_new.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_new .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_new .cke_dialog_contents { padding: 0; }"); +}var m=21;var k=null;var j=null;var i=[];var av;var aw;var ap;var D="";var y="";var B="";var aj={};if(m==20||m==21||m==22){t("use_dialog",false);t("show_options",true);t("show_advanced_options",true);if(m==20){t("default_width_100",false);}t("default_add_header",false);t("default_class","");t("default_style","");if(m==21){t("default_striped",true);t("default_bordered",false);t("default_condensed",false);}i=[];var T="border:1px solid rgb(171, 207, 255);background-color:rgb(195, 217, 255)";if(m==21){T="border:1px solid #6f5499;background-color:#9174C0";}else{if(m==22){T="border:1px solid #007095;background-color:#008cba";}}for(var al=0;al<6;al++){for(var F=0;F<6;F++){i.push(['
        ',F+","+al,"table"]);}}D=''+""+""+'"+'"+""+""+"
        ';B="'+(m==20?'
        ':"")+'
        '+(m==21?'
        '+'
        '+'
        ':"")+'
        '+'
        '+'
        '+"
        "+"
        ";if(m==20){aj["width_100"]=true;}aj["add_header"]=false;aj["class"]="";aj["style"]="";if(m==21){aj["striped"]=true;aj["bordered"]=false;aj["condensed"]=false;}}else{if(m==3){t("use_dialog",false);X("jsplus_bootstrap_table_new",[]);t("popup_width",400);t("dialog_width",400);t("dialog_height",400);}else{if(m==0){t("use_dialog",false);av=360;aw=384;ap=335;i=[['','

        33%

        67%

        ',"html"],['','

        50%

        50%

        ',"html"],['','

        67%

        33%

        ',"html"],['','

        25%

        25%

        50%

        ',"html"],['','

        25%

        25%

        25%

        25%

        ',"html"],['','

        50%

        25%

        25%

        ',"html"],['','

        Text text text

        ',"html"],['','

        25%

        50%

        25%

        ',"html"],['','

        Text text text

        ',"html"]]; +}else{if(m==1){t("use_dialog",false);t("default_col_type","xs");av=660;aw=675;ap=215;aj["col-type"]="xs";D=''+""+""+'"+'"+'"+""+""+"
        '+'
        Columns:
        '+'
        Rows:
        '+"
        ';B="'+'
        Column type:
        '+'
        '+'"+"
        "+'
        '+'"+"
        "+'
        '+'"+"
        "+'
        '+'"+"
        "+'
        '+'"+"
        "+"
        ";i=[['
        1
        ','

        col-xs-1

        ',"html"],['
        2
        ','

        col-xs-2

        ',"html"],['
        3
        ','

        col-xs-3

        ',"html"],['
        4
        ','

        col-xs-4

        ',"html"],['
        5
        ','

        col-xs-5

        ',"html"],['
        6
        ','

        col-xs-6

        ',"html"],['
        7
        ','

        col-xs-7

        ',"html"],['
        8
        ','

        col-xs-8

        ',"html"],['
        9
        ','

        col-xs-9

        ',"html"],['
        10
        ','

        col-xs-10

        ',"html"],['
        11
        ','

        col-xs-11

        ',"html"],['
        12
        ','

        col-xs-12

        ',"html"],['
        6 / 6
        ','

        col-xs-6

        col-xs-6

        ',"html"],['
        4 / 4 / 4
        ','

        col-xs-4

        col-xs-4

        col-xs-4

        ',"html"],['
        3 / 3 / 3 / 3
        ','

        col-xs-3

        col-xs-3

        col-xs-3

        col-xs-3

        ',"html"],['
        9 / 3
        ','

        col-xs-9

        col-xs-3

        ',"html"],['
        3 / 9
        ','

        col-xs-3

        col-xs-9

        ',"html"],['
        8 / 4
        ','

        col-xs-8

        col-xs-4

        ',"html"],['
        12
        ','

        col-xs-12

        ',"html"],['
        4 / 8
        ','

        col-xs-4

        col-xs-8

        ',"html"],['
        7 / 5
        ','

        col-xs-7

        col-xs-5

        ',"html"],['
        5 / 7
        ','

        col-xs-5

        col-xs-7

        ',"html"],['
        6 / 3 / 3
        ','

        col-xs-6

        col-xs-3

        col-xs-3

        ',"html"],['
        3 / 6 / 3
        ','

        col-xs-3

        col-xs-6

        col-xs-3

        ',"html"],['
        3 / 3 / 6
        ','

        col-xs-3

        col-xs-3

        col-xs-6

        ',"html"],['
        0
        ','
        ',"html"],]; +}else{if(m==2){t("use_dialog",false);t("default_col_type","small");av=660;aw=675;ap=215;aj["col-type"]="small";D=''+""+""+'"+'
        '+'
        Columns:
        '+'
        Rows:
        '+"
        ';B=''+'
        Column type:

        '+''+''+''+"
        ";i=[['
        1
        ','
        col-1
        ',"html"],['
        2
        ','
        col-2
        ',"html"],['
        3
        ','
        col-3
        ',"html"],['
        4
        ','
        col-4
        ',"html"],['
        5
        ','
        col-5
        ',"html"],['
        6
        ','
        col-6
        ',"html"],['
        7
        ','
        col-7
        ',"html"],['
        8
        ','
        col-8
        ',"html"],['
        9
        ','
        col-9
        ',"html"],['
        10
        ','
        col-10
        ',"html"],['
        11
        ','
        col-11
        ',"html"],['
        12
        ','
        col-12
        ',"html"],['
        6 / 6
        ','
        col-6
        col-6
        ',"html"],['
        4 / 4 / 4
        ','
        col-4
        col-4
        col-4
        ',"html"],['
        3 / 3 / 3 / 3
        ','
        col-3
        col-3
        col-3
        col-3
        ',"html"],['
        9 / 3
        ','
        col-9
        col-3
        ',"html"],['
        3 / 9
        ','
        col-3
        col-9
        ',"html"],['
        8 / 4
        ','
        col-8
        col-4
        ',"html"],['
        12
        ','
        col-12
        ',"html"],['
        4 / 8
        ','
        col-4
        col-8
        ',"html"],['
        7 / 5
        ','
        col-7
        col-5
        ',"html"],['
        5 / 7
        ','
        col-5
        col-7
        ',"html"],['
        6 / 3 / 3
        ','
        col-6
        col-3
        col-3
        ',"html"],['
        3 / 6 / 3
        ','
        col-3
        col-6
        col-3
        ',"html"],['
        3 / 3 / 6
        ','
        col-3
        col-3
        col-6
        ',"html"],['
        0
        ','
        ',"html"],]; +}else{if(m==10){t("use_dialog",false);av=345;aw=370;ap=360;i=[['
        '+'
        '+'Success! Your request was finished successfully.'+"
        "+"
        ",'
        '+"Success! Your request was finished successfully."+"
        ","html"],['
        '+'
        '+'Info. Here are details for your query.'+"
        "+"
        ",'
        '+"Info. Here are details for your query."+"
        ","html"],['
        '+'
        '+'Warning! Are you sure you want to proceed?'+"
        "+"
        ",'
        '+"Warning! Are you sure you want to proceed?"+"
        ","html"],['
        '+'
        '+'Danger! System state is critical, check the configuration!'+"
        "+"
        ",'
        '+"Danger! System state is critical, check the configuration!"+"
        ","html"],['
        '+'
        '+'Message. Lorem ipsum dolor sit amet, consectetur.'+"
        "+"
        ",'
        '+"Message. Lorem ipsum dolor sit amet, consectetur."+"
        ","html"]];}else{if(m==11){t("use_dialog",false);av=400;aw=420;ap=300;i=[['
        Success! Your request was finished successfully
        ','',"html"],['
        Info. Here are details for your query.
        ','',"html"],['
        Warning! Are you sure you want to proceed?
        ','',"html"],['
        Danger! System state is critical, check the configuration!
        ','',"html"]]; +}else{if(m==12){av=345;aw=370;ap=300;i=[['
        Success! Your request was finished successfully
        ','',"html"],['
        Info. Here are details for your query.
        ','',"html"],['
        Warning! Are you sure you want to proceed?
        ','',"html"],['
        Danger! System state is critical, check the configuration!
        ','',"html"],['
        Message. Lorem ipsum dolor sit amet, consectetur.
        ','',"html"]];}}}}}}}}function d(aG){var aF="-"+C(aG);var aE=document.getElementById("jsplus_bootstrap_table_new-dialog-root"+aF);if(aE!=null&&aE.children.length==0){aE.innerHTML="";}aE=j.getElementById("jsplus_bootstrap_table_new-popup-root"+aF);aE.innerHTML=y.replace(/%id%/g,C(aG)).replace(/\{\{([^}]*)\}\}/g,function(aI,aH){return u(aG,aH);});e(aG,aE.ownerDocument);}function z(aH){var aF=document.getElementsByClassName("jsplus_bootstrap_table_new-selected");var aG=null;for(var aE=0;aE '+aj["col-type"].toUpperCase(),'jsplus_bootstrap_table_new_radio_%id%" checked/> '+aj["col-type"].toUpperCase());}else{if(m==2){if(["small","medium","large"].indexOf(V(aF,"default_col_type").toLowerCase())!=-1){aj["col-type"]=V(aF,"default_col_type").toLowerCase();}}else{if(m==10){}else{if(m==11){}else{if(m==12){}}}}}}}y="";for(var aE=0;aE'+i[aE][0].replace(/\{path\}/g,ax(aF))+"";}if(m==20||m==21||m==22){D=D.replace(/%table_width%/g,tableWidth);B=B.replace(/%options_width%/g,optionsWidth);}y='"+'
        '+y+"
        ";}function s(aE,aF){K(aE,aF);ag(aE);}function W(aG,aH){var aF=document.getElementsByClassName("jsplus_bootstrap_table_new-template-"+C(aG));for(var aE=0;aE1){aJ=i[aG][1].slice(0);if(i[aG].length>2){aN=i[aG][2];}}if(Object.prototype.toString.call(aJ)==="[object Array]"){for(var aH=0;aH0){aQ.push(aj["class"].trim());}if(ak()=="ckeditor"){aQ.push("cke_show_border");}var aP=aj["style"].trim();if(m==20&&aj["width_100"]){if(aP.length>0&&aP.substr(aP.length-1,1)!=";"){aP+="; ";}aP+="width: 100%";}aJ="0?(" class='"+aQ.join(" ")+"'"):"")+(aP.length>0?(" style='"+aP+"'"):"")+">\n";if(aj["add_header"]){aJ+="\t\n\t\t\n";for(var aH=0;aH<=aF;aH++){aJ+="\t\t\t \n";}aJ+="\t\t\n\t\n";}aJ+="\t\n";for(var aE=0;aE<=aR;aE++){aJ+="\t\t\n";for(var aM=0;aM<=aF;aM++){aJ+="\t\t\t \n";}aJ+="\t\t\n";}aJ+="\t\n";aJ+="\n";ar(aL,aJ);}else{if(aN=="text"){ar(aL,""+aJ+"");}else{if(aN=="html"){if(m==1){if(aj["col-type"]=="sm"){aJ=aJ.replace(/col-xs/g,"col-sm");}else{if(aj["col-type"]=="md"){aJ=aJ.replace(/col-xs/g,"col-md");}else{if(aj["col-type"]=="lg"){aJ=aJ.replace(/col-xs/g,"col-lg");}else{if(aj["col-type"]=="xl"){aJ=aJ.replace(/col-xs/g,"col-xl");}}}}}else{if(m==2){if(aj["col-type"]!="small"){aJ=aJ.replace(/small/g,aj["col-type"]);}}}ao(aL,aJ,aO);}}}}function ao(aF,aE,aG){if(typeof(aG)=="undefined"||aG==null){ar(aF,aE);}else{o(aF,aG,aE);}}function I(aE,aI,aG){if(typeof aI=="undefined"){aI=true;}if(typeof aG=="undefined"){aG=" ";}if(typeof(aE)=="undefined"){return"";}var aJ=1000;if(aE=aJ);return aE.toFixed(1)+aG+aF[aH]+(aI?"b":"");}function ad(aE){return aE.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function au(aE){return aE.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ai(aE){var aF=document.createElement("div");aF.innerHTML=aE;return aF.childNodes;}function aq(aE){return aE.getElementsByTagName("head")[0];}function an(aE){return aE.getElementsByTagName("body")[0];}function aA(aG,aI){var aE=aG.getElementsByTagName("link");var aH=false;for(var aF=aE.length-1;aF>=0;aF--){if(aE[aF].href==aI){aE[aF].parentNode.removeChild(aE[aF]);}}}function ab(aH,aJ){if(!aH){return;}var aE=aH.getElementsByTagName("link");var aI=false;for(var aF=0;aF-1){aF.splice(aF.indexOf(aE),1);}var aH=aF.join(" ").trim();if(aH.length>0){aG.className=aH;}else{if(aG.hasAttribute("class")){aG.removeAttribute("class");}}}function a(aE){if(typeof(aE.className)==="undefined"||aE.className==null){return[];}return aE.className.split(/\s+/);}function aD(aH,aE){var aG=a(aH);for(var aF=0;aF-1){aI[aJ.substr(0,aE).trim()]=aJ.substr(aE+1);}else{aI[aJ]="";}}return aI;}function ah(aG,aF){var aH=Z(aG);for(var aE in aH){var aI=aH[aE];if(aE==aF){return aI;}}return null;}function ac(aH,aG,aE){var aI=Z(aH);for(var aF in aI){var aJ=aI[aF]; +if(aF==aG&&aJ==aE){return true;}}return false;}function A(aG,aF,aE){var aH=Z(aG);aH[aF]=aE;r(aG,aH);}function aa(aF,aE){var aG=Z(aF);delete aG[aE];r(aF,aG);}function r(aF,aH){var aG=[];for(var aE in aH){aG.push(aE+":"+aH[aE]);}if(aG.length>0){aF.setAttribute("style",aG.join(";"));}else{if(aF.hasAttribute("style")){aF.removeAttribute("style");}}}function w(aI,aF){var aG;if(Object.prototype.toString.call(aF)==="[object Array]"){aG=aF;}else{aG=[aF];}for(var aH=0;aH-1){aE.push(aI.childNodes[aH]);}}return aE;}function ag(){}function o(aF,aG,aE){CKEDITOR.tools.callFunction(aG,aE);}CKEDITOR.plugins.add("jsplus_bootstrap_table_new",{requires:"panelbutton,floatpanel",lang:"en",afterInit:function(aF){P(aF);y=(D+y+B);CKEDITOR.dialog.add("jsplus_bootstrap_table_new-"+C(aF),function(aG){return{resizable:0,width:aw,minWidth:aw,height:ap,maxHeight:ap,title:u(aG,"jsplus_bootstrap_table_new_title"),onShow:function(){J(aG);},onOk:function(){z(aG);},onCancel:function(){az(aG);},contents:[{id:"jsplus_bootstrap_table_new-tab-"+C(aG),expand:true,focus:true,elements:[{type:"vbox",padding:10,children:[{type:"html",html:'
        '}]}]}]};});if(H(aF)){var aE=aF.addCommand("jsplus_bootstrap_table_new-"+C(aF),new CKEDITOR.dialogCommand("jsplus_bootstrap_table_new-"+C(aF)));aF.ui.addButton("jsplus_bootstrap_table_new",{label:u(aF,"jsplus_bootstrap_table_new_title"),title:u(aF,"jsplus_bootstrap_table_new_title"),icon:this.path+"/icons/jsplus_bootstrap_table_new.png",command:"jsplus_bootstrap_table_new-"+C(aF)});}else{aF.ui.add("jsplus_bootstrap_table_new",CKEDITOR.UI_PANELBUTTON,{icon:this.path+"icons/jsplus_bootstrap_table_new.png",label:u(aF,"jsplus_bootstrap_table_new_title"),command:"jsplus_bootstrap_table_new",modes:{wysiwyg:1},editorFocus:0,caption:null,table:null,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":""}},onBlock:function(aG,aI){aI.autoSize=true;aI.element.addClass("cke_colorblock");k=aG;j=aI.element.getDocument().$;var aH=new CKEDITOR.dom.element("div");aH.$.setAttribute("id","jsplus_bootstrap_table_new-popup-root-"+C(aF));aH.$.setAttribute("style",((typeof(av)=="undefined"&&av!=null)?"":"width:"+av+"px;")+"padding:10px");aI.element.append(aH);CKEDITOR.ui.fire("ready",this);},onOpen:function(){d(aF);}});}}});})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/icons/jsplus_bootstrap_table_row_conf.png b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/icons/jsplus_bootstrap_table_row_conf.png new file mode 100644 index 0000000..4fc7366 Binary files /dev/null and b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/icons/jsplus_bootstrap_table_row_conf.png differ diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/en.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/en.js new file mode 100644 index 0000000..6280382 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/en.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_table_row_conf', 'en', { jsplus_edit_tag_title: 'Edytuj tag', jsplus_tag_conf_title: 'Parametry tagu', jsplus_table_conf_title: 'Ustawienia tabeli', jsplus_bootstrap_table_conf_title: 'Ustawienia tabeli Bootstrap', jsplus_foundation_table_conf_title: 'Ustawienia tabeli Foundation', jsplus_table_row_conf_title: 'Ustawienia wiersza tabeli', jsplus_bootstrap_table_row_conf_title: 'Ustawienia wiersza tabeli Bootstrap', jsplus_foundation_table_row_conf_title: 'Ustawienia wiersza tabeli Foundation', jsplus_table_cell_conf_title: 'Ustawienia komórki tabeli', jsplus_bootstrap_table_cell_conf_title: 'Ustawienia komórki tabeli Bootstrap', jsplus_foundation_table_cell_conf_title: 'Ustawienia komórki tabeli Foundation', jsplus_table_col_conf_title: 'Ustawienia kolumny tabeli', jsplus_bootstrap_table_col_conf_title: 'Ustawienia kolumny tabeli Bootstrap', jsplus_foundation_table_col_conf_title: 'Ustawienia kolumny tabeli Foundation', dirty_class: 'Niektóre elementy mają różne wartości dla parametru klasa. Kliknij, aby ustawić jedną wspólną klasę dla nich wszystkich.', dirty_style: 'Niektóre elementy mają różne wartości dla parametru styl. Kliknij, aby ustawić jeden wspólny styl dla nich wszystkich.', dirty_attr: 'Niektóre elementy mają różne wartości dla parametru atrybut. Kliknij, aby ustawić jedną wspólny artybut dla nich wszystkich.', tag_name: 'Nazwa tagu', apply_features: 'Zastosuj funkcje', caption: 'Opis', cells_horizontal_align: 'Wyrównanie w poziomie w komórkach', cells_vertical_align: 'Wyrównanie w pionie w komórkach', do_not_change: 'Nie zmieniaj', def: 'Domyślnie', left: 'Do lewej', center: 'Do środka', middle: 'Do środka', right: 'Do prawej', top: 'Do góry', bottom: 'Do dołu', header: 'Nagłówek', added: 'Dodaj', removed: 'Usuń', quick_styling: 'Szybkie style', width_100: 'szerokość 100%', border: 'Ramka', none: 'brak', black: 'czarny', silver: 'srebrny', white: 'biały', font_color: 'Kolor czcionki', gray: 'szary', background_color: 'Kolor tła', transparent: 'brak', align_table: 'Wyrównanie tabeli', jsplus_bootstrap_table_conf_striped: 'Pasiasta', jsplus_bootstrap_table_conf_bordered: 'Z ramką', jsplus_bootstrap_table_conf_condensed: 'Zagęszczona', enable: 'Aktywna', disable: 'Nieaktywna', classes: 'Klasy', styles: 'Style', attributes: 'Atrybuty', desc_classes: 'Jedna klasa w linii', desc_styles: 'Pary nazwa:wartość', desc_attrs: 'Wyłączając klasy i style', del: 'Usuń', add: 'Dodaj', btn_ok: "Zatwierdź", btn_cancel: "Anuluj" } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/ru.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/ru.js new file mode 100644 index 0000000..5ee33cf --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/lang/ru.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang('jsplus_bootstrap_table_row_conf', 'en', { jsplus_edit_tag_title: 'Редактировать тег', jsplus_tag_conf_title: 'Параметры тега', jsplus_table_conf_title: 'Настройка таблицы', jsplus_bootstrap_table_conf_title: 'Настройка Bootstrap таблицы', jsplus_foundation_table_conf_title: 'Настройка Foundation таблицы', jsplus_table_row_conf_title: 'Настройка строки таблицы', jsplus_bootstrap_table_row_conf_title: 'Настройка строки Bootstrap таблицы', jsplus_foundation_table_row_conf_title: 'Настройка строки Foundation таблицы', jsplus_table_cell_conf_title: 'Настройка ячейки таблицы', jsplus_bootstrap_table_cell_conf_title: 'Настройка ячейки Bootstrap таблицы', jsplus_foundation_table_cell_conf_title: 'Настройка ячейки Foundation таблицы', jsplus_table_col_conf_title: 'Настройка ячеек колонки таблицы', jsplus_bootstrap_table_col_conf_title: 'Настройка ячеек колонки Bootstrap таблицы', jsplus_foundation_table_col_conf_title: 'Настройка ячеек колонки Foundation таблицы', dirty_class: 'Значения этого класса различаются у нескольких элементов. Кликните, чтобы задать единый класс.', dirty_style: 'Значения этого стиля различаются у нескольких элементов. Кликните, чтобы задать единый стиль.', dirty_attr: 'Значения этого атрибута различаются у нескольких элементов. Кликните, чтобы задать единое значение атрибута.', tag_name: 'Имя тега', apply_features: 'Применить свойства', caption: 'Заголовок', cells_horizontal_align: 'Гризонтальное выравнивание в ячейках', cells_vertical_align: 'Вертикальное выравнивание в ячейках', do_not_change: 'Не менять', def: 'По умолчанию', left: 'Слева', center: 'По центру', middle: 'По центру', right: 'Справа', top: 'Сверху', bottom: 'Снизу', header: 'Шапка', added: 'Добавлен', removed: 'Удалён', quick_styling: 'Быстрая стилизация', width_100: '100% ширина', border: 'Стиль рамки', none: 'Нет', black: 'Черный', silver: 'Светло-серый', white: 'Белый', font_color: 'Цвет шрифта', gray: 'Серый', background_color: 'Цвет фона', transparent: 'Прозрачный', align_table: 'Выравнивание таблицы', jsplus_bootstrap_table_striped: 'Полосатая', jsplus_bootstrap_table_bordered: 'С границами', jsplus_bootstrap_table_condensed: 'Компактная', enable: 'Да', disable: 'Нет', classes: 'Классы', styles: 'Стили', attributes: 'Атрибуты', desc_classes: 'Один класс на строку', desc_styles: 'Пары ключ:значение', desc_attrs: 'Кроме "class" и "style"', del: 'Удалить', add: 'Добавить', btn_ok: "OK", btn_cancel: "Отмена" } ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/plugin.js b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/plugin.js new file mode 100644 index 0000000..d2f979e --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_bootstrap_table_row_conf/plugin.js @@ -0,0 +1,9 @@ +(function(){function aM(){return"ckeditor";}function j(ba){return ba.elementMode==3;}function J(ba){return ba.name.replace(/\[/,"_").replace(/\]/,"_");}function o(ba){return ba.container.$;}function e(ba){return ba.document.$;}function ac(ba){return ba.getSnapshot();}function ag(bb,ba){bb.loadSnapshot(ba);}function av(bb){if(bb.getSelection()==null){return null;}var ba=bb.getSelection().getStartElement();if(ba&&ba.$){return ba.$;}return null;}function am(){return CKEDITOR.basePath;}function a1(){return k("jsplus_bootstrap_table_row_conf");}function k(ba){return CKEDITOR.plugins.getPath(ba);}function Z(){return CKEDITOR.version.charAt(0)=="3"?3:4;}function A(bc,bb){if(Z()==3){var ba=(bb.indexOf("jsplus_bootstrap_table_row_conf_")==-1)?("jsplus_bootstrap_table_row_conf_"+bb):bb;if(typeof(bc.lang[ba])!=="undefined"){return bc.lang[ba];}else{console.log("(v3) editor.lang['jsplus_bootstrap_table_row_conf'] not defined");}}else{if(typeof(bc.lang["jsplus_bootstrap_table_row_conf"])!=="undefined"){if(typeof(bc.lang["jsplus_bootstrap_table_row_conf"][bb])!=="undefined"){return bc.lang["jsplus_bootstrap_table_row_conf"][bb];}else{console.log("editor.lang['jsplus_bootstrap_table_row_conf']['"+bb+"'] not defined");}}else{console.log("editor.lang['jsplus_bootstrap_table_row_conf'] not defined");}}return"";}function ao(bb,ba){return al(bb,"jsplus_bootstrap_table_row_conf_"+ba);}function al(bb,ba){var bc=bb.config[ba];return bc;}function z(ba,bb){au("jsplus_bootstrap_table_row_conf_"+ba,bb);}function au(ba,bb){CKEDITOR.config[ba]=bb;}function aX(bc,bb){var ba=CKEDITOR.dom.element.createFromHtml(bb);bc.insertElement(ba);}function w(){return"";}var ai=0;var L=1;var Y=2;function u(ba,bd,bb){var bc=null;if(bb==ai){bc=CKEDITOR.TRISTATE_DISABLED;}else{if(bb==L){bc=CKEDITOR.TRISTATE_OFF;}else{if(bb==Y){bc=CKEDITOR.TRISTATE_ON;}}}if(bc!=null&&ba.ui&&ba.ui.get(bd)){ba.ui.get(bd).setState(bc);}}function ad(ba,bb){ba.on("selectionChange",function(bc){bb(bc.editor);});}function K(bb,ba,bc){if(ba=="beforeGetOutputHTML"){bb.on("toDataFormat",function(bd){return bc(bb,bd.data.dataValue);},null,null,4);return;}bb.on(ba,(function(){var bd=bb;return function(){bc(bd);};})());}function B(bc,ba,bf,bd,be,bb){bc.addCommand(ba,{exec:be});bc.ui.addButton(ba,{title:A(bc,bd.replace(/^jsplus_/,"")),label:A(bc,bd.replace(/^jsplus_/,"")),icon:a1()+"icons/"+bf+".png",command:bf});}function v(ba){return ba.mode=="wysiwyg";}function aD(bb,ba,bc){CKEDITOR.plugins.add(bb,{icons:bb,lang:ba,init:function(bd){bc(bd);}});}function f(){JSDialog.Config.skin=null;JSDialog.Config.templateDialog='
        '+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"
        ";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");D(document,".jsdialog_plugin_jsplus_bootstrap_table_row_conf.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_conf .cke_dialog_contents { padding: 0; }"); +}function aG(){var ba=false;if(ba){var be=window.location.hostname;var bd=0;var bb;var bc;if(be.length!=0){for(bb=0,l=be.length;bb',parseValuesFromElement:function(bc){I["features_initial"].tag_name=bc.tagName.toLowerCase();},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_tag_name_"+J(bc)).value=I["features_initial"].tag_name;},parseValuesFromGUI:function(bc){I["features_current"].tag_name=window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_tag_name_"+J(bc)).value;},apply:function(bd){if(I["features_initial"].tag_name==I["features_current"].tag_name.toLowerCase()){return;}if(I["features_current"].tag_name.length>0){var be=document.createElement(I["features_current"].tag_name);for(var bc=0;bc'+'"+'"+"",parseValuesFromElement:function(be){var bd=C(be,"thead");var bc=bd.length>0;I["features_initial"].header=bc;},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_header_"+J(bc)).value=I["features_initial"].header?"added":"removed";},parseValuesFromGUI:function(bc){I["features_current"].header=window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_header_"+J(bc)).value=="added";},apply:function(bg){if(I["features_initial"].header==I["features_current"].header){return;}if(I["features_current"].header===true){var bi=bg.ownerDocument;var bd=bi.createElement("thead");var bc=bi.createElement("tr");bd.appendChild(bc);var bh=m(bg);for(var bf=0;bf',parseValuesFromElement:function(be){var bc=C(be,"caption");var bd=bc.length>0;I["features_initial"].caption=bd?bc[0].innerHTML:"";},setGUIByValues:function(bc){window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_caption_"+J(bc)).value=I["features_initial"].caption; +},parseValuesFromGUI:function(bc){I["features_current"].caption=window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_caption_"+J(bc)).value;},apply:function(be){if(I["features_initial"].caption==I["features_current"].caption){return;}if(I["features_current"].caption.length>0){var bc=C(be,"caption");var bg=null;if(bc.length>0){bg=bc[0];}else{var bf=be.ownerDocument;bg=bf.createElement("caption");if(be.firstChild!=null){be.insertBefore(bg,be.firstChild);}else{be.appendChild(bg);}}bg.innerHTML=I["features_current"].caption;}else{var bg=C(be,"caption");for(var bd=0;bd'+'"+'"+'"+'"+"",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].horizontalAlign=i(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_row_conf_feature_cells_horizontal_align_"+J(be);var bg="jsplus_bootstrap_table_row_conf_feature_cells_horizontal_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].horizontalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].horizontalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_cells_horizontal_align_"+J(be)).value=I["features_initial"].horizontalAlign;},parseValuesFromGUI:function(bc){I["features_current"].horizontalAlign=window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_cells_horizontal_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].horizontalAlign;if(bd!="do_not_change"){aq(ae(bc),bd);}}},{str:"cells_vertical_align",html:'",parseValuesFromElement:function(bc){var bd=ae(bc);I["features_initial"].verticalAlign=M(bd);},setGUIByValues:function(be){var bd="jsplus_bootstrap_table_row_conf_feature_cells_vertical_align_"+J(be);var bg="jsplus_bootstrap_table_row_conf_feature_cells_vertical_align_do_not_change"+J(be);var bf=window.document.getElementById(bg);if(bf){if(I["features_initial"].verticalAlign!="do_not_change"){bf.parentNode.removeChild(bf);}}else{if(I["features_initial"].verticalAlign=="do_not_change"){var bc=window.document.getElementById(bd);bf=window.document.createElement("option");bf.id=bg;bf.value="do_not_change";bf.innerText=A(be,"do_not_change");bc.insertBefore(bf,bc.firstChild);}}window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_cells_vertical_align_"+J(be)).value=I["features_initial"].verticalAlign;},parseValuesFromGUI:function(bc){I["features_current"].verticalAlign=window.document.getElementById("jsplus_bootstrap_table_row_conf_feature_cells_vertical_align_"+J(bc)).value;},apply:function(bc){var bd=I["features_current"].verticalAlign;if(bd!="do_not_change"){aZ(ae(bc),bd);}}});}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"link",str:"width_100",add_styles:[["width","100%"]]}],[{type:"text",str:"border"},{type:"link",str:"none",add_styles:[["border","none"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["border","black solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"silver",add_styles:[["border","silver solid 1px"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["border","white solid 1px"]]}]);}if(s!=4){aP[J(bb)].push([{type:"text",str:"background_color"},{type:"link",str:"transparent",add_styles:[["background-color","transparent"]]},{type:"text",str:"/",localize:false},{type:"link",str:"white",add_styles:[["background-color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["background-color","black"]]}]);}if(s==20||s==21||s==22||s==30||s==31||s==32){aP[J(bb)].push([{type:"text",str:"font_color"},{type:"link",str:"white",add_styles:[["color","white"]]},{type:"text",str:"/",localize:false},{type:"link",str:"black",add_styles:[["color","black"]]},{type:"text",str:"/",localize:false},{type:"link",str:"gray",add_styles:[["color","gray"]]}]);}if(s==20||s==21||s==22){aP[J(bb)].push([{type:"text",str:"cells_horizontal_align"},{type:"link",str:"left",add_styles:[["text-align","left"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["text-align","center"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["text-align","right"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["text-align"]}]); +aP[J(bb)].push([{type:"text",str:"cells_vertical_align"},{type:"link",str:"top",add_styles:[["vertical-align","top"]]},{type:"text",str:"/",localize:false},{type:"link",str:"middle",add_styles:[["vertical-align","middle"]]},{type:"text",str:"/",localize:false},{type:"link",str:"bottom",add_styles:[["vertical-align","bottom"]]},{type:"text",str:"/",localize:false},{type:"link",str:"def",remove_styles:["vertical-align"]}]);}if(s==0||s==1||s==2){aP[J(bb)].push([{type:"text",str:"align_table"},{type:"link",str:"left",add_styles:[["margin-left","0"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"center",add_styles:[["margin-left","auto"],["margin-right","auto"]]},{type:"text",str:"/",localize:false},{type:"link",str:"right",add_styles:[["margin-left","auto"],["margin-right","0"]]}]);if(s==1){aP[J(bb)].push([{col:2,type:"text",str:"jsplus_bootstrap_table_row_conf_striped"},{type:"link",str:"enable",add_classes:["table-striped"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-striped"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_row_conf_bordered"},{type:"link",str:"enable",add_classes:["table-bordered"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-bordered"]}],[{col:2,type:"text",str:"jsplus_bootstrap_table_row_conf_condensed"},{type:"link",str:"enable",add_classes:["table-condensed"]},{type:"text",str:"/",localize:false},{type:"link",str:"disable",remove_classes:["table-condensed"]}]);}}for(var ba=0;ba'+(bc>0?" ":"")+aB(ba)+(bc");}else{if(bb.type=="link"){bd.push(''+aB(ba)+"");}}}return bd.join(" ");}function ax(bf){X(bf);var bd="";var bb=[[],[]];for(var bc=0;bc0||aP[J(bf)].length>0){var ba=aS[J(bf)].length;if(bb[0].length>ba){ba=bb[0].length;}if(bb[1].length>ba){ba=bb[1].length;}bd+=''+"";bd+="";if(aS[J(bf)].length>0){bd+='";}if(bb[0].length>0||bb[1].length>0){bd+='";}bd+="";for(var bc=0;bc";if(aS[J(bf)].length>0){bd+='";bd+='";}if(bb[0].length>0||bb[1].length>0){bd+="";}if(bb[1].length>0){bd+='";}bd+="";}bd+=""+"
        ';bd+=s==4?"":A(bf,"apply_features");bd+="0){bd+=' colspan="2"';}bd+=">";if(bb[0].length>0||bb[1].length>0){bd+=A(bf,"quick_styling");}bd+="
        ';}if(aS[J(bf)].length>bc){bd+=A(bf,aS[J(bf)][bc].str);}if(aS[J(bf)].length>0){bd+="';}if(aS[J(bf)].length>bc){bd+=aS[J(bf)][bc].html;}if(aS[J(bf)].length>0){bd+="";if(bb[0].length>bc){bd+=an(bf,bb[0][bc]);}bd+="';if(bb[1].length>bc){bd+=an(bf,bb[1][bc]);}bd+="
        ";}bd+="";bd+=''+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+'"+'"+'"+""+""+"
        '+"
        "+'
        '+A(bf,"classes")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"styles")+"
        "+'"+"
        "+"
        '+"
        "+'
        '+A(bf,"attributes")+"
        "+'"+"
        "+"
        '+A(bf,"desc_classes")+"'+A(bf,"desc_styles")+"'+A(bf,"desc_attrs")+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        '+'
        '+"
        "+"
        "; +return bd.replace(/%id%/g,J(bf));}function R(bb){var ba=av(bb);if(af.length==0||ba==null){return ba;}while(!(af.indexOf(ba.tagName.toLowerCase())>-1)){if(ba.parentNode!=null&&ba.parentNode.tagName!="HTML"){ba=ba.parentNode;}else{return null;}}return ba;}function S(bg){var bb={};var bd=bg.getAttribute("class");bb["classes"]=(bd==null||bd.trim().length==0)?[]:bd.split(/\s+/);var ba=bg.getAttribute("style");var be=(ba==null||ba.trim().length==0)?[]:ba.split(/\s*;\s*/);bb["styles"]=[];var bj;var bh;for(var bc in be){var bk=be[bc];var bf=bk.indexOf(":");if(bf!=-1){bj=bk.substr(0,bf).trim();bh=bk.substr(bf+1).trim();if(bj.length>0&&bh.length>0){bb["styles"].push([bj,bh]);}}}bb["attrs"]=[];var bi=bg.attributes;for(var bf=0;bfbd?bh[bd]:null;if(ba!=null&&(bb==0||be[bb-1]!=ba)){be.push(ba);}}return be;}function aL(ba){var bb=[ba];if(s==30||s==31||s==32){bb=aN(ba);}return bb;}function aV(bj){var ba=aL(bj);I=S(ba[0]);I["features_initial"]=[];I["features_current"]=[];I["dirty_classes"]=[];I["dirty_styles"]=[];I["dirty_attrs"]=[];for(var bk=1;bk0&&I["classes"].indexOf(bn)==-1){I["classes"].push(bn);}}var bj=bm.getElementsByClassName("jsplus_bootstrap_table_row_conf_styles_name_"+J(bh));var bb=bm.getElementsByClassName("jsplus_bootstrap_table_row_conf_styles_value_"+J(bh));for(var bg=0;bg0&&bl.length>0){var bk=false;for(var bf=0;bf0&&bl.length>0&&bc!="class"&&bc!="style"){var bk=false;for(var bf=0;bf0){ba[I["attrs"][bb][0]]=I["attrs"][bb][1];}}return ba;}function F(bh,bj){var bi=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bo=this.parentNode.getElementsByTagName("input")[0]; +bo.removeAttribute("readonly");var bq=aw(bo);delete bq["background-color"];bq["width"]="167px";y(bo,bq);var bp=I["dirty_classes"].indexOf(bo.value);if(bp>-1){I["dirty_classes"].splice(bp,1);}this.parentNode.removeChild(this);};var bl=window.document;var bb=bl.getElementById("jsplus_bootstrap_table_row_conf_classes_"+J(bh));var bn=I["dirty_classes"].indexOf(bj)>-1;var bg=bn?140:167;var bf=bn?"background-color:#eee;":"";var bk=bl.createElement("input");if(bn){bk.setAttribute("readonly","readonly");}bk.setAttribute("class","jsplus_bootstrap_table_row_conf_class_value_"+J(bh));bk.setAttribute("style",bf+"float:left;width:"+bg+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bk.setAttribute("value",bj);if(bn){var bd=bl.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_row_conf_dirty_"+J(bh));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bh,"dirty_class"));bd.innerHTML="⚠";}var ba=bl.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_row_conf_class_delete_"+J(bh));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bh,"del"));ba.innerHTML="-";var bc=bl.createElement("div");var bm=false;if(bj=="cke_show_border"||bj.indexOf("jsplus_advanced_blocks")===0||bj.indexOf("jsplus_bootstrap_advanced_blocks")===0||bj.indexOf("jsplus_foundation_advanced_blocks")===0){bm=true;}bc.setAttribute("style","padding-bottom:5px;height:27px"+(bm?";display:none":""));bc.appendChild(bk);if(bn){bc.appendChild(bd);}bc.appendChild(ba);bb.appendChild(bc);ba.onclick=bi;if(bn){bd.onclick=be;}}function a0(bc,bb,ba){a7(bc,bb,ba,true);}function P(bb,ba,bc){a7(bb,ba,bc,false);}function a7(bj,bb,bn,bp){var bl=function(){this.parentNode.parentNode.removeChild(this.parentNode);};var be=function(){var bv=this.parentNode.getElementsByTagName("input");bs=bv[1];bs.removeAttribute("readonly");var bu=aw(bs);delete bu["background-color"];bu["width"]="151px";y(bs,bu);var bs=bv[0];bs.removeAttribute("readonly");ay(bs,"background-color");var br=bp?"dirty_styles":"dirty_attrs";var bt=I[br].indexOf(bs.value);if(bt>-1){I[br].splice(bt,1);}this.parentNode.removeChild(this);};var bq=I[bp?"dirty_styles":"dirty_attrs"].indexOf(bb)>-1;var bf=bq?124:151;var bi=bq?"background-color:#eee;":"";var bo=bp?"styles":"attrs";var bm=window.document;var bk=bm.getElementById("jsplus_bootstrap_table_row_conf_"+bo+"_"+J(bj));var bh=bm.createElement("input");if(bq){bh.setAttribute("readonly","readonly");}bh.setAttribute("class","jsplus_bootstrap_table_row_conf_"+bo+"_name_"+J(bj));bh.setAttribute("style",bi+"float:left;width:85px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bh.setAttribute("value",bb);var bg=bm.createElement("input");if(bq){bg.setAttribute("readonly","readonly");}bg.setAttribute("class","jsplus_bootstrap_table_row_conf_"+bo+"_value_"+J(bj));bg.setAttribute("style",bi+"float:left;width:"+bf+"px;margin:1px 5px 0 1px;padding:3px 4px;border:1px solid silver;font-size:12px");bg.setAttribute("value",bn);if(bq){var bd=bm.createElement("div");bd.setAttribute("class","jsplus_bootstrap_table_row_conf_dirty_"+J(bj));bd.setAttribute("style","line-height:25px;margin-right:5px;float:left;width:22px;height:22px;text-align:center;color:black;border-radius:2px;background-color:yellow;font-size:17px;font-weight:bold;cursor:pointer");bd.setAttribute("title",A(bj,bp?"dirty_style":"dirty_attr"));bd.innerHTML="⚠";}var ba=bm.createElement("div");ba.setAttribute("class","jsplus_bootstrap_table_row_conf_"+bo+"_delete_"+J(bj));ba.setAttribute("style","float:left;width:22px;height:22px;text-align:center;color:white;border-radius:2px;background-color:lightcoral;font-size:17px;font-weight:bold;cursor:pointer");ba.setAttribute("title",A(bj,"del"));ba.innerHTML="-";var bc=bm.createElement("div");bc.setAttribute("style","padding-bottom:5px;height:27px");bc.appendChild(bh);bc.appendChild(bg);if(bq){bc.appendChild(bd);}bc.appendChild(ba);bk.appendChild(bc);ba.onclick=bl;if(bq){bd.onclick=be;}}function aR(bd){var bf=window.document;var ba=bf.getElementById("jsplus_bootstrap_table_row_conf_classes_"+J(bd));ba.innerHTML="";for(var bc in I["classes"]){F(bd,I["classes"][bc]);}var be=bf.getElementById("jsplus_bootstrap_table_row_conf_styles_"+J(bd));be.innerHTML="";for(var bc in I["styles"]){a0(bd,I["styles"][bc][0],I["styles"][bc][1]);}var bb=bf.getElementById("jsplus_bootstrap_table_row_conf_attrs_"+J(bd));bb.innerHTML="";for(var bc in I["attrs"]){P(bd,I["attrs"][bc][0],I["attrs"][bc][1]);}}function h(bc){window.document.getElementById("jsplus_bootstrap_table_row_conf_add_class_"+J(bc)).onclick=function(){F(bc,"");};window.document.getElementById("jsplus_bootstrap_table_row_conf_add_style_"+J(bc)).onclick=function(){a0(bc,"",""); +};window.document.getElementById("jsplus_bootstrap_table_row_conf_add_attr_"+J(bc)).onclick=function(){P(bc,"","");};var bd=(function(){var be=bc;return function(){var bj=aP[J(bc)][parseInt(this.getAttribute("data-id-1"))][parseInt(this.getAttribute("data-id-2"))];if(bj.hasOwnProperty("add_styles")){for(var bk=0;bk-1){bt.push(bh);}}for(var bq=0;bq0){bb.setAttribute("class",bs);}else{bb.removeAttribute("class");}var bc=aw(bb);var bg={};for(var bq=0;bq=bf);return ba.toFixed(1)+bc+bb[bd]+(be?"b":"");}function aB(ba){return ba.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aY(ba){return ba.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function aK(ba){var bb=document.createElement("div");bb.innerHTML=ba;return bb.childNodes;}function aT(ba){return ba.getElementsByTagName("head")[0];}function aQ(ba){return ba.getElementsByTagName("body")[0];}function a4(bc,be){var ba=bc.getElementsByTagName("link");var bd=false;for(var bb=ba.length-1;bb>=0;bb--){if(ba[bb].href==be){ba[bb].parentNode.removeChild(ba[bb]);}}}function az(bd,bf){if(!bd){return;}var ba=bd.getElementsByTagName("link");var be=false;for(var bb=0;bb-1){bb.splice(bb.indexOf(ba),1);}var bd=bb.join(" ").trim();if(bd.length>0){bc.className=bd;}else{if(bc.hasAttribute("class")){bc.removeAttribute("class");}}}function b(ba){if(typeof(ba.className)==="undefined"||ba.className==null){return[];}return ba.className.split(/\s+/);}function a8(bd,ba){var bc=b(bd);for(var bb=0;bb-1){be[bf.substr(0,ba).trim()]=bf.substr(ba+1);}else{be[bf]="";}}return be;}function aF(bc,bb){var bd=aw(bc);for(var ba in bd){var be=bd[ba];if(ba==bb){return be;}}return null;}function aA(bd,bc,ba){var be=aw(bd);for(var bb in be){var bf=be[bb];if(bb==bc&&bf==ba){return true;}}return false;}function H(bc,bb,ba){var bd=aw(bc);bd[bb]=ba;y(bc,bd);}function ay(bb,ba){var bc=aw(bb);delete bc[ba];y(bb,bc);}function y(bb,bd){var bc=[];for(var ba in bd){bc.push(ba+":"+bd[ba]);}if(bc.length>0){bb.setAttribute("style",bc.join(";"));}else{if(bb.hasAttribute("style")){bb.removeAttribute("style");}}}function C(be,bb){var bc;if(Object.prototype.toString.call(bb)==="[object Array]"){bc=bb;}else{bc=[bb];}for(var bd=0;bd-1){ba.push(be.childNodes[bd]);}}return ba;}function m(bd){var bc=aJ(bd);var be=0;for(var bb=0;bbbe){be=bf.length;}}return be;}function ar(ba){return C(ba,["td","th"]);}function i(be){var bd;for(var ba=0;ba0){return bb;}}return 1;}function aI(ba){if(ba.hasAttribute("rowspan")){var bb=parseInt(ba.getAttribute("rowspan"));if(!isNaN(bb)&&bb>0){return bb;}}return 1;}function aJ(bh){var bc=[];var bi=[null,"tbody","thead","tfoot"];for(var bb=0;bb0){for(var bf=0;bf0){bc.push(bd[bf]);}}return bc;}function p(be){var bf=[];var bd=aJ(be);for(var bc=0;bc0){bc.setAttribute("style",bb);}bc.innerHTML=" ";return bc;}function ah(ba,bc,bb){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]==="undefined"){window["jsplus_"+bd+"_listeners"]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc]==="undefined"){window["jsplus_"+bd+"_listeners"][bc]={};}if(typeof window["jsplus_"+bd+"_listeners"][bc][J(ba)]==="undefined"){window["jsplus_"+bd+"_listeners"][bc][J(ba)]=[];}window["jsplus_"+bd+"_listeners"][bc][J(ba)].push((function(){var be=ba; +return function(){bb(be);};})());}function g(bb,bc){var bd=aM();if(typeof window["jsplus_"+bd+"_listeners"]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc]!=="undefined"&&typeof window["jsplus_"+bd+"_listeners"][bc][J(bb)]!="undefined"){for(var ba=0;babi){bj.setAttribute("colspan",be+1);return;}}var bc="td";if(bh.length>0){bc=bh[bh.length-1].tagName;}else{if(O(bb)){bc="th";}}for(;bf<=bi;bf++){var bg=a(bj.tagName,ba);bb.appendChild(bg);}}function E(bc,bg,bf){var bd=bc.parentNode.tagName=="THEAD"?"th":"td";var bi=m(bg);var ba=N(bg);var bb=window.document.createElement("tr");for(var be=0;be0){bh.setAttribute("style",ba);}bh.innerHTML=" ";bb.appendChild(bh);}if(bf){bc.parentNode.insertBefore(bb,bc);}else{if(bc.nextSibling!=null){bc.parentNode.insertBefore(bb,bc.nextSibling);}else{bc.parentNode.appendChild(bb);}}return bb;}function T(ba,bb){ah(ba,"table_tools",bb);}function aE(ba){g(ba,"table_tools");}function aH(ba){var bb=ba.parentNode;while(bb!=null){if(bb.tagName=="TABLE"){return bb;}bb=bb.parentNode;}return null;}function x(bl){var bk=aJ(bl);var ba=-1;var bj=[];for(var be=0;be'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");C(document,".jsdialog_plugin_jsplus_bootstrap_table_row_move_down.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_down .cke_dialog_contents { padding: 0; }"); +}function al(){var aH=false;if(aH){var aL=window.location.hostname;var aK=0;var aI;var aJ;if(aL.length!=0){for(aI=0,l=aL.length;aI=20&&(aJ.tagName=="TD"||aJ.tagName=="TH")){aH[0]=aJ;}}else{if(aJ.tagName=="TABLE"){aH[1]=aJ;}}if(aH[1]!=null){var aM;if(q<20){var aI=B(aH[0].parentNode,"tr");aM=(q<=2&&aI[0]!=aH[0])||(q>2&&aI[aI.length-1]!=aH[0]);}else{var aL=Z(aH[0]);aM=(q<=22&&aL>0)||(q>22&&aLaK+1){aN=aM[aK+1];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}if(aM.length>aK+2){var aL=aM[aK+2];aL.parentNode.insertBefore(aQ,aL);}else{var aJ=aQ.parentNode;aJ.removeChild(aQ);aJ.appendChild(aQ);}return;}if(q==30||q==31||q==32){var aI=d(aQ);if(aI+aK==m){return;}if(aI+aK>aO){var aN;if(aM.length>aI+aK){aN=aM[aI+aK];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}aQ.parentNode.insertBefore(aN,aQ);return;}}}}function h(aH,aJ){var aL=B(aH.parentNode,"tr");for(var aK=0;aK0){aL[aK-1].parentNode.removeChild(aL[aK-1]);if(aK+1=aM);return aH.toFixed(1)+aJ+aI[aK]+(aL?"b":"");}function ah(aH){return aH.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aA(aH){return aH.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ap(aH){var aI=document.createElement("div");aI.innerHTML=aH;return aI.childNodes;}function ax(aH){return aH.getElementsByTagName("head")[0];}function au(aH){return aH.getElementsByTagName("body")[0];}function aD(aJ,aL){var aH=aJ.getElementsByTagName("link");var aK=false;for(var aI=aH.length-1;aI>=0;aI--){if(aH[aI].href==aL){aH[aI].parentNode.removeChild(aH[aI]);}}}function af(aK,aM){if(!aK){return;}var aH=aK.getElementsByTagName("link");var aL=false;for(var aI=0;aI-1){aI.splice(aI.indexOf(aH),1);}var aK=aI.join(" ").trim();if(aK.length>0){aJ.className=aK;}else{if(aJ.hasAttribute("class")){aJ.removeAttribute("class");}}}function b(aH){if(typeof(aH.className)==="undefined"||aH.className==null){return[];}return aH.className.split(/\s+/);}function aG(aK,aH){var aJ=b(aK);for(var aI=0;aI-1){aL[aM.substr(0,aH).trim()]=aM.substr(aH+1);}else{aL[aM]="";}}return aL;}function am(aJ,aI){var aK=ac(aJ);for(var aH in aK){var aL=aK[aH];if(aH==aI){return aL;}}return null;}function ag(aK,aJ,aH){var aL=ac(aK);for(var aI in aL){var aM=aL[aI];if(aI==aJ&&aM==aH){return true;}}return false;}function E(aJ,aI,aH){var aK=ac(aJ);aK[aI]=aH;x(aJ,aK);}function ae(aI,aH){var aJ=ac(aI);delete aJ[aH];x(aI,aJ);}function x(aI,aK){var aJ=[];for(var aH in aK){aJ.push(aH+":"+aK[aH]);}if(aJ.length>0){aI.setAttribute("style",aJ.join(";"));}else{if(aI.hasAttribute("style")){aI.removeAttribute("style");}}}function B(aL,aI){var aJ;if(Object.prototype.toString.call(aI)==="[object Array]"){aJ=aI;}else{aJ=[aI];}for(var aK=0;aK-1){aH.push(aL.childNodes[aK]);}}return aH;}function m(aK){var aJ=aq(aK);var aL=0;for(var aI=0;aIaL){aL=aM.length;}}return aL;}function Y(aH){return B(aH,["td","th"]);}function i(aL){var aK;for(var aH=0;aH0){return aI;}}return 1;}function ao(aH){if(aH.hasAttribute("rowspan")){var aI=parseInt(aH.getAttribute("rowspan"));if(!isNaN(aI)&&aI>0){return aI;}}return 1;}function aq(aO){var aJ=[];var aP=[null,"tbody","thead","tfoot"];for(var aI=0;aI0){for(var aM=0;aM0){aJ.push(aK[aM]);}}return aJ;}function o(aL){var aM=[];var aK=aq(aL);for(var aJ=0;aJ0){aJ.setAttribute("style",aI);}aJ.innerHTML=" ";return aJ;}function S(aH,aJ,aI){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]==="undefined"){window["jsplus_"+aK+"_listeners"]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ][F(aH)]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ][F(aH)]=[];}window["jsplus_"+aK+"_listeners"][aJ][F(aH)].push((function(){var aL=aH;return function(){aI(aL);};})());}function g(aI,aJ){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ][F(aI)]!="undefined"){for(var aH=0;aHaP){aQ.setAttribute("colspan",aL+1);return;}}var aJ="td";if(aO.length>0){aJ=aO[aO.length-1].tagName;}else{if(K(aI)){aJ="th";}}for(;aM<=aP;aM++){var aN=a(aQ.tagName,aH);aI.appendChild(aN);}}function D(aJ,aN,aM){var aK=aJ.parentNode.tagName=="THEAD"?"th":"td";var aP=m(aN);var aH=J(aN);var aI=window.document.createElement("tr");for(var aL=0;aL0){aO.setAttribute("style",aH);}aO.innerHTML=" ";aI.appendChild(aO);}if(aM){aJ.parentNode.insertBefore(aI,aJ);}else{if(aJ.nextSibling!=null){aJ.parentNode.insertBefore(aI,aJ.nextSibling);}else{aJ.parentNode.appendChild(aI);}}return aI;}function L(aH,aI){S(aH,"table_tools",aI);}function ak(aH){g(aH,"table_tools");}function an(aH){var aI=aH.parentNode;while(aI!=null){if(aI.tagName=="TABLE"){return aI;}aI=aI.parentNode;}return null;}function v(aS){var aR=aq(aS);var aH=-1;var aQ=[];for(var aL=0;aL'+'
        '+'
        '+'
        '+''+'X'+""+"
        "+'
        '+'
        '+"
        "+'"+"
        "+"";JSDialog.Config.templateButton='';JSDialog.Config.templateBg='
        ';JSDialog.Config.classButton="cke_dialog_ui_button";JSDialog.Config.classButtonOk="cke_dialog_ui_button_ok";JSDialog.Config.contentBorders=[3,1,15,1,65];CKEDITOR.skin.loadPart("dialog");C(document,".jsdialog_plugin_jsplus_bootstrap_table_row_move_up.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up.jsdialog_show { display: block; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_icon_info { background-image: url(img/info.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_icon_warning { background-image: url(img/warning.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_icon_error { background-image: url(img/error.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_contents { margin-top: 0; border-top: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_footer div { outline: none; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_title { cursor: default; }"+".jsdialog_plugin_jsplus_bootstrap_table_row_move_up .cke_dialog_contents { padding: 0; }"); +}function al(){var aH=false;if(aH){var aL=window.location.hostname;var aK=0;var aI;var aJ;if(aL.length!=0){for(aI=0,l=aL.length;aI=20&&(aJ.tagName=="TD"||aJ.tagName=="TH")){aH[0]=aJ;}}else{if(aJ.tagName=="TABLE"){aH[1]=aJ;}}if(aH[1]!=null){var aM;if(q<20){var aI=B(aH[0].parentNode,"tr");aM=(q<=2&&aI[0]!=aH[0])||(q>2&&aI[aI.length-1]!=aH[0]);}else{var aL=Z(aH[0]);aM=(q<=22&&aL>0)||(q>22&&aLaK+1){aN=aM[aK+1];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}if(aM.length>aK+2){var aL=aM[aK+2];aL.parentNode.insertBefore(aQ,aL);}else{var aJ=aQ.parentNode;aJ.removeChild(aQ);aJ.appendChild(aQ);}return;}if(q==30||q==31||q==32){var aI=d(aQ);if(aI+aK==m){return;}if(aI+aK>aO){var aN;if(aM.length>aI+aK){aN=aM[aI+aK];}else{aN=a(aH.parentNode.tagName=="TBODY"||aH.tagName=="TBODY"?"th":"td",aP);}aQ.parentNode.insertBefore(aN,aQ);return;}}}}function h(aH,aJ){var aL=B(aH.parentNode,"tr");for(var aK=0;aK0){aL[aK-1].parentNode.removeChild(aL[aK-1]);if(aK+1=aM);return aH.toFixed(1)+aJ+aI[aK]+(aL?"b":"");}function ah(aH){return aH.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");}function aA(aH){return aH.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");}function ap(aH){var aI=document.createElement("div");aI.innerHTML=aH;return aI.childNodes;}function ax(aH){return aH.getElementsByTagName("head")[0];}function au(aH){return aH.getElementsByTagName("body")[0];}function aD(aJ,aL){var aH=aJ.getElementsByTagName("link");var aK=false;for(var aI=aH.length-1;aI>=0;aI--){if(aH[aI].href==aL){aH[aI].parentNode.removeChild(aH[aI]);}}}function af(aK,aM){if(!aK){return;}var aH=aK.getElementsByTagName("link");var aL=false;for(var aI=0;aI-1){aI.splice(aI.indexOf(aH),1);}var aK=aI.join(" ").trim();if(aK.length>0){aJ.className=aK;}else{if(aJ.hasAttribute("class")){aJ.removeAttribute("class");}}}function b(aH){if(typeof(aH.className)==="undefined"||aH.className==null){return[];}return aH.className.split(/\s+/);}function aG(aK,aH){var aJ=b(aK);for(var aI=0;aI-1){aL[aM.substr(0,aH).trim()]=aM.substr(aH+1);}else{aL[aM]="";}}return aL;}function am(aJ,aI){var aK=ac(aJ);for(var aH in aK){var aL=aK[aH];if(aH==aI){return aL;}}return null;}function ag(aK,aJ,aH){var aL=ac(aK);for(var aI in aL){var aM=aL[aI];if(aI==aJ&&aM==aH){return true;}}return false;}function E(aJ,aI,aH){var aK=ac(aJ);aK[aI]=aH;x(aJ,aK);}function ae(aI,aH){var aJ=ac(aI);delete aJ[aH];x(aI,aJ);}function x(aI,aK){var aJ=[];for(var aH in aK){aJ.push(aH+":"+aK[aH]);}if(aJ.length>0){aI.setAttribute("style",aJ.join(";"));}else{if(aI.hasAttribute("style")){aI.removeAttribute("style");}}}function B(aL,aI){var aJ;if(Object.prototype.toString.call(aI)==="[object Array]"){aJ=aI;}else{aJ=[aI];}for(var aK=0;aK-1){aH.push(aL.childNodes[aK]);}}return aH;}function m(aK){var aJ=aq(aK);var aL=0;for(var aI=0;aIaL){aL=aM.length;}}return aL;}function Y(aH){return B(aH,["td","th"]);}function i(aL){var aK;for(var aH=0;aH0){return aI;}}return 1;}function ao(aH){if(aH.hasAttribute("rowspan")){var aI=parseInt(aH.getAttribute("rowspan"));if(!isNaN(aI)&&aI>0){return aI;}}return 1;}function aq(aO){var aJ=[];var aP=[null,"tbody","thead","tfoot"];for(var aI=0;aI0){for(var aM=0;aM0){aJ.push(aK[aM]);}}return aJ;}function o(aL){var aM=[];var aK=aq(aL);for(var aJ=0;aJ0){aJ.setAttribute("style",aI);}aJ.innerHTML=" ";return aJ;}function S(aH,aJ,aI){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]==="undefined"){window["jsplus_"+aK+"_listeners"]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ]={};}if(typeof window["jsplus_"+aK+"_listeners"][aJ][F(aH)]==="undefined"){window["jsplus_"+aK+"_listeners"][aJ][F(aH)]=[];}window["jsplus_"+aK+"_listeners"][aJ][F(aH)].push((function(){var aL=aH;return function(){aI(aL);};})());}function g(aI,aJ){var aK=ar();if(typeof window["jsplus_"+aK+"_listeners"]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ]!=="undefined"&&typeof window["jsplus_"+aK+"_listeners"][aJ][F(aI)]!="undefined"){for(var aH=0;aHaP){aQ.setAttribute("colspan",aL+1);return;}}var aJ="td";if(aO.length>0){aJ=aO[aO.length-1].tagName;}else{if(K(aI)){aJ="th";}}for(;aM<=aP;aM++){var aN=a(aQ.tagName,aH);aI.appendChild(aN);}}function D(aJ,aN,aM){var aK=aJ.parentNode.tagName=="THEAD"?"th":"td";var aP=m(aN);var aH=J(aN);var aI=window.document.createElement("tr");for(var aL=0;aL0){aO.setAttribute("style",aH);}aO.innerHTML=" ";aI.appendChild(aO);}if(aM){aJ.parentNode.insertBefore(aI,aJ);}else{if(aJ.nextSibling!=null){aJ.parentNode.insertBefore(aI,aJ.nextSibling);}else{aJ.parentNode.appendChild(aI);}}return aI;}function L(aH,aI){S(aH,"table_tools",aI);}function ak(aH){g(aH,"table_tools");}function an(aH){var aI=aH.parentNode;while(aI!=null){if(aI.tagName=="TABLE"){return aI;}aI=aI.parentNode;}return null;}function v(aS){var aR=aq(aS);var aH=-1;var aQ=[];for(var aL=0;aLA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;AA){A=B.length;}}return A;}function f(w){return getElementsByTagNameOnlyChildren(w,["td","th"]);}function n(A){var z;for(var w=0;w0){return x;}}return 1;}function e(w){if(w.hasAttribute("rowspan")){var x=parseInt(w.getAttribute("rowspan"));if(!isNaN(x)&&x>0){return x;}}return 1;}function u(D){var y=[];var E=[null,"tbody","thead","tfoot"];for(var x=0;x0){for(var B=0;B0){y.push(z[B]);}}return y;}function m(A){var B=[];var z=u(A);for(var y=0;y0){y.setAttribute("style",x);}y.innerHTML=" ";return y;}function o(w,y,x){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]==="undefined"){window["jsplus_"+z+"_listeners"]={};}if(typeof window["jsplus_"+z+"_listeners"][y]==="undefined"){window["jsplus_"+z+"_listeners"][y]={};}if(typeof window["jsplus_"+z+"_listeners"][y][getEditorId(w)]==="undefined"){window["jsplus_"+z+"_listeners"][y][getEditorId(w)]=[];}window["jsplus_"+z+"_listeners"][y][getEditorId(w)].push((function(){var A=w;return function(){x(A);};})());}function q(x,y){var z=getEditorName();if(typeof window["jsplus_"+z+"_listeners"]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y]!=="undefined"&&typeof window["jsplus_"+z+"_listeners"][y][getEditorId(x)]!="undefined"){for(var w=0;wE){F.setAttribute("colspan",A+1);return;}}var y="td";if(D.length>0){y=D[D.length-1].tagName;}else{if(p(x)){y="th";}}for(;B<=E;B++){var C=l(F.tagName,w);x.appendChild(C);}}function c(y,C,B){var z=y.parentNode.tagName=="THEAD"?"th":"td";var E=s(C);var w=a(C);var x=window.document.createElement("tr");for(var A=0;A0){D.setAttribute("style",w);}D.innerHTML=" ";x.appendChild(D);}if(B){y.parentNode.insertBefore(x,y);}else{if(y.nextSibling!=null){y.parentNode.insertBefore(x,y.nextSibling);}else{y.parentNode.appendChild(x);}}return x;}function d(w,x){o(w,"table_tools",x);}function k(w){q(w,"table_tools");}function r(w){var x=w.parentNode;while(x!=null){if(x.tagName=="TABLE"){return x;}x=x.parentNode;}return null;}function j(H){var G=u(H);var w=-1;var F=[];for(var A=0;A' + '
        ' + '
        ' + '' + 'X' + "" + "
        " + '
        ' + '
        ' + "
        " + '" + "" + ""; + JSDialog.Config.templateButton = ''; + JSDialog.Config.templateBg = '
        '; + JSDialog.Config.classButton = "cke_dialog_ui_button"; + JSDialog.Config.classButtonOk = "cke_dialog_ui_button_ok"; + JSDialog.Config.contentBorders = [3, 1, 15, 1, 65]; + CKEDITOR.skin.loadPart("dialog"); + x(document, ".jsdialog_plugin_jsplus_bootstrap_templates.jsdialog_bg { background-color: white; opacity: 0.5; position: fixed; left: 0; top: 0; width: 100%; height: 3000px; z-index: 11111; display: none; }" + ".jsdialog_plugin_jsplus_bootstrap_templates.jsdialog_dlg { font-family: Arial; padding: 0; position: fixed; z-index: 11112; background-color: white; border-radius: 5px; overflow:hidden; display: none; }" + ".jsdialog_plugin_jsplus_bootstrap_templates.jsdialog_show { display: block; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_contents { font-size: 16px; padding: 10px 0 10px 7px; display: table; overflow: hidden; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_contents_inner { display: table-cell; vertical-align: middle; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_icon { padding-left: 100px; min-height: 64px; background-position: 10px 10px; background-repeat: no-repeat; box-sizing: content-box; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_icon_info { background-image: url(img/info.png); }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_icon_warning { background-image: url(img/warning.png); }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_icon_error { background-image: url(img/error.png); }" + ".jsdialog_plugin_jsplus_bootstrap_templates .jsdialog_message_icon_confirm { background-image: url(img/confirm.png); }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_contents { margin-top: 0; border-top: none; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_footer div { outline: none; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_footer_buttons > .cke_dialog_ui_button { margin-right: 5px; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_footer_buttons > .cke_dialog_ui_button:last-child { margin-right: 0; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_title { cursor: default; }" + ".jsdialog_plugin_jsplus_bootstrap_templates .cke_dialog_contents { padding: 0; }"); + } + var m = 1; + var k = null; + var j = null; + var i = []; + var av; + var aw; + var ap; + var D = ""; + var y = ""; + var B = ""; + var aj = {}; + if (m == 20 || m == 21 || m == 22) { + t("use_dialog", false); + t("show_options", true); + t("show_advanced_options", true); + if (m == 20) { + t("default_width_100", false); + } + t("default_add_header", false); + t("default_class", ""); + t("default_style", ""); + if (m == 21) { + t("default_striped", true); + t("default_bordered", false); + t("default_condensed", false); + } + i = []; + var T = "border:1px solid rgb(171, 207, 255);background-color:rgb(195, 217, 255)"; + if (m == 21) { + T = "border:1px solid #6f5499;background-color:#9174C0"; + } else { + if (m == 22) { + T = "border:1px solid #007095;background-color:#008cba"; + } + } + for (var al = 0; al < 6; al++) { + for (var F = 0; F < 6; F++) { + i.push(['
        ', F + "," + al, "table"]); + } + } + D = '' + "" + "" + '" + '" + "" + "" + "
        '; + B = "' + (m == 20 ? '
        ' : "") + '
        ' + (m == 21 ? '
        ' + '
        ' + '
        ' : "") + '
        ' + '
        ' + '
        ' + "
        " + "
        "; + if (m == 20) { + aj["width_100"] = true; + } + aj["add_header"] = false; + aj["class"] = ""; + aj["style"] = ""; + if (m == 21) { + aj["striped"] = true; + aj["bordered"] = false; + aj["condensed"] = false; + } + } else { + if (m == 3) { + t("use_dialog", false); + X("jsplus_bootstrap_templates", []); + t("popup_width", 400); + t("dialog_width", 400); + t("dialog_height", 400); + } else { + if (m == 0) { + t("use_dialog", false); + av = 360; + aw = 384; + ap = 335; + i = [ + ['', '

        33%

        67%

        ', "html"], + ['', '

        50%

        50%

        ', "html"], + ['', '

        67%

        33%

        ', "html"], + ['', '

        25%

        25%

        50%

        ', "html"], + ['', '

        25%

        25%

        25%

        25%

        ', "html"], + ['', '

        50%

        25%

        25%

        ', "html"], + ['', '

        Text text text

        ', "html"], + ['', '

        25%

        50%

        25%

        ', "html"], + ['', '

        Text text text

        ', "html"] + ]; + } else { + if (m == 1) { + t("use_dialog", false); + t("default_col_type", "xs"); + av = 660; + aw = 675; + ap = 215; + aj["col-type"] = "xs"; + D = '' + "" + "" + '" + '" + '" + "" + "" + "
        ' + '
        Columns:
        ' + '
        Rows:
        ' + "
        '; + B = "' + '
        Column type:
        ' + '
        ' + '" + "
        " + '
        ' + '" + "
        " + '
        ' + '" + "
        " + '
        ' + '" + "
        " + '
        ' + '" + "
        " + "
        "; + i = [ + ['
        1
        ', '

        col-1

        ', "html"], + ['
        2
        ', '

        col-2

        ', "html"], + ['
        3
        ', '

        col-3

        ', "html"], + ['
        4
        ', '

        col-4

        ', "html"], + ['
        5
        ', '

        col-5

        ', "html"], + ['
        6
        ', '

        col-6

        ', "html"], + ['
        7
        ', '

        col-7

        ', "html"], + ['
        8
        ', '

        col-8

        ', "html"], + ['
        9
        ', '

        col-9

        ', "html"], + ['
        10
        ', '

        col-10

        ', "html"], + ['
        11
        ', '

        col-11

        ', "html"], + ['
        12
        ', '

        col-12

        ', "html"], + ['
        6 / 6
        ', '

        col-6

        col-6

        ', "html"], + ['
        4 / 4 / 4
        ', '

        col-4

        col-4

        col-4

        ', "html"], + ['
        3 / 3 / 3 / 3
        ', '

        col-3

        col-3

        col-3

        col-3

        ', "html"], + ['
        9 / 3
        ', '

        col-9

        col-3

        ', "html"], + ['
        3 / 9
        ', '

        col-3

        col-9

        ', "html"], + ['
        8 / 4
        ', '

        col-8

        col-4

        ', "html"], + ['
        12
        ', '

        col-12

        ', "html"], + ['
        4 / 8
        ', '

        col-4

        col-8

        ', "html"], + ['
        7 / 5
        ', '

        col-7

        col-5

        ', "html"], + ['
        5 / 7
        ', '

        col-5

        col-7

        ', "html"], + ['
        6 / 3 / 3
        ', '

        col-6

        col-3

        col-3

        ', "html"], + ['
        3 / 6 / 3
        ', '

        col-3

        col-6

        col-3

        ', "html"], + ['
        3 / 3 / 6
        ', '

        col-3

        col-3

        col-6

        ', "html"], + ['
        0
        ', '
        ', "html"], + ]; + } else { + if (m == 2) { + t("use_dialog", false); + t("default_col_type", "small"); + av = 660; + aw = 675; + ap = 215; + aj["col-type"] = "small"; + D = '' + "" + "" + '" + '
        ' + '
        Columns:
        ' + '
        Rows:
        ' + "
        '; + B = '' + '
        Column type:

        ' + '' + '' + '' + "
        "; + i = [ + ['
        1
        ', '
        col-1
        ', "html"], + ['
        2
        ', '
        col-2
        ', "html"], + ['
        3
        ', '
        col-3
        ', "html"], + ['
        4
        ', '
        col-4
        ', "html"], + ['
        5
        ', '
        col-5
        ', "html"], + ['
        6
        ', '
        col-6
        ', "html"], + ['
        7
        ', '
        col-7
        ', "html"], + ['
        8
        ', '
        col-8
        ', "html"], + ['
        9
        ', '
        col-9
        ', "html"], + ['
        10
        ', '
        col-10
        ', "html"], + ['
        11
        ', '
        col-11
        ', "html"], + ['
        12
        ', '
        col-12
        ', "html"], + ['
        6 / 6
        ', '
        col-6
        col-6
        ', "html"], + ['
        4 / 4 / 4
        ', '
        col-4
        col-4
        col-4
        ', "html"], + ['
        3 / 3 / 3 / 3
        ', '
        col-3
        col-3
        col-3
        col-3
        ', "html"], + ['
        9 / 3
        ', '
        col-9
        col-3
        ', "html"], + ['
        3 / 9
        ', '
        col-3
        col-9
        ', "html"], + ['
        8 / 4
        ', '
        col-8
        col-4
        ', "html"], + ['
        12
        ', '
        col-12
        ', "html"], + ['
        4 / 8
        ', '
        col-4
        col-8
        ', "html"], + ['
        7 / 5
        ', '
        col-7
        col-5
        ', "html"], + ['
        5 / 7
        ', '
        col-5
        col-7
        ', "html"], + ['
        6 / 3 / 3
        ', '
        col-6
        col-3
        col-3
        ', "html"], + ['
        3 / 6 / 3
        ', '
        col-3
        col-6
        col-3
        ', "html"], + ['
        3 / 3 / 6
        ', '
        col-3
        col-3
        col-6
        ', "html"], + ['
        0
        ', '
        ', "html"], + ]; + } else { + if (m == 10) { + t("use_dialog", false); + av = 345; + aw = 370; + ap = 360; + i = [ + ['
        ' + '
        ' + 'Success! Your request was finished successfully.' + "
        " + "
        ", '
        ' + "Success! Your request was finished successfully." + "
        ", "html"], + ['
        ' + '
        ' + 'Info. Here are details for your query.' + "
        " + "
        ", '
        ' + "Info. Here are details for your query." + "
        ", "html"], + ['
        ' + '
        ' + 'Warning! Are you sure you want to proceed?' + "
        " + "
        ", '
        ' + "Warning! Are you sure you want to proceed?" + "
        ", "html"], + ['
        ' + '
        ' + 'Danger! System state is critical, check the configuration!' + "
        " + "
        ", '
        ' + "Danger! System state is critical, check the configuration!" + "
        ", "html"], + ['
        ' + '
        ' + 'Message. Lorem ipsum dolor sit amet, consectetur.' + "
        " + "
        ", '
        ' + "Message. Lorem ipsum dolor sit amet, consectetur." + "
        ", "html"] + ]; + } else { + if (m == 11) { + t("use_dialog", false); + av = 400; + aw = 420; + ap = 300; + i = [ + ['
        Success! Your request was finished successfully
        ', '', "html"], + ['
        Info. Here are details for your query.
        ', '', "html"], + ['
        Warning! Are you sure you want to proceed?
        ', '', "html"], + ['
        Danger! System state is critical, check the configuration!
        ', '', "html"] + ]; + } else { + if (m == 12) { + av = 345; + aw = 370; + ap = 300; + i = [ + ['
        Success! Your request was finished successfully
        ', '', "html"], + ['
        Info. Here are details for your query.
        ', '', "html"], + ['
        Warning! Are you sure you want to proceed?
        ', '', "html"], + ['
        Danger! System state is critical, check the configuration!
        ', '', "html"], + ['
        Message. Lorem ipsum dolor sit amet, consectetur.
        ', '', "html"] + ]; + } + } + } + } + } + } + } + } + + function d(aG) { + var aF = "-" + C(aG); + var aE = document.getElementById("jsplus_bootstrap_templates-dialog-root" + aF); + if (aE != null && aE.children.length == 0) { + aE.innerHTML = ""; + } + aE = j.getElementById("jsplus_bootstrap_templates-popup-root" + aF); + aE.innerHTML = y.replace(/%id%/g, C(aG)).replace(/\{\{([^}]*)\}\}/g, function(aI, aH) { + return u(aG, aH); + }); + e(aG, aE.ownerDocument); + } + + function z(aH) { + var aF = document.getElementsByClassName("jsplus_bootstrap_templates-selected"); + var aG = null; + for (var aE = 0; aE < aF.length && aG == null; aE++) { + if (aD(aF[aE], "jsplus_bootstrap_templates-template-" + C(aH))) { + aG = aF[aE]; + } + } + if (aG == null) { + alert(u(aH, "select_element_first")); + window["jsplus_bootstrap_templates_callback"] = null; + return false; + } else { + K(aH, aG.getAttribute("data-jsplus_bootstrap_templates_template_id")); + window["jsplus_bootstrap_templates_callback"] = null; + } + } + + function J(aF) { + var aE; + if (j != null) { + aE = j.getElementById("jsplus_bootstrap_templates-popup-root-" + C(aF)); + if (aE != null && aE.children.length == 0) { + aE.innerHTMLAddition = null; + } + } + aE = document.getElementById("jsplus_bootstrap_templates-dialog-root-" + C(aF)); + if (aE.children.length == 0) { + aE.innerHTML = aE.innerHTML = y.replace(/%id%/g, C(aF)).replace(/\{\{([^}]*)\}\}/g, function(aH, aG) { + return u(aF, aG); + }); + } + e(aF, aE.ownerDocument); + W(aF, -1); + } + + function az(aE) { + window["jsplus_bootstrap_templates_callback"] = null; + } + + function H(aE) { + return window["jsplus_bootstrap_templates_callback"] != null || V(aE, "use_dialog"); + } + + function e(aI, aK) { + if (m == 1) { + var aH = function() { + aj["col-type"] = this.getAttribute("data-col"); + }; + aK.getElementById("jsplus_bootstrap_templatescolTypeXS_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypeSM_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypeMD_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypeLG_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypeXL_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + if (window.jsplus_bootstrap_version && window.jsplus_bootstrap_version == 3) { + A(aK.getElementById("jsplus_bootstrap_templates_div_xl_" + C(aI), "display", "none")); + } + } else { + if (m == 2) { + var aH = function() { + aj["col-type"] = this.getAttribute("data-col"); + }; + aK.getElementById("jsplus_bootstrap_templatescolTypesmall_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypemedium_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + aK.getElementById("jsplus_bootstrap_templatescolTypelarge_label_" + C(aI)).getElementsByTagName("input")[0].onchange = aH; + } else { + if (m == 20 || m == 21 || m == 22) { + aK.getElementById("jsplus_bootstrap_templates_add_header_" + C(aI)).checked = V(aI, "default_add_header"); + aK.getElementById("jsplus_bootstrap_templates_add_header_" + C(aI)).onchange = function() { + aj["add_header"] = this.checked; + }; + if (m == 20) { + aK.getElementById("jsplus_bootstrap_templates_width_100_" + C(aI)).checked = V(aI, "default_width_100"); + aK.getElementById("jsplus_bootstrap_templates_width_100_" + C(aI)).onchange = function() { + aj["width_100"] = this.checked; + }; + } + if (m == 21) { + aK.getElementById("jsplus_bootstrap_templates_striped_" + C(aI)).checked = V(aI, "default_striped"); + aK.getElementById("jsplus_bootstrap_templates_striped_" + C(aI)).onchange = function() { + aj["striped"] = this.checked; + }; + aK.getElementById("jsplus_bootstrap_templates_bordered_" + C(aI)).checked = V(aI, "default_bordered"); + aK.getElementById("jsplus_bootstrap_templates_bordered_" + C(aI)).onchange = function() { + aj["bordered"] = this.checked; + }; + aK.getElementById("jsplus_bootstrap_templates_condensed_" + C(aI)).checked = V(aI, "default_condensed"); + aK.getElementById("jsplus_bootstrap_templates_condensed_" + C(aI)).onchange = function() { + aj["condensed"] = this.checked; + }; + } + aK.getElementById("jsplus_bootstrap_templates_class_" + C(aI)).value = V(aI, "default_class"); + aK.getElementById("jsplus_bootstrap_templates_style_" + C(aI)).value = V(aI, "default_style"); + aK.getElementById("jsplus_bootstrap_templates_options_" + C(aI)).style.display = V(aI, "show_options") ? "block" : "none"; + aK.getElementById("jsplus_bootstrap_templates_advanced_options_" + C(aI)).style.display = V(aI, "show_advanced_options") ? "block" : "none"; + var aJ = aK.getElementById("jsplus_bootstrap_templates_class_" + C(aI)); + aJ.onchange = function() { + aj["class"] = this.value; + }; + aJ.oninput = aJ.onchange; + aJ.onpase = aJ.onchange; + aJ.onkeyup = aJ.onchange; + var aG = aK.getElementById("jsplus_bootstrap_templates_style_" + C(aI)); + aG.onchange = function() { + aj["style"] = this.value; + }; + aG.oninput = aG.onchange; + aG.onpase = aG.onchange; + aG.onkeyup = aG.onchange; + } + } + } + var aE = aK.getElementsByClassName("jsplus_bootstrap_templates-template-" + C(aI)); + var aL = function() { + var aM = this.getAttribute("data-jsplus_bootstrap_templates_template_id"); + H(aI) ? W(aI, aM) : s(aI, aM); + }; + for (var aF = 0; aF < aE.length; aF++) { + aE[aF].onclick = aL; + if (m == 20 || m == 21 || m == 22) { + aE[aF].onmouseover = (function() { + var aM = aK; + return function() { + var aQ = this.getAttribute("data-jsplus_bootstrap_templates_template_id"); + var aN = aQ % 6; + var aR = Math.floor(aQ / 6); + for (var aS = 0; aS < 6; aS++) { + for (var aO = 0; aO < 6; aO++) { + var aP = aM.getElementById("jsplus_bootstrap_templates_cell_" + aS + "_" + aO + "_" + C(aI)); + aP.style.opacity = (aS <= aN && aO <= aR) ? "1" : "0.45"; + } + } + }; + })(); + } + } + } + + function P(aF) { + if (m == 20 || m == 21 || m == 22) { + if (m == 20) { + aj["width_100"] = V(aF, "default_width_100"); + } + aj["add_header"] = V(aF, "default_add_header"); + if (m == 21) { + aj["striped"] = V(aF, "default_striped"); + aj["bordered"] = V(aF, "default_bordered"); + aj["condensed"] = V(aF, "default_condensed"); + } + tableWidth = 154; + optionsWidth = 0; + if (V(aF, "show_options") === true) { + optionsWidth += 100; + tableWidth += 15; + if (V(aF, "show_advanced_options") === true) { + optionsWidth += 100; + } + tableWidth += optionsWidth; + } + av = tableWidth + 20; + aw = tableWidth + 40; + ap = 250; + } + if (m == 3) { + i = S(aF, "jsplus_bootstrap_templates"); + av = V(aF, "popup_width"); + aw = V(aF, "dialog_width"); + ap = V(aF, "dialog_height"); + } else { + if (m == 0) {} else { + if (m == 1) { + if (["xs", "sm", "md", "lg", "xl"].indexOf(V(aF, "default_col_type").toLowerCase()) != -1) { + aj["col-type"] = V(aF, "default_col_type").toLowerCase(); + } + B = B.replace('jsplus_bootstrap_templates_radio_%id%"/> ' + aj["col-type"].toUpperCase(), 'jsplus_bootstrap_templates_radio_%id%" checked/> ' + aj["col-type"].toUpperCase()); + } else { + if (m == 2) { + if (["small", "medium", "large"].indexOf(V(aF, "default_col_type").toLowerCase()) != -1) { + aj["col-type"] = V(aF, "default_col_type").toLowerCase(); + } + } else { + if (m == 10) {} else { + if (m == 11) {} else { + if (m == 12) {} + } + } + } + } + } + } + y = ""; + for (var aE = 0; aE < i.length; aE++) { + y += '
        ' + i[aE][0].replace(/\{path\}/g, ax(aF)) + "
        "; + } + if (m == 20 || m == 21 || m == 22) { + D = D.replace(/%table_width%/g, tableWidth); + B = B.replace(/%options_width%/g, optionsWidth); + } + y = '" + '
        ' + y + "
        "; + } + + function s(aE, aF) { + K(aE, aF); + ag(aE); + } + + function W(aG, aH) { + var aF = document.getElementsByClassName("jsplus_bootstrap_templates-template-" + C(aG)); + for (var aE = 0; aE < aF.length; aE++) { + aF[aE].className = aF[aE].className.replace(/\s*jsplus_bootstrap_templates-selected/, ""); + if (parseInt(aF[aE].getAttribute("data-jsplus_bootstrap_templates_template_id")) == aH) { + aF[aE].className += " jsplus_bootstrap_templates-selected"; + } + } + } + + function K(aL, aG) { + var aO = null; + var aI = false; + if (typeof(window["jsplus_bootstrap_templates_callback"]) != "undefined" && window["jsplus_bootstrap_templates_callback"] != null) { + aO = window["jsplus_bootstrap_templates_callback"]["func"]; + aI = window["jsplus_bootstrap_templates_callback"]["reverseOrder"]; + window["jsplus_bootstrap_templates_callback"] = null; + } + var aN = "html"; + var aJ = i[aG][0].slice(0); + if (i[aG].length > 1) { + aJ = i[aG][1].slice(0); + if (i[aG].length > 2) { + aN = i[aG][2]; + } + } + if (Object.prototype.toString.call(aJ) === "[object Array]") { + for (var aH = 0; aH < aJ.length; aH++) { + aJ[aH] = aJ[aH].replace(/\{path\}/g, ax()); + } + } else { + aJ = aJ.replace(/\{path\}/g, ax()); + } + if (aN == "table" && (m == 20 || m == 21 || m == 22)) { + var aK = aJ.split(","); + var aF = aK[0]; + var aR = aK[1]; + var aQ = []; + if (m == 21) { + aQ.push("table"); + if (aj["striped"]) { + aQ.push("table-striped"); + } + if (aj["bordered"]) { + aQ.push("table-bordered"); + } + if (aj["condensed"]) { + aQ.push("table-condensed"); + } + } + if (aj["class"].trim().length > 0) { + aQ.push(aj["class"].trim()); + } + if (ak() == "ckeditor") { + aQ.push("cke_show_border"); + } + var aP = aj["style"].trim(); + if (m == 20 && aj["width_100"]) { + if (aP.length > 0 && aP.substr(aP.length - 1, 1) != ";") { + aP += "; "; + } + aP += "width: 100%"; + } + aJ = " 0 ? (" class='" + aQ.join(" ") + "'") : "") + (aP.length > 0 ? (" style='" + aP + "'") : "") + ">\n"; + if (aj["add_header"]) { + aJ += "\t\n\t\t\n"; + for (var aH = 0; aH <= aF; aH++) { + aJ += "\t\t\t \n"; + } + aJ += "\t\t\n\t\n"; + } + aJ += "\t\n"; + for (var aE = 0; aE <= aR; aE++) { + aJ += "\t\t\n"; + for (var aM = 0; aM <= aF; aM++) { + aJ += "\t\t\t \n"; + } + aJ += "\t\t\n"; + } + aJ += "\t\n"; + aJ += "\n"; + ar(aL, aJ); + } else { + if (aN == "text") { + ar(aL, "" + aJ + ""); + } else { + if (aN == "html") { + if (m == 1) { + if (aj["col-type"] == "sm") { + aJ = aJ.replace(/col-/g, "col-sm-"); + } + else + { + if (aj["col-type"] == "md") { + aJ = aJ.replace(/col-/g, "col-md-"); + } + else + { + if (aj["col-type"] == "lg") { + aJ = aJ.replace(/col-/g, "col-lg-"); + } + else + { + if (aj["col-type"] == "xl") { + aJ = aJ.replace(/col-/g, "col-xl-"); + } + } + } + } + } else { + if (m == 2) { + if (aj["col-type"] != "small") { + aJ = aJ.replace(/small/g, aj["col-type"]); + } + } + } + ao(aL, aJ, aO); + } + } + } + } + + function ao(aF, aE, aG) { + if (typeof(aG) == "undefined" || aG == null) { + ar(aF, aE); + } else { + o(aF, aG, aE); + } + } + + function I(aE, aI, aG) { + if (typeof aI == "undefined") { + aI = true; + } + if (typeof aG == "undefined") { + aG = " "; + } + if (typeof(aE) == "undefined") { + return ""; + } + var aJ = 1000; + if (aE < aJ) { + return aE + aG + (aI ? "b" : ""); + } + var aF = ["K", "M", "G", "T", "P", "E", "Z", "Y"]; + var aH = -1; + do { + aE /= aJ; + ++aH; + } while (aE >= aJ); + return aE.toFixed(1) + aG + aF[aH] + (aI ? "b" : ""); + } + + function ad(aE) { + return aE.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + + function au(aE) { + return aE.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function ai(aE) { + var aF = document.createElement("div"); + aF.innerHTML = aE; + return aF.childNodes; + } + + function aq(aE) { + return aE.getElementsByTagName("head")[0]; + } + + function an(aE) { + return aE.getElementsByTagName("body")[0]; + } + + function aA(aG, aI) { + var aE = aG.getElementsByTagName("link"); + var aH = false; + for (var aF = aE.length - 1; aF >= 0; aF--) { + if (aE[aF].href == aI) { + aE[aF].parentNode.removeChild(aE[aF]); + } + } + } + + function ab(aH, aJ) { + if (!aH) { + return; + } + var aE = aH.getElementsByTagName("link"); + var aI = false; + for (var aF = 0; aF < aE.length; aF++) { + if (aE[aF].href.indexOf(aJ) != -1) { + aI = true; + } + } + if (!aI) { + var aG = aH.createElement("link"); + aG.href = aJ; + aG.type = "text/css"; + aG.rel = "stylesheet"; + aq(aH).appendChild(aG); + } + } + + function l(aH, aJ) { + if (!aH) { + return; + } + var aE = aH.getElementsByTagName("script"); + var aI = false; + for (var aG = 0; aG < aE.length; aG++) { + if (aE[aG].src.indexOf(aJ) != -1) { + aI = true; + } + } + if (!aI) { + var aF = aH.createElement("script"); + aF.src = aJ; + aF.type = "text/javascript"; + aq(aH).appendChild(aF); + } + } + + function aB(aE, aG, aF) { + ab(b(aE), aG); + if (document != b(aE) && aF) { + ab(document, aG); + } + } + + function ae(aE, aG, aF) { + l(b(aE), aG); + if (document != b(aE) && aF) { + l(document, aG); + } + } + + function am(aF, aE) { + var aG = b(aF); + x(aG, aE); + } + + function x(aG, aE) { + var aF = aG.createElement("style"); + aq(aG).appendChild(aF); + aF.innerHTML = aE; + } + + function at(aF, aE) { + if (aD(aF, aE)) { + return; + } + aF.className = aF.className.length == 0 ? aE : aF.className + " " + aE; + } + + function ay(aG, aE) { + var aF = a(aG); + while (aF.indexOf(aE) > -1) { + aF.splice(aF.indexOf(aE), 1); + } + var aH = aF.join(" ").trim(); + if (aH.length > 0) { + aG.className = aH; + } else { + if (aG.hasAttribute("class")) { + aG.removeAttribute("class"); + } + } + } + + function a(aE) { + if (typeof(aE.className) === "undefined" || aE.className == null) { + return []; + } + return aE.className.split(/\s+/); + } + + function aD(aH, aE) { + var aG = a(aH); + for (var aF = 0; aF < aG.length; aF++) { + if (aG[aF].toLowerCase() == aE.toLowerCase()) { + return true; + } + } + return false; + } + + function aC(aG, aH) { + var aF = a(aG); + for (var aE = 0; aE < aF.length; aE++) { + if (aF[aE].indexOf(aH) === 0) { + return true; + } + } + return false; + } + + function Z(aG) { + if (typeof(aG.getAttribute("style")) === "undefined" || aG.getAttribute("style") == null || aG.getAttribute("style").trim().length == 0) { + return {}; + } + var aI = {}; + var aH = aG.getAttribute("style").split(/;/); + for (var aF = 0; aF < aH.length; aF++) { + var aJ = aH[aF].trim(); + var aE = aJ.indexOf(":"); + if (aE > -1) { + aI[aJ.substr(0, aE).trim()] = aJ.substr(aE + 1); + } else { + aI[aJ] = ""; + } + } + return aI; + } + + function ah(aG, aF) { + var aH = Z(aG); + for (var aE in aH) { + var aI = aH[aE]; + if (aE == aF) { + return aI; + } + } + return null; + } + + function ac(aH, aG, aE) { + var aI = Z(aH); + for (var aF in aI) { + var aJ = aI[aF]; + if (aF == aG && aJ == aE) { + return true; + } + } + return false; + } + + function A(aG, aF, aE) { + var aH = Z(aG); + aH[aF] = aE; + r(aG, aH); + } + + function aa(aF, aE) { + var aG = Z(aF); + delete aG[aE]; + r(aF, aG); + } + + function r(aF, aH) { + var aG = []; + for (var aE in aH) { + aG.push(aE + ":" + aH[aE]); + } + if (aG.length > 0) { + aF.setAttribute("style", aG.join(";")); + } else { + if (aF.hasAttribute("style")) { + aF.removeAttribute("style"); + } + } + } + + function w(aI, aF) { + var aG; + if (Object.prototype.toString.call(aF) === "[object Array]") { + aG = aF; + } else { + aG = [aF]; + } + for (var aH = 0; aH < aG.length; aH++) { + aG[aH] = aG[aH].toLowerCase(); + } + var aE = []; + for (var aH = 0; aH < aI.childNodes.length; aH++) { + if (aI.childNodes[aH].nodeType == 1 && aG.indexOf(aI.childNodes[aH].tagName.toLowerCase()) > -1) { + aE.push(aI.childNodes[aH]); + } + } + return aE; + } + + function ag() {} + + function o(aF, aG, aE) { + CKEDITOR.tools.callFunction(aG, aE); + } + CKEDITOR.plugins.add("jsplus_bootstrap_templates", { + requires: "panelbutton,floatpanel", + lang: "en", + afterInit: function(aF) { + P(aF); + y = (D + y + B); + CKEDITOR.dialog.add("jsplus_bootstrap_templates-" + C(aF), function(aG) { + return { + resizable: 0, + width: aw, + minWidth: aw, + height: ap, + maxHeight: ap, + title: u(aG, "jsplus_bootstrap_templates_title"), + onShow: function() { + J(aG); + }, + onOk: function() { + z(aG); + }, + onCancel: function() { + az(aG); + }, + contents: [{ + id: "jsplus_bootstrap_templates-tab-" + C(aG), + expand: true, + focus: true, + elements: [{ + type: "vbox", + padding: 10, + children: [{ + type: "html", + html: '
        ' + }] + }] + }] + }; + }); + if (H(aF)) { + var aE = aF.addCommand("jsplus_bootstrap_templates-" + C(aF), new CKEDITOR.dialogCommand("jsplus_bootstrap_templates-" + C(aF))); + aF.ui.addButton("jsplus_bootstrap_templates", { + label: u(aF, "jsplus_bootstrap_templates_title"), + title: u(aF, "jsplus_bootstrap_templates_title"), + icon: this.path + "/icons/jsplus_bootstrap_templates.png", + command: "jsplus_bootstrap_templates-" + C(aF) + }); + } else { + aF.ui.add("jsplus_bootstrap_templates", CKEDITOR.UI_PANELBUTTON, { + icon: this.path + "icons/jsplus_bootstrap_templates.png", + label: u(aF, "jsplus_bootstrap_templates_title"), + command: "jsplus_bootstrap_templates", + modes: { + wysiwyg: 1 + }, + editorFocus: 0, + caption: null, + table: null, + panel: { + css: CKEDITOR.skin.getPath("editor"), + attributes: { + role: "listbox", + "aria-label": "" + } + }, + onBlock: function(aG, aI) { + aI.autoSize = true; + aI.element.addClass("cke_colorblock"); + k = aG; + j = aI.element.getDocument().$; + var aH = new CKEDITOR.dom.element("div"); + aH.$.setAttribute("id", "jsplus_bootstrap_templates-popup-root-" + C(aF)); + aH.$.setAttribute("style", ((typeof(av) == "undefined" && av != null) ? "" : "width:" + av + "px;") + "padding:10px"); + aI.element.append(aH); + CKEDITOR.ui.fire("ready", this); + }, + onOpen: function() { + d(aF); + } + }); + } + } + }); +})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_uploader/config.php b/libraries/ckeditor/plugins/jsplus_uploader/config.php new file mode 100644 index 0000000..6df2ded --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_uploader/config.php @@ -0,0 +1,48 @@ + 0, // maxSize in bytes for uploaded files, 0 for any + 'allowedExtensions' => '*' // means any extensions are allowed +); + +$config['ResourceType']['Images'] = Array( + 'maxSize' => 16*1024*1024, // maxSize in bytes for uploaded images, 0 for any + 'allowedExtensions' => 'bmp,gif,jpeg,jpg,png', +); + +$config['JPEGQuality'] = 95; // Will be used for resizing JPEG images + +// Some restrictions to avoid server overload / DDoS +$config['MaxImgResizeWidth'] = 2000; +$config['MaxImgResizeHeight'] = 2000; +$config['MaxThumbResizeWidth'] = 500; +$config['MaxThumbResizeHeight'] = 500; + +$config['AllowExternalWebsites'] = ''; // Crossdomain upload is disabled by default +// If you want to enable it use this code: +// $config['AllowExternalSites'] = 'http://yoursite.com'; +// or to allow all websites (with caution!): +// $config['AllowExternalWebsites'] = '*'; + + + +if (substr($config['BaseUrl'], -1) !== '/') + $config['BaseUrl'] .= '/'; +if (substr($config['BaseDir'], -1) !== '/' && substr($config['BaseDir'], -1) !== '\\') + $config['BaseDir'] .= '/'; + +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_uploader/uploader.php b/libraries/ckeditor/plugins/jsplus_uploader/uploader.php new file mode 100644 index 0000000..57d750b --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_uploader/uploader.php @@ -0,0 +1,459 @@ + 0) + $result .= '|'; + $result .= $baseUrl.$f; + } + } else + $result = '!' . $uploadResult[1]; + + echo $result; + } else { + $CKEditorFuncNum = $_GET['CKEditorFuncNum']; + if ($uploadResult[0] === true) + echo ""; + else + echo ""; + + } +} + +function getThumbFileName($fileName) { + $a = explode('.', $fileName); + $a[count($a) - 2] .= '_small'; + $fileNameThumb = implode('.', $a); + return $fileNameThumb; +} + +function uploadFile( + $name, + $tmp_name, + $error, + $size, + $toDir, + $allowedExtensions, + $maxSize, + $imgEnlarge, + $imgWidth, + $imgHeight, + $doThumb, + $thumbEnlarge, + $thumbWidth, + $thumbHeight +) { + + if ($error != 0) { + $message = "There was an upload error for file `'.$name.'`, code #".$error.". Check your server's configuration"; + switch ($error) { + case UPLOAD_ERR_INI_SIZE: $message = "The uploaded file `'.$name.'` exceeds the upload_max_filesize directive in php.ini"; break; + case UPLOAD_ERR_FORM_SIZE: $message = "The uploaded file `'.$name.'` exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; break; + case UPLOAD_ERR_PARTIAL: $message = "The uploaded file `'.$name.'` was only partially uploaded"; break; + case UPLOAD_ERR_NO_FILE: $message = "No file was uploaded"; break; + case UPLOAD_ERR_NO_TMP_DIR: $message = "Missing a temporary folder on your server"; break; + case UPLOAD_ERR_CANT_WRITE: $message = "Failed to write file to disk on your server"; break; + case UPLOAD_ERR_EXTENSION: $message = "File upload stopped by extension"; break; + } + return array(false, $message); + } + + if ($size == 0) + return array(false, 'File `'.$name.'` size = 0'); + + if ($maxSize > 0 && $size > $maxSize) + return array(false, 'Size of file `'.$name.'` exceeds the limit of '.$maxSize.' bytes'); + + $a = explode('.', $name); + $type = $a[count($a)-1]; + error_log($type); + if ($allowedExtensions[0] != '*' && !in_array(strtolower($type), array_map('strtolower', $allowedExtensions))) + return array(false, 'Wrong extension for file `'.$name.'`. Allowed extensions are: ' . implode(', ', $allowedExtensions)); + + $fileName; + $fileNameThumb; + + // Search for file name + $ok = false; + $i = -1; + do { + $i ++; + if ($i == 0) + $fileName = $name; + else + $fileName = $i . '_' . $name; + $ok = !is_file($toDir . $fileName); + if ($doThumb) { + $fileNameThumb = getThumbFileName($fileName); + $ok = $ok && !file_exists($toDir . $fileNameThumb); + } + } while (!$ok); + + $filePath = $toDir . $fileName; + if (is_uploaded_file($tmp_name)) + $moveResult = move_uploaded_file($tmp_name, $filePath); + else + $moveResult = rename($tmp_name, $filePath); + if ($moveResult === false) + return array(false, 'Error while moving uploaded file to destination folder: check folder permissions on server side'); + + if ($imgWidth > 0 || $imgHeight > 0) { + $err = resizeImg( + $filePath, + $imgEnlarge, + $imgWidth, + $imgHeight, + true + ); + if ($err != null) + return array(false, 'Error while resizing image `'.$name.'`: '.$err); + } + + if ($doThumb) { + $err = resizeImg( + $filePath, + $thumbEnlarge, + $thumbWidth, + $thumbHeight, + false + ); + if ($err != null) + return array(false, 'Error while making thumbnail of image `'.$name.'`: '.$err); + } + + return array(true, $fileName); +} + + +// return array(ok?, tmp_file_name / error_text) +function rehost($url, $maxSize) { + if ($maxSize > 0) + $bytes = file_get_contents($url, false, null, -1, $maxSize); + else + $bytes = file_get_contents($url); + + if ($bytes == false) + return array(false, "Unable to locate file on external server".($maxSize > 0 ? " or file size limit exceeded" : "")); + + // $http_response_header filled by file_get_contents() + foreach($http_response_header as $header) + { + if (strpos(strtolower($header),'content-disposition') !== false) + { + $tmp_name = explode('=', $header); + if ($tmp_name[1]) + $file = trim($tmp_name[1],'";\''); + } + } + if (!isset($file)) { + $stripped_url = preg_replace('/\\?.*/', '', $url); + $file = basename($stripped_url); + } + + $tmpDir = sys_get_temp_dir(); + if (file_exists($tmpDir.'/'.$file)) { + $n = 1; + do { + $n ++; + } while (file_exists($tmpDir.'/'.$n.'_'.$file)); + $file = $n.'_'.$file; + } + $tmpFile = $tmpDir.'/'.$file; + + $bytesDownloaded = file_put_contents($tmpFile, $bytes); + if ($bytesDownloaded === false) + return array(false, "Unable to write downloaded data to: " . $tmpFile); + return array(true, $tmpFile); +} + +// If any error returns array(false, string) +// If all ok, returns array(true, array(file1, file2, ...)) +function upload($doThumb, $imgEnlarge, $imgWidth, $imgHeight, $thumbEnlarge, $thumbWidth, $thumbHeight) { + global $config; + if (!empty($_GET) && isset($_GET['type']) && array_key_exists($_GET['type'],$config['ResourceType'])) + $rType = $config['ResourceType'][$_GET['type']]; + else + return array(false, 'Resource type (type) is defined incorrectly ('.$_GET['type'].')'); + + if (!isset($_GET['rehost'])) { + + if (isset($_FILES['file'])) // for Plupload + $_FILES['upload'] = $_FILES['file']; + else if (isset($_FILES['files'])) // for JQuery File Upload + $_FILES['upload'] = $_FILES['files']; + + if (!isset($_FILES['upload'])) + return array(false, 'No files to process'); + + $data = $_FILES['upload']; + $files = array(); + if (is_array($data['name'])) { + for ($i = 0; $i < count($data['name']); $i++) + $files[] = array( + 'name' => $data['name'][$i], + 'tmp_name' => $data['tmp_name'][$i], + 'error' => $data['error'][$i], + 'size' => $data['size'][$i] + ); + } else { + $files[] = $data; + } + } else { + if (isset($_GET['url'])) { + $result = rehost($_GET['url'], $rType['maxSize']); + if ($result[0] === true) { + $name = basename($result[1]); + $file = array( + 'name' => $name, + 'tmp_name' => $result[1], + 'size' => filesize($result[1]), + 'error' => '' + ); + $files = array(); + $files[] = $file; + } else { + return $result; + } + } else + return array(false, 'No URL to process'); + } + + $resultFiles = array(); + foreach ($files as $file) { + $fileResult = uploadFile( + $file['name'], + $file['tmp_name'], + $file['error'], + $file['size'], + $config['BaseDir'], + explode(',',$rType['allowedExtensions']), + $rType['maxSize'], + $imgEnlarge, + $imgWidth, + $imgHeight, + $doThumb, + $thumbEnlarge, + $thumbWidth, + $thumbHeight + ); + if ($fileResult[0] !== true) + return $fileResult; // error + else + $resultFiles[] = $fileResult[1]; + } + + return array(true, $resultFiles); +} + + +function resizeImg($sourceFile, $resizeOnLess, $maxWidth, $maxHeight, $resizeself) { + global $config; + if ($maxWidth <= 0 && $maxHeight <= 0 && $resizeself) + return null; + + $sourceImageAttr = @getimagesize($sourceFile); + if ($sourceImageAttr === false) + return "unable to get image size"; + + switch ($sourceImageAttr['mime']) { + case 'image/gif': { + if (@imagetypes() & IMG_GIF) + $oImage = @imagecreatefromgif($sourceFile); + else + $ermsg = 'GIF images are not supported'; + } + break; + case 'image/jpeg': { + if (@imagetypes() & IMG_JPG) + $oImage = @imagecreatefromjpeg($sourceFile) ; + else + $ermsg = 'JPEG images are not supported'; + } + break; + case 'image/png': { + if (@imagetypes() & IMG_PNG) + $oImage = @imagecreatefrompng($sourceFile) ; + else + $ermsg = 'PNG images are not supported'; + } + break; + case 'image/wbmp': { + if (@imagetypes() & IMG_WBMP) + $oImage = @imagecreatefromwbmp($sourceFile); + else + $ermsg = 'WBMP images are not supported'; + } + break; + default: + $ermsg = $sourceImageAttr['mime'].' images are not supported'; + break; + } + + if (isset($ermsg) || false === $oImage) + return $ermsg; + + if ($maxWidth > 0 && $maxHeight > 0) { + $xscale = imagesx($oImage) / $maxWidth; + $yscale = imagesy($oImage) / $maxHeight; + } else if ($maxWidth > 0) { + $xscale = imagesx($oImage) / $maxWidth; + $yscale = $xscale; + } else if ($maxHeight > 0) { + $yscale = imagesy($oImage) / $maxHeight; + $xscale = $yscale; + } else { + $yscale = 1; + $xscale = 1; + } + + if ($yscale > $xscale) { + $newWidth = round(imagesx($oImage) * (1/$yscale)); + $newHeight = round(imagesy($oImage) * (1/$yscale)); + } else { + $newWidth = round(imagesx($oImage) * (1/$xscale)); + $newHeight = round(imagesy($oImage) * (1/$xscale)); + } + + $resizeRequired = + $newWidth > 0 + && + ($resizeOnLess || $newWidth < imagesx($oImage)) + && + $xscale != 1; + + if ($resizeRequired) { + // Resize is required + $newImage = imagecreatetruecolor($newWidth, $newHeight); + imagealphablending($newImage, false); + imagesavealpha($newImage, true); + imagecopyresampled($newImage, $oImage, 0, 0, 0, 0, $newWidth, $newHeight, imagesx($oImage), imagesy($oImage)); + $oImage = $newImage; + } + + if (!$resizeself) { + $sourceFileArr=explode('.',$sourceFile); + $sourceFileArr[count($sourceFileArr)-2].='_small'; + $destFile=implode('.',$sourceFileArr); + } else { + if ($resizeRequired) + unlink($sourceFile); + $destFile = $sourceFile; + } + + if ($resizeRequired) { + switch ($sourceImageAttr['mime']) { + case 'image/gif': + imagegif($oImage, $destFile); + break; + case 'image/jpeg': + imagejpeg($oImage, $destFile, $config['JPEGQuality']); + break; + case 'image/png': + imagepng($oImage, $destFile); + break; + case 'image/wbmp': + imagewbmp($oImage, $destFile); + break; + } + } else if ($destFile != $sourceFile) { + copy($sourceFile, $destFile); + } + + @imageDestroy($oImage); + @imageDestroy($newImage); + return null; +} + +function run() { + global $config; + if (!isset($config)) { + $result = array(false, 'Uploader\'s config not found. Check globals are on your server'); + } else { + + // Original image resize options + $imgEnlarge = false; + if (isset($_GET['ie'])) + if ($_GET['ie'] == '1') + $imgEnlarge = true; + else + fail("Image Resize (ie) value is incorrect (" . $_GET['ie'] . ")"); + $imgWidth = 0; + if (isset($_GET['iw'])) + $imgWidth = $_GET['iw']; + if (preg_match('/^\d{1, 5}$/', $imgWidth) != null) + fail("Image Width (iw) value is not positive integer number (" . $imgWidth . ")"); + if ($imgWidth > $config['MaxImgResizeWidth']) + fail("Image Width (iw) value is too big (" . $imgWidth . ")"); + $imgHeight = 0; + if (isset($_GET['ih'])) + $imgHeight = $_GET['ih']; + if (preg_match('/^\d{1, 5}$/', $imgHeight) != null) + fail("Image Height (ih) value is not positive integer number (" . $imgHeight . ")"); + if ($imgHeight > $config['MaxImgResizeHeight']) + fail("Image Height (ih) value is too big (" . $imgHeight . ")"); + + // Thumbnail resize options + $thumbEnlarge = false; + if (isset($_GET['te'])) + if ($_GET['te'] == '1') + $thumbEnlarge = true; + else + fail("Thumbnail Resize (te) value is incorrect (" . $_GET['te'] . ")"); + $thumbWidth = 0; + if (isset($_GET['tw'])) + $thumbWidth = $_GET['tw']; + if (preg_match('/^\d{1, 5}$/', $thumbWidth) != null) + fail("Thumbnail Width (tw) value is not positive integer number (" . $thumbWidth . ")"); + if ($thumbWidth > $config['MaxThumbResizeWidth']) + fail("Thumbnail Width (tw) value is too big (" . $thumbWidth . ")"); + $thumbHeight = 0; + if (isset($_GET['th'])) + $thumbHeight = $_GET['th']; + if (preg_match('/^\d{1, 5}$/', $thumbHeight) != null) + fail("Thumbnail Height (th) value is not positive integer number (" . $thumbHeight . ")"); + if ($thumbHeight > $config['MaxThumbResizeHeight']) + fail("Thumbnail Height (th) value is too big (" . $thumbHeight . ")"); + + $doThumb = $_GET['type']=='Images' && isset($_GET['makeThumb']); + + $result = upload( + $doThumb, + $imgEnlarge, + $imgWidth, + $imgHeight, + $thumbEnlarge, + $thumbWidth, + $thumbHeight + ); + } + + sendResponse( + $result, + $config['BaseUrl'] + ); +} + +run(); + +?> \ No newline at end of file diff --git a/libraries/ckeditor/plugins/jsplus_uploader/userfiles/.htaccess b/libraries/ckeditor/plugins/jsplus_uploader/userfiles/.htaccess new file mode 100644 index 0000000..615eed5 --- /dev/null +++ b/libraries/ckeditor/plugins/jsplus_uploader/userfiles/.htaccess @@ -0,0 +1,6 @@ + + php_value engine off + + + php_value engine off + diff --git a/libraries/ckeditor/plugins/leaflet/css/contents.css b/libraries/ckeditor/plugins/leaflet/css/contents.css new file mode 100644 index 0000000..dbdc915 --- /dev/null +++ b/libraries/ckeditor/plugins/leaflet/css/contents.css @@ -0,0 +1,43 @@ +.leaflet_div { + background: #eee; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: 0 1px 1px #fff inset, 0 -1px 0px #ccc inset; + line-height: 0; + margin-right: 1em; + margin-bottom: 1em; +} + +.leaflet_div.align-left { + float: left; +} + +.leaflet_div.align-right { + float: right; +} + +.leaflet_div.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} + +.cke_widget_wrapper:hover>.cke_widget_element { + outline: 3px solid yellow !important; +} + +.responsive-map { + height: 0; + padding-bottom: 56.25%; + padding-top: 25px; + position: relative; + width:100%; +} + +.responsive-map-iframe { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} diff --git a/libraries/ckeditor/plugins/leaflet/dialogs/leaflet.js b/libraries/ckeditor/plugins/leaflet/dialogs/leaflet.js new file mode 100644 index 0000000..7dc5d36 --- /dev/null +++ b/libraries/ckeditor/plugins/leaflet/dialogs/leaflet.js @@ -0,0 +1,518 @@ +CKEDITOR.dialog.add('leaflet', function(editor) { + var autocomplete; + var mapContainer = ''; + + // Access the current translation file. + var pluginTranslation = editor.lang.leaflet; + + // Use the core translation file. Used mainly for the `Alignment` values. + var commonTranslation = editor.lang.common; + + // Dialog's function callback for the Leaflet Map Widget. + return { + title: pluginTranslation.dialogTitle, + minWidth: 320, + minHeight: 125, + + contents: [{ + // Create a Location tab. + id: 'location_tab', + label: pluginTranslation.locationTabLabel, + elements: [ +// { +// id: 'map_geocode', +// className: 'geocode', +// type: 'text', +// label: pluginTranslation.googleSearchFieldLabel, +// style: 'margin-top: -7px;', +// +// setup: function(widget) { +// this.setValue(''); +// }, +// +// onLoad: function (widget) { +// // Get the DOM reference for the Search field. +// var input = this.getInputElement().$; +// +// // Set a diffused/default text for better user experience. +// // This will override the Google's default placeholder text: +// // 'Enter a location'. +// jQuery('.geocode input').attr('placeholder', pluginTranslation.googleSearchFieldHint); +// +// var config = editor.config; +// +// // Default value, but eventually will reach its quota if many users +// // will just utilize this key instead of creating their own. +// var googleApiKey = 'AIzaSyA9ySM6msnGm0qQB1L1cLTMBdKEUKPySmQ'; +// +// if (typeof config.leaflet_maps_google_api_key != 'undefined' && config.leaflet_maps_google_api_key != '') { +// googleApiKey = config.leaflet_maps_google_api_key; +// } +// +// // Execute only once, and not every dialog pop-up. +// if (typeof google == 'undefined') { +// // Load other needed external library. +// // Wait for the script to finish loading before binding +// // the autocomplete mechanism to prevent rendering issue. +// CKEDITOR.scriptLoader.load('//maps.googleapis.com/maps/api/js?libraries=places&callback=dummy&key=' + googleApiKey, function() { +// // Bind the Search field to the Autocomplete widget. +// autocomplete = new google.maps.places.Autocomplete(input); +// }); +// } else { +// autocomplete = new google.maps.places.Autocomplete(input); +// } +// +// // Fix for the Google's type-ahead search displaying behind +// // the widgets dialog window. +// // Basically, we want to override the z-index of the +// // Seach Autocomplete list, in which the styling is being set +// // in real-time by Google. +// // Make a new DOM element. +// var stylesheet = jQuery(' + + + + + + +
        + + + + + + diff --git a/libraries/ckeditor/plugins/leaflet/scripts/leaflet-providers/leaflet-providers.js b/libraries/ckeditor/plugins/leaflet/scripts/leaflet-providers/leaflet-providers.js new file mode 100644 index 0000000..b88cd61 --- /dev/null +++ b/libraries/ckeditor/plugins/leaflet/scripts/leaflet-providers/leaflet-providers.js @@ -0,0 +1,20 @@ +(function(){L.TileLayer.Provider=L.TileLayer.extend({initialize:function(a,b){var f=L.TileLayer.Provider.providers,e=a.split("."),g=e[0],h=e[1];if(!f[g])throw"No such provider ("+g+")";var d={url:f[g].url,options:f[g].options};if(h&&"variants"in f[g]){if(!(h in f[g].variants))throw"No such name in provider ("+h+")";e=f[g].variants[h];d={url:e.url||d.url,options:L.Util.extend({},d.options,e.options)}}else"function"===typeof d.url&&(d.url=d.url(e.splice(1,e.length-1).join(".")));var c=function(a){return-1=== +a.indexOf("{attribution.")?a:a.replace(/\{attribution.(\w*)\}/,function(a,b){return c(f[b].options.attribution)})};d.options.attribution=c(d.options.attribution);e=L.Util.extend({},d.options,b);L.TileLayer.prototype.initialize.call(this,d.url,e)}});L.TileLayer.Provider.providers={OpenStreetMap:{url:"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",options:{attribution:'\x26copy; \x3ca href\x3d"http://openstreetmap.org"\x3eOpenStreetMap\x3c/a\x3e contributors, \x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC-BY-SA\x3c/a\x3e'}, +variants:{Mapnik:{},BlackAndWhite:{url:"http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png"},DE:{url:"http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png"},HOT:{url:"http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",options:{attribution:'{attribution.OpenStreetMap}, Tiles courtesy of \x3ca href\x3d"http://hot.openstreetmap.org/" target\x3d"_blank"\x3eHumanitarian OpenStreetMap Team\x3c/a\x3e'}}}},OpenCycleMap:{url:"http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png",options:{attribution:'\x26copy; \x3ca href\x3d"http://www.opencyclemap.org"\x3eOpenCycleMap\x3c/a\x3e, {attribution.OpenStreetMap}'}}, +OpenSeaMap:{url:"http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png",options:{attribution:'Map data: \x26copy; \x3ca href\x3d"http://www.openseamap.org"\x3eOpenSeaMap\x3c/a\x3e contributors'}},Thunderforest:{url:"http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png",options:{attribution:"{attribution.OpenCycleMap}"},variants:{OpenCycleMap:{},Transport:{url:"http://{s}.tile2.opencyclemap.org/transport/{z}/{x}/{y}.png"},Landscape:{url:"http://{s}.tile3.opencyclemap.org/landscape/{z}/{x}/{y}.png"}, +Outdoors:{url:"http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png"}}},OpenMapSurfer:{url:"http://openmapsurfer.uni-hd.de/tiles/roads/x\x3d{x}\x26y\x3d{y}\x26z\x3d{z}",options:{attribution:'Imagery from \x3ca href\x3d"http://giscience.uni-hd.de/"\x3eGIScience Research Group @ University of Heidelberg\x3c/a\x3e \x26mdash; Map data {attribution.OpenStreetMap}'},variants:{Roads:{},AdminBounds:{url:"http://openmapsurfer.uni-hd.de/tiles/adminb/x\x3d{x}\x26y\x3d{y}\x26z\x3d{z}"},Grayscale:{url:"http://openmapsurfer.uni-hd.de/tiles/roadsg/x\x3d{x}\x26y\x3d{y}\x26z\x3d{z}"}}}, +MapQuestOpen:{url:"http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg",options:{attribution:'Tiles Courtesy of \x3ca href\x3d"http://www.mapquest.com/"\x3eMapQuest\x3c/a\x3e \x26mdash; Map data {attribution.OpenStreetMap}',subdomains:"1234"},variants:{OSM:{},Aerial:{url:"http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg",options:{attribution:'Tiles Courtesy of \x3ca href\x3d"http://www.mapquest.com/"\x3eMapQuest\x3c/a\x3e \x26mdash; Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency'}}}}, +MapBox:{url:function(a){return"http://{s}.tiles.mapbox.com/v3/"+a+"/{z}/{x}/{y}.png"},options:{attribution:'Imagery from \x3ca href\x3d"http://mapbox.com/about/maps/"\x3eMapBox\x3c/a\x3e \x26mdash; Map data {attribution.OpenStreetMap}',subdomains:"abcd"}},Stamen:{url:"http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png",options:{attribution:'Map tiles by \x3ca href\x3d"http://stamen.com"\x3eStamen Design\x3c/a\x3e, \x3ca href\x3d"http://creativecommons.org/licenses/by/3.0"\x3eCC BY 3.0\x3c/a\x3e \x26mdash; Map data {attribution.OpenStreetMap}', +subdomains:"abcd",minZoom:0,maxZoom:20},variants:{Toner:{},TonerBackground:{url:"http://{s}.tile.stamen.com/toner-background/{z}/{x}/{y}.png"},TonerHybrid:{url:"http://{s}.tile.stamen.com/toner-hybrid/{z}/{x}/{y}.png"},TonerLines:{url:"http://{s}.tile.stamen.com/toner-lines/{z}/{x}/{y}.png"},TonerLabels:{url:"http://{s}.tile.stamen.com/toner-labels/{z}/{x}/{y}.png"},TonerLite:{url:"http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png"},Terrain:{url:"http://{s}.tile.stamen.com/terrain/{z}/{x}/{y}.jpg", +options:{minZoom:4,maxZoom:18}},TerrainBackground:{url:"http://{s}.tile.stamen.com/terrain-background/{z}/{x}/{y}.jpg",options:{minZoom:4,maxZoom:18}},Watercolor:{url:"http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg",options:{minZoom:3,maxZoom:16}}}},Esri:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}",options:{attribution:"Tiles \x26copy; Esri"},variants:{WorldStreetMap:{options:{attribution:"{attribution.Esri} \x26mdash; Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012"}}, +DeLorme:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer/tile/{z}/{y}/{x}",options:{minZoom:1,maxZoom:11,attribution:"{attribution.Esri} \x26mdash; Copyright: \x26copy;2012 DeLorme"}},WorldTopoMap:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}",options:{attribution:"{attribution.Esri} \x26mdash; Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community"}}, +WorldImagery:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",options:{attribution:"{attribution.Esri} \x26mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"}},WorldTerrain:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}",options:{maxZoom:13,attribution:"{attribution.Esri} \x26mdash; Source: USGS, Esri, TANA, DeLorme, and NPS"}}, +WorldShadedRelief:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}",options:{maxZoom:13,attribution:"{attribution.Esri} \x26mdash; Source: Esri"}},WorldPhysical:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}",options:{maxZoom:8,attribution:"{attribution.Esri} \x26mdash; Source: US National Park Service"}},OceanBasemap:{url:"http://services.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer/tile/{z}/{y}/{x}", +options:{maxZoom:13,attribution:"{attribution.Esri} \x26mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri"}},NatGeoWorldMap:{url:"http://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}",options:{maxZoom:16,attribution:"{attribution.Esri} \x26mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC"}},WorldGrayCanvas:{url:"http://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}", +options:{maxZoom:16,attribution:"{attribution.Esri} \x26mdash; Esri, DeLorme, NAVTEQ"}}}},OpenWeatherMap:{options:{attribution:'Map data \x26copy; \x3ca href\x3d"http://openweathermap.org"\x3eOpenWeatherMap\x3c/a\x3e',opacity:.5},variants:{Clouds:{url:"http://{s}.tile.openweathermap.org/map/clouds/{z}/{x}/{y}.png"},CloudsClassic:{url:"http://{s}.tile.openweathermap.org/map/clouds_cls/{z}/{x}/{y}.png"},Precipitation:{url:"http://{s}.tile.openweathermap.org/map/precipitation/{z}/{x}/{y}.png"},PrecipitationClassic:{url:"http://{s}.tile.openweathermap.org/map/precipitation_cls/{z}/{x}/{y}.png"}, +Rain:{url:"http://{s}.tile.openweathermap.org/map/rain/{z}/{x}/{y}.png"},RainClassic:{url:"http://{s}.tile.openweathermap.org/map/rain_cls/{z}/{x}/{y}.png"},Pressure:{url:"http://{s}.tile.openweathermap.org/map/pressure/{z}/{x}/{y}.png"},PressureContour:{url:"http://{s}.tile.openweathermap.org/map/pressure_cntr/{z}/{x}/{y}.png"},Wind:{url:"http://{s}.tile.openweathermap.org/map/wind/{z}/{x}/{y}.png"},Temperature:{url:"http://{s}.tile.openweathermap.org/map/temp/{z}/{x}/{y}.png"},Snow:{url:"http://{s}.tile.openweathermap.org/map/snow/{z}/{x}/{y}.png"}}}, +Nokia:{options:{attribution:'Map \x26copy; \x3ca href\x3d"http://developer.here.com"\x3eNokia\x3c/a\x3e, Data \x26copy; NAVTEQ 2012',subdomains:"1234",devID:"xyz",appID:"abc"},variants:{normalDay:{url:"http://{s}.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?token\x3d{devID}\x26app_id\x3d{appID}"},normalGreyDay:{url:"http://{s}.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/normal.day.grey/{z}/{x}/{y}/256/png8?token\x3d{devID}\x26app_id\x3d{appID}"},satelliteNoLabelsDay:{url:"http://{s}.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?token\x3d{devID}\x26app_id\x3d{appID}"}, +satelliteYesLabelsDay:{url:"http://{s}.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?token\x3d{devID}\x26app_id\x3d{appID}"},terrainDay:{url:"http://{s}.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/terrain.day/{z}/{x}/{y}/256/png8?token\x3d{devID}\x26app_id\x3d{appID}"}}},Acetate:{url:"http://a{s}.acetate.geoiq.com/tiles/acetate-hillshading/{z}/{x}/{y}.png",options:{attribution:"\x26copy;2012 Esri \x26 Stamen, Data from OSM and Natural Earth",subdomains:"0123",minZoom:2, +maxZoom:18},variants:{all:{},basemap:{url:"http://a{s}.acetate.geoiq.com/tiles/acetate-base/{z}/{x}/{y}.png"},terrain:{url:"http://a{s}.acetate.geoiq.com/tiles/terrain/{z}/{x}/{y}.png"},foreground:{url:"http://a{s}.acetate.geoiq.com/tiles/acetate-fg/{z}/{x}/{y}.png"},roads:{url:"http://a{s}.acetate.geoiq.com/tiles/acetate-roads/{z}/{x}/{y}.png"},labels:{url:"http://a{s}.acetate.geoiq.com/tiles/acetate-labels/{z}/{x}/{y}.png"},hillshading:{url:"http://a{s}.acetate.geoiq.com/tiles/hillshading/{z}/{x}/{y}.png"}}}}; +L.tileLayer.provider=function(a,b){return new L.TileLayer.Provider(a,b)};L.Control.Layers.Provided=L.Control.Layers.extend({initialize:function(a,b,f){var e,g=function(a){return a.replace(/\./g,": ").replace(/([a-z])([A-Z])/g,"$1 $2")};a.length&&(function(){for(var b={},d=a.length,c=0;c + + + + + + + + + + + + + + +
        + + + diff --git a/libraries/ckeditor/plugins/lineheight/LICENSE b/libraries/ckeditor/plugins/lineheight/LICENSE new file mode 100644 index 0000000..78f4754 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Kamlesh Kushwaha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/libraries/ckeditor/plugins/lineheight/README.md b/libraries/ckeditor/plugins/lineheight/README.md new file mode 100644 index 0000000..a7fdba0 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/README.md @@ -0,0 +1,2 @@ +# lineheight +Ckeditor lineheight plugin repository diff --git a/libraries/ckeditor/plugins/lineheight/lang/LANG.js b/libraries/ckeditor/plugins/lineheight/lang/LANG.js new file mode 100644 index 0000000..66a7c5f --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/LANG.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','{LANGUAGE_CODE}', { + title: '{LINE-HEIGHT}' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/ar.js b/libraries/ckeditor/plugins/lineheight/lang/ar.js new file mode 100644 index 0000000..be7347b --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/ar.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','ar', { + title: 'خط الطول' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/de.js b/libraries/ckeditor/plugins/lineheight/lang/de.js new file mode 100644 index 0000000..4a5ee25 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/de.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','de', { + title: 'Zeilenhöhe' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/en.js b/libraries/ckeditor/plugins/lineheight/lang/en.js new file mode 100644 index 0000000..ea74fbc --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/en.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','en', { + title: 'Line Height' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/es.js b/libraries/ckeditor/plugins/lineheight/lang/es.js new file mode 100644 index 0000000..1498176 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/es.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','es', { + title: 'Altura de Línea' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/fr.js b/libraries/ckeditor/plugins/lineheight/lang/fr.js new file mode 100644 index 0000000..1679889 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/fr.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','fr', { + title: 'Hauteur de Ligne' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/ko.js b/libraries/ckeditor/plugins/lineheight/lang/ko.js new file mode 100644 index 0000000..782bd87 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/ko.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','ko', { + title: '줄 높이' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/lang/pt.js b/libraries/ckeditor/plugins/lineheight/lang/pt.js new file mode 100644 index 0000000..f8ca6e4 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/lang/pt.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','af', { + title: 'linha Altura' +} ); diff --git a/libraries/ckeditor/plugins/lineheight/plugin.js b/libraries/ckeditor/plugins/lineheight/plugin.js new file mode 100644 index 0000000..464c747 --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/plugin.js @@ -0,0 +1,81 @@ +( function() { + function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) { + var config = editor.config,style = new CKEDITOR.style( styleDefinition ); + var names = entries.split( ';' ),values = []; + var styles = {}; + for ( var i = 0; i < names.length; i++ ) { + var parts = names[ i ]; + if ( parts ) { + parts = parts.split( '/' ); + var vars = {},name = names[ i ] = parts[ 0 ]; + vars[ styleType ] = values[ i ] = parts[ 1 ] || name; + styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); + styles[ name ]._.definition.name = name; + } else + names.splice( i--, 1 ); + } + editor.ui.addRichCombo( comboName, { + label: editor.lang.lineheight.title, + title: editor.lang.lineheight.title, + toolbar: 'styles,' + order, + allowedContent: style, + requiredContent: style, + panel: { + css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), + multiSelect: false, + attributes: { 'aria-label': editor.lang.lineheight.title } + }, + init: function() { + this.startGroup(editor.lang.lineheight.title); + for ( var i = 0; i < names.length; i++ ) { + var name = names[ i ]; + this.add( name, styles[ name ].buildPreview(), name ); + } + }, + onClick: function( value ) { + editor.focus(); + editor.fire( 'saveSnapshot' ); + var style = styles[ value ]; + editor[ this.getValue() == value ? 'removeStyle' : 'applyStyle' ]( style ); + editor.fire( 'saveSnapshot' ); + }, + onRender: function() { + editor.on( 'selectionChange', function( ev ) { + var currentValue = this.getValue(); + var elementPath = ev.data.path,elements = elementPath.elements; + for ( var i = 0, element; i < elements.length; i++ ) { + element = elements[ i ]; + for ( var value in styles ) { + if ( styles[ value ].checkElementMatch( element, true, editor ) ) { + if ( value != currentValue ) + this.setValue( value ); + return; + } + } + } + this.setValue( '', defaultLabel ); + }, this ); + }, + refresh: function() { + if ( !editor.activeFilter.check( style ) ) + this.setState( CKEDITOR.TRISTATE_DISABLED ); + } + } ); + } + CKEDITOR.plugins.add( 'lineheight', { + requires: 'richcombo', + lang: 'ar,de,en,es,fr,ko,pt', + init: function( editor ) { + var config = editor.config; + addCombo( editor, 'lineheight', 'size', editor.lang.lineheight.title, config.line_height, editor.lang.lineheight.title, config.lineHeight_style, 40 ); + } + } ); +} )(); +CKEDITOR.config.line_height = '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72'; +CKEDITOR.config.lineHeight_style = { + element: 'span', + styles: { 'line-height': '#(size)' }, + overrides: [ { + element: 'line-height', attributes: { 'size': null } + } ] +}; diff --git a/libraries/ckeditor/plugins/lineheight/readme.txt b/libraries/ckeditor/plugins/lineheight/readme.txt new file mode 100644 index 0000000..313beca --- /dev/null +++ b/libraries/ckeditor/plugins/lineheight/readme.txt @@ -0,0 +1,30 @@ +lineheight +========== + +CKEDITOR Line-height plugin documentation +---------------------------------------------- + +Installation Notes: + + Adding plugin into the toolbar: + Using CKBuilder is a recommended solution, however, if you have plugins developed by yourself or by third parties, you can add plugins to your local installation manually by following the steps described below: + Extract the plugin .zip archive. + Copy the plugin files to the plugins folder of your CKEditor installation. Each plugin must be placed in a sub-folder that matches its "technical" name. + + For example, the lineheight plugin would be installed into this folder: /plugins/lineheight. + Check and resolve plugin dependencies. If a plugin needs others to work, you will need to add these manually as well. + Enable the plugin. Use the extraPlugins setting to add the plugin to your confiuration: + + config.extraPlugins = 'lineheight'; + +Refer this link for configuring the toolbar: http://docs.ckeditor.com/#!/guide/dev_toolbar + + +Customizing the lineheight values in the dropdown +------------------------------------------------------- +In order to have custom values of line-height instead of the default, you can add following line in the config.js file: + + config.line_height="1em;1.1em;1.2em;1.3em;1.4em;1.5em"; + + Here, "em" is the unit of line-height which you can change to "px","%" or any other allowed unit for line-height. + You can also change the numbers based on your requirements. You can have more range or low range , it all depends on your requirements. diff --git a/libraries/ckeditor/plugins/lineutils/dev/dnd.html b/libraries/ckeditor/plugins/lineutils/dev/dnd.html new file mode 100644 index 0000000..865dc59 --- /dev/null +++ b/libraries/ckeditor/plugins/lineutils/dev/dnd.html @@ -0,0 +1,172 @@ + + + + + + Widget Drag & Drop with Lineutils — CKEditor Sample + + + + + + +

        + CKEditor Samples » Widget Drag & Drop with Lineutils +

        + +

        Classic (iframe-based) Editor

        + + + +

        Inline Editor

        + +
        + + + + + + + + + + + + + + + +
        This tableis thevery firstelement of the document.
        We are stillable to accesthe space before it. + + + + + + + + + +
        This table is inside of a cell of another table.
        We can type either before or after it though.
        +
        + +
        +
        +
          +
        1. This numbered list...
        2. +
        3. ...is a neighbour of a horizontal line...
        4. +
        5. +
            +
          1. Nested list!
          2. +
          +
        6. +
        + +
        Saturn V +
        Roll out of Saturn V on launch pad
        +
        + +
          +
        • We can type between the lists...
        • +
        • ...thanks to Magicline.
        • +
        + +

        Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.

        + +

        Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.

        + +

        Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.

        + +
        +

        This text is wrapped in a DIV element. We can type after this element though.

        +
        +
        + + + + + + diff --git a/libraries/ckeditor/plugins/lineutils/dev/magicfinger.html b/libraries/ckeditor/plugins/lineutils/dev/magicfinger.html new file mode 100644 index 0000000..1953110 --- /dev/null +++ b/libraries/ckeditor/plugins/lineutils/dev/magicfinger.html @@ -0,0 +1,285 @@ + + + + + + Lineutils — CKEditor Sample + + + + +

        + CKEditor Samples » Lineutils +

        + +

        Classic (iframe-based) Editor

        + + + +

        Inline Editor

        + +
        + + + + + + + + + + + + + + + +
        This tableis thevery firstelement of the document.
        We are stillable to accesthe space before it. + + + + + + + + + +
        This table is inside of a cell of another table.
        We can type either before or after it though.
        +
        + +

        Two succesive horizontal lines (HR tags). We can access the space in between:

        + +
        +
        +
          +
        1. This numbered list...
        2. +
        3. ...is a neighbour of a horizontal line...
        4. +
        5. +
            +
          1. Nested list!
          2. +
          +
        6. +
        + +
          +
        • We can type between the lists...
        • +
        • ...thanks to Magicline.
        • +
        + +

        Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.

        + +

        Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.

        + +

        Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.

        + +
        +

        This text is wrapped in a DIV element. We can type after this element though.

        +
        +
        + +

        Extreme inline

        + +
        +
        Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim.
        +
        + Position static +
        foo
        +
        +
        +
        Key
        Value
        +
        +
        Whatever
        +
        +

        Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies

        +
        +
        +

        Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies

        +
        foo
        +
        + +

        Classic (iframe-based) Editor, H-scroll

        + + + + + + + + diff --git a/libraries/ckeditor/plugins/lineutils/plugin.js b/libraries/ckeditor/plugins/lineutils/plugin.js new file mode 100644 index 0000000..563c667 --- /dev/null +++ b/libraries/ckeditor/plugins/lineutils/plugin.js @@ -0,0 +1,1018 @@ +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + + /** + * @fileOverview A set of utilities to find and create horizontal spaces in edited content. + */ + +'use strict'; + +( function() { + + CKEDITOR.plugins.add( 'lineutils' ); + + /** + * Determines a position relative to an element in DOM (before). + * + * @readonly + * @property {Number} [=0] + * @member CKEDITOR + */ + CKEDITOR.LINEUTILS_BEFORE = 1; + + /** + * Determines a position relative to an element in DOM (after). + * + * @readonly + * @property {Number} [=2] + * @member CKEDITOR + */ + CKEDITOR.LINEUTILS_AFTER = 2; + + /** + * Determines a position relative to an element in DOM (inside). + * + * @readonly + * @property {Number} [=4] + * @member CKEDITOR + */ + CKEDITOR.LINEUTILS_INSIDE = 4; + + /** + * A utility that traverses the DOM tree and discovers elements + * (relations) matching user-defined lookups. + * + * @private + * @class CKEDITOR.plugins.lineutils.finder + * @constructor Creates a Finder class instance. + * @param {CKEDITOR.editor} editor Editor instance that the Finder belongs to. + * @param {Object} def Finder's definition. + * @since 4.3 + */ + function Finder( editor, def ) { + CKEDITOR.tools.extend( this, { + editor: editor, + editable: editor.editable(), + doc: editor.document, + win: editor.window + }, def, true ); + + this.inline = this.editable.isInline(); + + if ( !this.inline ) { + this.frame = this.win.getFrame(); + } + + this.target = this[ this.inline ? 'editable' : 'doc' ]; + } + + Finder.prototype = { + /** + * Initializes searching for elements with every mousemove event fired. + * To stop searching use {@link #stop}. + * + * @param {Function} [callback] Function executed on every iteration. + */ + start: function( callback ) { + var that = this, + editor = this.editor, + doc = this.doc, + el, elfp, x, y; + + var moveBuffer = CKEDITOR.tools.eventsBuffer( 50, function() { + if ( editor.readOnly || editor.mode != 'wysiwyg' ) + return; + + that.relations = {}; + + // Sometimes it happens that elementFromPoint returns null (especially on IE). + // Any further traversal makes no sense if there's no start point. Abort. + // Note: In IE8 elementFromPoint may return zombie nodes of undefined nodeType, + // so rejecting those as well. + if ( !( elfp = doc.$.elementFromPoint( x, y ) ) || !elfp.nodeType ) { + return; + } + + el = new CKEDITOR.dom.element( elfp ); + + that.traverseSearch( el ); + + if ( !isNaN( x + y ) ) { + that.pixelSearch( el, x, y ); + } + + callback && callback( that.relations, x, y ); + } ); + + // Searching starting from element from point on mousemove. + this.listener = this.editable.attachListener( this.target, 'mousemove', function( evt ) { + x = evt.data.$.clientX; + y = evt.data.$.clientY; + + moveBuffer.input(); + } ); + + this.editable.attachListener( this.inline ? this.editable : this.frame, 'mouseout', function() { + moveBuffer.reset(); + } ); + }, + + /** + * Stops observing mouse events attached by {@link #start}. + */ + stop: function() { + if ( this.listener ) { + this.listener.removeListener(); + } + }, + + /** + * Returns a range representing the relation, according to its element + * and type. + * + * @param {Object} location Location containing a unique identifier and type. + * @returns {CKEDITOR.dom.range} Range representing the relation. + */ + getRange: ( function() { + var where = {}; + + where[ CKEDITOR.LINEUTILS_BEFORE ] = CKEDITOR.POSITION_BEFORE_START; + where[ CKEDITOR.LINEUTILS_AFTER ] = CKEDITOR.POSITION_AFTER_END; + where[ CKEDITOR.LINEUTILS_INSIDE ] = CKEDITOR.POSITION_AFTER_START; + + return function( location ) { + var range = this.editor.createRange(); + + range.moveToPosition( this.relations[ location.uid ].element, where[ location.type ] ); + + return range; + }; + } )(), + + /** + * Stores given relation in a {@link #relations} object. Processes the relation + * to normalize and avoid duplicates. + * + * @param {CKEDITOR.dom.element} el Element of the relation. + * @param {Number} type Relation, one of `CKEDITOR.LINEUTILS_AFTER`, `CKEDITOR.LINEUTILS_BEFORE`, `CKEDITOR.LINEUTILS_INSIDE`. + */ + store: ( function() { + function merge( el, type, relations ) { + var uid = el.getUniqueId(); + + if ( uid in relations ) { + relations[ uid ].type |= type; + } else { + relations[ uid ] = { element: el, type: type }; + } + } + + return function( el, type ) { + var alt; + + // Normalization to avoid duplicates: + // CKEDITOR.LINEUTILS_AFTER becomes CKEDITOR.LINEUTILS_BEFORE of el.getNext(). + if ( is( type, CKEDITOR.LINEUTILS_AFTER ) && isStatic( alt = el.getNext() ) && alt.isVisible() ) { + merge( alt, CKEDITOR.LINEUTILS_BEFORE, this.relations ); + type ^= CKEDITOR.LINEUTILS_AFTER; + } + + // Normalization to avoid duplicates: + // CKEDITOR.LINEUTILS_INSIDE becomes CKEDITOR.LINEUTILS_BEFORE of el.getFirst(). + if ( is( type, CKEDITOR.LINEUTILS_INSIDE ) && isStatic( alt = el.getFirst() ) && alt.isVisible() ) { + merge( alt, CKEDITOR.LINEUTILS_BEFORE, this.relations ); + type ^= CKEDITOR.LINEUTILS_INSIDE; + } + + merge( el, type, this.relations ); + }; + } )(), + + /** + * Traverses the DOM tree towards root, checking all ancestors + * with lookup rules, avoiding duplicates. Stores positive relations + * in the {@link #relations} object. + * + * @param {CKEDITOR.dom.element} el Element which is the starting point. + */ + traverseSearch: function( el ) { + var l, type, uid; + + // Go down DOM towards root (or limit). + do { + uid = el.$[ 'data-cke-expando' ]; + + // This element was already visited and checked. + if ( uid && uid in this.relations ) { + continue; + } + + if ( el.equals( this.editable ) ) { + return; + } + + if ( isStatic( el ) ) { + // Collect all addresses yielded by lookups for that element. + for ( l in this.lookups ) { + + if ( ( type = this.lookups[ l ]( el ) ) ) { + this.store( el, type ); + } + } + } + } while ( !isLimit( el ) && ( el = el.getParent() ) ); + }, + + /** + * Iterates vertically pixel-by-pixel within a given element starting + * from given coordinates, searching for elements in the neighborhood. + * Once an element is found it is processed by {@link #traverseSearch}. + * + * @param {CKEDITOR.dom.element} el Element which is the starting point. + * @param {Number} [x] Horizontal mouse coordinate relative to the viewport. + * @param {Number} [y] Vertical mouse coordinate relative to the viewport. + */ + pixelSearch: ( function() { + var contains = CKEDITOR.env.ie || CKEDITOR.env.webkit ? + function( el, found ) { + return el.contains( found ); + } : function( el, found ) { + return !!( el.compareDocumentPosition( found ) & 16 ); + }; + + // Iterates pixel-by-pixel from starting coordinates, moving by defined + // step and getting elementFromPoint in every iteration. Iteration stops when: + // * A valid element is found. + // * Condition function returns `false` (i.e. reached boundaries of viewport). + // * No element is found (i.e. coordinates out of viewport). + // * Element found is ascendant of starting element. + // + // @param {Object} doc Native DOM document. + // @param {Object} el Native DOM element. + // @param {Number} xStart Horizontal starting coordinate to use. + // @param {Number} yStart Vertical starting coordinate to use. + // @param {Number} step Step of the algorithm. + // @param {Function} condition A condition relative to current vertical coordinate. + function iterate( el, xStart, yStart, step, condition ) { + var y = yStart, + tryouts = 0, + found; + + while ( condition( y ) ) { + y += step; + + // If we try and we try, and still nothing's found, let's end + // that party. + if ( ++tryouts == 25 ) { + return; + } + + found = this.doc.$.elementFromPoint( xStart, y ); + + // Nothing found. This is crazy... but... + // It might be that a line, which is in different document, + // covers that pixel (elementFromPoint is doc-sensitive). + // Better let's have another try. + if ( !found ) { + continue; + } + + // Still in the same element. + else if ( found == el ) { + tryouts = 0; + continue; + } + + // Reached the edge of an element and found an ancestor or... + // A line, that covers that pixel. Better let's have another try. + else if ( !contains( el, found ) ) { + continue; + } + + tryouts = 0; + + // Found a valid element. Stop iterating. + if ( isStatic( ( found = new CKEDITOR.dom.element( found ) ) ) ) { + return found; + } + } + } + + return function( el, x, y ) { + var paneHeight = this.win.getViewPaneSize().height, + + // Try to find an element iterating *up* from the starting point. + neg = iterate.call( this, el.$, x, y, -1, function( y ) { + return y > 0; + } ), + + // Try to find an element iterating *down* from the starting point. + pos = iterate.call( this, el.$, x, y, 1, function( y ) { + return y < paneHeight; + } ); + + if ( neg ) { + this.traverseSearch( neg ); + + // Iterate towards DOM root until neg is a direct child of el. + while ( !neg.getParent().equals( el ) ) { + neg = neg.getParent(); + } + } + + if ( pos ) { + this.traverseSearch( pos ); + + // Iterate towards DOM root until pos is a direct child of el. + while ( !pos.getParent().equals( el ) ) { + pos = pos.getParent(); + } + } + + // Iterate forwards starting from neg and backwards from + // pos to harvest all children of el between those elements. + // Stop when neg and pos meet each other or there's none of them. + // TODO (?) reduce number of hops forwards/backwards. + while ( neg || pos ) { + if ( neg ) { + neg = neg.getNext( isStatic ); + } + + if ( !neg || neg.equals( pos ) ) { + break; + } + + this.traverseSearch( neg ); + + if ( pos ) { + pos = pos.getPrevious( isStatic ); + } + + if ( !pos || pos.equals( neg ) ) { + break; + } + + this.traverseSearch( pos ); + } + }; + } )(), + + /** + * Unlike {@link #traverseSearch}, it collects **all** elements from editable's DOM tree + * and runs lookups for every one of them, collecting relations. + * + * @returns {Object} {@link #relations}. + */ + greedySearch: function() { + this.relations = {}; + + var all = this.editable.getElementsByTag( '*' ), + i = 0, + el, type, l; + + while ( ( el = all.getItem( i++ ) ) ) { + // Don't consider editable, as it might be inline, + // and i.e. checking it's siblings is pointless. + if ( el.equals( this.editable ) ) { + continue; + } + + // On IE8 element.getElementsByTagName returns comments... sic! (#13176) + if ( el.type != CKEDITOR.NODE_ELEMENT ) { + continue; + } + + // Don't visit non-editable internals, for example widget's + // guts (above wrapper, below nested). Still check editable limits, + // as they are siblings with editable contents. + if ( !el.hasAttribute( 'contenteditable' ) && el.isReadOnly() ) { + continue; + } + + if ( isStatic( el ) && el.isVisible() ) { + // Collect all addresses yielded by lookups for that element. + for ( l in this.lookups ) { + if ( ( type = this.lookups[ l ]( el ) ) ) { + this.store( el, type ); + } + } + } + } + + return this.relations; + } + + /** + * Relations express elements in DOM that match user-defined {@link #lookups}. + * Every relation has its own `type` that determines whether + * it refers to the space before, after or inside the `element`. + * This object stores relations found by {@link #traverseSearch} or {@link #greedySearch}, structured + * in the following way: + * + * relations: { + * // Unique identifier of the element. + * Number: { + * // Element of this relation. + * element: {@link CKEDITOR.dom.element} + * // Conjunction of CKEDITOR.LINEUTILS_BEFORE, CKEDITOR.LINEUTILS_AFTER and CKEDITOR.LINEUTILS_INSIDE. + * type: Number + * }, + * ... + * } + * + * @property {Object} relations + * @readonly + */ + + /** + * A set of user-defined functions used by Finder to check if an element + * is a valid relation, belonging to {@link #relations}. + * When the criterion is met, lookup returns a logical conjunction of `CKEDITOR.LINEUTILS_BEFORE`, + * `CKEDITOR.LINEUTILS_AFTER` or `CKEDITOR.LINEUTILS_INSIDE`. + * + * Lookups are passed along with Finder's definition. + * + * lookups: { + * 'some lookup': function( el ) { + * if ( someCondition ) + * return CKEDITOR.LINEUTILS_BEFORE; + * }, + * ... + * } + * + * @property {Object} lookups + */ + }; + + + /** + * A utility that analyses relations found by + * CKEDITOR.plugins.lineutils.finder and locates them + * in the viewport as horizontal lines of specific coordinates. + * + * @private + * @class CKEDITOR.plugins.lineutils.locator + * @constructor Creates a Locator class instance. + * @param {CKEDITOR.editor} editor Editor instance that Locator belongs to. + * @since 4.3 + */ + function Locator( editor, def ) { + CKEDITOR.tools.extend( this, def, { + editor: editor + }, true ); + } + + Locator.prototype = { + /** + * Locates the Y coordinate for all types of every single relation and stores + * them in an object. + * + * @param {Object} relations {@link CKEDITOR.plugins.lineutils.finder#relations}. + * @returns {Object} {@link #locations}. + */ + locate: ( function() { + function locateSibling( rel, type ) { + var sib = rel.element[ type === CKEDITOR.LINEUTILS_BEFORE ? 'getPrevious' : 'getNext' ](); + + // Return the middle point between siblings. + if ( sib && isStatic( sib ) ) { + rel.siblingRect = sib.getClientRect(); + + if ( type == CKEDITOR.LINEUTILS_BEFORE ) { + return ( rel.siblingRect.bottom + rel.elementRect.top ) / 2; + } else { + return ( rel.elementRect.bottom + rel.siblingRect.top ) / 2; + } + } + + // If there's no sibling, use the edge of an element. + else { + if ( type == CKEDITOR.LINEUTILS_BEFORE ) { + return rel.elementRect.top; + } else { + return rel.elementRect.bottom; + } + } + } + + return function( relations ) { + var rel; + + this.locations = {}; + + for ( var uid in relations ) { + rel = relations[ uid ]; + rel.elementRect = rel.element.getClientRect(); + + if ( is( rel.type, CKEDITOR.LINEUTILS_BEFORE ) ) { + this.store( uid, CKEDITOR.LINEUTILS_BEFORE, locateSibling( rel, CKEDITOR.LINEUTILS_BEFORE ) ); + } + + if ( is( rel.type, CKEDITOR.LINEUTILS_AFTER ) ) { + this.store( uid, CKEDITOR.LINEUTILS_AFTER, locateSibling( rel, CKEDITOR.LINEUTILS_AFTER ) ); + } + + // The middle point of the element. + if ( is( rel.type, CKEDITOR.LINEUTILS_INSIDE ) ) { + this.store( uid, CKEDITOR.LINEUTILS_INSIDE, ( rel.elementRect.top + rel.elementRect.bottom ) / 2 ); + } + } + + return this.locations; + }; + } )(), + + /** + * Calculates distances from every location to given vertical coordinate + * and sorts locations according to that distance. + * + * @param {Number} y The vertical coordinate used for sorting, used as a reference. + * @param {Number} [howMany] Determines the number of "closest locations" to be returned. + * @returns {Array} Sorted, array representation of {@link #locations}. + */ + sort: ( function() { + var locations, sorted, + dist, i; + + function distance( y, uid, type ) { + return Math.abs( y - locations[ uid ][ type ] ); + } + + return function( y, howMany ) { + locations = this.locations; + sorted = []; + + for ( var uid in locations ) { + for ( var type in locations[ uid ] ) { + dist = distance( y, uid, type ); + + // An array is empty. + if ( !sorted.length ) { + sorted.push( { uid: +uid, type: type, dist: dist } ); + } else { + // Sort the array on fly when it's populated. + for ( i = 0; i < sorted.length; i++ ) { + if ( dist < sorted[ i ].dist ) { + sorted.splice( i, 0, { uid: +uid, type: type, dist: dist } ); + break; + } + } + + // Nothing was inserted, so the distance is bigger than + // any of already calculated: push to the end. + if ( i == sorted.length ) { + sorted.push( { uid: +uid, type: type, dist: dist } ); + } + } + } + } + + if ( typeof howMany != 'undefined' ) { + return sorted.slice( 0, howMany ); + } else { + return sorted; + } + }; + } )(), + + /** + * Stores the location in a collection. + * + * @param {Number} uid Unique identifier of the relation. + * @param {Number} type One of `CKEDITOR.LINEUTILS_BEFORE`, `CKEDITOR.LINEUTILS_AFTER` and `CKEDITOR.LINEUTILS_INSIDE`. + * @param {Number} y Vertical position of the relation. + */ + store: function( uid, type, y ) { + if ( !this.locations[ uid ] ) { + this.locations[ uid ] = {}; + } + + this.locations[ uid ][ type ] = y; + } + + /** + * @readonly + * @property {Object} locations + */ + }; + + var tipCss = { + display: 'block', + width: '0px', + height: '0px', + 'border-color': 'transparent', + 'border-style': 'solid', + position: 'absolute', + top: '-6px' + }, + + lineStyle = { + height: '0px', + 'border-top': '1px dashed red', + position: 'absolute', + 'z-index': 9999 + }, + + lineTpl = + '
        ' + + ' ' + + ' ' + + '
        '; + + /** + * A utility that draws horizontal lines in DOM according to locations + * returned by CKEDITOR.plugins.lineutils.locator. + * + * @private + * @class CKEDITOR.plugins.lineutils.liner + * @constructor Creates a Liner class instance. + * @param {CKEDITOR.editor} editor Editor instance that Liner belongs to. + * @param {Object} def Liner's definition. + * @since 4.3 + */ + function Liner( editor, def ) { + var editable = editor.editable(); + + CKEDITOR.tools.extend( this, { + editor: editor, + editable: editable, + inline: editable.isInline(), + doc: editor.document, + win: editor.window, + container: CKEDITOR.document.getBody(), + winTop: CKEDITOR.document.getWindow() + }, def, true ); + + this.hidden = {}; + this.visible = {}; + + if ( !this.inline ) { + this.frame = this.win.getFrame(); + } + + this.queryViewport(); + + // Callbacks must be wrapped. Otherwise they're not attached + // to global DOM objects (i.e. topmost window) for every editor + // because they're treated as duplicates. They belong to the + // same prototype shared among Liner instances. + var queryViewport = CKEDITOR.tools.bind( this.queryViewport, this ), + hideVisible = CKEDITOR.tools.bind( this.hideVisible, this ), + removeAll = CKEDITOR.tools.bind( this.removeAll, this ); + + editable.attachListener( this.winTop, 'resize', queryViewport ); + editable.attachListener( this.winTop, 'scroll', queryViewport ); + + editable.attachListener( this.winTop, 'resize', hideVisible ); + editable.attachListener( this.win, 'scroll', hideVisible ); + + editable.attachListener( this.inline ? editable : this.frame, 'mouseout', function( evt ) { + var x = evt.data.$.clientX, + y = evt.data.$.clientY; + + this.queryViewport(); + + // Check if mouse is out of the element (iframe/editable). + if ( x <= this.rect.left || x >= this.rect.right || y <= this.rect.top || y >= this.rect.bottom ) { + this.hideVisible(); + } + + // Check if mouse is out of the top-window vieport. + if ( x <= 0 || x >= this.winTopPane.width || y <= 0 || y >= this.winTopPane.height ) { + this.hideVisible(); + } + }, this ); + + editable.attachListener( editor, 'resize', queryViewport ); + editable.attachListener( editor, 'mode', removeAll ); + editor.on( 'destroy', removeAll ); + + this.lineTpl = new CKEDITOR.template( lineTpl ).output( { + lineStyle: CKEDITOR.tools.writeCssText( + CKEDITOR.tools.extend( {}, lineStyle, this.lineStyle, true ) + ), + tipLeftStyle: CKEDITOR.tools.writeCssText( + CKEDITOR.tools.extend( {}, tipCss, { + left: '0px', + 'border-left-color': 'red', + 'border-width': '6px 0 6px 6px' + }, this.tipCss, this.tipLeftStyle, true ) + ), + tipRightStyle: CKEDITOR.tools.writeCssText( + CKEDITOR.tools.extend( {}, tipCss, { + right: '0px', + 'border-right-color': 'red', + 'border-width': '6px 6px 6px 0' + }, this.tipCss, this.tipRightStyle, true ) + ) + } ); + } + + Liner.prototype = { + /** + * Permanently removes all lines (both hidden and visible) from DOM. + */ + removeAll: function() { + var l; + + for ( l in this.hidden ) { + this.hidden[ l ].remove(); + delete this.hidden[ l ]; + } + + for ( l in this.visible ) { + this.visible[ l ].remove(); + delete this.visible[ l ]; + } + }, + + /** + * Hides a given line. + * + * @param {CKEDITOR.dom.element} line The line to be hidden. + */ + hideLine: function( line ) { + var uid = line.getUniqueId(); + + line.hide(); + + this.hidden[ uid ] = line; + delete this.visible[ uid ]; + }, + + /** + * Shows a given line. + * + * @param {CKEDITOR.dom.element} line The line to be shown. + */ + showLine: function( line ) { + var uid = line.getUniqueId(); + + line.show(); + + this.visible[ uid ] = line; + delete this.hidden[ uid ]; + }, + + /** + * Hides all visible lines. + */ + hideVisible: function() { + for ( var l in this.visible ) { + this.hideLine( this.visible[ l ] ); + } + }, + + /** + * Shows a line at given location. + * + * @param {Object} location Location object containing the unique identifier of the relation + * and its type. Usually returned by {@link CKEDITOR.plugins.lineutils.locator#sort}. + * @param {Function} [callback] A callback to be called once the line is shown. + */ + placeLine: function( location, callback ) { + var styles, line, l; + + // No style means that line would be out of viewport. + if ( !( styles = this.getStyle( location.uid, location.type ) ) ) { + return; + } + + // Search for any visible line of a different hash first. + // It's faster to re-position visible line than to show it. + for ( l in this.visible ) { + if ( this.visible[ l ].getCustomData( 'hash' ) !== this.hash ) { + line = this.visible[ l ]; + break; + } + } + + // Search for any hidden line of a different hash. + if ( !line ) { + for ( l in this.hidden ) { + if ( this.hidden[ l ].getCustomData( 'hash' ) !== this.hash ) { + this.showLine( ( line = this.hidden[ l ] ) ); + break; + } + } + } + + // If no line available, add the new one. + if ( !line ) { + this.showLine( ( line = this.addLine() ) ); + } + + // Mark the line with current hash. + line.setCustomData( 'hash', this.hash ); + + // Mark the line as visible. + this.visible[ line.getUniqueId() ] = line; + + line.setStyles( styles ); + + callback && callback( line ); + }, + + /** + * Creates a style set to be used by the line, representing a particular + * relation (location). + * + * @param {Number} uid Unique identifier of the relation. + * @param {Number} type Type of the relation. + * @returns {Object} An object containing styles. + */ + getStyle: function( uid, type ) { + var rel = this.relations[ uid ], + loc = this.locations[ uid ][ type ], + styles = {}, + hdiff; + + // Line should be between two elements. + if ( rel.siblingRect ) { + styles.width = Math.max( rel.siblingRect.width, rel.elementRect.width ); + } + // Line is relative to a single element. + else { + styles.width = rel.elementRect.width; + } + + // Let's calculate the vertical position of the line. + if ( this.inline ) { + // (#13155) + styles.top = loc + this.winTopScroll.y - this.rect.relativeY; + } else { + styles.top = this.rect.top + this.winTopScroll.y + loc; + } + + // Check if line would be vertically out of the viewport. + if ( styles.top - this.winTopScroll.y < this.rect.top || styles.top - this.winTopScroll.y > this.rect.bottom ) { + return false; + } + + // Now let's calculate the horizontal alignment (left and width). + if ( this.inline ) { + // (#13155) + styles.left = rel.elementRect.left - this.rect.relativeX; + } else { + if ( rel.elementRect.left > 0 ) + styles.left = this.rect.left + rel.elementRect.left; + + // H-scroll case. Left edge of element may be out of viewport. + else { + styles.width += rel.elementRect.left; + styles.left = this.rect.left; + } + + // H-scroll case. Right edge of element may be out of viewport. + if ( ( hdiff = styles.left + styles.width - ( this.rect.left + this.winPane.width ) ) > 0 ) { + styles.width -= hdiff; + } + } + + // Finally include horizontal scroll of the global window. + styles.left += this.winTopScroll.x; + + // Append 'px' to style values. + for ( var style in styles ) { + styles[ style ] = CKEDITOR.tools.cssLength( styles[ style ] ); + } + + return styles; + }, + + /** + * Adds a new line to DOM. + * + * @returns {CKEDITOR.dom.element} A brand-new line. + */ + addLine: function() { + var line = CKEDITOR.dom.element.createFromHtml( this.lineTpl ); + + line.appendTo( this.container ); + + return line; + }, + + /** + * Assigns a unique hash to the instance that is later used + * to tell unwanted lines from new ones. This method **must** be called + * before a new set of relations is to be visualized so {@link #cleanup} + * eventually hides obsolete lines. This is because lines + * are re-used between {@link #placeLine} calls and the number of + * necessary ones may vary depending on the number of relations. + * + * @param {Object} relations {@link CKEDITOR.plugins.lineutils.finder#relations}. + * @param {Object} locations {@link CKEDITOR.plugins.lineutils.locator#locations}. + */ + prepare: function( relations, locations ) { + this.relations = relations; + this.locations = locations; + this.hash = Math.random(); + }, + + /** + * Hides all visible lines that do not belong to current hash + * and no longer represent relations (locations). + * + * See also: {@link #prepare}. + */ + cleanup: function() { + var line; + + for ( var l in this.visible ) { + line = this.visible[ l ]; + + if ( line.getCustomData( 'hash' ) !== this.hash ) { + this.hideLine( line ); + } + } + }, + + /** + * Queries dimensions of the viewport, editable, frame etc. + * that are used for correct positioning of the line. + */ + queryViewport: function() { + this.winPane = this.win.getViewPaneSize(); + this.winTopScroll = this.winTop.getScrollPosition(); + this.winTopPane = this.winTop.getViewPaneSize(); + + // (#13155) + this.rect = this.getClientRect( this.inline ? this.editable : this.frame ); + }, + + /** + * Returns `boundingClientRect` of an element, shifted by the position + * of `container` when the container is not `static` (#13155). + * + * See also: {@link CKEDITOR.dom.element#getClientRect}. + * + * @param {CKEDITOR.dom.element} el A DOM element. + * @returns {Object} A shifted rect, extended by `relativeY` and `relativeX` properties. + */ + getClientRect: function( el ) { + var rect = el.getClientRect(), + relativeContainerDocPosition = this.container.getDocumentPosition(), + relativeContainerComputedPosition = this.container.getComputedStyle( 'position' ); + + // Static or not, those values are used to offset the position of the line so they cannot be undefined. + rect.relativeX = rect.relativeY = 0; + + if ( relativeContainerComputedPosition != 'static' ) { + // Remember the offset used to shift the clientRect. + rect.relativeY = relativeContainerDocPosition.y; + rect.relativeX = relativeContainerDocPosition.x; + + rect.top -= rect.relativeY; + rect.bottom -= rect.relativeY; + rect.left -= rect.relativeX; + rect.right -= rect.relativeX; + } + + return rect; + } + }; + + function is( type, flag ) { + return type & flag; + } + + var floats = { left: 1, right: 1, center: 1 }, + positions = { absolute: 1, fixed: 1 }; + + function isElement( node ) { + return node && node.type == CKEDITOR.NODE_ELEMENT; + } + + function isFloated( el ) { + return !!( floats[ el.getComputedStyle( 'float' ) ] || floats[ el.getAttribute( 'align' ) ] ); + } + + function isPositioned( el ) { + return !!positions[ el.getComputedStyle( 'position' ) ]; + } + + function isLimit( node ) { + return isElement( node ) && node.getAttribute( 'contenteditable' ) == 'true'; + } + + function isStatic( node ) { + return isElement( node ) && !isFloated( node ) && !isPositioned( node ); + } + + /** + * Global namespace storing definitions and global helpers for the Line Utilities plugin. + * + * @private + * @class + * @singleton + * @since 4.3 + */ + CKEDITOR.plugins.lineutils = { + finder: Finder, + locator: Locator, + liner: Liner + }; +} )(); diff --git a/libraries/ckeditor/plugins/link/dialogs/anchor.js b/libraries/ckeditor/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000..50677e1 --- /dev/null +++ b/libraries/ckeditor/plugins/link/dialogs/anchor.js @@ -0,0 +1,8 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("anchor",function(c){function e(b,a){return b.createFakeElement(b.document.createElement("a",{attributes:a}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var b=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:b,name:b,"data-cke-saved-name":b};this._.selectedElement?this._.selectedElement.data("cke-realelement")?(b=e(c,a),b.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(b)):this._.selectedElement.setAttributes(a): +(b=(b=c.getSelection())&&b.getRanges()[0],b.collapsed?(a=e(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,a.applyToRange(b)))},onHide:function(){delete this._.selectedElement},onShow:function(){var b=c.getSelection(),a;a=b.getRanges()[0];var d=b.getSelectedElement();a.shrink(CKEDITOR.SHRINK_ELEMENT);a=(d=a.getEnclosedNode())&&d.type===CKEDITOR.NODE_ELEMENT&&("anchor"===d.data("cke-real-element-type")|| +d.is("a"))?d:void 0;var f=(d=a&&a.data("cke-realelement"))?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a):CKEDITOR.plugins.link.getSelectedLink(c);if(f){this._.selectedElement=f;var e=f.data("cke-saved-name");this.setValueOf("info","txtName",e||"");!d&&b.selectElement(f);a&&(this._.selectedElement=a)}this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return this.getValue()? +!0:(alert(c.lang.link.anchor.errorName),!1)}}]}]}}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/link/dialogs/link.js b/libraries/ckeditor/plugins/link/dialogs/link.js new file mode 100644 index 0000000..e8581a7 --- /dev/null +++ b/libraries/ckeditor/plugins/link/dialogs/link.js @@ -0,0 +1,28 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){CKEDITOR.dialog.add("link",function(c){function t(a,b){var c=a.createRange();c.setStartBefore(b);c.setEndAfter(b);return c}var n=CKEDITOR.plugins.link,q,r=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),p=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),p){case "frame":a.setLabel(c.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(c.lang.link.targetPopupName); +a.getElement().show();break;default:a.setValue(p),a.getElement().hide()}},l=function(a){a.target&&this.setValue(a.target[this.id]||"")},e=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},k=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},m=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},g=c.lang.common,b=c.lang.link,d;return{title:b.title,minWidth:"moono-lisa"==(CKEDITOR.skinName||c.config.skin)?450:350,minHeight:240,contents:[{id:"info", +label:b.info,title:b.info,elements:[{type:"text",id:"linkDisplayText",label:b.displayText,setup:function(){this.enable();this.setValue(c.getSelection().getSelectedText());q=this.getValue()},commit:function(a){a.linkText=this.isEnabled()?this.getValue():""}},{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"],[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],p=this.getValue(),f=a.definition.getContents("upload"), +f=f&&f.hidden;"url"==p?(c.config.linkShowTargetTab&&a.showPage("target"),f||a.showPage("upload")):(a.hidePage("target"),f||a.hidePage("upload"));for(f=0;f=f.length&&n.showDisplayTextForElement(h,a)?c.show():c.hide();this._.selectedElements=f;this.setupContent(b)},onOk:function(){var a={};this.commitContent(a);if(this._.selectedElements.length){var b= +this._.selectedElements,g=n.getLinkAttributes(c,a),f=[],h,d,l,e,k;for(k=0;k/g,"]--\x3e");var d=CKEDITOR.htmlParser.fragment.fromHtml(a);q=new CKEDITOR.htmlParser.filter({root:function(e){e.filterChildren(q);CKEDITOR.plugins.pastefromword.lists.cleanup(g.createLists(e))},elementNames:[[/^\?xml:namespace$/,""],[/^v:shapetype/,""],[new RegExp(y.join("|")),""]],elements:{a:function(e){if(e.attributes.name){if("_GoBack"== +e.attributes.name){delete e.name;return}if(e.attributes.name.match(/^OLE_LINK\d+$/)){delete e.name;return}}if(e.attributes.href&&e.attributes.href.match(/#.+$/)){var a=e.attributes.href.match(/#(.+)$/)[1];w[a]=e}e.attributes.name&&w[e.attributes.name]&&(e=w[e.attributes.name],e.attributes.href=e.attributes.href.replace(/.*#(.*)$/,"#$1"))},div:function(e){k.createStyleStack(e,q,b)},img:function(e){if(e.parent&&e.parent.attributes){var a=e.parent.attributes;(a=a.style||a.STYLE)&&a.match(/mso\-list:\s?Ignore/)&& +(e.attributes["cke-ignored"]=!0)}k.mapStyles(e,{width:function(a){k.setStyle(e,"width",a+"px")},height:function(a){k.setStyle(e,"height",a+"px")}});e.attributes.src&&e.attributes.src.match(/^file:\/\//)&&e.attributes.alt&&e.attributes.alt.match(/^https?:\/\//)&&(e.attributes.src=e.attributes.alt)},p:function(a){a.filterChildren(q);if(a.attributes.style&&a.attributes.style.match(/display:\s*none/i))return!1;if(g.thisIsAListItem(b,a))t.isEdgeListItem(b,a)&&t.cleanupEdgeListItem(a),g.convertToFakeListItem(b, +a),n.array.reduce(a.children,function(a,b){"p"===b.name&&(0c&&(c=a._tdBorders[d],b=d);k.setStyle(a,"border",b);c=(b=a.parent)&& +b.parent;if(b.name&&"div"===b.name&&b.attributes.align&&1===n.objectKeys(b.attributes).length&&1===b.children.length){a.attributes.align=b.attributes.align;d=b.children.splice(0);a.remove();for(a=d.length-1;0<=a;a--)c.add(d[a],b.getIndex());b.remove()}},td:function(a){var c=a.getAscendant("table"),d=c._tdBorders,f=["border","border-top","border-right","border-bottom","border-left"],c=n.parseCssText(c.attributes.style),m=c.background||c.BACKGROUND;m&&k.setStyle(a,"background",m,!0);(c=c["background-color"]|| +c["BACKGROUND-COLOR"])&&k.setStyle(a,"background-color",c,!0);var c=n.parseCssText(a.attributes.style),p;for(p in c)m=c[p],delete c[p],c[p.toLowerCase()]=m;for(p=0;p/)?!0:!1},convertToFakeListItem:function(a,b){t.isDegenerateListItem(a,b)&&t.assignListLevels(a,b);this.getListItemInfo(b);if(!b.attributes["cke-dissolved"]){var c; +b.forEach(function(a){!c&&"img"==a.name&&a.attributes["cke-ignored"]&&"*"==a.attributes.alt&&(c="·",a.remove())},CKEDITOR.NODE_ELEMENT);b.forEach(function(a){c||a.value.match(/^ /)||(c=a.value)},CKEDITOR.NODE_TEXT);if("undefined"==typeof c)return;b.attributes["cke-symbol"]=c.replace(/(?: | ).*$/,"");g.removeSymbolText(b)}if(b.attributes.style){var d=n.parseCssText(b.attributes.style);d["margin-left"]&&(delete d["margin-left"],b.attributes.style=CKEDITOR.tools.writeCssText(d))}b.name="cke:li"}, +convertToRealListItems:function(a){var b=[];a.forEach(function(a){"cke:li"==a.name&&(a.name="li",b.push(a))},CKEDITOR.NODE_ELEMENT,!1);return b},removeSymbolText:function(a){var b,c=a.attributes["cke-symbol"];a.forEach(function(d){!b&&d.value.match(c.replace(")","\\)").replace("(",""))&&(d.value=d.value.replace(c,""),d.parent.getHtml().match(/^(\s| )*$/)&&(b=d.parent!==a?d.parent:null))},CKEDITOR.NODE_TEXT);b&&b.remove()},setListSymbol:function(a,b,c){c=c||1;var d=n.parseCssText(a.attributes.style); +if("ol"==a.name){if(a.attributes.type||d["list-style-type"])return;var f={"[ivx]":"lower-roman","[IVX]":"upper-roman","[a-z]":"lower-alpha","[A-Z]":"upper-alpha","\\d":"decimal"},e;for(e in f)if(g.getSubsectionSymbol(b).match(new RegExp(e))){d["list-style-type"]=f[e];break}a.attributes["cke-list-style-type"]=d["list-style-type"]}else f={"·":"disc",o:"circle","§":"square"},!d["list-style-type"]&&f[b]&&(d["list-style-type"]=f[b]);g.setListSymbol.removeRedundancies(d,c);(a.attributes.style=CKEDITOR.tools.writeCssText(d))|| +delete a.attributes.style},setListStart:function(a){for(var b=[],c=0,d=0;db&&(a.attributes.dir="rtl")},createList:function(a){return(a.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/)||[])[1]?new CKEDITOR.htmlParser.element("ol"):new CKEDITOR.htmlParser.element("ul")},createLists:function(a){var b,c,d,f=g.convertToRealListItems(a); +if(0===f.length)return[];var e=g.groupLists(f);for(a=0;al.length;){var p=g.createList(b),n=k.children;0f;f++)c[f]&&delete c[f];c[a[e].attributes["cke-list-level"]]= +k;d[d.length-1].push(a[e]);f=l}[].splice.apply(b,[].concat([n.indexOf(b,a),1],d))},isAListContinuation:function(a){var b=a;do if((b=b.previous)&&b.type===CKEDITOR.NODE_ELEMENT){if(void 0===b.attributes["cke-list-level"])break;if(b.attributes["cke-list-level"]===a.attributes["cke-list-level"])return b.attributes["cke-list-id"]===a.attributes["cke-list-id"]}while(b);return!1},getElementIndentation:function(a){a=n.parseCssText(a.attributes.style);if(a.margin||a.MARGIN){a.margin=a.margin||a.MARGIN;var b= +{styles:{margin:a.margin}};CKEDITOR.filter.transformationsTools.splitMarginShorthand(b);a["margin-left"]=b.styles["margin-left"]}return parseInt(n.convertToPx(a["margin-left"]||"0px"),10)},toArabic:function(a){return a.match(/[ivxl]/i)?a.match(/^l/i)?50+g.toArabic(a.slice(1)):a.match(/^lx/i)?40+g.toArabic(a.slice(1)):a.match(/^x/i)?10+g.toArabic(a.slice(1)):a.match(/^ix/i)?9+g.toArabic(a.slice(2)):a.match(/^v/i)?5+g.toArabic(a.slice(1)):a.match(/^iv/i)?4+g.toArabic(a.slice(2)):a.match(/^i/i)?1+g.toArabic(a.slice(1)): +g.toArabic(a.slice(1)):0},getSymbolInfo:function(a,b){var c=a.toUpperCase()==a?"upper-":"lower-",d={"·":["disc",-1],o:["circle",-2],"§":["square",-3]};if(a in d||b&&b.match(/(disc|circle|square)/))return{index:d[a][1],type:d[a][0]};if(a.match(/\d/))return{index:a?parseInt(g.getSubsectionSymbol(a),10):0,type:"decimal"};a=a.replace(/\W/g,"").toLowerCase();return!b&&a.match(/[ivxl]+/i)||b&&"alpha"!=b||"roman"==b?{index:g.toArabic(a),type:c+"roman"}:a.match(/[a-z]/i)?{index:a.charCodeAt(0)-97,type:c+ +"alpha"}:{index:-1,type:"disc"}},getListItemInfo:function(a){if(void 0!==a.attributes["cke-list-id"])return{id:a.attributes["cke-list-id"],level:a.attributes["cke-list-level"]};var b=n.parseCssText(a.attributes.style)["mso-list"],c={id:"0",level:"1"};b&&(b+=" ",c.level=b.match(/level(.+?)\s+/)[1],c.id=b.match(/l(\d+?)\s+/)[1]);a.attributes["cke-list-level"]=void 0!==a.attributes["cke-list-level"]?a.attributes["cke-list-level"]:c.level;a.attributes["cke-list-id"]=c.id;return c}};g=CKEDITOR.plugins.pastefromword.lists; +CKEDITOR.plugins.pastefromword.heuristics={isEdgeListItem:function(a,b){if(!CKEDITOR.env.edge||!a.config.pasteFromWord_heuristicsEdgeList)return!1;var c="";b.forEach&&b.forEach(function(a){c+=a.value},CKEDITOR.NODE_TEXT);return c.match(/^(?: | )*\(?[a-zA-Z0-9]+?[\.\)](?: | ){2,}/)?!0:t.isDegenerateListItem(a,b)},cleanupEdgeListItem:function(a){var b=!1;a.forEach(function(a){b||(a.value=a.value.replace(/^(?: |[\s])+/,""),a.value.length&&(b=!0))},CKEDITOR.NODE_TEXT)},isDegenerateListItem:function(a, +b){return!!b.attributes["cke-list-level"]||b.attributes.style&&!b.attributes.style.match(/mso\-list/)&&!!b.find(function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&b.name.match(/h\d/i)&&a.getHtml().match(/^[a-zA-Z0-9]+?[\.\)]$/))return!0;var d=n.parseCssText(a.attributes&&a.attributes.style,!0);if(!d)return!1;var f=d["font-family"]||"";return(d.font||d["font-size"]||"").match(/7pt/i)&&!!a.previous||f.match(/symbol/i)},!0).length},assignListLevels:function(a,b){if(!b.attributes||void 0===b.attributes["cke-list-level"]){for(var c= +[g.getElementIndentation(b)],d=[b],f=[],e=CKEDITOR.tools.array,h=e.map;b.next&&b.next.attributes&&!b.next.attributes["cke-list-level"]&&t.isDegenerateListItem(a,b.next);)b=b.next,c.push(g.getElementIndentation(b)),d.push(b);var k=h(c,function(a,b){return 0===b?0:a-c[b-1]}),n=this.guessIndentationStep(e.filter(c,function(a){return 0!==a})),f=h(c,function(a){return Math.round(a/n)});-1!==e.indexOf(f,0)&&(f=h(f,function(a){return a+1}));e.forEach(d,function(a,b){a.attributes["cke-list-level"]=f[b]}); +return{indents:c,levels:f,diffs:k}}},guessIndentationStep:function(a){return a.length?Math.min.apply(null,a):null},correctLevelShift:function(a){if(this.isShifted(a)){var b=CKEDITOR.tools.array.filter(a.children,function(a){return"ul"==a.name||"ol"==a.name}),c=CKEDITOR.tools.array.reduce(b,function(a,b){return(b.children&&1==b.children.length&&t.isShifted(b.children[0])?[b]:b.children).concat(a)},[]);CKEDITOR.tools.array.forEach(b,function(a){a.remove()});CKEDITOR.tools.array.forEach(c,function(b){a.add(b, +0)});delete a.name}},isShifted:function(a){return"li"!==a.name?!1:0===CKEDITOR.tools.array.filter(a.children,function(a){return a.name&&("ul"==a.name||"ol"==a.name||"p"==a.name&&0===a.children.length)?!1:!0}).length}};t=CKEDITOR.plugins.pastefromword.heuristics;g.setListSymbol.removeRedundancies=function(a,b){(1===b&&"disc"===a["list-style-type"]||"decimal"===a["list-style-type"])&&delete a["list-style-type"]};CKEDITOR.plugins.pastefromword.createAttributeStack=x;CKEDITOR.config.pasteFromWord_heuristicsEdgeList= +!0})(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/preview/preview.html b/libraries/ckeditor/plugins/preview/preview.html new file mode 100644 index 0000000..7eb8082 --- /dev/null +++ b/libraries/ckeditor/plugins/preview/preview.html @@ -0,0 +1,13 @@ + diff --git a/libraries/ckeditor/plugins/scayt/CHANGELOG.md b/libraries/ckeditor/plugins/scayt/CHANGELOG.md new file mode 100644 index 0000000..05cf2dd --- /dev/null +++ b/libraries/ckeditor/plugins/scayt/CHANGELOG.md @@ -0,0 +1,20 @@ +SCAYT plugin for CKEditor 4 Changelog +==================== +### CKEditor 4.5.6 + +New Features: +* CKEditor [language addon](http://ckeditor.com/addon/language) support +* CKEditor [placeholder addon](http://ckeditor.com/addon/placeholder) support +* Drag and Drop support +* *Experimental* GRAYT functionality http://www.webspellchecker.net/samples/scayt-ckeditor-plugin.html#25 + +Fixed issues: +* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98) SCAYT Affects Dialog Double Click. Fixed in SCAYT Core. +* [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102) SCAYT Core performance enhancements +* [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104) SCAYT's spans leak into the clipboard and after pasting +* [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105) Javascript error fired in case of multiple instances of CKEditor in one page +* [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107) SCAYT should not check non-editable parts of content +* [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108) Latest SCAYT copies id of editor element to the iframe +* SCAYT stops working when CKEditor Undo plug-in not enabled +* Issue with pasting SCAYT markup in CKEditor +* [#32](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/32) SCAYT stops working after pressing Cancel button in WSC dialog diff --git a/libraries/ckeditor/plugins/scayt/LICENSE.md b/libraries/ckeditor/plugins/scayt/LICENSE.md new file mode 100644 index 0000000..610c807 --- /dev/null +++ b/libraries/ckeditor/plugins/scayt/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor SCAYT Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/libraries/ckeditor/plugins/scayt/README.md b/libraries/ckeditor/plugins/scayt/README.md new file mode 100644 index 0000000..1b3de25 --- /dev/null +++ b/libraries/ckeditor/plugins/scayt/README.md @@ -0,0 +1,25 @@ +CKEditor SCAYT Plugin +===================== + +This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. + +SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. +2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'scayt'; + +That's all. SCAYT will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/libraries/ckeditor/plugins/scayt/dialogs/dialog.css b/libraries/ckeditor/plugins/scayt/dialogs/dialog.css new file mode 100644 index 0000000..427c4b4 --- /dev/null +++ b/libraries/ckeditor/plugins/scayt/dialogs/dialog.css @@ -0,0 +1,23 @@ +div.cke_dialog_ui_scaytItemList { + border: 1px solid #c9cccf; +} + +.cke_scaytItemList-child { + position: relative; + padding: 6px 30px 6px 5px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.cke_scaytItemList-child:hover { + background: #ebebeb; +} + +.cke_scaytItemList-child .cke_scaytItemList_remove { + position: absolute; + top: 0; + right: 5px; + width: 26px; + height: 26px; +} diff --git a/libraries/ckeditor/plugins/scayt/dialogs/options.js b/libraries/ckeditor/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..22f3a58 --- /dev/null +++ b/libraries/ckeditor/plugins/scayt/dialogs/options.js @@ -0,0 +1,33 @@ +CKEDITOR.dialog.add("scaytDialog",function(c){var d=c.scayt,k='\x3cp\x3e\x3cimg src\x3d"'+d.getLogo()+'" /\x3e\x3c/p\x3e\x3cp\x3e'+d.getLocal("version")+d.getVersion()+"\x3c/p\x3e\x3cp\x3e"+d.getLocal("text_copyrights")+"\x3c/p\x3e",n=CKEDITOR.document,p={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:d.getLang(),newLang:null,reset:function(){this.currentLang=d.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:d.getLocal("tab_options"), +onShow:function(){},elements:[{type:"vbox",id:"scaytOptions",children:function(){var b=d.getApplicationConfig(),a=[],c={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},f;for(f in b)b={type:"checkbox"},b.id=f,b.label=d.getLocal(c[f]),a.push(b);return a}(),onShow:function(){this.getChild();for(var b=c.scayt,a=0;ab[1]?c=1:a[1] div +{ + padding-bottom: 6px !important; +} + +.scayt-lang-list > div input +{ + margin-right: 4px; +} + +#scayt_about_ +{ + margin: 30px auto 0 auto; +} + +#scayt_about_ p +{ + text-align: center; + margin-bottom: 10px; +} + +.cke_dialog_contents_body div[name=dictionaries] .cke_dialog_ui_hbox_last > a.cke_dialog_ui_button +{ + margin-top: 0; +} diff --git a/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png b/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png new file mode 100644 index 0000000..21fd33f Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png differ diff --git a/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png b/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png new file mode 100644 index 0000000..94a8a39 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png differ diff --git a/libraries/ckeditor/plugins/showblocks/icons/showblocks-rtl.png b/libraries/ckeditor/plugins/showblocks/icons/showblocks-rtl.png new file mode 100644 index 0000000..75bfd37 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/icons/showblocks-rtl.png differ diff --git a/libraries/ckeditor/plugins/showblocks/icons/showblocks.png b/libraries/ckeditor/plugins/showblocks/icons/showblocks.png new file mode 100644 index 0000000..09fe2c7 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/icons/showblocks.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_address.png b/libraries/ckeditor/plugins/showblocks/images/block_address.png new file mode 100644 index 0000000..5abdae1 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_address.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_blockquote.png b/libraries/ckeditor/plugins/showblocks/images/block_blockquote.png new file mode 100644 index 0000000..a8f4973 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_blockquote.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_div.png b/libraries/ckeditor/plugins/showblocks/images/block_div.png new file mode 100644 index 0000000..87b3c17 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_div.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h1.png b/libraries/ckeditor/plugins/showblocks/images/block_h1.png new file mode 100644 index 0000000..3933325 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h1.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h2.png b/libraries/ckeditor/plugins/showblocks/images/block_h2.png new file mode 100644 index 0000000..c99894c Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h2.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h3.png b/libraries/ckeditor/plugins/showblocks/images/block_h3.png new file mode 100644 index 0000000..cb73d67 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h3.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h4.png b/libraries/ckeditor/plugins/showblocks/images/block_h4.png new file mode 100644 index 0000000..7af6bb4 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h4.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h5.png b/libraries/ckeditor/plugins/showblocks/images/block_h5.png new file mode 100644 index 0000000..ce5bec1 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h5.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_h6.png b/libraries/ckeditor/plugins/showblocks/images/block_h6.png new file mode 100644 index 0000000..e67b982 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_h6.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_p.png b/libraries/ckeditor/plugins/showblocks/images/block_p.png new file mode 100644 index 0000000..63a5820 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_p.png differ diff --git a/libraries/ckeditor/plugins/showblocks/images/block_pre.png b/libraries/ckeditor/plugins/showblocks/images/block_pre.png new file mode 100644 index 0000000..955a868 Binary files /dev/null and b/libraries/ckeditor/plugins/showblocks/images/block_pre.png differ diff --git a/libraries/ckeditor/plugins/showblocks/lang/af.js b/libraries/ckeditor/plugins/showblocks/lang/af.js new file mode 100644 index 0000000..336090f --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/af.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'af', { + toolbar: 'Toon blokke' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ar.js b/libraries/ckeditor/plugins/showblocks/lang/ar.js new file mode 100644 index 0000000..c1310d5 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ar.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ar', { + toolbar: 'مخطط تفصيلي' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/az.js b/libraries/ckeditor/plugins/showblocks/lang/az.js new file mode 100644 index 0000000..82f6815 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/az.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'az', { + toolbar: 'Blokları göstər' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/bg.js b/libraries/ckeditor/plugins/showblocks/lang/bg.js new file mode 100644 index 0000000..f298d4f --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/bg.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'bg', { + toolbar: 'Показва блокове' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/bn.js b/libraries/ckeditor/plugins/showblocks/lang/bn.js new file mode 100644 index 0000000..6999c63 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/bn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'bn', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/bs.js b/libraries/ckeditor/plugins/showblocks/lang/bs.js new file mode 100644 index 0000000..806b517 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/bs.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'bs', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ca.js b/libraries/ckeditor/plugins/showblocks/lang/ca.js new file mode 100644 index 0000000..58de163 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ca', { + toolbar: 'Mostra els blocs' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/cs.js b/libraries/ckeditor/plugins/showblocks/lang/cs.js new file mode 100644 index 0000000..d1f82f7 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/cs.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'cs', { + toolbar: 'Ukázat bloky' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/cy.js b/libraries/ckeditor/plugins/showblocks/lang/cy.js new file mode 100644 index 0000000..d5c9511 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/cy.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'cy', { + toolbar: 'Dangos Blociau' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/da.js b/libraries/ckeditor/plugins/showblocks/lang/da.js new file mode 100644 index 0000000..6788970 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/da.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'da', { + toolbar: 'Vis afsnitsmærker' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/de-ch.js b/libraries/ckeditor/plugins/showblocks/lang/de-ch.js new file mode 100644 index 0000000..af851c8 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/de-ch.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'de-ch', { + toolbar: 'Blöcke anzeigen' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/de.js b/libraries/ckeditor/plugins/showblocks/lang/de.js new file mode 100644 index 0000000..290bbcb --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/de.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'de', { + toolbar: 'Blöcke anzeigen' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/el.js b/libraries/ckeditor/plugins/showblocks/lang/el.js new file mode 100644 index 0000000..e87c517 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/el.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'el', { + toolbar: 'Προβολή Τμημάτων' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/en-au.js b/libraries/ckeditor/plugins/showblocks/lang/en-au.js new file mode 100644 index 0000000..9b87b17 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/en-au.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'en-au', { + toolbar: 'Show Blocks' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/en-ca.js b/libraries/ckeditor/plugins/showblocks/lang/en-ca.js new file mode 100644 index 0000000..8bd5a5a --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/en-ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'en-ca', { + toolbar: 'Show Blocks' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/en-gb.js b/libraries/ckeditor/plugins/showblocks/lang/en-gb.js new file mode 100644 index 0000000..46e927c --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/en-gb.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'en-gb', { + toolbar: 'Show Blocks' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/en.js b/libraries/ckeditor/plugins/showblocks/lang/en.js new file mode 100644 index 0000000..cd28d9c --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/en.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'en', { + toolbar: 'Show Blocks' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/eo.js b/libraries/ckeditor/plugins/showblocks/lang/eo.js new file mode 100644 index 0000000..7f116db --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/eo.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'eo', { + toolbar: 'Montri la blokojn' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/es-mx.js b/libraries/ckeditor/plugins/showblocks/lang/es-mx.js new file mode 100644 index 0000000..6b01d9a --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/es-mx.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'es-mx', { + toolbar: 'Mostrar bloques' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/es.js b/libraries/ckeditor/plugins/showblocks/lang/es.js new file mode 100644 index 0000000..b540ce7 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/es.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'es', { + toolbar: 'Mostrar bloques' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/et.js b/libraries/ckeditor/plugins/showblocks/lang/et.js new file mode 100644 index 0000000..b062893 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/et.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'et', { + toolbar: 'Blokkide näitamine' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/eu.js b/libraries/ckeditor/plugins/showblocks/lang/eu.js new file mode 100644 index 0000000..e20af55 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/eu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'eu', { + toolbar: 'Erakutsi blokeak' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/fa.js b/libraries/ckeditor/plugins/showblocks/lang/fa.js new file mode 100644 index 0000000..00836ef --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/fa.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'fa', { + toolbar: 'نمایش بلوک‌ها' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/fi.js b/libraries/ckeditor/plugins/showblocks/lang/fi.js new file mode 100644 index 0000000..5a306bf --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/fi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'fi', { + toolbar: 'Näytä elementit' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/fo.js b/libraries/ckeditor/plugins/showblocks/lang/fo.js new file mode 100644 index 0000000..37d491d --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/fo.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'fo', { + toolbar: 'Vís blokkar' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/fr-ca.js b/libraries/ckeditor/plugins/showblocks/lang/fr-ca.js new file mode 100644 index 0000000..210c8d2 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/fr-ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'fr-ca', { + toolbar: 'Afficher les blocs' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/fr.js b/libraries/ckeditor/plugins/showblocks/lang/fr.js new file mode 100644 index 0000000..44644a4 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/fr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'fr', { + toolbar: 'Afficher les blocs' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/gl.js b/libraries/ckeditor/plugins/showblocks/lang/gl.js new file mode 100644 index 0000000..ef2c563 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/gl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'gl', { + toolbar: 'Amosar os bloques' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/gu.js b/libraries/ckeditor/plugins/showblocks/lang/gu.js new file mode 100644 index 0000000..2f043b6 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/gu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'gu', { + toolbar: 'બ્લૉક બતાવવું' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/he.js b/libraries/ckeditor/plugins/showblocks/lang/he.js new file mode 100644 index 0000000..c6bb3f6 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/he.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'he', { + toolbar: 'הצגת בלוקים' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/hi.js b/libraries/ckeditor/plugins/showblocks/lang/hi.js new file mode 100644 index 0000000..1804fd8 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/hi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'hi', { + toolbar: 'ब्लॉक दिखायें' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/hr.js b/libraries/ckeditor/plugins/showblocks/lang/hr.js new file mode 100644 index 0000000..985342d --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/hr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'hr', { + toolbar: 'Prikaži blokove' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/hu.js b/libraries/ckeditor/plugins/showblocks/lang/hu.js new file mode 100644 index 0000000..267b954 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/hu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'hu', { + toolbar: 'Blokkok megjelenítése' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/id.js b/libraries/ckeditor/plugins/showblocks/lang/id.js new file mode 100644 index 0000000..37bbcf6 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/id.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'id', { + toolbar: 'Perlihatkan Blok' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/is.js b/libraries/ckeditor/plugins/showblocks/lang/is.js new file mode 100644 index 0000000..794e023 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/is.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'is', { + toolbar: 'Sýna blokkir' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/it.js b/libraries/ckeditor/plugins/showblocks/lang/it.js new file mode 100644 index 0000000..f5edd82 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/it.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'it', { + toolbar: 'Visualizza Blocchi' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ja.js b/libraries/ckeditor/plugins/showblocks/lang/ja.js new file mode 100644 index 0000000..447b6a8 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ja.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ja', { + toolbar: 'ブロック表示' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ka.js b/libraries/ckeditor/plugins/showblocks/lang/ka.js new file mode 100644 index 0000000..e8dfdaf --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ka.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ka', { + toolbar: 'არეების ჩვენება' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/km.js b/libraries/ckeditor/plugins/showblocks/lang/km.js new file mode 100644 index 0000000..1f0c12d --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/km.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'km', { + toolbar: 'បង្ហាញ​ប្លក់' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ko.js b/libraries/ckeditor/plugins/showblocks/lang/ko.js new file mode 100644 index 0000000..f462946 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ko.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ko', { + toolbar: '블록 보기' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ku.js b/libraries/ckeditor/plugins/showblocks/lang/ku.js new file mode 100644 index 0000000..6b61f87 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ku.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ku', { + toolbar: 'نیشاندانی بەربەستەکان' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/lt.js b/libraries/ckeditor/plugins/showblocks/lang/lt.js new file mode 100644 index 0000000..2370d83 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/lt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'lt', { + toolbar: 'Rodyti blokus' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/lv.js b/libraries/ckeditor/plugins/showblocks/lang/lv.js new file mode 100644 index 0000000..44f2caa --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/lv.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'lv', { + toolbar: 'Parādīt blokus' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/mk.js b/libraries/ckeditor/plugins/showblocks/lang/mk.js new file mode 100644 index 0000000..b31ae15 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/mk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'mk', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/mn.js b/libraries/ckeditor/plugins/showblocks/lang/mn.js new file mode 100644 index 0000000..5dc5c98 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/mn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'mn', { + toolbar: 'Хавтангуудыг харуулах' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ms.js b/libraries/ckeditor/plugins/showblocks/lang/ms.js new file mode 100644 index 0000000..dc01d5e --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ms.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ms', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/nb.js b/libraries/ckeditor/plugins/showblocks/lang/nb.js new file mode 100644 index 0000000..a4830b0 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/nb.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'nb', { + toolbar: 'Vis blokker' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/nl.js b/libraries/ckeditor/plugins/showblocks/lang/nl.js new file mode 100644 index 0000000..8190ca5 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/nl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'nl', { + toolbar: 'Toon blokken' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/no.js b/libraries/ckeditor/plugins/showblocks/lang/no.js new file mode 100644 index 0000000..5d7cec5 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/no.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'no', { + toolbar: 'Vis blokker' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/oc.js b/libraries/ckeditor/plugins/showblocks/lang/oc.js new file mode 100644 index 0000000..a189036 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/oc.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'oc', { + toolbar: 'Afichar los blòts' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/pl.js b/libraries/ckeditor/plugins/showblocks/lang/pl.js new file mode 100644 index 0000000..4e99792 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/pl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'pl', { + toolbar: 'Pokaż bloki' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/pt-br.js b/libraries/ckeditor/plugins/showblocks/lang/pt-br.js new file mode 100644 index 0000000..9d036df --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/pt-br.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'pt-br', { + toolbar: 'Mostrar blocos de código' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/pt.js b/libraries/ckeditor/plugins/showblocks/lang/pt.js new file mode 100644 index 0000000..990e0d8 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/pt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'pt', { + toolbar: 'Exibir blocos' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ro.js b/libraries/ckeditor/plugins/showblocks/lang/ro.js new file mode 100644 index 0000000..44f9f9b --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ro.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ro', { + toolbar: 'Arată blocurile' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ru.js b/libraries/ckeditor/plugins/showblocks/lang/ru.js new file mode 100644 index 0000000..57b6c60 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ru.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ru', { + toolbar: 'Отображать блоки' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/si.js b/libraries/ckeditor/plugins/showblocks/lang/si.js new file mode 100644 index 0000000..23451a9 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/si.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'si', { + toolbar: 'කොටස පෙන්නන්න' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sk.js b/libraries/ckeditor/plugins/showblocks/lang/sk.js new file mode 100644 index 0000000..76c57b4 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sk', { + toolbar: 'Ukázať bloky' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sl.js b/libraries/ckeditor/plugins/showblocks/lang/sl.js new file mode 100644 index 0000000..dd849d1 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sl', { + toolbar: 'Prikaži ograde' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sq.js b/libraries/ckeditor/plugins/showblocks/lang/sq.js new file mode 100644 index 0000000..329fbbd --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sq.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sq', { + toolbar: 'Shfaq Blloqet' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sr-latn.js b/libraries/ckeditor/plugins/showblocks/lang/sr-latn.js new file mode 100644 index 0000000..74c735f --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sr-latn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sr-latn', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sr.js b/libraries/ckeditor/plugins/showblocks/lang/sr.js new file mode 100644 index 0000000..2ca432b --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sr', { + toolbar: 'Show Blocks' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/sv.js b/libraries/ckeditor/plugins/showblocks/lang/sv.js new file mode 100644 index 0000000..78bc7c1 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/sv.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'sv', { + toolbar: 'Visa block' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/th.js b/libraries/ckeditor/plugins/showblocks/lang/th.js new file mode 100644 index 0000000..66b908e --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/th.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'th', { + toolbar: 'แสดงบล็อคข้อมูล' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/tr.js b/libraries/ckeditor/plugins/showblocks/lang/tr.js new file mode 100644 index 0000000..830a46a --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/tr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'tr', { + toolbar: 'Blokları Göster' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/tt.js b/libraries/ckeditor/plugins/showblocks/lang/tt.js new file mode 100644 index 0000000..3276346 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/tt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'tt', { + toolbar: 'Блокларны күрсәтү' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/ug.js b/libraries/ckeditor/plugins/showblocks/lang/ug.js new file mode 100644 index 0000000..7c93330 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/ug.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'ug', { + toolbar: 'بۆلەكنى كۆرسەت' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/uk.js b/libraries/ckeditor/plugins/showblocks/lang/uk.js new file mode 100644 index 0000000..d02b0be --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/uk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'uk', { + toolbar: 'Показувати блоки' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/vi.js b/libraries/ckeditor/plugins/showblocks/lang/vi.js new file mode 100644 index 0000000..1876b96 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/vi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'vi', { + toolbar: 'Hiển thị các khối' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/zh-cn.js b/libraries/ckeditor/plugins/showblocks/lang/zh-cn.js new file mode 100644 index 0000000..a6d6fa7 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/zh-cn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'zh-cn', { + toolbar: '显示区块' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/lang/zh.js b/libraries/ckeditor/plugins/showblocks/lang/zh.js new file mode 100644 index 0000000..1b39dcc --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/lang/zh.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license +*/ +CKEDITOR.plugins.setLang( 'showblocks', 'zh', { + toolbar: '顯示區塊' +} ); diff --git a/libraries/ckeditor/plugins/showblocks/plugin.js b/libraries/ckeditor/plugins/showblocks/plugin.js new file mode 100644 index 0000000..e4619f9 --- /dev/null +++ b/libraries/ckeditor/plugins/showblocks/plugin.js @@ -0,0 +1,153 @@ +/** + * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license + */ + +/** + * @fileOverview The "showblocks" plugin. Enable it will make all block level + * elements being decorated with a border and the element name + * displayed on the left-right corner. + */ + +( function() { + 'use strict'; + + var commandDefinition = { + readOnly: 1, + preserveState: true, + editorFocus: false, + + exec: function( editor ) { + this.toggleState(); + this.refresh( editor ); + }, + + refresh: function( editor ) { + if ( editor.document ) { + // Show blocks turns inactive after editor loses focus when in inline. + var showBlocks = ( this.state == CKEDITOR.TRISTATE_ON && ( editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE || editor.focusManager.hasFocus ) ); + + var funcName = showBlocks ? 'attachClass' : 'removeClass'; + editor.editable()[ funcName ]( 'cke_show_blocks' ); + } + } + }; + + CKEDITOR.plugins.add( 'showblocks', { + // jscs:disable maximumLineLength + lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% + // jscs:enable maximumLineLength + icons: 'showblocks,showblocks-rtl', // %REMOVE_LINE_CORE% + hidpi: true, // %REMOVE_LINE_CORE% + onLoad: function() { + var tags = [ 'p', 'div', 'pre', 'address', 'blockquote', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], + cssStd, cssImg, cssLtr, cssRtl, + path = CKEDITOR.getUrl( this.path ), + // https://dev.ckeditor.com/ticket/10884 don't apply showblocks styles to non-editable elements and chosen ones. + // IE8 does not support :not() pseudoclass, so we need to reset showblocks rather + // than 'prevent' its application. We do that by additional rules. + supportsNotPseudoclass = !( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ), + notDisabled = supportsNotPseudoclass ? ':not([contenteditable=false]):not(.cke_show_blocks_off)' : '', + tag, trailing; + + cssStd = cssImg = cssLtr = cssRtl = ''; + + while ( ( tag = tags.pop() ) ) { + trailing = tags.length ? ',' : ''; + + cssStd += '.cke_show_blocks ' + tag + notDisabled + trailing; + cssLtr += '.cke_show_blocks.cke_contents_ltr ' + tag + notDisabled + trailing; + cssRtl += '.cke_show_blocks.cke_contents_rtl ' + tag + notDisabled + trailing; + cssImg += '.cke_show_blocks ' + tag + notDisabled + '{' + + 'background-image:url(' + CKEDITOR.getUrl( path + 'images/block_' + tag + '.png' ) + ')' + + '}'; + } + + // .cke_show_blocks p { ... } + cssStd += '{' + + 'background-repeat:no-repeat;' + + 'border:1px dotted gray;' + + 'padding-top:8px' + + '}'; + + // .cke_show_blocks.cke_contents_ltr p { ... } + cssLtr += '{' + + 'background-position:top left;' + + 'padding-left:8px' + + '}'; + + // .cke_show_blocks.cke_contents_rtl p { ... } + cssRtl += '{' + + 'background-position:top right;' + + 'padding-right:8px' + + '}'; + + CKEDITOR.addCss( cssStd.concat( cssImg, cssLtr, cssRtl ) ); + + // [IE8] Reset showblocks styles for non-editables and chosen elements, because + // it could not be done using :not() pseudoclass (https://dev.ckeditor.com/ticket/10884). + if ( !supportsNotPseudoclass ) { + CKEDITOR.addCss( + '.cke_show_blocks [contenteditable=false],.cke_show_blocks .cke_show_blocks_off{' + + 'border:none;' + + 'padding-top:0;' + + 'background-image:none' + + '}' + + '.cke_show_blocks.cke_contents_rtl [contenteditable=false],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{' + + 'padding-right:0' + + '}' + + '.cke_show_blocks.cke_contents_ltr [contenteditable=false],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{' + + 'padding-left:0' + + '}' + ); + } + }, + init: function( editor ) { + if ( editor.blockless ) + return; + + var command = editor.addCommand( 'showblocks', commandDefinition ); + command.canUndo = false; + + if ( editor.config.startupOutlineBlocks ) + command.setState( CKEDITOR.TRISTATE_ON ); + + editor.ui.addButton && editor.ui.addButton( 'ShowBlocks', { + label: editor.lang.showblocks.toolbar, + command: 'showblocks', + toolbar: 'tools,20' + } ); + + // Refresh the command on setData. + editor.on( 'mode', function() { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + } ); + + // Refresh the command on focus/blur in inline. + if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) { + editor.on( 'focus', onFocusBlur ); + editor.on( 'blur', onFocusBlur ); + } + + // Refresh the command on setData. + editor.on( 'contentDom', function() { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + } ); + + function onFocusBlur() { + command.refresh( editor ); + } + } + } ); +} )(); + +/** + * Whether to automaticaly enable the show block" command when the editor loads. + * + * config.startupOutlineBlocks = true; + * + * @cfg {Boolean} [startupOutlineBlocks=false] + * @member CKEDITOR.config + */ diff --git a/libraries/ckeditor/plugins/smiley/dialogs/smiley.js b/libraries/ckeditor/plugins/smiley/dialogs/smiley.js new file mode 100644 index 0000000..841d789 --- /dev/null +++ b/libraries/ckeditor/plugins/smiley/dialogs/smiley.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,k,m=function(l){var c=l.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);k.hide();l.data.preventDefault()},q=CKEDITOR.tools.addFunction(function(a,c){a= +new CKEDITOR.dom.event(a);c=new CKEDITOR.dom.element(c);var b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:(b=c.getParent().getParent().getNext())&&(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:m({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0); +else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['\x3cdiv\x3e\x3cspan id\x3d"'+d+'" class\x3d"cke_voice_label"\x3e'+a.options+"\x3c/span\x3e",'\x3ctable role\x3d"listbox" aria-labelledby\x3d"'+ +d+'" style\x3d"width:100%;height:100%;border-collapse:separate;" cellspacing\x3d"2" cellpadding\x3d"2"',CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style\x3d"position:absolute;"':"","\x3e\x3ctbody\x3e"],n=h.length,a=0;an&&(n=f)}return n}function r(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer()(f)&&0q.getSize("width")?"100%":500:0,getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1", +a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){a=a.getStyle("width");this.setValue(a)},commit:l}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1", +a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:l}]},{type:"html",html:"\x26nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing), +setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a, +d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0 + + + + + TableResize Plugin dev sample + + + + +

        + TableResize Plugin - dev sample +

        + + +
        + + + + + + + + + + + + + + + + +
        + A sample table
        + Column 1 + Column 2
        + You can resize a table column. + Hover your mouse over its border.
        + Watch the cursor change. + Now click and drag to resize.
        +
        + + + + + + + + + + + + + + + + + +
        + A sample table
        + Column 1 + Column 2
        + You can resize a table column. + Hover your mouse over its border.
        + Watch the cursor change. + Now click and drag to resize.
        + + + diff --git a/libraries/ckeditor/plugins/tableresize/plugin.js b/libraries/ckeditor/plugins/tableresize/plugin.js new file mode 100644 index 0000000..5338608 --- /dev/null +++ b/libraries/ckeditor/plugins/tableresize/plugin.js @@ -0,0 +1,413 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +( function() { + var pxUnit = CKEDITOR.tools.cssLength, + needsIEHacks = CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ); + + function getWidth( el ) { + return CKEDITOR.env.ie ? el.$.clientWidth : parseInt( el.getComputedStyle( 'width' ), 10 ); + } + + function getBorderWidth( element, side ) { + var computed = element.getComputedStyle( 'border-' + side + '-width' ), + borderMap = { + thin: '0px', + medium: '1px', + thick: '2px' + }; + + if ( computed.indexOf( 'px' ) < 0 ) { + // look up keywords + if ( computed in borderMap && element.getComputedStyle( 'border-style' ) != 'none' ) + computed = borderMap[ computed ]; + else + computed = 0; + } + + return parseInt( computed, 10 ); + } + + // Gets the table row that contains the most columns. + function getMasterPillarRow( table ) { + var $rows = table.$.rows, + maxCells = 0, + cellsCount, $elected, $tr; + + for ( var i = 0, len = $rows.length; i < len; i++ ) { + $tr = $rows[ i ]; + cellsCount = $tr.cells.length; + + if ( cellsCount > maxCells ) { + maxCells = cellsCount; + $elected = $tr; + } + } + + return $elected; + } + + function buildTableColumnPillars( table ) { + var pillars = [], + pillarIndex = -1, + rtl = ( table.getComputedStyle( 'direction' ) == 'rtl' ); + + // Get the raw row element that cointains the most columns. + var $tr = getMasterPillarRow( table ); + + // Get the tbody element and position, which will be used to set the + // top and bottom boundaries. + var tbody = new CKEDITOR.dom.element( table.$.tBodies[ 0 ] ), + tbodyPosition = tbody.getDocumentPosition(); + + // Loop thorugh all cells, building pillars after each one of them. + for ( var i = 0, len = $tr.cells.length; i < len; i++ ) { + // Both the current cell and the successive one will be used in the + // pillar size calculation. + var td = new CKEDITOR.dom.element( $tr.cells[ i ] ), + nextTd = $tr.cells[ i + 1 ] && new CKEDITOR.dom.element( $tr.cells[ i + 1 ] ); + + pillarIndex += td.$.colSpan || 1; + + // Calculate the pillar boundary positions. + var pillarLeft, pillarRight, pillarWidth; + + var x = td.getDocumentPosition().x; + + // Calculate positions based on the current cell. + rtl ? pillarRight = x + getBorderWidth( td, 'left' ) : pillarLeft = x + td.$.offsetWidth - getBorderWidth( td, 'right' ); + + // Calculate positions based on the next cell, if available. + if ( nextTd ) { + x = nextTd.getDocumentPosition().x; + + rtl ? pillarLeft = x + nextTd.$.offsetWidth - getBorderWidth( nextTd, 'right' ) : pillarRight = x + getBorderWidth( nextTd, 'left' ); + } + // Otherwise calculate positions based on the table (for last cell). + else { + x = table.getDocumentPosition().x; + + rtl ? pillarLeft = x : pillarRight = x + table.$.offsetWidth; + } + + pillarWidth = Math.max( pillarRight - pillarLeft, 3 ); + + // The pillar should reflects exactly the shape of the hovered + // column border line. + pillars.push( { + table: table, + index: pillarIndex, + x: pillarLeft, + y: tbodyPosition.y, + width: pillarWidth, + height: tbody.$.offsetHeight, + rtl: rtl + } ); + } + + return pillars; + } + + function getPillarAtPosition( pillars, positionX ) { + for ( var i = 0, len = pillars.length; i < len; i++ ) { + var pillar = pillars[ i ]; + + if ( positionX >= pillar.x && positionX <= ( pillar.x + pillar.width ) ) + return pillar; + } + + return null; + } + + function cancel( evt ) { + ( evt.data || evt ).preventDefault(); + } + + function columnResizer( editor ) { + var pillar, document, resizer, isResizing, startOffset, currentShift; + + var leftSideCells, rightSideCells, leftShiftBoundary, rightShiftBoundary; + + function detach() { + pillar = null; + currentShift = 0; + isResizing = 0; + + document.removeListener( 'mouseup', onMouseUp ); + resizer.removeListener( 'mousedown', onMouseDown ); + resizer.removeListener( 'mousemove', onMouseMove ); + + document.getBody().setStyle( 'cursor', 'auto' ); + + // Hide the resizer (remove it on IE7 - #5890). + needsIEHacks ? resizer.remove() : resizer.hide(); + } + + function resizeStart() { + // Before starting to resize, figure out which cells to change + // and the boundaries of this resizing shift. + + var columnIndex = pillar.index, + map = CKEDITOR.tools.buildTableMap( pillar.table ), + leftColumnCells = [], + rightColumnCells = [], + leftMinSize = Number.MAX_VALUE, + rightMinSize = leftMinSize, + rtl = pillar.rtl; + + for ( var i = 0, len = map.length; i < len; i++ ) { + var row = map[ i ], + leftCell = row[ columnIndex + ( rtl ? 1 : 0 ) ], + rightCell = row[ columnIndex + ( rtl ? 0 : 1 ) ]; + + leftCell = leftCell && new CKEDITOR.dom.element( leftCell ); + rightCell = rightCell && new CKEDITOR.dom.element( rightCell ); + + if ( !leftCell || !rightCell || !leftCell.equals( rightCell ) ) { + leftCell && ( leftMinSize = Math.min( leftMinSize, getWidth( leftCell ) ) ); + rightCell && ( rightMinSize = Math.min( rightMinSize, getWidth( rightCell ) ) ); + + leftColumnCells.push( leftCell ); + rightColumnCells.push( rightCell ); + } + } + + // Cache the list of cells to be resized. + leftSideCells = leftColumnCells; + rightSideCells = rightColumnCells; + + // Cache the resize limit boundaries. + leftShiftBoundary = pillar.x - leftMinSize; + rightShiftBoundary = pillar.x + rightMinSize; + + resizer.setOpacity( 0.5 ); + startOffset = parseInt( resizer.getStyle( 'left' ), 10 ); + currentShift = 0; + isResizing = 1; + + resizer.on( 'mousemove', onMouseMove ); + + // Prevent the native drag behavior otherwise 'mousemove' won't fire. + document.on( 'dragstart', cancel ); + } + + function resizeEnd() { + isResizing = 0; + + resizer.setOpacity( 0 ); + + currentShift && resizeColumn(); + + var table = pillar.table; + setTimeout( function() { + table.removeCustomData( '_cke_table_pillars' ); + }, 0 ); + + document.removeListener( 'dragstart', cancel ); + } + + function resizeColumn() { + var rtl = pillar.rtl, + cellsCount = rtl ? rightSideCells.length : leftSideCells.length; + + // Perform the actual resize to table cells, only for those by side of the pillar. + for ( var i = 0; i < cellsCount; i++ ) { + var leftCell = leftSideCells[ i ], + rightCell = rightSideCells[ i ], + table = pillar.table; + + // Defer the resizing to avoid any interference among cells. + CKEDITOR.tools.setTimeout( function( leftCell, leftOldWidth, rightCell, rightOldWidth, tableWidth, sizeShift ) { + // 1px is the minimum valid width (#11626). + leftCell && leftCell.setStyle( 'width', pxUnit( Math.max( leftOldWidth + sizeShift, 1 ) ) ); + rightCell && rightCell.setStyle( 'width', pxUnit( Math.max( rightOldWidth - sizeShift, 1 ) ) ); + + // If we're in the last cell, we need to resize the table as well + if ( tableWidth ) + table.setStyle( 'width', pxUnit( tableWidth + sizeShift * ( rtl ? -1 : 1 ) ) ); + }, 0, this, [ + leftCell, leftCell && getWidth( leftCell ), + rightCell, rightCell && getWidth( rightCell ), + ( !leftCell || !rightCell ) && ( getWidth( table ) + getBorderWidth( table, 'left' ) + getBorderWidth( table, 'right' ) ), + currentShift + ] ); + } + } + + function onMouseDown( evt ) { + cancel( evt ); + + resizeStart(); + + document.on( 'mouseup', onMouseUp, this ); + } + + function onMouseUp( evt ) { + evt.removeListener(); + + resizeEnd(); + } + + function onMouseMove( evt ) { + move( evt.data.getPageOffset().x ); + } + + document = editor.document; + + resizer = CKEDITOR.dom.element.createFromHtml( '
        ', document ); + + // Clean DOM when editor is destroyed. + editor.on( 'destroy', function() { + resizer.remove(); + } ); + + // Except on IE6/7 (#5890), place the resizer after body to prevent it + // from being editable. + if ( !needsIEHacks ) + document.getDocumentElement().append( resizer ); + + this.attachTo = function( targetPillar ) { + // Accept only one pillar at a time. + if ( isResizing ) + return; + + // On IE6/7, we append the resizer everytime we need it. (#5890) + if ( needsIEHacks ) { + document.getBody().append( resizer ); + currentShift = 0; + } + + pillar = targetPillar; + + resizer.setStyles( { + width: pxUnit( targetPillar.width ), + height: pxUnit( targetPillar.height ), + left: pxUnit( targetPillar.x ), + top: pxUnit( targetPillar.y ) + } ); + + // In IE6/7, it's not possible to have custom cursors for floating + // elements in an editable document. Show the resizer in that case, + // to give the user a visual clue. + needsIEHacks && resizer.setOpacity( 0.25 ); + + resizer.on( 'mousedown', onMouseDown, this ); + + document.getBody().setStyle( 'cursor', 'col-resize' ); + + // Display the resizer to receive events but don't show it, + // only change the cursor to resizable shape. + resizer.show(); + }; + + var move = this.move = function( posX ) { + if ( !pillar ) + return 0; + + if ( !isResizing && ( posX < pillar.x || posX > ( pillar.x + pillar.width ) ) ) { + detach(); + return 0; + } + + var resizerNewPosition = posX - Math.round( resizer.$.offsetWidth / 2 ); + + if ( isResizing ) { + if ( resizerNewPosition == leftShiftBoundary || resizerNewPosition == rightShiftBoundary ) + return 1; + + resizerNewPosition = Math.max( resizerNewPosition, leftShiftBoundary ); + resizerNewPosition = Math.min( resizerNewPosition, rightShiftBoundary ); + + currentShift = resizerNewPosition - startOffset; + } + + resizer.setStyle( 'left', pxUnit( resizerNewPosition ) ); + + return 1; + }; + } + + function clearPillarsCache( evt ) { + var target = evt.data.getTarget(); + + if ( evt.name == 'mouseout' ) { + // Bypass interal mouse move. + if ( !target.is( 'table' ) ) + return; + + var dest = new CKEDITOR.dom.element( evt.data.$.relatedTarget || evt.data.$.toElement ); + while ( dest && dest.$ && !dest.equals( target ) && !dest.is( 'body' ) ) + dest = dest.getParent(); + if ( !dest || dest.equals( target ) ) + return; + } + + target.getAscendant( 'table', 1 ).removeCustomData( '_cke_table_pillars' ); + evt.removeListener(); + } + + CKEDITOR.plugins.add( 'tableresize', { + requires: 'tabletools', + + init: function( editor ) { + editor.on( 'contentDom', function() { + var resizer, + editable = editor.editable(); + + // In Classic editor it is better to use document + // instead of editable so event will work below body. + editable.attachListener( editable.isInline() ? editable : editor.document, 'mousemove', function( evt ) { + evt = evt.data; + + var target = evt.getTarget(); + + // FF may return document and IE8 some UFO (object with no nodeType property...) + // instead of an element (#11823). + if ( target.type != CKEDITOR.NODE_ELEMENT ) + return; + + var pageX = evt.getPageOffset().x; + + // If we're already attached to a pillar, simply move the + // resizer. + if ( resizer && resizer.move( pageX ) ) { + cancel( evt ); + return; + } + + // Considering table, tr, td, tbody but nothing else. + var table, pillars; + + if ( !target.is( 'table' ) && !target.getAscendant( 'tbody', 1 ) ) + return; + + table = target.getAscendant( 'table', 1 ); + + // Make sure the table we found is inside the container + // (eg. we should not use tables the editor is embedded within) + if ( !editor.editable().contains( table ) ) { + return; + } + + if ( !( pillars = table.getCustomData( '_cke_table_pillars' ) ) ) { + // Cache table pillars calculation result. + table.setCustomData( '_cke_table_pillars', ( pillars = buildTableColumnPillars( table ) ) ); + table.on( 'mouseout', clearPillarsCache ); + table.on( 'mousedown', clearPillarsCache ); + } + + var pillar = getPillarAtPosition( pillars, pageX ); + if ( pillar ) { + !resizer && ( resizer = new columnResizer( editor ) ); + resizer.attachTo( pillar ); + } + } ); + } ); + } + } ); + +} )(); diff --git a/libraries/ckeditor/plugins/tableresize/samples/tableresize.html b/libraries/ckeditor/plugins/tableresize/samples/tableresize.html new file mode 100644 index 0000000..2d6f68b --- /dev/null +++ b/libraries/ckeditor/plugins/tableresize/samples/tableresize.html @@ -0,0 +1,107 @@ + + + + + + Using TableResize Plugin — CKEditor Sample + + + + + + + +

        + CKEditor Samples » Using the TableResize Plugin +

        +
        + This sample is not maintained anymore. Check out its brand new version in CKEditor SDK. +
        +
        +

        + This sample shows how to configure CKEditor instances to use the + TableResize (tableresize) plugin that allows + the user to edit table columns by using the mouse. +

        +

        + The TableResize plugin makes it possible to modify table column width. Hover + your mouse over the column border to see the cursor change to indicate that + the column can be resized. Click and drag your mouse to set the desired width. +

        +

        + By default the plugin is turned off. To add a CKEditor instance using the + TableResize plugin, insert the following JavaScript call into your code: +

        +
        +CKEDITOR.replace( 'textarea_id', {
        +	extraPlugins: 'tableresize'
        +});
        +

        + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced with CKEditor. +

        +
        +
        +

        + + + +

        +

        + +

        +
        + + + diff --git a/libraries/ckeditor/plugins/tableselection/styles/tableselection.css b/libraries/ckeditor/plugins/tableselection/styles/tableselection.css new file mode 100644 index 0000000..3ad2ab1 --- /dev/null +++ b/libraries/ckeditor/plugins/tableselection/styles/tableselection.css @@ -0,0 +1,32 @@ +.cke_table-faked-selection-editor *::selection, table[data-cke-table-faked-selection-table] *::selection { + background: transparent; +} + +.cke_table-faked-selection-editor { + /* With love, dedicated for Chrome, until https://bugs.chromium.org/p/chromium/issues/detail?id=702610 is resolved. + It will force repaint (without reflow) so that selection is properly displayed. */ + transform: translateZ( 0 ); +} + +.cke_table-faked-selection { + background: darkgray !important; + color: black; +} +.cke_table-faked-selection a { + color: black; +} +.cke_editable:focus .cke_table-faked-selection { + /* We have to use !important here, as td might specify it's own background, thus table selection + would not be visible. */ + background: #0076cb !important; + color: white; +} +.cke_editable:focus .cke_table-faked-selection a { + color: white; +} +.cke_table-faked-selection::-moz-selection, .cke_table-faked-selection ::-moz-selection { + background: transparent; +} +.cke_table-faked-selection::selection, .cke_table-faked-selection ::selection { + background: transparent; +} diff --git a/libraries/ckeditor/plugins/tabletools/dialogs/tableCell.js b/libraries/ckeditor/plugins/tabletools/dialogs/tableCell.js new file mode 100644 index 0000000..101d6c0 --- /dev/null +++ b/libraries/ckeditor/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,17 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d + * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved. + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.0 + * + * Date: 5/10/13 + * Time: 9:45 AM + */ + +// set CKeditor lang +CKEDITOR.plugins.setLang( 'texttransform', 'en', { + transformTextSwitchLabel: 'Transform Text Switcher', + transformTextToLowercaseLabel: 'Transform Text to Lowercase', + transformTextToUppercaseLabel: 'Transform Text to Uppercase', + transformTextCapitalizeLabel: 'Capitalize Text' +}); diff --git a/libraries/ckeditor/plugins/texttransform/lang/tr.js b/libraries/ckeditor/plugins/texttransform/lang/tr.js new file mode 100644 index 0000000..9caedbc --- /dev/null +++ b/libraries/ckeditor/plugins/texttransform/lang/tr.js @@ -0,0 +1,41 @@ +/** + * @author: Önder Ceylan + * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved. + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.0 + * + * Date: 5/10/13 + * Time: 9:45 AM + */ + +// define a prototype toUpperCase fn for Turkish character recognization +String.prototype.trToUpperCase = function(){ + var string = this; + var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" }; + string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; }); + if (typeof(String.prototype.toLocaleUpperCase()) != 'undefined') { + return string.toLocaleUpperCase(); + } else { + return string.toUpperCase(); + } +}; + +// define prototype toLowerCase fn for Turkish character recognization +String.prototype.trToLowerCase = function(){ + var string = this; + var letters = { "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" }; + string = string.replace(/(([İIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; }); + if (typeof(String.prototype.toLocaleLowerCase()) != 'undefined') { + return string.toLocaleLowerCase(); + } else { + return string.toLowerCase(); + } +}; + +// set CKeditor lang +CKEDITOR.plugins.setLang( 'texttransform', 'tr', { + transformTextSwitchLabel: 'Harf Düzenini Değiştir', + transformTextToLowercaseLabel: 'Küçük Harfe Dönüştür', + transformTextToUppercaseLabel: 'Büyük Harfe Dönüştür', + transformTextCapitalizeLabel: 'Baş Harfleri Büyüt' +}); diff --git a/libraries/ckeditor/plugins/texttransform/plugin.js b/libraries/ckeditor/plugins/texttransform/plugin.js new file mode 100644 index 0000000..7ccdcfe --- /dev/null +++ b/libraries/ckeditor/plugins/texttransform/plugin.js @@ -0,0 +1,151 @@ +/** + * @authors: Önder Ceylan , PPKRAUSS https://github.com/ppKrauss + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.1 + * @history v1.0 at 2013-05-09 by onderceylan, v1.1 at 2013-08-27 by ppkrauss. + */ + +CKEDITOR.plugins.add('texttransform', + { + + // define lang codes for available lang files here + lang: 'en,tr', + + // plugin initialise + init: function(editor) + { + // set num for switcher loop + var num = 0; + + // add transformTextSwitch command to be used with button + editor.addCommand('transformTextSwitch', + { + exec : function() + { + var selection = editor.getSelection(); + var commandArray = ['transformTextToUppercase', 'transformTextToLowercase', 'transformTextCapitalize']; + + if (selection.getSelectedText().length > 0) { + + selection.lock(); + + editor.execCommand( commandArray[num] ); + + selection.unlock(true); + + if (num < commandArray.length - 1) { + num++; + } else { + num = 0; + } + + } + } + }); + + // add transformTextToUppercase command to be used with buttons and 'execCommand' method + editor.addCommand('transformTextToUppercase', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + if (editor.langCode == "tr") { + node.$.textContent = node.$.textContent.trToUpperCase(); + } else { + node.$.textContent = node.$.textContent.toLocaleUpperCase(); + } + }//if + } //func + }); + + // add transformTextToUppercase command to be used with buttons and 'execCommand' method + editor.addCommand('transformTextToLowercase', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + if (editor.langCode == "tr") { + node.$.textContent = node.$.textContent.trToLowerCase(); + } else { + node.$.textContent = node.$.textContent.toLocaleLowerCase(); + } + + }//if + + } + }); + + // add transformTextCapitalize command to be used with buttons and 'execCommand' method + editor.addCommand( 'transformTextCapitalize', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + node.$.textContent = node.$.textContent.replace( + /[^\s]\S*/g, + function(txt){ + if (editor.langCode == "tr") { + return txt.charAt(0).trToUpperCase() + + txt.substr(1).trToLowerCase(); + } else { + return txt.charAt(0).toLocaleUpperCase() + + txt.substr(1).toLocaleLowerCase(); + } + + } + ); + }//if + } + }); + + // add TransformTextSwitcher button to editor + editor.ui.addButton('TransformTextSwitcher', + { + label: editor.lang.texttransform.transformTextSwitchLabel, + command: 'transformTextSwitch', + icon: this.path + 'images/transformSwitcher.png' + } ); + + // add TransformTextToLowercase button to editor + editor.ui.addButton('TransformTextToLowercase', + { + label: editor.lang.texttransform.transformTextToLowercaseLabel, + command: 'transformTextToLowercase', + icon: this.path + 'images/transformToLower.png' + } ); + + // add TransformTextToUppercase button to editor + editor.ui.addButton('TransformTextToUppercase', + { + label: editor.lang.texttransform.transformTextToUppercaseLabel, + command: 'transformTextToUppercase', + icon: this.path + 'images/transformToUpper.png' + } ); + + // add TransformTextCapitalize button to editor + editor.ui.addButton('TransformTextCapitalize', + { + label: editor.lang.texttransform.transformTextCapitalizeLabel, + command: 'transformTextCapitalize', + icon: this.path + 'images/transformCapitalize.png' + } ); + } + } ); diff --git a/libraries/ckeditor/plugins/widget/dev/console.js b/libraries/ckeditor/plugins/widget/dev/console.js new file mode 100644 index 0000000..afc0122 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/dev/console.js @@ -0,0 +1,129 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +'use strict'; + +( function() { + + CKCONSOLE.add( 'widget', { + panels: [ + { + type: 'box', + content: '
          ', + + refresh: function( editor ) { + var instances = obj2Array( editor.widgets.instances ); + + return { + header: 'Instances (' + instances.length + ')', + instances: generateInstancesList( instances ) + }; + }, + + refreshOn: function( editor, refresh ) { + editor.widgets.on( 'instanceCreated', function( evt ) { + refresh(); + + evt.data.on( 'data', refresh ); + } ); + + editor.widgets.on( 'instanceDestroyed', refresh ); + } + }, + + { + type: 'box', + content: + '
            ' + + '
          • focused:
          • ' + + '
          • selected:
          • ' + + '
          ', + + refresh: function( editor ) { + var focused = editor.widgets.focused, + selected = editor.widgets.selected, + selectedIds = []; + + for ( var i = 0; i < selected.length; ++i ) + selectedIds.push( selected[ i ].id ); + + return { + header: 'Focus & selection', + focused: focused ? 'id: ' + focused.id : '-', + selected: selectedIds.length ? 'id: ' + selectedIds.join( ', id: ' ) : '-' + }; + }, + + refreshOn: function( editor, refresh ) { + editor.on( 'selectionCheck', refresh, null, null, 999 ); + } + }, + + { + type: 'log', + + on: function( editor, log, logFn ) { + // Add all listeners with high priorities to log + // messages in the correct order when one event depends on another. + // E.g. selectionChange triggers widget selection - if this listener + // for selectionChange will be executed later than that one, then order + // will be incorrect. + + editor.on( 'selectionChange', function( evt ) { + var msg = 'selection change', + sel = evt.data.selection, + el = sel.getSelectedElement(), + widget; + + if ( el && ( widget = editor.widgets.getByElement( el, true ) ) ) + msg += ' (id: ' + widget.id + ')'; + + log( msg ); + }, null, null, 1 ); + + editor.widgets.on( 'instanceDestroyed', function( evt ) { + log( 'instance destroyed (id: ' + evt.data.id + ')' ); + }, null, null, 1 ); + + editor.widgets.on( 'instanceCreated', function( evt ) { + log( 'instance created (id: ' + evt.data.id + ')' ); + }, null, null, 1 ); + + editor.widgets.on( 'widgetFocused', function( evt ) { + log( 'widget focused (id: ' + evt.data.widget.id + ')' ); + }, null, null, 1 ); + + editor.widgets.on( 'widgetBlurred', function( evt ) { + log( 'widget blurred (id: ' + evt.data.widget.id + ')' ); + }, null, null, 1 ); + + editor.widgets.on( 'checkWidgets', logFn( 'checking widgets' ), null, null, 1 ); + editor.widgets.on( 'checkSelection', logFn( 'checking selection' ), null, null, 1 ); + } + } + ] + } ); + + function generateInstancesList( instances ) { + var html = '', + instance; + + for ( var i = 0; i < instances.length; ++i ) { + instance = instances[ i ]; + html += itemTpl.output( { id: instance.id, name: instance.name, data: JSON.stringify( instance.data ) } ); + } + return html; + } + + function obj2Array( obj ) { + var arr = []; + for ( var id in obj ) + arr.push( obj[ id ] ); + + return arr; + } + + var itemTpl = new CKEDITOR.template( '
        • id: {id}, name: {name}, data: {data}
        • ' ); +} )(); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/widget/images/handle.png b/libraries/ckeditor/plugins/widget/images/handle.png new file mode 100644 index 0000000..8d1c976 Binary files /dev/null and b/libraries/ckeditor/plugins/widget/images/handle.png differ diff --git a/libraries/ckeditor/plugins/widget/lang/ar.js b/libraries/ckeditor/plugins/widget/lang/ar.js new file mode 100644 index 0000000..7a95ab5 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/ar.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'ar', { + 'move': 'Click and drag to move' // MISSING +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/ca.js b/libraries/ckeditor/plugins/widget/lang/ca.js new file mode 100644 index 0000000..53b90c3 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/ca.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'ca', { + 'move': 'Clicar i arrossegar per moure' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/cs.js b/libraries/ckeditor/plugins/widget/lang/cs.js new file mode 100644 index 0000000..84af366 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/cs.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'cs', { + 'move': 'Klepněte a táhněte pro přesunutí' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/cy.js b/libraries/ckeditor/plugins/widget/lang/cy.js new file mode 100644 index 0000000..665594e --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/cy.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'cy', { + 'move': 'Clcio a llusgo i symud' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/de.js b/libraries/ckeditor/plugins/widget/lang/de.js new file mode 100644 index 0000000..6610c73 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/de.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'de', { + 'move': 'Zum verschieben anwählen und ziehen' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/el.js b/libraries/ckeditor/plugins/widget/lang/el.js new file mode 100644 index 0000000..99c07a6 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/el.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'el', { + 'move': 'Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/en-gb.js b/libraries/ckeditor/plugins/widget/lang/en-gb.js new file mode 100644 index 0000000..dae7f76 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/en-gb.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'en-gb', { + 'move': 'Click and drag to move' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/en.js b/libraries/ckeditor/plugins/widget/lang/en.js new file mode 100644 index 0000000..64b8d25 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/en.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'en', { + 'move': 'Click and drag to move' +} ); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/widget/lang/es.js b/libraries/ckeditor/plugins/widget/lang/es.js new file mode 100644 index 0000000..6b34689 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/es.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'es', { + 'move': 'Dar clic y arrastrar para mover' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/fa.js b/libraries/ckeditor/plugins/widget/lang/fa.js new file mode 100644 index 0000000..ec06b66 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/fa.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'fa', { + 'move': 'کلیک و کشیدن برای جابجایی' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/fi.js b/libraries/ckeditor/plugins/widget/lang/fi.js new file mode 100644 index 0000000..1b76865 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/fi.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'fi', { + 'move': 'Siirrä klikkaamalla ja raahaamalla' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/fr.js b/libraries/ckeditor/plugins/widget/lang/fr.js new file mode 100644 index 0000000..8ad8d15 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/fr.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'fr', { + 'move': 'Cliquer et glisser pour déplacer' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/gl.js b/libraries/ckeditor/plugins/widget/lang/gl.js new file mode 100644 index 0000000..b2df383 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/gl.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'gl', { + 'move': 'Prema e arrastre para mover' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/he.js b/libraries/ckeditor/plugins/widget/lang/he.js new file mode 100644 index 0000000..cb30ff6 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/he.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'he', { + 'move': 'לחץ וגרור להזזה' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/hr.js b/libraries/ckeditor/plugins/widget/lang/hr.js new file mode 100644 index 0000000..d952e53 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/hr.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'hr', { + 'move': 'Klikni i povuci da pomakneš' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/hu.js b/libraries/ckeditor/plugins/widget/lang/hu.js new file mode 100644 index 0000000..87e0a44 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/hu.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'hu', { + 'move': 'Kattints és húzd a mozgatáshoz' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/it.js b/libraries/ckeditor/plugins/widget/lang/it.js new file mode 100644 index 0000000..845109e --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/it.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'it', { + 'move': 'Fare clic e trascinare per spostare' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/ja.js b/libraries/ckeditor/plugins/widget/lang/ja.js new file mode 100644 index 0000000..3feea79 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/ja.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'ja', { + 'move': 'ドラッグして移動' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/km.js b/libraries/ckeditor/plugins/widget/lang/km.js new file mode 100644 index 0000000..a9dcbc1 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/km.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'km', { + 'move': 'ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/ko.js b/libraries/ckeditor/plugins/widget/lang/ko.js new file mode 100644 index 0000000..4657a92 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/ko.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'ko', { + 'move': '움직이려면 클릭 후 드래그 하세요' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/nb.js b/libraries/ckeditor/plugins/widget/lang/nb.js new file mode 100644 index 0000000..39c17ec --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/nb.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'nb', { + 'move': 'Klikk og dra for å flytte' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/nl.js b/libraries/ckeditor/plugins/widget/lang/nl.js new file mode 100644 index 0000000..aa91130 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/nl.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'nl', { + 'move': 'Klik en sleep om te verplaatsen' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/no.js b/libraries/ckeditor/plugins/widget/lang/no.js new file mode 100644 index 0000000..4f4c5dd --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/no.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'no', { + 'move': 'Klikk og dra for å flytte' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/pl.js b/libraries/ckeditor/plugins/widget/lang/pl.js new file mode 100644 index 0000000..8737707 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/pl.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'pl', { + 'move': 'Kliknij i przeciągnij, by przenieść.' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/pt-br.js b/libraries/ckeditor/plugins/widget/lang/pt-br.js new file mode 100644 index 0000000..0c4dd71 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/pt-br.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'pt-br', { + 'move': 'Click e arraste para mover' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/pt.js b/libraries/ckeditor/plugins/widget/lang/pt.js new file mode 100644 index 0000000..b6c1ab5 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/pt.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'pt', { + 'move': 'Clique e arraste para mover' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/ru.js b/libraries/ckeditor/plugins/widget/lang/ru.js new file mode 100644 index 0000000..1ce6183 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/ru.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'ru', { + 'move': 'Нажмите и перетащите' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/sl.js b/libraries/ckeditor/plugins/widget/lang/sl.js new file mode 100644 index 0000000..586f3ea --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/sl.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'sl', { + 'move': 'Kliknite in povlecite, da premaknete' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/sv.js b/libraries/ckeditor/plugins/widget/lang/sv.js new file mode 100644 index 0000000..9b98929 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/sv.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'sv', { + 'move': 'Klicka och drag för att flytta' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/tt.js b/libraries/ckeditor/plugins/widget/lang/tt.js new file mode 100644 index 0000000..0373d5e --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/tt.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'tt', { + 'move': 'Күчереп куер өчен басып шудырыгыз' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/uk.js b/libraries/ckeditor/plugins/widget/lang/uk.js new file mode 100644 index 0000000..c222ce1 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/uk.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'uk', { + 'move': 'Клікніть і потягніть для переміщення' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/zh-cn.js b/libraries/ckeditor/plugins/widget/lang/zh-cn.js new file mode 100644 index 0000000..a6bb608 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/zh-cn.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'zh-cn', { + 'move': '点击并拖拽以移动' +} ); diff --git a/libraries/ckeditor/plugins/widget/lang/zh.js b/libraries/ckeditor/plugins/widget/lang/zh.js new file mode 100644 index 0000000..d5cf9a4 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/lang/zh.js @@ -0,0 +1,7 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +CKEDITOR.plugins.setLang( 'widget', 'zh', { + 'move': '拖曳以移動' +} ); diff --git a/libraries/ckeditor/plugins/widget/plugin.js b/libraries/ckeditor/plugins/widget/plugin.js new file mode 100644 index 0000000..35413d1 --- /dev/null +++ b/libraries/ckeditor/plugins/widget/plugin.js @@ -0,0 +1,3186 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @fileOverview [Widget](http://ckeditor.com/addon/widget) plugin. + */ + +'use strict'; + +( function() { + + var DRAG_HANDLER_SIZE = 15; + + CKEDITOR.plugins.add( 'widget', { + lang: 'ar,ca,cs,cy,de,el,en,en-gb,es,fa,fi,fr,gl,hr,hu,ja,km,ko,nb,nl,no,pl,pt,pt-br,ru,sl,sv,uk,zh,zh-cn', // %REMOVE_LINE_CORE% + requires: 'lineutils,clipboard', + onLoad: function() { + CKEDITOR.addCss( + '.cke_widget_wrapper{' + + 'position:relative;' + + 'outline:none' + + '}' + + '.cke_widget_inline{' + + 'display:inline-block' + + '}' + + '.cke_widget_wrapper:hover>.cke_widget_element{' + + 'outline:2px solid yellow;' + + 'cursor:default' + + '}' + + '.cke_widget_wrapper:hover .cke_widget_editable{' + + 'outline:2px solid yellow' + + '}' + + '.cke_widget_wrapper.cke_widget_focused>.cke_widget_element,' + + // We need higher specificity than hover style. + '.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{' + + 'outline:2px solid #ace' + + '}' + + '.cke_widget_editable{' + + 'cursor:text' + + '}' + + '.cke_widget_drag_handler_container{' + + 'position:absolute;' + + 'width:' + DRAG_HANDLER_SIZE + 'px;' + + 'height:0;' + + // Initially drag handler should not be visible, until its position will be + // repositioned. #11177 + 'left:-9999px;' + + 'opacity:0.75;' + + 'transition:height 0s 0.2s;' + // Delay hiding drag handler. + // Prevent drag handler from being misplaced (#11198). + 'line-height:0' + + '}' + + '.cke_widget_wrapper:hover>.cke_widget_drag_handler_container{' + + 'height:' + DRAG_HANDLER_SIZE + 'px;' + + 'transition:none' + + '}' + + '.cke_widget_drag_handler_container:hover{' + + 'opacity:1' + + '}'+ + 'img.cke_widget_drag_handler{' + + 'cursor:move;' + + 'width:' + DRAG_HANDLER_SIZE + 'px;' + + 'height:' + DRAG_HANDLER_SIZE + 'px;' + + 'display:inline-block' + + '}' + + '.cke_widget_mask{' + + 'position:absolute;' + + 'top:0;' + + 'left:0;' + + 'width:100%;' + + 'height:100%;' + + 'display:block' + + '}' + + '.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{' + + 'cursor:move !important' + + '}' + ); + }, + + beforeInit: function( editor ) { + /** + * An instance of widget repository. It contains all + * {@link CKEDITOR.plugins.widget.repository#registered registered widget definitions} and + * {@link CKEDITOR.plugins.widget.repository#instances initialized instances}. + * + * editor.widgets.add( 'someName', { + * // Widget definition... + * } ); + * + * editor.widgets.registered.someName; // -> Widget definition + * + * @since 4.3 + * @readonly + * @property {CKEDITOR.plugins.widget.repository} widgets + * @member CKEDITOR.editor + */ + editor.widgets = new Repository( editor ); + }, + + afterInit: function( editor ) { + addWidgetButtons( editor ); + setupContextMenu( editor ); + } + } ); + + /** + * Widget repository. It keeps track of all {@link #registered registered widget definitions} and + * {@link #instances initialized instances}. An instance of the repository is available under + * the {@link CKEDITOR.editor#widgets} property. + * + * @class CKEDITOR.plugins.widget.repository + * @mixins CKEDITOR.event + * @constructor Creates a widget repository instance. Note that the widget plugin automatically + * creates a repository instance which is available under the {@link CKEDITOR.editor#widgets} property. + * @param {CKEDITOR.editor} editor The editor instance for which the repository will be created. + */ + function Repository( editor ) { + /** + * The editor instance for which this repository was created. + * + * @readonly + * @property {CKEDITOR.editor} editor + */ + this.editor = editor; + + /** + * A hash of registered widget definitions (definition name => {@link CKEDITOR.plugins.widget.definition}). + * + * To register a definition use the {@link #add} method. + * + * @readonly + */ + this.registered = {}; + + /** + * An object containing initialized widget instances (widget id => {@link CKEDITOR.plugins.widget}). + * + * @readonly + */ + this.instances = {}; + + /** + * An array of selected widget instances. + * + * @readonly + * @property {CKEDITOR.plugins.widget[]} selected + */ + this.selected = []; + + /** + * The focused widget instance. See also {@link CKEDITOR.plugins.widget#event-focus} + * and {@link CKEDITOR.plugins.widget#event-blur} events. + * + * editor.on( 'selectionChange', function() { + * if ( editor.widgets.focused ) { + * // Do something when a widget is focused... + * } + * } ); + * + * @readonly + * @property {CKEDITOR.plugins.widget} focused + */ + this.focused = null; + + /** + * The widget instance that contains the nested editable which is currently focused. + * + * @readonly + * @property {CKEDITOR.plugins.widget} widgetHoldingFocusedEditable + */ + this.widgetHoldingFocusedEditable = null; + + this._ = { + nextId: 0, + upcasts: [], + upcastCallbacks: [], + filters: {} + }; + + setupWidgetsLifecycle( this ); + setupSelectionObserver( this ); + setupMouseObserver( this ); + setupKeyboardObserver( this ); + setupDragAndDrop( this ); + setupNativeCutAndCopy( this ); + } + + Repository.prototype = { + /** + * Minimum interval between selection checks. + * + * @private + */ + MIN_SELECTION_CHECK_INTERVAL: 500, + + /** + * Adds a widget definition to the repository. Fires the {@link CKEDITOR.editor#widgetDefinition} event + * which allows to modify the widget definition which is going to be registered. + * + * @param {String} name The name of the widget definition. + * @param {CKEDITOR.plugins.widget.definition} widgetDef Widget definition. + * @returns {CKEDITOR.plugins.widget.definition} + */ + add: function( name, widgetDef ) { + // Create prototyped copy of original widget definition, so we won't modify it. + widgetDef = CKEDITOR.tools.prototypedCopy( widgetDef ); + widgetDef.name = name; + + widgetDef._ = widgetDef._ || {}; + + this.editor.fire( 'widgetDefinition', widgetDef ); + + if ( widgetDef.template ) + widgetDef.template = new CKEDITOR.template( widgetDef.template ); + + addWidgetCommand( this.editor, widgetDef ); + addWidgetProcessors( this, widgetDef ); + + // Register widget automatically if it does not have a button. + if ( !widgetDef.button ) + this.editor.addFeature( widgetDef ); + + this.registered[ name ] = widgetDef; + + return widgetDef; + }, + + /** + * Adds a callback for element upcasting. Each callback will be executed + * for every element which is later tested by upcast methods. If a callback + * returns `false`, the element will not be upcasted. + * + * // Images with the "banner" class will not be upcasted (e.g. to the image widget). + * editor.widgets.addUpcastCallback( function( element ) { + * if ( element.name == 'img' && element.hasClass( 'banner' ) ) + * return false; + * } ); + * + * @param {Function} callback + * @param {CKEDITOR.htmlParser.element} callback.element + */ + addUpcastCallback: function( callback ) { + this._.upcastCallbacks.push( callback ); + }, + + /** + * Checks the selection to update widget states (selection and focus). + * + * This method is triggered by the {@link #event-checkSelection} event. + */ + checkSelection: function() { + var sel = this.editor.getSelection(), + selectedElement = sel.getSelectedElement(), + updater = stateUpdater( this ), + widget; + + // Widget is focused so commit and finish checking. + if ( selectedElement && ( widget = this.getByElement( selectedElement, true ) ) ) + return updater.focus( widget ).select( widget ).commit(); + + var range = sel.getRanges()[ 0 ]; + + // No ranges or collapsed range mean that nothing is selected, so commit and finish checking. + if ( !range || range.collapsed ) + return updater.commit(); + + // Range is not empty, so create walker checking for wrappers. + var walker = new CKEDITOR.dom.walker( range ), + wrapper; + + walker.evaluator = isDomWidgetWrapper; + + while ( ( wrapper = walker.next() ) ) + updater.select( this.getByElement( wrapper ) ); + + updater.commit(); + }, + + /** + * Checks if all widget instances are still present in the DOM. + * Destroys those instances that are not present. + * Reinitializes widgets on widget wrappers for which widget instances + * cannot be found. + * + * This method triggers the {@link #event-checkWidgets} event whose listeners + * can cancel the method's execution or modify its options. + * + * @param [options] The options object. + * @param {Boolean} [options.initOnlyNew] Initializes widgets only on newly wrapped + * widget elements (those which still have the `cke_widget_new` class). When this option is + * set to `true`, widgets which were invalidated (e.g. by replacing with a cloned DOM structure) + * will not be reinitialized. This makes the check faster. + * @param {Boolean} [options.focusInited] If only one widget is initialized by + * the method, it will be focused. + */ + checkWidgets: function( options ) { + this.fire( 'checkWidgets', CKEDITOR.tools.copy( options || {} ) ); + }, + + /** + * Removes the widget from the editor and moves the selection to the closest + * editable position if the widget was focused before. + * + * @param {CKEDITOR.plugins.widget} widget The widget instance to be deleted. + */ + del: function( widget ) { + if ( this.focused === widget ) { + var editor = widget.editor, + range = editor.createRange(), + found; + + // If haven't found place for caret on the default side, + // try to find it on the other side. + if ( !( found = range.moveToClosestEditablePosition( widget.wrapper, true ) ) ) + found = range.moveToClosestEditablePosition( widget.wrapper, false ); + + if ( found ) + editor.getSelection().selectRanges( [ range ] ); + } + + widget.wrapper.remove(); + this.destroy( widget, true ); + }, + + /** + * Destroys the widget instance. + * + * @param {CKEDITOR.plugins.widget} widget The widget instance to be destroyed. + * @param {Boolean} [offline] Whether the widget is offline (detached from the DOM tree) — + * in this case the DOM (attributes, classes, etc.) will not be cleaned up. + */ + destroy: function( widget, offline ) { + if ( this.widgetHoldingFocusedEditable === widget ) + setFocusedEditable( this, widget, null, offline ); + + widget.destroy( offline ); + delete this.instances[ widget.id ]; + this.fire( 'instanceDestroyed', widget ); + }, + + /** + * Destroys all widget instances. + * + * @param {Boolean} [offline] Whether the widgets are offline (detached from the DOM tree) — + * in this case the DOM (attributes, classes, etc.) will not be cleaned up. + */ + destroyAll: function( offline ) { + var instances = this.instances, + widget; + + for ( var id in instances ) { + widget = instances[ id ]; + this.destroy( widget, offline ); + } + }, + + /** + * Finalizes a process of widget creation. This includes: + * + * * inserting widget element into editor, + * * marking widget instance as ready (see {@link CKEDITOR.plugins.widget#event-ready}), + * * focusing widget instance. + * + * This method is used by the default widget's command and is called + * after widget's dialog (if set) is closed. It may also be used in a + * customized process of widget creation and insertion. + * + * widget.once( 'edit', function() { + * // Finalize creation only of not ready widgets. + * if ( widget.isReady() ) + * return; + * + * // Cancel edit event to prevent automatic widget insertion. + * evt.cancel(); + * + * CustomDialog.open( widget.data, function saveCallback( savedData ) { + * // Cache the container, because widget may be destroyed while saving data, + * // if this process will require some deep transformations. + * var container = widget.wrapper.getParent(); + * + * widget.setData( savedData ); + * + * // Widget will be retrieved from container and inserted into editor. + * editor.widgets.finalizeCreation( container ); + * } ); + * } ); + * + * @param {CKEDITOR.dom.element/CKEDITOR.dom.documentFragment} container The element + * or document fragment which contains widget wrapper. The container is used, so before + * finalizing creation the widget can be freely transformed (even destroyed and reinitialized). + */ + finalizeCreation: function( container ) { + var wrapper = container.getFirst(); + if ( wrapper && isDomWidgetWrapper( wrapper ) ) { + this.editor.insertElement( wrapper ); + + var widget = this.getByElement( wrapper ); + // Fire postponed #ready event. + widget.ready = true; + widget.fire( 'ready' ); + widget.focus(); + } + }, + + /** + * Finds a widget instance which contains a given element. The element will be the {@link CKEDITOR.plugins.widget#wrapper wrapper} + * of the returned widget or a descendant of this {@link CKEDITOR.plugins.widget#wrapper wrapper}. + * + * editor.widgets.getByElement( someWidget.wrapper ); // -> someWidget + * editor.widgets.getByElement( someWidget.parts.caption ); // -> someWidget + * + * // Check wrapper only: + * editor.widgets.getByElement( someWidget.wrapper, true ); // -> someWidget + * editor.widgets.getByElement( someWidget.parts.caption, true ); // -> null + * + * @param {CKEDITOR.dom.element} element The element to be checked. + * @param {Boolean} [checkWrapperOnly] If set to `true`, the method will not check wrappers' descendants. + * @returns {CKEDITOR.plugins.widget} The widget instance or `null`. + */ + getByElement: function( element, checkWrapperOnly ) { + if ( !element ) + return null; + + var wrapper; + + for ( var id in this.instances ) { + wrapper = this.instances[ id ].wrapper; + if ( wrapper.equals( element ) || ( !checkWrapperOnly && wrapper.contains( element ) ) ) + return this.instances[ id ]; + } + + return null; + }, + + /** + * Initializes a widget on a given element if the widget has not been initialized on it yet. + * + * @param {CKEDITOR.dom.element} element The future widget element. + * @param {String/CKEDITOR.plugins.widget.definition} [widgetDef] Name of a widget or a widget definition. + * The widget definition should be previously registered by using the + * {@link CKEDITOR.plugins.widget.repository#add} method. + * @param [startupData] Widget startup data (has precedence over default one). + * @returns {CKEDITOR.plugins.widget} The widget instance or `null` if a widget could not be initialized on + * a given element. + */ + initOn: function( element, widgetDef, startupData ) { + if ( !widgetDef ) + widgetDef = this.registered[ element.data( 'widget' ) ]; + else if ( typeof widgetDef == 'string' ) + widgetDef = this.registered[ widgetDef ]; + + if ( !widgetDef ) + return null; + + // Wrap element if still wasn't wrapped (was added during runtime by method that skips dataProcessor). + var wrapper = this.wrapElement( element, widgetDef.name ); + + if ( wrapper ) { + // Check if widget wrapper is new (widget hasn't been initialized on it yet). + // This class will be removed by widget constructor to avoid locking snapshot twice. + if ( wrapper.hasClass( 'cke_widget_new' ) ) { + var widget = new Widget( this, this._.nextId++, element, widgetDef, startupData ); + + // Widget could be destroyed when initializing it. + if ( widget.isInited() ) { + this.instances[ widget.id ] = widget; + + return widget; + } else + return null; + } + + // Widget already has been initialized, so try to get widget by element. + // Note - it may happen that other instance will returned than the one created above, + // if for example widget was destroyed and reinitialized. + return this.getByElement( element ); + } + + // No wrapper means that there's no widget for this element. + return null; + }, + + /** + * Initializes widgets on all elements which were wrapped by {@link #wrapElement} and + * have not been initialized yet. + * + * @param {CKEDITOR.dom.element} [container=editor.editable()] The container which will be checked for not + * initialized widgets. Defaults to editor's {@link CKEDITOR.editor#editable editable} element. + * @returns {CKEDITOR.plugins.widget[]} Array of widget instances which have been initialized. + */ + initOnAll: function( container ) { + var newWidgets = ( container || this.editor.editable() ).find( '.cke_widget_new' ), + newInstances = [], + instance; + + for ( var i = newWidgets.count(); i--; ) { + instance = this.initOn( newWidgets.getItem( i ).getFirst( isDomWidgetElement ) ); + if ( instance ) + newInstances.push( instance ); + } + + return newInstances; + }, + + /** + * Wraps an element with a widget's non-editable container. + * + * If this method is called on an {@link CKEDITOR.htmlParser.element}, then it will + * also take care of fixing the DOM after wrapping (the wrapper may not be allowed in element's parent). + * + * @param {CKEDITOR.dom.element/CKEDITOR.htmlParser.element} element The widget element to be wrapped. + * @param {String} [widgetName] The name of the widget definition. Defaults to element's `data-widget` + * attribute value. + * @returns {CKEDITOR.dom.element/CKEDITOR.htmlParser.element} The wrapper element or `null` if + * the widget definition of this name is not registered. + */ + wrapElement: function( element, widgetName ) { + var wrapper = null, + widgetDef, + isInline; + + if ( element instanceof CKEDITOR.dom.element ) { + widgetDef = this.registered[ widgetName || element.data( 'widget' ) ]; + if ( !widgetDef ) + return null; + + // Do not wrap already wrapped element. + wrapper = element.getParent(); + if ( wrapper && wrapper.type == CKEDITOR.NODE_ELEMENT && wrapper.data( 'cke-widget-wrapper' ) ) + return wrapper; + + // If attribute isn't already set (e.g. for pasted widget), set it. + if ( !element.hasAttribute( 'data-cke-widget-keep-attr' ) ) + element.data( 'cke-widget-keep-attr', element.data( 'widget' ) ? 1 : 0 ); + if ( widgetName ) + element.data( 'widget', widgetName ); + + isInline = isWidgetInline( widgetDef, element.getName() ); + + wrapper = new CKEDITOR.dom.element( isInline ? 'span' : 'div' ); + wrapper.setAttributes( getWrapperAttributes( isInline ) ); + + wrapper.data( 'cke-display-name', widgetDef.pathName ? widgetDef.pathName : element.getName() ); + + // Replace element unless it is a detached one. + if ( element.getParent( true ) ) + wrapper.replace( element ); + element.appendTo( wrapper ); + } + else if ( element instanceof CKEDITOR.htmlParser.element ) { + widgetDef = this.registered[ widgetName || element.attributes[ 'data-widget' ] ]; + if ( !widgetDef ) + return null; + + wrapper = element.parent; + if ( wrapper && wrapper.type == CKEDITOR.NODE_ELEMENT && wrapper.attributes[ 'data-cke-widget-wrapper' ] ) + return wrapper; + + // If attribute isn't already set (e.g. for pasted widget), set it. + if ( !( 'data-cke-widget-keep-attr' in element.attributes ) ) + element.attributes[ 'data-cke-widget-keep-attr' ] = element.attributes[ 'data-widget' ] ? 1 : 0; + if ( widgetName ) + element.attributes[ 'data-widget' ] = widgetName; + + isInline = isWidgetInline( widgetDef, element.name ); + + wrapper = new CKEDITOR.htmlParser.element( isInline ? 'span' : 'div', getWrapperAttributes( isInline ) ); + + wrapper.attributes[ 'data-cke-display-name' ] = widgetDef.pathName ? widgetDef.pathName : element.name; + + var parent = element.parent, + index; + + // Don't detach already detached element. + if ( parent ) { + index = element.getIndex(); + element.remove(); + } + + wrapper.add( element ); + + // Insert wrapper fixing DOM (splitting parents if wrapper is not allowed inside them). + parent && insertElement( parent, index, wrapper ); + } + + return wrapper; + }, + + // Expose for tests. + _tests_getNestedEditable: getNestedEditable, + _tests_createEditableFilter: createEditableFilter + }; + + CKEDITOR.event.implementOn( Repository.prototype ); + + /** + * An event fired when a widget instance is created, but before it is fully initialized. + * + * @event instanceCreated + * @param {CKEDITOR.plugins.widget} data The widget instance. + */ + + /** + * An event fired when a widget instance was destroyed. + * + * See also {@link CKEDITOR.plugins.widget#event-destroy}. + * + * @event instanceDestroyed + * @param {CKEDITOR.plugins.widget} data The widget instance. + */ + + /** + * An event fired to trigger the selection check. + * + * See the {@link #method-checkSelection} method. + * + * @event checkSelection + */ + + /** + * An event fired by the the {@link #method-checkWidgets} method. + * + * It can be canceled in order to stop the {@link #method-checkWidgets} + * method execution or the event listener can modify the method's options. + * + * @event checkWidgets + * @param [data] + * @param {Boolean} [data.initOnlyNew] Initialize widgets only on newly wrapped + * widget elements (those which still have the `cke_widget_new` class). When this option is + * set to `true`, widgets which were invalidated (e.g. by replacing with a cloned DOM structure) + * will not be reinitialized. This makes the check faster. + * @param {Boolean} [data.focusInited] If only one widget is initialized by + * the method, it will be focused. + */ + + + /** + * An instance of a widget. Together with {@link CKEDITOR.plugins.widget.repository} these + * two classes constitute the core of the Widget System. + * + * Note that neither the repository nor the widget instances can be created by using their constructors. + * A repository instance is automatically set up by the Widget plugin and is accessible under + * {@link CKEDITOR.editor#widgets}, while widget instances are created and destroyed by the repository. + * + * To create a widget, first you need to {@link CKEDITOR.plugins.widget.repository#add register} its + * {@link CKEDITOR.plugins.widget.definition definition}: + * + * editor.widgets.add( 'simplebox', { + * upcast: function( element ) { + * // Defines which elements will become widgets. + * if ( element.hasClass( 'simplebox' ) ) + * return true; + * }, + * init: function() { + * // ... + * } + * } ); + * + * Once the widget definition is registered, widgets will be automatically + * created when loading data: + * + * editor.setData( '
          foo
          ', function() { + * console.log( editor.widgets.instances ); // -> An object containing one instance. + * } ); + * + * It is also possible to create instances during runtime by using a command + * (if a {@link CKEDITOR.plugins.widget.definition#template} property was defined): + * + * // You can execute an automatically defined command to + * // insert a new simplebox widget or edit the one currently focused. + * editor.execCommand( 'simplebox' ); + * + * Or in a completely custom way: + * + * var element = editor.createElement( 'div' ); + * editor.insertElement( element ); + * var widget = editor.widgets.initOn( element, 'simplebox' ); + * + * @since 4.3 + * @class CKEDITOR.plugins.widget + * @mixins CKEDITOR.event + * @extends CKEDITOR.plugins.widget.definition + * @constructor Creates an instance of the widget class. Do not use it directly, but instead initialize widgets + * by using the {@link CKEDITOR.plugins.widget.repository#initOn} method or by the upcasting system. + * @param {CKEDITOR.plugins.widget.repository} widgetsRepo + * @param {Number} id Unique ID of this widget instance. + * @param {CKEDITOR.dom.element} element The widget element. + * @param {CKEDITOR.plugins.widget.definition} widgetDef Widget's registered definition. + * @param [startupData] Initial widget data. This data object will overwrite the default data and + * the data loaded from the DOM. + */ + function Widget( widgetsRepo, id, element, widgetDef, startupData ) { + var editor = widgetsRepo.editor; + + // Extend this widget with widgetDef-specific methods and properties. + CKEDITOR.tools.extend( this, widgetDef, { + /** + * The editor instance. + * + * @readonly + * @property {CKEDITOR.editor} + */ + editor: editor, + + /** + * This widget's unique (per editor instance) ID. + * + * @readonly + * @property {Number} + */ + id: id, + + /** + * Whether this widget is an inline widget (based on an inline element unless + * forced otherwise by {@link CKEDITOR.plugins.widget.definition#inline}). + * + * **Note:** This option does not allow to turn a block element into an inline widget. + * However, it makes it possible to turn an inline element into a block widget or to + * force a correct type in case when automatic recognition fails. + * + * @readonly + * @property {Boolean} + */ + inline: element.getParent().getName() == 'span', + + /** + * The widget element — the element on which the widget was initialized. + * + * @readonly + * @property {CKEDITOR.dom.element} element + */ + element: element, + + /** + * Widget's data object. + * + * The data can only be set by using the {@link #setData} method. + * Changes made to the data fire the {@link #event-data} event. + * + * @readonly + */ + data: CKEDITOR.tools.extend( {}, typeof widgetDef.defaults == 'function' ? widgetDef.defaults() : widgetDef.defaults ), + + /** + * Indicates if a widget is data-ready. Set to `true` when data from all sources + * ({@link CKEDITOR.plugins.widget.definition#defaults}, set in the + * {@link #init} method, loaded from the widget's element and startup data coming from the constructor) + * are finally loaded. This is immediately followed by the first {@link #event-data}. + * + * @readonly + */ + dataReady: false, + + /** + * Whether a widget instance was initialized. This means that: + * + * * An instance was created, + * * Its properties were set, + * * The `init` method was executed. + * + * **Note**: The first {@link #event-data} event could not be fired yet which + * means that the widget's DOM has not been set up yet. Wait for the {@link #event-ready} + * event to be notified when a widget is fully initialized and ready. + * + * **Note**: Use the {@link #isInited} method to check whether a widget is initialized and + * has not been destroyed. + * + * @readonly + */ + inited: false, + + /** + * Whether a widget instance is ready. This means that the widget is {@link #inited} and + * that its DOM was finally set up. + * + * **Note:** Use the {@link #isReady} method to check whether a widget is ready and + * has not been destroyed. + * + * @readonly + */ + ready: false, + + // Revert what widgetDef could override (automatic #edit listener). + edit: Widget.prototype.edit, + + /** + * The nested editable element which is currently focused. + * + * @readonly + * @property {CKEDITOR.plugins.widget.nestedEditable} + */ + focusedEditable: null, + + /** + * The widget definition from which this instance was created. + * + * @readonly + * @property {CKEDITOR.plugins.widget.definition} definition + */ + definition: widgetDef, + + /** + * Link to the widget repository which created this instance. + * + * @readonly + * @property {CKEDITOR.plugins.widget.repository} repository + */ + repository: widgetsRepo, + + draggable: widgetDef.draggable !== false, + + // WAAARNING: Overwrite widgetDef's priv object, because otherwise violent unicorn's gonna visit you. + _: { + downcastFn: ( widgetDef.downcast && typeof widgetDef.downcast == 'string' ) ? + widgetDef.downcasts[ widgetDef.downcast ] : widgetDef.downcast + } + }, true ); + + /** + * An object of widget component elements. + * + * For every `partName => selector` pair in {@link CKEDITOR.plugins.widget.definition#parts}, + * one `partName => element` pair is added to this object during the widget initialization. + * + * @readonly + * @property {Object} parts + */ + + /** + * The template which will be used to create a new widget element (when the widget's command is executed). + * It will be populated with {@link #defaults default values}. + * + * @readonly + * @property {CKEDITOR.template} template + */ + + /** + * The widget wrapper — a non-editable `div` or `span` element (depending on {@link #inline}) + * which is a parent of the {@link #element} and widget compontents like the drag handler and the {@link #mask}. + * It is the outermost widget element. + * + * @readonly + * @property {CKEDITOR.dom.element} wrapper + */ + + widgetsRepo.fire( 'instanceCreated', this ); + + setupWidget( this, widgetDef ); + + this.init && this.init(); + + // Finally mark widget as inited. + this.inited = true; + + setupWidgetData( this, startupData ); + + // If at some point (e.g. in #data listener) widget hasn't been destroyed + // and widget is already attached to document then fire #ready. + if ( this.isInited() && editor.editable().contains( this.wrapper ) ) { + this.ready = true; + this.fire( 'ready' ); + } + } + + Widget.prototype = { + /** + * Destroys this widget instance. + * + * Use {@link CKEDITOR.plugins.widget.repository#destroy} when possible instead of this method. + * + * This method fires the {#event-destroy} event. + * + * @param {Boolean} [offline] Whether a widget is offline (detached from the DOM tree) — + * in this case the DOM (attributes, classes, etc.) will not be cleaned up. + */ + destroy: function( offline ) { + var editor = this.editor; + + this.fire( 'destroy' ); + + if ( this.editables ) { + for ( var name in this.editables ) + this.destroyEditable( name, offline ); + } + + if ( !offline ) { + if ( this.element.data( 'cke-widget-keep-attr' ) == '0' ) + this.element.removeAttribute( 'data-widget' ); + this.element.removeAttributes( [ 'data-cke-widget-data', 'data-cke-widget-keep-attr' ] ); + this.element.removeClass( 'cke_widget_element' ); + this.element.replace( this.wrapper ); + } + + this.wrapper = null; + }, + + /** + * Destroys a nested editable. + * + * @param {String} editableName Nested editable name. + * @param {Boolean} [offline] See {@link #method-destroy} method. + */ + destroyEditable: function( editableName, offline ) { + var editable = this.editables[ editableName ]; + + editable.removeListener( 'focus', onEditableFocus ); + editable.removeListener( 'blur', onEditableBlur ); + this.editor.focusManager.remove( editable ); + + if ( !offline ) { + editable.removeClass( 'cke_widget_editable' ); + editable.removeClass( 'cke_widget_editable_focused' ); + editable.removeAttributes( [ 'contenteditable', 'data-cke-widget-editable', 'data-cke-enter-mode' ] ); + } + + delete this.editables[ editableName ]; + }, + + /** + * Starts widget editing. + * + * This method fires the {@link CKEDITOR.plugins.widget#event-edit} event + * which may be cancelled in order to prevent it from opening a dialog window. + * + * The dialog window name is obtained from the event's data `dialog` property or + * from {@link CKEDITOR.plugins.widget.definition#dialog}. + */ + edit: function() { + var evtData = { dialog: this.dialog }, + that = this; + + // Edit event was blocked, but there's no dialog to be automatically opened. + if ( this.fire( 'edit', evtData ) === false || !evtData.dialog ) + return; + + this.editor.openDialog( evtData.dialog, function( dialog ) { + var showListener, + okListener; + + // Allow to add a custom dialog handler. + if ( that.fire( 'dialog', dialog ) === false ) + return; + + showListener = dialog.on( 'show', function() { + dialog.setupContent( that ); + } ); + + okListener = dialog.on( 'ok', function() { + // Commit dialog's fields, but prevent from + // firing data event for every field. Fire only one, + // bulk event at the end. + var dataChanged, + dataListener = that.on( 'data', function( evt ) { + dataChanged = 1; + evt.cancel(); + }, null, null, 0 ); + + // Create snapshot preceeding snapshot with changed widget... + // TODO it should not be required, but it is and I found similar + // code in dialog#ok listener in dialog/plugin.js. + that.editor.fire( 'saveSnapshot' ); + dialog.commitContent( that ); + + dataListener.removeListener(); + if ( dataChanged ) { + that.fire( 'data', that.data ); + that.editor.fire( 'saveSnapshot' ); + } + } ); + + dialog.once( 'hide', function() { + showListener.removeListener(); + okListener.removeListener(); + } ); + } ); + }, + + /** + * Initializes a nested editable. + * + * **Note**: Only elements from {@link CKEDITOR.dtd#$editable} may become editables. + * + * @param {String} editableName The nested editable name. + * @param {CKEDITOR.plugins.widget.nestedEditable.definition} definition The definition of the nested editable. + * @returns {Boolean} Whether an editable was successfully initialized. + */ + initEditable: function( editableName, definition ) { + var editable = this.wrapper.findOne( definition.selector ); + + if ( editable && editable.is( CKEDITOR.dtd.$editable ) ) { + editable = new NestedEditable( this.editor, editable, { + filter: createEditableFilter.call( this.repository, this.name, editableName, definition ) + } ); + this.editables[ editableName ] = editable; + + editable.setAttributes( { + contenteditable: 'true', + 'data-cke-widget-editable': editableName, + 'data-cke-enter-mode': editable.enterMode + } ); + + if ( editable.filter ) + editable.data( 'cke-filter', editable.filter.id ); + + editable.addClass( 'cke_widget_editable' ); + // This class may be left when d&ding widget which + // had focused editable. Clean this class here, not in + // cleanUpWidgetElement for performance and code size reasons. + editable.removeClass( 'cke_widget_editable_focused' ); + + if ( definition.pathName ) + editable.data( 'cke-display-name', definition.pathName ); + + this.editor.focusManager.add( editable ); + editable.on( 'focus', onEditableFocus, this ); + CKEDITOR.env.ie && editable.on( 'blur', onEditableBlur, this ); + + // Finally, process editable's data. This data wasn't processed when loading + // editor's data, becuase they need to be processed separately, with its own filters and settings. + editable.setData( editable.getHtml() ); + + return true; + } + + return false; + }, + + /** + * Checks if a widget has already been initialized and has not been destroyed yet. + * + * See {@link #inited} for more details. + * + * @returns {Boolean} + */ + isInited: function() { + return !!( this.wrapper && this.inited ); + }, + + /** + * Checks if a widget is ready and has not been destroyed yet. + * + * See {@link #property-ready} for more details. + * + * @returns {Boolean} + */ + isReady: function() { + return this.isInited() && this.ready; + }, + + /** + * Focuses a widget by selecting it. + */ + focus: function() { + var sel = this.editor.getSelection(); + + // Fake the selection before focusing editor, to avoid unpreventable viewports scrolling + // on Webkit/Blink/IE which is done because there's no selection or selection was somewhere else than widget. + if ( sel ) + sel.fake( this.wrapper ); + + // Always focus editor (not only when focusManger.hasFocus is false) (because of #10483). + this.editor.focus(); + }, + + /** + * Sets widget value(s) in the {@link #property-data} object. + * If the given value(s) modifies current ones, the {@link #event-data} event is fired. + * + * this.setData( 'align', 'left' ); + * this.data.align; // -> 'left' + * + * this.setData( { align: 'right', opened: false } ); + * this.data.align; // -> 'right' + * this.data.opened; // -> false + * + * Set values are stored in {@link #element}'s attribute (`data-cke-widget-data`), + * in a JSON string, therefore {@link #property-data} should contain + * only serializable data. + * + * @param {String/Object} keyOrData + * @param {Object} value + * @chainable + */ + setData: function( key, value ) { + var data = this.data, + modified = 0; + + if ( typeof key == 'string' ) { + if ( data[ key ] !== value ) { + data[ key ] = value; + modified = 1; + } + } + else { + var newData = key; + + for ( key in newData ) { + if ( data[ key ] !== newData[ key ] ) { + modified = 1; + data[ key ] = newData[ key ]; + } + } + } + + // Block firing data event and overwriting data element before setupWidgetData is executed. + if ( modified && this.dataReady ) { + writeDataToElement( this ); + this.fire( 'data', data ); + } + + return this; + }, + + /** + * Changes the widget's focus state. This method is executed automatically after + * a widget has been focused by the {@link #method-focus} method or a selection was moved + * out of the widget. + * + * @param {Boolean} selected Whether to select or deselect this widget. + * @chainable + */ + setFocused: function( focused ) { + this.wrapper[ focused ? 'addClass' : 'removeClass' ]( 'cke_widget_focused' ); + this.fire( focused ? 'focus' : 'blur' ); + return this; + }, + + /** + * Changes the widget's select state. This method is executed automatically after + * a widget has been selected by the {@link #method-focus} method or the selection + * was moved out of widget. + * + * @param {Boolean} selected Whether to select or deselect this widget. + * @chainable + */ + setSelected: function( selected ) { + this.wrapper[ selected ? 'addClass' : 'removeClass' ]( 'cke_widget_selected' ); + this.fire( selected ? 'select' : 'deselect' ); + return this; + }, + + /** + * Repositions drag handler according to the widget's element position. Should be called from events, like mouseover. + */ + updateDragHandlerPosition: function() { + var editor = this.editor, + domElement = this.element.$, + oldPos = this._.dragHandlerOffset, + newPos = { + x: domElement.offsetLeft, + y: domElement.offsetTop - DRAG_HANDLER_SIZE + }; + + if ( oldPos && newPos.x == oldPos.x && newPos.y == oldPos.y ) + return; + + // We need to make sure that dirty state is not changed (#11487). + var initialDirty = editor.checkDirty(); + + editor.fire( 'lockSnapshot' ); + this.dragHandlerContainer.setStyles( { + top: newPos.y + 'px', + left: newPos.x + 'px' + } ); + editor.fire( 'unlockSnapshot' ); + !initialDirty && editor.resetDirty(); + + this._.dragHandlerOffset = newPos; + } + }; + + CKEDITOR.event.implementOn( Widget.prototype ); + + /** + * An event fired when a widget is ready (fully initialized). This event is fired after: + * + * * {@link #init} is called, + * * The first {@link #event-data} event is fired, + * * A widget is attached to the document. + * + * Therefore, in case of widget creation with a command which opens a dialog window, this event + * will be delayed after the dialog window is closed and the widget is finally inserted into the document. + * + * **Note**: If your widget does not use automatic dialog window binding (i.e. you open the dialog window manually) + * or another situation in which the widget wrapper is not attached to document at the time when it is + * initialized occurs, you need to take care of firing {@link #event-ready} yourself. + * + * See also {@link #property-ready} and {@link #property-inited} properties, and + * {@link #isReady} and {@link #isInited} methods. + * + * @event ready + */ + + /** + * An event fired when a widget is about to be destroyed, but before it is + * fully torn down. + * + * @event destroy + */ + + /** + * An event fired when a widget is focused. + * + * Widget can be focused by executing {@link #method-focus}. + * + * @event focus + */ + + /** + * An event fired when a widget is blurred. + * + * @event blur + */ + + /** + * An event fired when a widget is selected. + * + * @event select + */ + + /** + * An event fired when a widget is deselected. + * + * @event deselect + */ + + /** + * An event fired by the {@link #method-edit} method. It can be canceled + * in order to stop the default action (opening a dialog window and/or + * {@link CKEDITOR.plugins.widget.repository#finalizeCreation finalizing widget creation}). + * + * @event edit + * @param data + * @param {String} data.dialog Defaults to {@link CKEDITOR.plugins.widget.definition#dialog} + * and can be changed or set by the listener. + */ + + /** + * An event fired when a dialog window for widget editing is opened. + * This event can be cancelled in order to handle the editing dialog in a custom manner. + * + * @event dialog + * @param {CKEDITOR.dialog} data The opened dialog window instance. + */ + + /** + * An event fired when a key is pressed on a focused widget. + * This event is forwarded from the {@link CKEDITOR.editor#key} event and + * has the ability to block editor keystrokes if it is cancelled. + * + * @event key + * @param data + * @param {Number} data.keyCode A number representing the key code (or combination). + */ + + /** + * An event fired when a widget is double clicked. + * + * @event doubleclick + * @param data + * @param {CKEDITOR.dom.element} data.element The double clicked element. + */ + + /** + * An event fired when the context menu is opened for a widget. + * + * @event contextMenu + * @param data The object contaning context menu options to be added + * for this widget. See {@link CKEDITOR.plugins.contextMenu#addListener}. + */ + + /** + * An event fired when the widget data changed. See the {@link #setData} method and the {@link #property-data} property. + * + * @event data + */ + + + + /** + * The wrapper class for editable elements inside widgets. + * + * Do not use directly. Use {@link CKEDITOR.plugins.widget.definition#editables} or + * {@link CKEDITOR.plugins.widget#initEditable}. + * + * @class CKEDITOR.plugins.widget.nestedEditable + * @extends CKEDITOR.dom.element + * @constructor + * @param {CKEDITOR.editor} editor + * @param {CKEDITOR.dom.element} element + * @param config + * @param {CKEDITOR.filter} [config.filter] + */ + function NestedEditable( editor, element, config ) { + // Call the base constructor. + CKEDITOR.dom.element.call( this, element.$ ); + this.editor = editor; + var filter = this.filter = config.filter; + + // If blockless editable - always use BR mode. + if ( !CKEDITOR.dtd[ this.getName() ].p ) + this.enterMode = this.shiftEnterMode = CKEDITOR.ENTER_BR; + else { + this.enterMode = filter ? filter.getAllowedEnterMode( editor.enterMode ) : editor.enterMode; + this.shiftEnterMode = filter ? filter.getAllowedEnterMode( editor.shiftEnterMode, true ) : editor.shiftEnterMode; + } + } + + NestedEditable.prototype = CKEDITOR.tools.extend( CKEDITOR.tools.prototypedCopy( CKEDITOR.dom.element.prototype ), { + /** + * Sets the editable data. The data will be passed through the {@link CKEDITOR.editor#dataProcessor} + * and the {@link CKEDITOR.editor#filter}. This ensures that the data was filtered and prepared to be + * edited like the {@link CKEDITOR.editor#method-setData editor data}. + * + * @param {String} data + */ + setData: function( data ) { + data = this.editor.dataProcessor.toHtml( data, { + context: this.getName(), + filter: this.filter, + enterMode: this.enterMode + } ); + this.setHtml( data ); + }, + + /** + * Gets the editable data. Like {@link #setData}, this method will process and filter the data. + * + * @returns {String} + */ + getData: function() { + return this.editor.dataProcessor.toDataFormat( this.getHtml(), { + context: this.getName(), + filter: this.filter, + enterMode: this.enterMode + } ); + } + } ); + + /** + * The editor instance. + * + * @readonly + * @property {CKEDITOR.editor} editor + */ + + /** + * The filter instance if allowed content rules were defined. + * + * @readonly + * @property {CKEDITOR.filter} filter + */ + + /** + * The enter mode active in this editable. + * It is determined from editable's name (whether it is a blockless editable), + * its allowed content rules (if defined) and the default editor's mode. + * + * @readonly + * @property {Number} enterMode + */ + + /** + * The shift enter move active in this editable. + * + * @readonly + * @property {Number} shiftEnterMode + */ + + + // + // REPOSITORY helpers ----------------------------------------------------- + // + + function addWidgetButtons( editor ) { + var widgets = editor.widgets.registered, + widget, + widgetName, + widgetButton; + + for ( widgetName in widgets ) { + widget = widgets[ widgetName ]; + + // Create button if defined. + widgetButton = widget.button; + if ( widgetButton && editor.ui.addButton ) { + editor.ui.addButton( CKEDITOR.tools.capitalize( widget.name, true ), { + label: widgetButton, + command: widget.name, + toolbar: 'insert,10' + } ); + } + } + } + + // Create a command creating and editing widget. + // + // @param editor + // @param {CKEDITOR.plugins.widget.definition} widgetDef + function addWidgetCommand( editor, widgetDef ) { + editor.addCommand( widgetDef.name, { + exec: function() { + var focused = editor.widgets.focused; + // If a widget of the same type is focused, start editing. + if ( focused && focused.name == widgetDef.name ) + focused.edit(); + // Otherwise... + // ... use insert method is was defined. + else if ( widgetDef.insert ) + widgetDef.insert(); + // ... or create a brand-new widget from template. + else if ( widgetDef.template ) { + var defaults = typeof widgetDef.defaults == 'function' ? widgetDef.defaults() : widgetDef.defaults, + element = CKEDITOR.dom.element.createFromHtml( widgetDef.template.output( defaults ) ), + instance, + wrapper = editor.widgets.wrapElement( element, widgetDef.name ), + temp = new CKEDITOR.dom.documentFragment( wrapper.getDocument() ); + + // Append wrapper to a temporary document. This will unify the environment + // in which #data listeners work when creating and editing widget. + temp.append( wrapper ); + instance = editor.widgets.initOn( element, widgetDef ); + + // Instance could be destroyed during initialization. + // In this case finalize creation if some new widget + // was left in temporary document fragment. + if ( !instance ) { + finalizeCreation(); + return; + } + + // Listen on edit to finalize widget insertion. + // + // * If dialog was set, then insert widget after dialog was successfully saved or destroy this + // temporary instance. + // * If dialog wasn't set and edit wasn't canceled, insert widget. + var editListener = instance.once( 'edit', function( evt ) { + if ( evt.data.dialog ) { + instance.once( 'dialog', function( evt ) { + var dialog = evt.data, + okListener, + cancelListener; + + // Finalize creation AFTER (20) new data was set. + okListener = dialog.once( 'ok', finalizeCreation, null, null, 20 ); + + cancelListener = dialog.once( 'cancel', function() { + editor.widgets.destroy( instance, true ); + } ); + + dialog.once( 'hide', function() { + okListener.removeListener(); + cancelListener.removeListener(); + } ); + } ); + } + // Dialog hasn't been set, so insert widget now. + else + finalizeCreation(); + }, null, null, 999 ); + + instance.edit(); + + // Remove listener in case someone canceled it before this + // listener was executed. + editListener.removeListener(); + } + + function finalizeCreation() { + editor.widgets.finalizeCreation( temp ); + } + }, + + refresh: function( editor, path ) { + // Disable widgets' commands inside nested editables - + // check if blockLimit is a nested editable or a descendant of any. + this.setState( getNestedEditable( editor.editable(), path.blockLimit ) ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_OFF ); + }, + // A hack to force command refreshing on context change. + context: 'div', + + allowedContent: widgetDef.allowedContent, + requiredContent: widgetDef.requiredContent, + contentForms: widgetDef.contentForms, + contentTransformations: widgetDef.contentTransformations + } ); + } + + function addWidgetProcessors( widgetsRepo, widgetDef ) { + var upcast = widgetDef.upcast, + upcasts; + + if ( !upcast ) + return; + + // Multiple upcasts defined in string. + if ( typeof upcast == 'string' ) { + upcasts = upcast.split( ',' ); + while ( upcasts.length ) + widgetsRepo._.upcasts.push( [ widgetDef.upcasts[ upcasts.pop() ], widgetDef.name ] ); + } + // Single rule which is automatically activated. + else + widgetsRepo._.upcasts.push( [ upcast, widgetDef.name ] ); + } + + function blurWidget( widgetsRepo, widget ) { + widgetsRepo.focused = null; + + if ( widget.isInited() ) { + // Widget could be destroyed in the meantime - e.g. data could be set. + widgetsRepo.fire( 'widgetBlurred', { widget: widget } ); + widget.setFocused( false ); + } + } + + function checkWidgets( evt ) { + var options = evt.data; + + if ( this.editor.mode != 'wysiwyg' ) + return; + + var editable = this.editor.editable(), + instances = this.instances, + newInstances, i, count, wrapper; + + if ( !editable ) + return; + + // Remove widgets which have no corresponding elements in DOM. + for ( i in instances ) { + if ( !editable.contains( instances[ i ].wrapper ) ) + this.destroy( instances[ i ], true ); + } + + // Init on all (new) if initOnlyNew option was passed. + if ( options && options.initOnlyNew ) + newInstances = this.initOnAll(); + else { + var wrappers = editable.find( '.cke_widget_wrapper' ); + newInstances = []; + + // Create widgets on existing wrappers if they do not exists. + for ( i = 0, count = wrappers.count(); i < count; i++ ) { + wrapper = wrappers.getItem( i ); + + // Check if there's no instance for this widget and that + // wrapper is not inside some temporary element like copybin (#11088). + if ( !this.getByElement( wrapper, true ) && !findParent( wrapper, isDomTemp ) ) { + // Add cke_widget_new class because otherwise + // widget will not be created on such wrapper. + wrapper.addClass( 'cke_widget_new' ); + newInstances.push( this.initOn( wrapper.getFirst( isDomWidgetElement ) ) ); + } + } + } + + // If only single widget was initialized and focusInited was passed, focus it. + if ( options && options.focusInited && newInstances.length == 1 ) + newInstances[ 0 ].focus(); + } + + // Unwraps widget element and clean up element. + // + // This function is used to clean up pasted widgets. + // It should have similar result to widget#destroy plus + // some additional adjustments, specific for pasting. + // + // @param {CKEDITOR.htmlParser.element} el + function cleanUpWidgetElement( el ) { + var parent = el.parent; + if ( parent.type == CKEDITOR.NODE_ELEMENT && parent.attributes[ 'data-cke-widget-wrapper' ] ) + parent.replaceWith( el ); + } + + // Similar to cleanUpWidgetElement, but works on DOM and finds + // widget elements by its own. + // + // Unlike cleanUpWidgetElement it will wrap element back. + // + // @param {CKEDITOR.dom.element} container + function cleanUpAllWidgetElements( widgetsRepo, container ) { + var wrappers = container.find( '.cke_widget_wrapper' ), + wrapper, element, + i = 0, + l = wrappers.count(); + + for ( ; i < l; ++i ) { + wrapper = wrappers.getItem( i ); + element = wrapper.getFirst( isDomWidgetElement ); + // If wrapper contains widget element - unwrap it and wrap again. + if ( element.type == CKEDITOR.NODE_ELEMENT && element.data( 'widget' ) ) { + element.replace( wrapper ); + widgetsRepo.wrapElement( element ); + } + // Otherwise - something is wrong... clean this up. + else + wrapper.remove(); + } + } + + // Creates {@link CKEDITOR.filter} instance for given widget, editable and rules. + // + // Once filter for widget-editable pair is created it is cached, so the same instance + // will be returned when method is executed again. + // + // @param {String} widgetName + // @param {String} editableName + // @param {CKEDITOR.plugins.widget.nestedEditableDefinition} editableDefinition The nested editable definition. + // @returns {CKEDITOR.filter} Filter instance or `null` if rules are not defined. + // @context CKEDITOR.plugins.widget.repository + function createEditableFilter( widgetName, editableName, editableDefinition ) { + if ( !editableDefinition.allowedContent ) + return null; + + var editables = this._.filters[ widgetName ]; + + if ( !editables ) + this._.filters[ widgetName ] = editables = {}; + + var filter = editables[ editableName ]; + + if ( !filter ) + editables[ editableName ] = filter = new CKEDITOR.filter( editableDefinition.allowedContent ); + + return filter; + } + + // Creates an iterator function which when executed on all + // elements in DOM tree will gather elements that should be wrapped + // and initialized as widgets. + function createUpcastIterator( widgetsRepo ) { + var toBeWrapped = [], + upcasts = widgetsRepo._.upcasts, + upcastCallbacks = widgetsRepo._.upcastCallbacks; + + return { + toBeWrapped: toBeWrapped, + + iterator: function( element ) { + var upcast, upcasted, + data, + i, + upcastsLength, + upcastCallbacksLength; + + // Wrapper found - find widget element, add it to be + // cleaned up (unwrapped) and wrapped and stop iterating in this branch. + if ( 'data-cke-widget-wrapper' in element.attributes ) { + element = element.getFirst( isParserWidgetElement ); + + if ( element ) + toBeWrapped.push( [ element ] ); + + // Do not iterate over descendants. + return false; + } + // Widget element found - add it to be cleaned up (just in case) + // and wrapped and stop iterating in this branch. + else if ( 'data-widget' in element.attributes ) { + toBeWrapped.push( [ element ] ); + + // Do not iterate over descendants. + return false; + } + else if ( ( upcastsLength = upcasts.length ) ) { + // Ignore elements with data-cke-widget-upcasted to avoid multiple upcasts (#11533). + // Do not iterate over descendants. + if ( element.attributes[ 'data-cke-widget-upcasted' ] ) + return false; + + // Check element with upcast callbacks first. + // If any of them return false abort upcasting. + for ( i = 0, upcastCallbacksLength = upcastCallbacks.length; i < upcastCallbacksLength; ++i ) { + if ( upcastCallbacks[ i ]( element ) === false ) + return; + // Return nothing in order to continue iterating over ascendants. + // See http://dev.ckeditor.com/ticket/11186#comment:6 + } + + for ( i = 0; i < upcastsLength; ++i ) { + upcast = upcasts[ i ]; + data = {}; + + if ( ( upcasted = upcast[ 0 ]( element, data ) ) ) { + // If upcast function returned element, upcast this one. + // It can be e.g. a new element wrapping the original one. + if ( upcasted instanceof CKEDITOR.htmlParser.element ) + element = upcasted; + + // Set initial data attr with data from upcast method. + element.attributes[ 'data-cke-widget-data' ] = JSON.stringify( data ); + element.attributes[ 'data-cke-widget-upcasted' ] = 1; + + toBeWrapped.push( [ element, upcast[ 1 ] ] ); + + // Do not iterate over descendants. + return false; + } + } + } + } + }; + } + + // Finds a first parent that matches query. + // + // @param {CKEDITOR.dom.element} element + // @param {Function} query + function findParent( element, query ) { + var parent = element; + + while ( ( parent = parent.getParent() ) ) { + if ( query( parent ) ) + return true; + } + return false; + } + + // Gets nested editable if node is its descendant or the editable itself. + // + // @param {CKEDITOR.dom.element} guard Stop ancestor search on this node (usually editor's editable). + // @param {CKEDITOR.dom.node} node Start search from this node. + // @returns {CKEDITOR.dom.element} Element or null. + function getNestedEditable( guard, node ) { + if ( !node || node.equals( guard ) ) + return null; + + if ( isDomNestedEditable( node ) ) + return node; + + return getNestedEditable( guard, node.getParent() ); + } + + function getWrapperAttributes( inlineWidget ) { + return { + // tabindex="-1" means that it can receive focus by code. + tabindex: -1, + contenteditable: 'false', + 'data-cke-widget-wrapper': 1, + 'data-cke-filter': 'off', + // Class cke_widget_new marks widgets which haven't been initialized yet. + 'class': 'cke_widget_wrapper cke_widget_new cke_widget_' + + ( inlineWidget ? 'inline' : 'block' ) + }; + } + + // Inserts element at given index. + // It will check DTD and split ancestor elements up to the first + // that can contain this element. + // + // @param {CKEDITOR.htmlParser.element} parent + // @param {Number} index + // @param {CKEDITOR.htmlParser.element} element + function insertElement( parent, index, element ) { + // Do not split doc fragment... + if ( parent.type == CKEDITOR.NODE_ELEMENT ) { + var parentAllows = CKEDITOR.dtd[ parent.name ]; + // Parent element is known (included in DTD) and cannot contain + // this element. + if ( parentAllows && !parentAllows[ element.name ] ) { + var parent2 = parent.split( index ), + parentParent = parent.parent; + + // Element will now be inserted at right parent's index. + index = parent2.getIndex(); + + // If left part of split is empty - remove it. + if ( !parent.children.length ) { + index -= 1; + parent.remove(); + } + + // If right part of split is empty - remove it. + if ( !parent2.children.length ) + parent2.remove(); + + // Try inserting as grandpas' children. + return insertElement( parentParent, index, element ); + } + } + + // Finally we can add this element. + parent.add( element, index ); + } + + // @param {CKEDITOR.htmlParser.element} + function isParserWidgetElement( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && !!element.attributes[ 'data-widget' ]; + } + + // @param {CKEDITOR.dom.element} + function isDomWidgetElement( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && element.hasAttribute( 'data-widget' ); + } + + // Whether for this definition and element widget should be created in inline or block mode. + function isWidgetInline( widgetDef, elementName ) { + return typeof widgetDef.inline == 'boolean' ? widgetDef.inline : !!CKEDITOR.dtd.$inline[ elementName ]; + } + + // @param {CKEDITOR.htmlParser.element} + function isParserWidgetWrapper( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && element.attributes[ 'data-cke-widget-wrapper' ]; + } + + // @param {CKEDITOR.dom.element} + function isDomWidgetWrapper( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && element.hasAttribute( 'data-cke-widget-wrapper' ); + } + + // @param {CKEDITOR.dom.element} + function isDomNestedEditable( node ) { + return node.type == CKEDITOR.NODE_ELEMENT && node.hasAttribute( 'data-cke-widget-editable' ); + } + + // @param {CKEDITOR.dom.element} + function isDomTemp( element ) { + return element.hasAttribute( 'data-cke-temp' ); + } + + // @param {CKEDITOR.dom.element} + function isDomDragHandler( element ) { + return element.type == CKEDITOR.NODE_ELEMENT && element.hasAttribute( 'data-cke-widget-drag-handler' ); + } + + function finalizeNativeDrop( editor, sourceWidget, range ) { + // Save the snapshot with the state before moving widget. + // Focus widget, so when we'll undo the DnD, widget will be focused. + sourceWidget.focus(); + editor.fire( 'saveSnapshot' ); + + // Lock snapshot to group all steps of moving widget from the original place to the new one. + editor.fire( 'lockSnapshot', { dontUpdate: true } ); + + range.select(); + + var widgetHtml = sourceWidget.wrapper.getOuterHtml(); + sourceWidget.wrapper.remove(); + editor.widgets.destroy( sourceWidget, true ); + editor.execCommand( 'paste', widgetHtml ); + + editor.fire( 'unlockSnapshot' ); + } + + function getRangeAtDropPosition( editor, dropEvt ) { + var $evt = dropEvt.data.$, + $range, + range = editor.createRange(); + + // Make testing possible. + if ( dropEvt.data.testRange ) + return dropEvt.data.testRange; + + // Webkits. + if ( document.caretRangeFromPoint ) { + $range = editor.document.$.caretRangeFromPoint( $evt.clientX, $evt.clientY ); + range.setStart( CKEDITOR.dom.node( $range.startContainer ), $range.startOffset ); + range.collapse( true ); + } + // FF. + else if ( $evt.rangeParent ) { + range.setStart( CKEDITOR.dom.node( $evt.rangeParent ), $evt.rangeOffset ); + range.collapse( true ); + } + // IEs. + else if ( document.body.createTextRange ) { + $range = editor.document.getBody().$.createTextRange(); + $range.moveToPoint( $evt.clientX, $evt.clientY ); + var id = 'cke-temp-' + ( new Date() ).getTime(); + $range.pasteHTML( '\u200b' ); + + var span = editor.document.getById( id ); + range.moveToPosition( span, CKEDITOR.POSITION_BEFORE_START ); + span.remove(); + } + else + return null; + + return range; + } + + function onEditableKey( widget, keyCode ) { + var focusedEditable = widget.focusedEditable, + range; + + // CTRL+A. + if ( keyCode == CKEDITOR.CTRL + 65 ) { + var bogus = focusedEditable.getBogus(); + + range = widget.editor.createRange(); + range.selectNodeContents( focusedEditable ); + // Exclude bogus if exists. + if ( bogus ) + range.setEndAt( bogus, CKEDITOR.POSITION_BEFORE_START ); + + range.select(); + // Cancel event - block default. + return false; + } + // DEL or BACKSPACE. + else if ( keyCode == 8 || keyCode == 46 ) { + var ranges = widget.editor.getSelection().getRanges(); + + range = ranges[ 0 ]; + + // Block del or backspace if at editable's boundary. + return !( ranges.length == 1 && range.collapsed && + range.checkBoundaryOfElement( focusedEditable, CKEDITOR[ keyCode == 8 ? 'START' : 'END' ] ) ); + } + } + + function setFocusedEditable( widgetsRepo, widget, editableElement, offline ) { + var editor = widgetsRepo.editor; + + editor.fire( 'lockSnapshot' ); + + if ( editableElement ) { + var editableName = editableElement.data( 'cke-widget-editable' ), + editableInstance = widget.editables[ editableName ]; + + widgetsRepo.widgetHoldingFocusedEditable = widget; + widget.focusedEditable = editableInstance; + editableElement.addClass( 'cke_widget_editable_focused' ); + + if ( editableInstance.filter ) + editor.setActiveFilter( editableInstance.filter ); + editor.setActiveEnterMode( editableInstance.enterMode, editableInstance.shiftEnterMode ); + } else { + if ( !offline ) + widget.focusedEditable.removeClass( 'cke_widget_editable_focused' ); + + widget.focusedEditable = null; + widgetsRepo.widgetHoldingFocusedEditable = null; + editor.setActiveFilter( null ); + editor.setActiveEnterMode( null, null ); + } + + editor.fire( 'unlockSnapshot' ); + } + + function setupContextMenu( editor ) { + if ( !editor.contextMenu ) + return; + + editor.contextMenu.addListener( function( element ) { + var widget = editor.widgets.getByElement( element, true ); + + if ( widget ) + return widget.fire( 'contextMenu', {} ); + } ); + } + + // And now we've got two problems - original problem and RegExp. + // Some softeners: + // * FF tends to copy all blocks up to the copybin container. + // * IE tends to copy only the copybin, without its container. + // * We use spans on IE and blockless editors, but divs in other cases. + var pasteReplaceRegex = new RegExp( + '^' + + '(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?' + + '(?:<(?:div|span)(?: style="[^"]+")?>)?' + + ']*data-cke-copybin-start="1"[^>]*>.?([\\s\\S]+)]*data-cke-copybin-end="1"[^>]*>.?' + + '(?:)?' + + '(?:)?' + + '$' + ); + + function pasteReplaceFn( match, wrapperHtml ) { + // Avoid polluting pasted data with any whitspaces, + // what's going to break check whether only one widget was pasted. + return CKEDITOR.tools.trim( wrapperHtml ); + } + + function setupDragAndDrop( widgetsRepo ) { + var editor = widgetsRepo.editor, + lineutils = CKEDITOR.plugins.lineutils; + + editor.on( 'contentDom', function() { + var editable = editor.editable(), + // #11123 Firefox needs to listen on document, because otherwise event won't be fired. + // #11086 IE8 cannot listen on document. + dropTarget = ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ? editable : editor.document; + + editable.attachListener( dropTarget, 'drop', function( evt ) { + var dataStr = evt.data.$.dataTransfer.getData( 'text' ), + dataObj, + sourceWidget, + range; + + if ( !dataStr ) + return; + + try { + dataObj = JSON.parse( dataStr ); + } catch ( e ) { + // Do nothing - data couldn't be parsed so it's not a CKEditor's data. + return; + } + + if ( dataObj.type != 'cke-widget' ) + return; + + evt.data.preventDefault(); + + // Something went wrong... maybe someone is dragging widgets between editors/windows/tabs/browsers/frames. + if ( dataObj.editor != editor.name || !( sourceWidget = widgetsRepo.instances[ dataObj.id ] ) ) + return; + + // Try to determine a DOM position at which drop happened. If none of methods + // which we support succeeded abort. + range = getRangeAtDropPosition( editor, evt ); + if ( !range ) + return; + + // #11132 Hack to prevent cursor loss on Firefox. Without timeout widget is + // correctly pasted but then cursor is invisible (although it works) and can be restored + // only by blurring editable. + if ( CKEDITOR.env.gecko ) + setTimeout( finalizeNativeDrop, 0, editor, sourceWidget, range ); + else + finalizeNativeDrop( editor, sourceWidget, range ); + } ); + + // Register Lineutils's utilities as properties of repo. + CKEDITOR.tools.extend( widgetsRepo, { + finder: new lineutils.finder( editor, { + lookups: { + // Element is block but not list item and not in nested editable. + 'default': function( el ) { + if ( el.is( CKEDITOR.dtd.$listItem ) ) + return; + + if ( !el.is( CKEDITOR.dtd.$block ) ) + return; + + while ( el ) { + if ( isDomNestedEditable( el ) ) + return; + + el = el.getParent(); + } + + return CKEDITOR.LINEUTILS_BEFORE | CKEDITOR.LINEUTILS_AFTER; + } + } + } ), + locator: new lineutils.locator( editor ), + liner: new lineutils.liner( editor, { + lineStyle: { + cursor: 'move !important', + 'border-top-color': '#666' + }, + tipLeftStyle: { + 'border-left-color': '#666' + }, + tipRightStyle: { + 'border-right-color': '#666' + } + } ) + }, true ); + } ); + } + + // Setup mouse observer which will trigger: + // * widget focus on widget click, + // * widget#doubleclick forwarded from editor#doubleclick. + function setupMouseObserver( widgetsRepo ) { + var editor = widgetsRepo.editor; + + editor.on( 'contentDom', function() { + var editable = editor.editable(), + evtRoot = editable.isInline() ? editable : editor.document, + widget, + mouseDownOnDragHandler; + + editable.attachListener( evtRoot, 'mousedown', function( evt ) { + var target = evt.data.getTarget(); + + // #10887 Clicking scrollbar in IE8 will invoke event with empty target object. + if ( !target.type ) + return false; + + widget = widgetsRepo.getByElement( target ); + mouseDownOnDragHandler = 0; // Reset. + + // Widget was clicked, but not editable nested in it. + if ( widget ) { + // Ignore mousedown on drag and drop handler if the widget is inline. + // Block widgets are handled by Lineutils. + if ( widget.inline && target.type == CKEDITOR.NODE_ELEMENT && target.hasAttribute( 'data-cke-widget-drag-handler' ) ) { + mouseDownOnDragHandler = 1; + return; + } + + if ( !getNestedEditable( widget.wrapper, target ) ) { + evt.data.preventDefault(); + if ( !CKEDITOR.env.ie ) + widget.focus(); + } + // Reset widget so mouseup listener is not confused. + else + widget = null; + } + } ); + + // Focus widget on mouseup if mousedown was fired on drag handler. + // Note: mouseup won't be fired at all if widget was dragged and dropped, so + // this code will be executed only when drag handler was clicked. + editable.attachListener( evtRoot, 'mouseup', function() { + if ( widget && mouseDownOnDragHandler ) { + mouseDownOnDragHandler = 0; + widget.focus(); + } + } ); + + // On IE it is not enough to block mousedown. If widget wrapper (element with + // contenteditable=false attribute) is clicked directly (it is a target), + // then after mouseup/click IE will select that element. + // It is not possible to prevent that default action, + // so we force fake selection after everything happened. + if ( CKEDITOR.env.ie ) { + editable.attachListener( evtRoot, 'mouseup', function( evt ) { + if ( widget ) { + setTimeout( function() { + widget.focus(); + widget = null; + } ); + } + } ); + } + } ); + + editor.on( 'doubleclick', function( evt ) { + var widget = widgetsRepo.getByElement( evt.data.element ); + + // Not in widget or in nested editable. + if ( !widget || getNestedEditable( widget.wrapper, evt.data.element ) ) + return; + + return widget.fire( 'doubleclick', { element: evt.data.element } ); + }, null, null, 1 ); + } + + // Setup editor#key observer which will forward it + // to focused widget. + function setupKeyboardObserver( widgetsRepo ) { + var editor = widgetsRepo.editor; + + editor.on( 'key', function( evt ) { + var focused = widgetsRepo.focused, + widgetHoldingFocusedEditable = widgetsRepo.widgetHoldingFocusedEditable, + ret; + + if ( focused ) + ret = focused.fire( 'key', { keyCode: evt.data.keyCode } ); + else if ( widgetHoldingFocusedEditable ) + ret = onEditableKey( widgetHoldingFocusedEditable, evt.data.keyCode ); + + return ret; + }, null, null, 1 ); + } + + // Setup copybin on native copy and cut events in order to handle copy and cut commands + // if user accepted security alert on IEs. + // Note: when copying or cutting using keystroke, copySingleWidget will be first executed + // by the keydown listener. Conflict between two calls will be resolved by copy_bin existence check. + function setupNativeCutAndCopy( widgetsRepo ) { + var editor = widgetsRepo.editor; + + editor.on( 'contentDom', function() { + var editable = editor.editable(); + + editable.attachListener( editable, 'copy', eventListener ); + editable.attachListener( editable, 'cut', eventListener ); + } ); + + function eventListener( evt ) { + if ( widgetsRepo.focused ) + copySingleWidget( widgetsRepo.focused, evt.name == 'cut' ); + } + } + + // Setup selection observer which will trigger: + // * widget select & focus on selection change, + // * nested editable focus (related properites and classes) on selection change, + // * deselecting and blurring all widgets on data, + // * blurring widget on editor blur. + function setupSelectionObserver( widgetsRepo ) { + var editor = widgetsRepo.editor; + + editor.on( 'selectionCheck', function() { + widgetsRepo.fire( 'checkSelection' ); + } ); + + widgetsRepo.on( 'checkSelection', widgetsRepo.checkSelection, widgetsRepo ); + + editor.on( 'selectionChange', function( evt ) { + var nestedEditable = getNestedEditable( editor.editable(), evt.data.selection.getStartElement() ), + newWidget = nestedEditable && widgetsRepo.getByElement( nestedEditable ), + oldWidget = widgetsRepo.widgetHoldingFocusedEditable; + + if ( oldWidget ) { + if ( oldWidget !== newWidget || !oldWidget.focusedEditable.equals( nestedEditable ) ) { + setFocusedEditable( widgetsRepo, oldWidget, null ); + + if ( newWidget && nestedEditable ) + setFocusedEditable( widgetsRepo, newWidget, nestedEditable ); + } + } + // It may happen that there's no widget even if editable was found - + // e.g. if selection was automatically set in editable although widget wasn't initialized yet. + else if ( newWidget && nestedEditable ) + setFocusedEditable( widgetsRepo, newWidget, nestedEditable ); + } ); + + // Invalidate old widgets early - immediately on dataReady. + editor.on( 'dataReady', function( evt ) { + // Deselect and blur all widgets. + stateUpdater( widgetsRepo ).commit(); + } ); + + editor.on( 'blur', function() { + var widget; + + if ( ( widget = widgetsRepo.focused ) ) + blurWidget( widgetsRepo, widget ); + + if ( ( widget = widgetsRepo.widgetHoldingFocusedEditable ) ) + setFocusedEditable( widgetsRepo, widget, null ); + } ); + } + + // Set up actions like: + // * processing in toHtml/toDataFormat, + // * pasting handling, + // * insertion handling, + // * editable reload handling (setData, mode switch, undo/redo), + // * DOM invalidation handling, + // * widgets checks. + function setupWidgetsLifecycle( widgetsRepo ) { + setupWidgetsLifecycleStart( widgetsRepo ); + setupWidgetsLifecycleEnd( widgetsRepo ); + + widgetsRepo.on( 'checkWidgets', checkWidgets ); + widgetsRepo.editor.on( 'contentDomInvalidated', widgetsRepo.checkWidgets, widgetsRepo ); + } + + function setupWidgetsLifecycleEnd( widgetsRepo ) { + var editor = widgetsRepo.editor, + downcastingSessions = {}, + nestedEditableScope = false; + + // Listen before htmlDP#htmlFilter is applied to cache all widgets, because we'll + // loose data-cke-* attributes. + editor.on( 'toDataFormat', function( evt ) { + // To avoid conflicts between htmlDP#toDF calls done at the same time + // (e.g. nestedEditable#getData called during downcasting some widget) + // mark every toDataFormat event chain with the downcasting session id. + var id = CKEDITOR.tools.getNextNumber(), + toBeDowncasted = []; + evt.data.downcastingSessionId = id; + downcastingSessions[ id ] = toBeDowncasted; + + evt.data.dataValue.forEach( function( element ) { + var attrs = element.attributes, + widget, widgetElement; + + // Wrapper. + // Perform first part of downcasting (cleanup) and cache widgets, + // because after applying DP's filter all data-cke-* attributes will be gone. + if ( 'data-cke-widget-id' in attrs ) { + widget = widgetsRepo.instances[ attrs[ 'data-cke-widget-id' ] ]; + if ( widget ) { + widgetElement = element.getFirst( isParserWidgetElement ); + toBeDowncasted.push( { + wrapper: element, + element: widgetElement, + widget: widget, + editables: {} + } ); + + // If widget did not have data-cke-widget attribute before upcasting remove it. + if ( widgetElement.attributes[ 'data-cke-widget-keep-attr' ] != '1' ) + delete widgetElement.attributes[ 'data-widget' ]; + } + } + // Nested editable. + else if ( 'data-cke-widget-editable' in attrs ) { + // Save the reference to this nested editable in the closest widget to be downcasted. + // Nested editables are downcasted in the successive toDataFormat to create an opportunity + // for dataFilter's "excludeNestedEditable" option to do its job (that option relies on + // contenteditable="true" attribute) (#11372). + toBeDowncasted[ toBeDowncasted.length - 1 ].editables[ attrs[ 'data-cke-widget-editable' ] ] = element; + + // Don't check children - there won't be next wrapper or nested editable which we + // should process in this session. + return false; + } + }, CKEDITOR.NODE_ELEMENT, true ); + }, null, null, 8 ); + + // Listen after dataProcessor.htmlFilter and ACF were applied + // so wrappers securing widgets' contents are removed after all filtering was done. + editor.on( 'toDataFormat', function( evt ) { + // Ignore some unmarked sessions. + if ( !evt.data.downcastingSessionId ) + return; + + var toBeDowncasted = downcastingSessions[ evt.data.downcastingSessionId ], + toBe, widget, widgetElement, retElement, editableElement, e; + + while ( ( toBe = toBeDowncasted.shift() ) ) { + widget = toBe.widget; + widgetElement = toBe.element; + retElement = widget._.downcastFn && widget._.downcastFn.call( widget, widgetElement ); + + // Replace nested editables' content with their output data. + for ( e in toBe.editables ) { + editableElement = toBe.editables[ e ]; + + delete editableElement.attributes[ 'contenteditable' ]; + editableElement.setHtml( widget.editables[ e ].getData() ); + } + + // Returned element always defaults to widgetElement. + if ( !retElement ) + retElement = widgetElement; + + toBe.wrapper.replaceWith( retElement ); + } + }, null, null, 13 ); + + + editor.on( 'contentDomUnload', function() { + widgetsRepo.destroyAll( true ); + } ); + } + + function setupWidgetsLifecycleStart( widgetsRepo ) { + var editor = widgetsRepo.editor, + processedWidgetOnly, + snapshotLoaded; + + // Listen after ACF (so data are filtered), + // but before dataProcessor.dataFilter was applied (so we can secure widgets' internals). + editor.on( 'toHtml', function( evt ) { + var upcastIterator = createUpcastIterator( widgetsRepo ), + toBeWrapped; + + evt.data.dataValue.forEach( upcastIterator.iterator, CKEDITOR.NODE_ELEMENT, true ); + + // Clean up and wrap all queued elements. + while ( ( toBeWrapped = upcastIterator.toBeWrapped.pop() ) ) { + cleanUpWidgetElement( toBeWrapped[ 0 ] ); + widgetsRepo.wrapElement( toBeWrapped[ 0 ], toBeWrapped[ 1 ] ); + } + + // Used to determine whether only widget was pasted. + processedWidgetOnly = evt.data.dataValue.children.length == 1 && + isParserWidgetWrapper( evt.data.dataValue.children[ 0 ] ); + }, null, null, 8 ); + + editor.on( 'dataReady', function() { + // Clean up all widgets loaded from snapshot. + if ( snapshotLoaded ) + cleanUpAllWidgetElements( widgetsRepo, editor.editable() ); + snapshotLoaded = 0; + + // Some widgets were destroyed on contentDomUnload, + // some on loadSnapshot, but that does not include + // e.g. setHtml on inline editor or widgets removed just + // before setting data. + widgetsRepo.destroyAll( true ); + widgetsRepo.initOnAll(); + } ); + + // Set flag so dataReady will know that additional + // cleanup is needed, because snapshot containing widgets was loaded. + editor.on( 'loadSnapshot', function( evt ) { + // Primitive but sufficient check which will prevent from executing + // heavier cleanUpAllWidgetElements if not needed. + if ( ( /data-cke-widget/ ).test( evt.data ) ) + snapshotLoaded = 1; + + widgetsRepo.destroyAll( true ); + }, null, null, 9 ); + + // Handle pasted single widget. + editor.on( 'paste', function( evt ) { + evt.data.dataValue = evt.data.dataValue.replace( pasteReplaceRegex, pasteReplaceFn ); + } ); + + // Listen with high priority to check widgets after data was inserted. + editor.on( 'insertText', checkNewWidgets, null, null, 999 ); + editor.on( 'insertHtml', checkNewWidgets, null, null, 999 ); + + function checkNewWidgets() { + editor.fire( 'lockSnapshot' ); + + // Init only new for performance reason. + // Focus inited if only widget was processed. + widgetsRepo.checkWidgets( { initOnlyNew: true, focusInited: processedWidgetOnly } ); + + editor.fire( 'unlockSnapshot' ); + } + } + + // Helper for coordinating which widgets should be + // selected/deselected and which one should be focused/blurred. + function stateUpdater( widgetsRepo ) { + var currentlySelected = widgetsRepo.selected, + toBeSelected = [], + toBeDeselected = currentlySelected.slice( 0 ), + focused = null; + + return { + select: function( widget ) { + if ( CKEDITOR.tools.indexOf( currentlySelected, widget ) < 0 ) + toBeSelected.push( widget ); + + var index = CKEDITOR.tools.indexOf( toBeDeselected, widget ); + if ( index >= 0 ) + toBeDeselected.splice( index, 1 ); + + return this; + }, + + focus: function( widget ) { + focused = widget; + return this; + }, + + commit: function() { + var focusedChanged = widgetsRepo.focused !== focused, + widget; + + widgetsRepo.editor.fire( 'lockSnapshot' ); + + if ( focusedChanged && ( widget = widgetsRepo.focused ) ) + blurWidget( widgetsRepo, widget ); + + while ( ( widget = toBeDeselected.pop() ) ) { + currentlySelected.splice( CKEDITOR.tools.indexOf( currentlySelected, widget ), 1 ); + // Widget could be destroyed in the meantime - e.g. data could be set. + if ( widget.isInited() ) + widget.setSelected( false ); + } + + if ( focusedChanged && focused ) { + widgetsRepo.focused = focused; + widgetsRepo.fire( 'widgetFocused', { widget: focused } ); + focused.setFocused( true ); + } + + while ( ( widget = toBeSelected.pop() ) ) { + currentlySelected.push( widget ); + widget.setSelected( true ); + } + + widgetsRepo.editor.fire( 'unlockSnapshot' ); + } + }; + } + + + // + // WIDGET helpers --------------------------------------------------------- + // + + var transparentImageData = 'data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D', + // LEFT, RIGHT, UP, DOWN, DEL, BACKSPACE - unblock default fake sel handlers. + keystrokesNotBlockedByWidget = { 37: 1, 38: 1, 39: 1, 40: 1, 8: 1, 46: 1 }; + + function cancel( evt ) { + evt.cancel(); + } + + function copySingleWidget( widget, isCut ) { + var editor = widget.editor, + doc = editor.document; + + // We're still handling previous copy/cut. + // When keystroke is used to copy/cut this will also prevent + // conflict with copySingleWidget called again for native copy/cut event. + if ( doc.getById( 'cke_copybin' ) ) + return; + + // [IE] Use span for copybin and its container to avoid bug with expanding editable height by + // absolutely positioned element. + var copybinName = ( editor.blockless || CKEDITOR.env.ie ) ? 'span' : 'div', + copybin = doc.createElement( copybinName ), + copybinContainer = doc.createElement( copybinName ), + // IE8 always jumps to the end of document. + needsScrollHack = CKEDITOR.env.ie && CKEDITOR.env.version < 9; + + copybinContainer.setAttributes( { + id: 'cke_copybin', + 'data-cke-temp': '1' + } ); + + // Position copybin element outside current viewport. + copybin.setStyles( { + position: 'absolute', + width: '1px', + height: '1px', + overflow: 'hidden' + } ); + + copybin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-5000px' ); + + copybin.setHtml( '\u200b' + widget.wrapper.getOuterHtml() + '\u200b' ); + + // Save snapshot with the current state. + editor.fire( 'saveSnapshot' ); + + // Ignore copybin. + editor.fire( 'lockSnapshot' ); + + copybinContainer.append( copybin ); + editor.editable().append( copybinContainer ); + + var listener1 = editor.on( 'selectionChange', cancel, null, null, 0 ), + listener2 = widget.repository.on( 'checkSelection', cancel, null, null, 0 ); + + if ( needsScrollHack ) { + var docElement = doc.getDocumentElement().$, + scrollTop = docElement.scrollTop; + } + + // Once the clone of the widget is inside of copybin, select + // the entire contents. This selection will be copied by the + // native browser's clipboard system. + var range = editor.createRange(); + range.selectNodeContents( copybin ); + range.select(); + + if ( needsScrollHack ) + docElement.scrollTop = scrollTop; + + setTimeout( function() { + // [IE] Focus widget before removing copybin to avoid scroll jump. + if ( !isCut ) + widget.focus(); + + copybinContainer.remove(); + + listener1.removeListener(); + listener2.removeListener(); + + editor.fire( 'unlockSnapshot' ); + + if ( isCut ) { + widget.repository.del( widget ); + editor.fire( 'saveSnapshot' ); + } + }, 100 ); // Use 100ms, so Chrome (@Mac) will be able to grab the content. + } + + // [IE] Force keeping focus because IE sometimes forgets to fire focus on main editable + // when blurring nested editable. + // @context widget + function onEditableBlur() { + var active = CKEDITOR.document.getActive(), + editor = this.editor, + editable = editor.editable(); + + // If focus stays within editor override blur and set currentActive because it should be + // automatically changed to editable on editable#focus but it is not fired. + if ( ( editable.isInline() ? editable : editor.document.getWindow().getFrame() ).equals( active ) ) + editor.focusManager.focus( editable ); + } + + // Force selectionChange when editable was focused. + // Similar to hack in selection.js#~620. + // @context widget + function onEditableFocus() { + // Gecko does not support 'DOMFocusIn' event on which we unlock selection + // in selection.js to prevent selection locking when entering nested editables. + if ( CKEDITOR.env.gecko ) + this.editor.unlockSelection(); + + // We don't need to force selectionCheck on Webkit, because on Webkit + // we do that on DOMFocusIn in selection.js. + if ( !CKEDITOR.env.webkit ) { + this.editor.forceNextSelectionCheck(); + this.editor.selectionChange( 1 ); + } + } + + function setupDragHandler( widget ) { + if ( !widget.draggable ) + return; + + var editor = widget.editor, + container = widget.wrapper.findOne( '.cke_widget_drag_handler_container' ), + img; + + // Reuse drag handler if already exists (#11281). + if ( container ) + img = container.findOne( 'img' ); + else { + container = new CKEDITOR.dom.element( 'span', editor.document ); + container.setAttributes( { + 'class': 'cke_reset cke_widget_drag_handler_container', + // Split background and background-image for IE8 which will break on rgba(). + style: 'background:rgba(220,220,220,0.5);background-image:url(' + editor.plugins.widget.path + 'images/handle.png)' + } ); + + img = new CKEDITOR.dom.element( 'img', editor.document ); + img.setAttributes( { + 'class': 'cke_reset cke_widget_drag_handler', + 'data-cke-widget-drag-handler': '1', + src: transparentImageData, + width: DRAG_HANDLER_SIZE, + title: editor.lang.widget.move, + height: DRAG_HANDLER_SIZE + } ); + widget.inline && img.setAttribute( 'draggable', 'true' ); + + container.append( img ); + widget.wrapper.append( container ); + } + + widget.wrapper.on( 'mouseenter', widget.updateDragHandlerPosition, widget ); + setTimeout( function() { + widget.on( 'data', widget.updateDragHandlerPosition, widget ); + }, 50 ); + + if ( widget.inline ) { + img.on( 'dragstart', function( evt ) { + evt.data.$.dataTransfer.setData( 'text', JSON.stringify( { type: 'cke-widget', editor: editor.name, id: widget.id } ) ); + } ); + } else + img.on( 'mousedown', onBlockWidgetDrag, widget ); + + widget.dragHandlerContainer = container; + } + + function onBlockWidgetDrag() { + var finder = this.repository.finder, + locator = this.repository.locator, + liner = this.repository.liner, + editor = this.editor, + editable = editor.editable(), + listeners = [], + sorted = [], + + // Harvest all possible relations and display some closest. + relations = finder.greedySearch(), + + buffer = CKEDITOR.tools.eventsBuffer( 50, function() { + locations = locator.locate( relations ); + + // There's only a single line displayed for D&D. + sorted = locator.sort( y, 1 ); + + if ( sorted.length ) { + liner.prepare( relations, locations ); + liner.placeLine( sorted[ 0 ] ); + liner.cleanup(); + } + } ), + + locations, y; + + // Let's have the "dragging cursor" over entire editable. + editable.addClass( 'cke_widget_dragging' ); + + // Cache mouse position so it is re-used in events buffer. + listeners.push( editable.on( 'mousemove', function( evt ) { + y = evt.data.$.clientY; + buffer.input(); + } ) ); + + function onMouseUp() { + var l; + + buffer.reset(); + + // Stop observing events. + while ( ( l = listeners.pop() ) ) + l.removeListener(); + + onBlockWidgetDrop.call( this, sorted ); + } + + // Mouseup means "drop". This is when the widget is being detached + // from DOM and placed at range determined by the line (location). + listeners.push( editor.document.once( 'mouseup', onMouseUp, this ) ); + + // Mouseup may occur when user hovers the line, which belongs to + // the outer document. This is, of course, a valid listener too. + listeners.push( CKEDITOR.document.once( 'mouseup', onMouseUp, this ) ); + } + + function onBlockWidgetDrop( sorted ) { + var finder = this.repository.finder, + liner = this.repository.liner, + editor = this.editor, + editable = this.editor.editable(); + + if ( !CKEDITOR.tools.isEmpty( liner.visible ) ) { + // Retrieve range for the closest location. + var range = finder.getRange( sorted[ 0 ] ); + + // Focus widget (it could lost focus after mousedown+mouseup) + // and save this state as the one where we want to be taken back when undoing. + this.focus(); + editor.fire( 'saveSnapshot' ); + // Group all following operations in one snapshot. + editor.fire( 'lockSnapshot', { dontUpdate: 1 } ); + + // Reset the fake selection, which will be invalidated by insertElementIntoRange. + // This avoids a situation when getSelection() still returns a fake selection made + // on widget which in the meantime has been moved to other place. That could cause + // an error thrown e.g. by saveSnapshot or stateUpdater. + editor.getSelection().reset(); + + // Attach widget at the place determined by range. + editable.insertElementIntoRange( this.wrapper, range ); + + // Focus again the dropped widget. + this.focus(); + + // Unlock snapshot and save new one, which will contain all changes done + // in this method. + editor.fire( 'unlockSnapshot' ); + editor.fire( 'saveSnapshot' ); + } + + // Clean-up custom cursor for editable. + editable.removeClass( 'cke_widget_dragging' ); + + // Clean-up all remaining lines. + liner.hideVisible(); + } + + function setupEditables( widget ) { + var editableName, + editableDef, + definedEditables = widget.editables; + + widget.editables = {}; + + if ( !widget.editables ) + return; + + for ( editableName in definedEditables ) { + editableDef = definedEditables[ editableName ]; + widget.initEditable( editableName, typeof editableDef == 'string' ? { selector: editableDef } : editableDef ); + } + } + + function setupMask( widget ) { + if ( !widget.mask ) + return; + + // Reuse mask if already exists (#11281). + var img = widget.wrapper.findOne( '.cke_widget_mask' ); + + if ( !img ) { + img = new CKEDITOR.dom.element( 'img', widget.editor.document ); + img.setAttributes( { + src: transparentImageData, + 'class': 'cke_reset cke_widget_mask' + } ); + widget.wrapper.append( img ); + } + + widget.mask = img; + } + + // Replace parts object containing: + // partName => selector pairs + // with: + // partName => element pairs + function setupParts( widget ) { + if ( widget.parts ) { + var parts = {}, + el, partName; + + for ( partName in widget.parts ) { + el = widget.wrapper.findOne( widget.parts[ partName ] ); + parts[ partName ] = el; + } + widget.parts = parts; + } + } + + function setupWidget( widget, widgetDef ) { + setupWrapper( widget ); + setupParts( widget ); + setupEditables( widget ); + setupMask( widget ); + setupDragHandler( widget ); + + // #11145: [IE8] Non-editable content of widget is draggable. + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + widget.wrapper.on( 'dragstart', function( evt ) { + var target = evt.data.getTarget(); + + // Allow text dragging inside nested editables or dragging inline widget's drag handler. + if ( !getNestedEditable( widget, target ) && !( widget.inline && isDomDragHandler( target ) ) ) + evt.data.preventDefault(); + } ); + } + + widget.wrapper.removeClass( 'cke_widget_new' ); + widget.element.addClass( 'cke_widget_element' ); + + widget.on( 'key', function( evt ) { + var keyCode = evt.data.keyCode; + + // ENTER. + if ( keyCode == 13 ) + widget.edit(); + // CTRL+C or CTRL+X. + else if ( keyCode == CKEDITOR.CTRL + 67 || keyCode == CKEDITOR.CTRL + 88 ) { + copySingleWidget( widget, keyCode == CKEDITOR.CTRL + 88 ); + return; // Do not preventDefault. + } + // Pass chosen keystrokes to other plugins or default fake sel handlers. + // Pass all CTRL/ALT keystrokes. + else if ( keyCode in keystrokesNotBlockedByWidget || ( CKEDITOR.CTRL & keyCode ) || ( CKEDITOR.ALT & keyCode ) ) + return; + + return false; + }, null, null, 999 ); + // Listen with high priority so it's possible + // to overwrite this callback. + + widget.on( 'doubleclick', function( evt ) { + widget.edit(); + } ); + + if ( widgetDef.data ) + widget.on( 'data', widgetDef.data ); + + if ( widgetDef.edit ) + widget.on( 'edit', widgetDef.edit ); + } + + function setupWidgetData( widget, startupData ) { + var widgetDataAttr = widget.element.data( 'cke-widget-data' ); + + if ( widgetDataAttr ) + widget.setData( JSON.parse( widgetDataAttr ) ); + if ( startupData ) + widget.setData( startupData ); + + // Unblock data and... + widget.dataReady = true; + + // Write data to element because this was blocked when data wasn't ready. + writeDataToElement( widget ); + + // Fire data event first time, because this was blocked when data wasn't ready. + widget.fire( 'data', widget.data ); + } + + function setupWrapper( widget ) { + // Retrieve widget wrapper. Assign an id to it. + var wrapper = widget.wrapper = widget.element.getParent(); + wrapper.setAttribute( 'data-cke-widget-id', widget.id ); + } + + function writeDataToElement( widget ) { + widget.element.data( 'cke-widget-data', JSON.stringify( widget.data ) ); + } + + // + // EXPOSE PUBLIC API ------------------------------------------------------ + // + + CKEDITOR.plugins.widget = Widget; + Widget.repository = Repository; + Widget.nestedEditable = NestedEditable; +} )(); + +/** + * An event fired when a widget definition is registered by the {@link CKEDITOR.plugins.widget.repository#add} method. + * It is possible to modify the definition being registered. + * + * @event widgetDefinition + * @member CKEDITOR.editor + * @param {CKEDITOR.plugins.widget.definition} data Widget definition. + */ + +/** + * This is an abstract class that describes the definition of a widget. + * It is a type of {@link CKEDITOR.plugins.widget.repository#add} method's second argument. + * + * Widget instances inherit from registered widget definitions, although not in a prototypal way. + * They are simply extended with corresponding widget definitions. Note that not all properties of + * the widget definition become properties of a widget. Some, like {@link #data} or {@link #edit}, become + * widget's events listeners. + * + * @class CKEDITOR.plugins.widget.definition + * @abstract + * @mixins CKEDITOR.feature + */ + +/** + * Widget definition name. It is automatically set when the definition is + * {@link CKEDITOR.plugins.widget.repository#add registered}. + * + * @property {String} name + */ + +/** + * The method executed while initializing a widget, after a widget instance + * is created, but before it is ready. It is executed before the first + * {@link CKEDITOR.plugins.widget#event-data} is fired so it is common to + * use the `init` method to populate widget data with information loaded from + * the DOM, like for exmaple: + * + * init: function() { + * this.setData( 'width', this.element.getStyle( 'width' ) ); + * + * if ( this.parts.caption.getStyle( 'display' ) != 'none' ) + * this.setData( 'showCaption', true ); + * } + * + * @property {Function} init + */ + +/** + * The function to be used to upcast an element to this widget or a + * comma-separated list of upcast methods from the {@link #upcasts} object. + * + * The upcast function **is not** executed in the widget context (because the widget + * does not exist yet) and two arguments are passed: + * + * * `element` ({@link CKEDITOR.htmlParser.element}) – The element to be checked. + * * `data` (`Object`) – The object which can be extended with data which will then be passed to the widget. + * + * An element will be upcasted if a function returned `true` or an instance of + * a {@link CKEDITOR.htmlParser.element} if upcasting meant DOM structure changes + * (in this case the widget will be initialized on the returned element). + * + * @property {String/Function} upcast + */ + +/** + * The object containing functions which can be used to upcast this widget. + * Only those pointed by the {@link #upcast} property will be used. + * + * In most cases it is appropriate to use {@link #upcast} directly, + * because majority of widgets need just one method. + * However, in some cases the widget author may want to expose more than one variant + * and then this property may be used. + * + * upcasts: { + * // This function may upcast only figure elements. + * figure: function() { + * // ... + * }, + * // This function may upcast only image elements. + * image: function() { + * // ... + * }, + * // More variants... + * } + * + * // Then, widget user may choose which upcast methods will be enabled. + * editor.on( 'widgetDefinition', function( evt ) { + * if ( evt.data.name == 'image' ) + * evt.data.upcast = 'figure,image'; // Use both methods. + * } ); + * + * @property {Object} upcasts + */ + +/** + * The function to be used to downcast this widget or + * a name of the downcast option from the {@link #downcasts} object. + * + * The downcast funciton will be executed in the {@link CKEDITOR.plugins.widget} context + * and with `widgetElement` ({@link CKEDITOR.htmlParser.element}) argument which is + * the widget's main element. + * + * The function may return an instance of the {@link CKEDITOR.htmlParser.node} class if the widget + * needs to be downcasted to a different node than the widget's main element. + * + * @property {String/Function} downcast + */ + +/** + * The object containing functions which can be used to downcast this widget. + * Only the one pointed by the {@link #downcast} property will be used. + * + * In most cases it is appropriate to use {@link #downcast} directly, + * because majority of widgets have just one variant of downcasting (or none at all). + * However, in some cases the widget author may want to expose more than one variant + * and then this property may be used. + * + * downcasts: { + * // This downcast may transform the widget into the figure element. + * figure: function() { + * // ... + * }, + * // This downcast may transform the widget into the image element with data-* attributes. + * image: function() { + * // ... + * } + * } + * + * // Then, the widget user may choose one of the downcast options when setting up his editor. + * editor.on( 'widgetDefinition', function( evt ) { + * if ( evt.data.name == 'image' ) + * evt.data.downcast = 'figure'; + * } ); + * + * @property downcasts + */ + +/** + * If set, it will be added as the {@link CKEDITOR.plugins.widget#event-edit} event listener. + * This means that it will be executed when a widget is being edited. + * See the {@link CKEDITOR.plugins.widget#method-edit} method. + * + * @property {Function} edit + */ + +/** + * If set, it will be added as the {@link CKEDITOR.plugins.widget#event-data} event listener. + * This means that it will be executed every time the {@link CKEDITOR.plugins.widget#property-data widget data} changes. + * + * @property {Function} data + */ + +/** + * The method to be executed when the widget's command is executed in order to insert a new widget + * (widget of this type is not focused). If not defined, then the default action will be + * performed which means that: + * + * * An instance of the widget will be created in a detached {@link CKEDITOR.dom.documentFragment document fragment}, + * * The {@link CKEDITOR.plugins.widget#method-edit} method will be called to trigger widget editing, + * * The widget element will be inserted into DOM. + * + * @property {Function} insert + */ + +/** + * The name of a dialog window which will be opened on {@link CKEDITOR.plugins.widget#method-edit}. + * If not defined, then the {@link CKEDITOR.plugins.widget#method-edit} method will not perform any action and + * widget's command will insert a new widget without opening a dialog window first. + * + * @property {String} dialog + */ + +/** + * The template which will be used to create a new widget element (when the widget's command is executed). + * This string is populated with {@link #defaults default values} by using the {@link CKEDITOR.template} format. + * Therefore it has to be a valid {@link CKEDITOR.template} argument. + * + * @property {String} template + */ + +/** + * The data object which will be used to populate the data of a newly created widget. + * See {@link CKEDITOR.plugins.widget#property-data}. + * + * defaults: { + * showCaption: true, + * align: 'none' + * } + * + * @property defaults + */ + +/** + * An object containing definitions of widget components (part name => CSS selector). + * + * parts: { + * image: 'img', + * caption: 'div.caption' + * } + * + * @property parts + */ + +/** + * An object containing definitions of nested editables (editable name => {@link CKEDITOR.plugins.widget.nestedEditable.definition}). + * + * editables: { + * header: 'h1', + * content: { + * selector: 'div.content', + * allowedContent: 'p strong em; a[!href]' + * } + * } + * + * @property editables + */ + +/** + * Widget name displayed in elements path. + * + * @property {String} pathName + */ + +/** + * If set to `true`, the widget's element will be covered with a transparent mask. + * This will prevent its content from being clickable, which matters in case + * of special elements like embedded Flash or iframes that generate a separate "context". + * + * @property {Boolean} mask + */ + +/** + * If set to `true/false`, it will force the widget to be either an inline or a block widget. + * If not set, the widget type will be determined from the widget element. + * + * Widget type influences whether a block (`div`) or an inline (`span`) element is used + * for the wrapper. + * + * @property {Boolean} inline + */ + +/** + * The label for the widget toolbar button. + * + * editor.widgets.add( 'simplebox', { + * button: 'Create a simple box' + * } ); + * + * editor.widgets.add( 'simplebox', { + * button: editor.lang.simplebox.title + * } ); + * + * @property {String} button + */ + +/** + * Whether widget should be draggable. Defaults to `true`. + * If set to `false` drag handler will not be displayed when hovering widget. + * + * @property {Boolean} draggable + */ + +/** + * This is an abstract class that describes the definition of a widget's nested editable. + * It is a type of values in the {@link CKEDITOR.plugins.widget.definition#editables} object. + * + * In the simplest case the definition is a string which is a CSS selector used to + * find an element that will become a nested editable inside the widget. Note that + * the widget element can be a nested editable, too. + * + * In the more advanced case a definition is an object with a required `selector` property. + * + * editables: { + * header: 'h1', + * content: { + * selector: 'div.content', + * allowedContent: 'p strong em; a[!href]' + * } + * } + * + * @class CKEDITOR.plugins.widget.nestedEditable.definition + * @abstract + */ + +/** + * The CSS selector used to find an element which will become a nested editable. + * + * @property {String} selector + */ + +/** + * The [Advanced Content Filter](#!/guide/dev_advanced_content_filter) rules + * which will be used to limit the content allowed in this nested editable. + * This option is similar to {@link CKEDITOR.config#allowedContent} and one can + * use it to limit the editor features available in the nested editable. + * + * @property {CKEDITOR.filter.allowedContentRules} allowedContent + */ + +/** + * Nested editable name displayed in elements path. + * + * @property {String} pathName + */ \ No newline at end of file diff --git a/libraries/ckeditor/plugins/widgetselection/plugin.js b/libraries/ckeditor/plugins/widgetselection/plugin.js new file mode 100644 index 0000000..5137b6e --- /dev/null +++ b/libraries/ckeditor/plugins/widgetselection/plugin.js @@ -0,0 +1,361 @@ +/** + * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license + */ + +/** + * @fileOverview A plugin created to handle ticket https://dev.ckeditor.com/ticket/11064. While the issue is caused by native WebKit/Blink behaviour, + * this plugin can be easily detached or modified when the issue is fixed in the browsers without changing the core. + * When Ctrl/Cmd + A is pressed to select all content it does not work due to a bug in + * Webkit/Blink if a non-editable element is at the beginning or the end of the content. + */ + +( function() { + 'use strict'; + + CKEDITOR.plugins.add( 'widgetselection', { + + init: function( editor ) { + if ( CKEDITOR.env.webkit ) { + var widgetselection = CKEDITOR.plugins.widgetselection; + + editor.on( 'contentDom', function( evt ) { + + var editor = evt.editor, + editable = editor.editable(); + + editable.attachListener( editable, 'keydown', function( evt ) { + // Ctrl/Cmd + A + if ( evt.data.getKeystroke() == CKEDITOR.CTRL + 65 ) { + // Defer the call so the selection is already changed by the pressed keys. + CKEDITOR.tools.setTimeout( function() { + // Manage filler elements on keydown. If there is no need + // to add fillers, we need to check and clean previously used once. + if ( !widgetselection.addFillers( editable ) ) { + widgetselection.removeFillers( editable ); + } + }, 0 ); + } + }, null, null, -1 ); + + // Check and clean previously used fillers. + editor.on( 'selectionCheck', function( evt ) { + widgetselection.removeFillers( evt.editor.editable() ); + } ); + + // Remove fillers on paste before data gets inserted into editor. + editor.on( 'paste', function( evt ) { + evt.data.dataValue = widgetselection.cleanPasteData( evt.data.dataValue ); + } ); + + if ( 'selectall' in editor.plugins ) { + widgetselection.addSelectAllIntegration( editor ); + } + } ); + } + } + } ); + + /** + * A set of helper methods for the Widget Selection plugin. + * + * @property widgetselection + * @member CKEDITOR.plugins + * @since 4.6.1 + */ + CKEDITOR.plugins.widgetselection = { + + /** + * The start filler element reference. + * + * @property {CKEDITOR.dom.element} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + startFiller: null, + + /** + * The end filler element reference. + * + * @property {CKEDITOR.dom.element} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + endFiller: null, + + /** + * An attribute which identifies the filler element. + * + * @property {String} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + fillerAttribute: 'data-cke-filler-webkit', + + /** + * The default content of the filler element. Note: The filler needs to have `visible` content. + * Unprintable elements or empty content do not help as a workaround. + * + * @property {String} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + fillerContent: ' ', + + /** + * Tag name which is used to create fillers. + * + * @property {String} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + fillerTagName: 'div', + + /** + * Adds a filler before or after a non-editable element at the beginning or the end of the `editable`. + * + * @param {CKEDITOR.editable} editable + * @returns {Boolean} + * @member CKEDITOR.plugins.widgetselection + */ + addFillers: function( editable ) { + var editor = editable.editor; + + // Whole content should be selected, if not fix the selection manually. + if ( !this.isWholeContentSelected( editable ) && editable.getChildCount() > 0 ) { + + var firstChild = editable.getFirst( filterTempElements ), + lastChild = editable.getLast( filterTempElements ); + + // Check if first element is editable. If not prepend with filler. + if ( firstChild && firstChild.type == CKEDITOR.NODE_ELEMENT && !firstChild.isEditable() ) { + this.startFiller = this.createFiller(); + editable.append( this.startFiller, 1 ); + } + + // Check if last element is editable. If not append filler. + if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && !lastChild.isEditable() ) { + this.endFiller = this.createFiller( true ); + editable.append( this.endFiller, 0 ); + } + + // Reselect whole content after any filler was added. + if ( this.hasFiller( editable ) ) { + var rangeAll = editor.createRange(); + rangeAll.selectNodeContents( editable ); + rangeAll.select(); + return true; + } + } + return false; + }, + + /** + * Removes filler elements or updates their references. + * + * It will **not remove** filler elements if the whole content is selected, as it would break the + * selection. + * + * @param {CKEDITOR.editable} editable + * @member CKEDITOR.plugins.widgetselection + */ + removeFillers: function( editable ) { + // If startFiller or endFiller exists and not entire content is selected it means the selection + // just changed from selected all. We need to remove fillers and set proper selection/content. + if ( this.hasFiller( editable ) && !this.isWholeContentSelected( editable ) ) { + + var startFillerContent = editable.findOne( this.fillerTagName + '[' + this.fillerAttribute + '=start]' ), + endFillerContent = editable.findOne( this.fillerTagName + '[' + this.fillerAttribute + '=end]' ); + + if ( this.startFiller && startFillerContent && this.startFiller.equals( startFillerContent ) ) { + this.removeFiller( this.startFiller, editable ); + } else { + // The start filler is still present but it is a different element than previous one. It means the + // undo recreating entirely selected content was performed. We need to update filler reference. + this.startFiller = startFillerContent; + } + + if ( this.endFiller && endFillerContent && this.endFiller.equals( endFillerContent ) ) { + this.removeFiller( this.endFiller, editable ); + } else { + // Same as with start filler. + this.endFiller = endFillerContent; + } + } + }, + + /** + * Removes fillers from the paste data. + * + * @param {String} data + * @returns {String} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + cleanPasteData: function( data ) { + if ( data && data.length ) { + data = data + .replace( this.createFillerRegex(), '' ) + .replace( this.createFillerRegex( true ), '' ); + } + return data; + }, + + /** + * Checks if the entire content of the given editable is selected. + * + * @param {CKEDITOR.editable} editable + * @returns {Boolean} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + isWholeContentSelected: function( editable ) { + + var range = editable.editor.getSelection().getRanges()[ 0 ]; + if ( range ) { + + if ( range && range.collapsed ) { + return false; + + } else { + var rangeClone = range.clone(); + rangeClone.enlarge( CKEDITOR.ENLARGE_ELEMENT ); + + return !!( rangeClone && editable && rangeClone.startContainer && rangeClone.endContainer && + rangeClone.startOffset === 0 && rangeClone.endOffset === editable.getChildCount() && + rangeClone.startContainer.equals( editable ) && rangeClone.endContainer.equals( editable ) ); + } + } + return false; + }, + + /** + * Checks if there is any filler element in the given editable. + * + * @param {CKEDITOR.editable} editable + * @returns {Boolean} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + hasFiller: function( editable ) { + return editable.find( this.fillerTagName + '[' + this.fillerAttribute + ']' ).count() > 0; + }, + + /** + * Creates a filler element. + * + * @param {Boolean} [onEnd] If filler will be placed on end or beginning of the content. + * @returns {CKEDITOR.dom.element} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + createFiller: function( onEnd ) { + var filler = new CKEDITOR.dom.element( this.fillerTagName ); + filler.setHtml( this.fillerContent ); + filler.setAttribute( this.fillerAttribute, onEnd ? 'end' : 'start' ); + filler.setAttribute( 'data-cke-temp', 1 ); + filler.setStyles( { + display: 'block', + width: 0, + height: 0, + padding: 0, + border: 0, + margin: 0, + position: 'absolute', + top: 0, + left: '-9999px', + opacity: 0, + overflow: 'hidden' + } ); + + return filler; + }, + + /** + * Removes the specific filler element from the given editable. If the filler contains any content (typed or pasted), + * it replaces the current editable content. If not, the caret is placed before the first or after the last editable + * element (depends if the filler was at the beginning or the end). + * + * @param {CKEDITOR.dom.element} filler + * @param {CKEDITOR.editable} editable + * @member CKEDITOR.plugins.widgetselection + * @private + */ + removeFiller: function( filler, editable ) { + if ( filler ) { + var editor = editable.editor, + currentRange = editable.editor.getSelection().getRanges()[ 0 ], + currentPath = currentRange.startPath(), + range = editor.createRange(), + insertedHtml, + fillerOnStart, + manuallyHandleCaret; + + if ( currentPath.contains( filler ) ) { + insertedHtml = filler.getHtml(); + manuallyHandleCaret = true; + } + + fillerOnStart = filler.getAttribute( this.fillerAttribute ) == 'start'; + filler.remove(); + filler = null; + + if ( insertedHtml && insertedHtml.length > 0 && insertedHtml != this.fillerContent ) { + editable.insertHtmlIntoRange( insertedHtml, editor.getSelection().getRanges()[ 0 ] ); + range.setStartAt( editable.getChild( editable.getChildCount() - 1 ), CKEDITOR.POSITION_BEFORE_END ); + editor.getSelection().selectRanges( [ range ] ); + + } else if ( manuallyHandleCaret ) { + if ( fillerOnStart ) { + range.setStartAt( editable.getFirst().getNext(), CKEDITOR.POSITION_AFTER_START ); + } else { + range.setEndAt( editable.getLast().getPrevious(), CKEDITOR.POSITION_BEFORE_END ); + } + editable.editor.getSelection().selectRanges( [ range ] ); + } + } + }, + + /** + * Creates a regular expression which will match the filler HTML in the text. + * + * @param {Boolean} [onEnd] Whether a regular expression should be created for the filler at the beginning or + * the end of the content. + * @returns {RegExp} + * @member CKEDITOR.plugins.widgetselection + * @private + */ + createFillerRegex: function( onEnd ) { + var matcher = this.createFiller( onEnd ).getOuterHtml() + .replace( /style="[^"]*"/gi, 'style="[^"]*"' ) + .replace( />[^<]*[^<]*<' ); + + return new RegExp( ( !onEnd ? '^' : '' ) + matcher + ( onEnd ? '$' : '' ) ); + }, + + /** + * Adds an integration for the [Select All](https://ckeditor.com/cke4/addon/selectall) plugin to the given `editor`. + * + * @private + * @param {CKEDITOR.editor} editor + * @member CKEDITOR.plugins.widgetselection + */ + addSelectAllIntegration: function( editor ) { + var widgetselection = this; + + editor.editable().attachListener( editor, 'beforeCommandExec', function( evt ) { + var editable = editor.editable(); + + if ( evt.data.name == 'selectAll' && editable ) { + widgetselection.addFillers( editable ); + } + }, null, null, 9999 ); + } + }; + + + function filterTempElements( el ) { + return el.getName && !el.hasAttribute( 'data-cke-temp' ); + } + +} )(); diff --git a/libraries/ckeditor/plugins/wsc/LICENSE.md b/libraries/ckeditor/plugins/wsc/LICENSE.md new file mode 100644 index 0000000..c7d374a --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor WSC Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/libraries/ckeditor/plugins/wsc/README.md b/libraries/ckeditor/plugins/wsc/README.md new file mode 100644 index 0000000..46eeafb --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/README.md @@ -0,0 +1,25 @@ +CKEditor WebSpellChecker Plugin +=============================== + +This plugin brings Web Spell Checker (WSC) into CKEditor. + +WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. +2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'wsc'; + +That's all. WSC will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/libraries/ckeditor/plugins/wsc/dialogs/ciframe.html b/libraries/ckeditor/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..5809fbe --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,66 @@ + + + + + + + + +

          + diff --git a/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..d5fc6bb --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/libraries/ckeditor/plugins/wsc/dialogs/wsc.css b/libraries/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..1056b45 --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/libraries/ckeditor/plugins/wsc/dialogs/wsc.js b/libraries/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..fe584f6 --- /dev/null +++ b/libraries/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,91 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function z(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}function I(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",e;for(e in a)for(var f in a[e]){var h=a[e][f];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var e in a)for(var d in a[e])if(d.toUpperCase()===c.toUpperCase()){c=e;break a}c=""}return c},setLangList:function(){var c={},e;for(e in a)for(var d in a[e])c[a[e][d]]= +d;return c}()}}var g=function(){var a=function(a,b,e){e=e||{};var f=e.expires;if("number"==typeof f&&f){var h=new Date;h.setTime(h.getTime()+1E3*f);f=e.expires=h}f&&f.toUTCString&&(e.expires=f.toUTCString());b=encodeURIComponent(b);a=a+"\x3d"+b;for(var k in e)b=e[k],a+="; "+k,!0!==b&&(a+="\x3d"+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString, +e=a.fn||null,f=a.id||"",h=a.target||window,k=a.message||{id:f};a.message&&"[object Object]"==b.call(a.message)&&(a.message.id?a.message.id:a.message.id=f,k=a.message);a=window.JSON.stringify(k,e);h.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, +"\\$1")+"\x3d([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}},misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){var b;(b=0===a.offsetWidth||0==a.offsetHeight)||(b="none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display)); +return!b},hasClass:function(a,b){return!(!a.className||!a.className.match(new RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check= +null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.sessionid="";a.LocalizationButton={ChangeTo_button:{instance:null,text:"Change to",localizationID:"ChangeTo"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking_button:{instance:null,text:"Finish Checking", +localizationID:"FinishChecking"},Option_button:{instance:null,text:"Options",localizationID:"Options"},FinishChecking_button_block:{instance:null,text:"Finish Checking",localizationID:"FinishChecking"}};a.LocalizationLabel={ChangeTo_label:{instance:null,text:"Change to",localizationID:"ChangeTo"},Suggestions:{instance:null,text:"Suggestions"},Categories:{instance:null,text:"Categories"},Synonyms:{instance:null,text:"Synonyms"}};var J=function(b){var c,d,e;for(e in b){if(c=a.dialog.getContentElement(a.dialog._.currentTabId, +e))c=c.getElement();else if(b[e].instance)c=b[e].instance.getElement().getFirst()||b[e].instance.getElement();else continue;d=b[e].localizationID||e;c.setText(a.LocalizationComing[d])}},K=function(b){var c,d,e;for(e in b)c=a.dialog.getContentElement(a.dialog._.currentTabId,e),c||(c=b[e].instance),c.setLabel&&(d=b[e].localizationID||e,c.setLabel(a.LocalizationComing[d]+":"))},t,A;a.framesetHtml=function(b){return"\x3ciframe id\x3d"+a.iframeNumber+"_"+b+' frameborder\x3d"0" allowtransparency\x3d"1" style\x3d"width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"\x3e\x3c/iframe\x3e'}; +a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var e=a.iframeNumber+"_"+c;b.getElement().setHtml(d);d=document.getElementById(e);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('\x3c!DOCTYPE html\x3e\x3chtml\x3e\x3chead\x3e\x3cmeta charset\x3d"UTF-8"\x3e\x3ctitle\x3eiframe\x3c/title\x3e\x3cstyle\x3ehtml,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}\x3c/style\x3e\x3c/head\x3e\x3cbody\x3e\x3cdiv id\x3d"content" class\x3d"main-box"\x3e\x3c/div\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"spelltext" name\x3d"spelltext" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadsuggestfirst" name\x3d"loadsuggestfirst" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadspellsuggestall" name\x3d"loadspellsuggestall" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadOptionsForm" name\x3d"loadOptionsForm" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3cscript\x3e(function(window) {var ManagerPostMessage \x3d function() {var _init \x3d function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd \x3d function(o) {var str,type \x3d Object.prototype.toString,fn \x3d o.fn || null,id \x3d o.id || "",target \x3d o.target || window,message \x3d o.message || { "id": id };if (o.message \x26\x26 type.call(o.message) \x3d\x3d "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] \x3d id;message \x3d o.message;};str \x3d JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp \x3d new ManagerPostMessage;var appString \x3d (function(){var spell \x3d parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl \x3d parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag \x3d document.createElement("script");scriptTag.type \x3d "text/javascript";callback ? callback : callback \x3d function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange \x3d function() {if (scriptTag.readyState \x3d\x3d "loaded" ||scriptTag.readyState \x3d\x3d "complete") {scriptTag.onreadystatechange \x3d null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload \x3d function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src \x3d src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload \x3d function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);\x3c/script\x3e\x3c/body\x3e\x3c/html\x3e'); +d.document.close();a.div_overlay.setEnable()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+ +"_"+a.dialog._.currentTabId).style.height="240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,e,f;a.previousTab=c;a.setIframe(d,c);var h=function(h){c=b._.currentTabId;h=h||window.event;h.data.getTarget().is("a")&&c!==a.previousTab&&(a.previousTab=c,d=b._.contents[c].Content,e=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?E(a.targetFromFrame[e],a.cmd[c]):(a.setIframe(d,c),f=document.getElementById(e),a.targetFromFrame[e]=f.contentWindow))}; +b.parts.tabs.removeListener("click",h);b.parts.tabs.on("click",h)};a.buildSelectLang=function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select");a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang= +function(b,c){var d=document.getElementById("wscLang"+c),e=document.createDocumentFragment(),f,h,k=[];if(0===d.options.length){for(f in b)k.push([f,b[f]]);k.sort();for(var p=0;pm.width-D&&(d=m.width-D);if(gm.height-r&&(g=m.height-r);n.width=d+D;n.height=g+r;a._.fromResizeEvent=!1;a.resize(d,g);setTimeout(function(){a._.fromResizeEvent=!1;CKEDITOR.dialog.fire("resize",{dialog:a,width:d,height:g},b)},300)}a._.moved||(r=isNaN(c)&&isNaN(e)?0:1,isNaN(c)&&(c=(m.width-n.width)/2),0>c&&(c=0),c>m.width- +n.width&&(c=m.width-n.width),isNaN(e)&&(e=(m.height-n.height)/2),0>e&&(e=0),e>m.height-n.height&&(e=m.height-n.height),a.move(c,e,r))}function d(){b.wsc={};(function(a){var b={separator:"\x3c$\x3e",getDataType:function(a){return"undefined"===typeof a?"undefined":null===a?"null":Object.prototype.toString.call(a).slice(8,-1)},convertDataToString:function(a){return this.getDataType(a).toLowerCase()+this.separator+a},restoreDataFromString:function(a){var b=a,c;a=this.backCompatibility(a);if("string"=== +typeof a)switch(b=a.indexOf(this.separator),c=a.substring(0,b),b=a.substring(b+this.separator.length),c){case "boolean":b="true"===b;break;case "number":b=parseFloat(b);break;case "array":b=""===b?[]:b.split(",");break;case "null":b=null;break;case "undefined":b=void 0}return b},backCompatibility:function(a){var b=a,c;"string"===typeof a&&(c=a.indexOf(this.separator),0>c&&(b=parseFloat(a),isNaN(b)&&("["===a[0]&&"]"===a[a.length-1]?(a=a.replace("[",""),a=a.replace("]",""),b=""===a?[]:a.split(",")): +b="true"===a||"false"===a?"true"===a:a),b=this.convertDataToString(b)));return b}},c={get:function(a){return b.restoreDataFromString(window.localStorage.getItem(a))},set:function(a,c){var d=b.convertDataToString(c);window.localStorage.setItem(a,d)},del:function(a){window.localStorage.removeItem(a)},clear:function(){window.localStorage.clear()}},e={expiration:31622400,get:function(a){return b.restoreDataFromString(this.getCookie(a))},set:function(a,c){var d=b.convertDataToString(c);this.setCookie(a, +d,{expires:this.expiration})},del:function(a){this.deleteCookie(a)},getCookie:function(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"\x3d([^;]*)")))?decodeURIComponent(a[1]):void 0},setCookie:function(a,b,c){c=c||{};var d=c.expires;if("number"===typeof d&&d){var e=new Date;e.setTime(e.getTime()+1E3*d);d=c.expires=e}d&&d.toUTCString&&(c.expires=d.toUTCString());b=encodeURIComponent(b);a=a+"\x3d"+b;for(var h in c)b=c[h],a+="; "+h,!0!==b&&(a+= +"\x3d"+b);document.cookie=a},deleteCookie:function(a){this.setCookie(a,null,{expires:-1})},clear:function(){for(var a=document.cookie.split(";"),b=0;b .cke_dialog_ui_button:first-child +{ + margin-top: 4px; +} + +div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select > label +{ + margin-left: 0; +} + +div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select div.cke_dialog_ui_input_select +{ + width: 140px !important; +} + +div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select, +div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select +{ + margin-top: 1px; +} + +div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select:focus, +div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select:focus +{ + margin-top: 0; +} + +div[name=GrammTab] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button, +div[name=Thesaurus] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button +{ + margin-top: 4px !important; +} + +div[name=Thesaurus] div.cke_dialog_ui_input_select +{ + width: 180px !important; +} diff --git a/libraries/ckeditor/plugins/youtube/images/icon.png b/libraries/ckeditor/plugins/youtube/images/icon.png new file mode 100644 index 0000000..b1cf6de Binary files /dev/null and b/libraries/ckeditor/plugins/youtube/images/icon.png differ diff --git a/libraries/ckeditor/plugins/youtube/images/icon_1.png b/libraries/ckeditor/plugins/youtube/images/icon_1.png new file mode 100644 index 0000000..b1cf6de Binary files /dev/null and b/libraries/ckeditor/plugins/youtube/images/icon_1.png differ diff --git a/libraries/ckeditor/plugins/youtube/lang/ar.js b/libraries/ckeditor/plugins/youtube/lang/ar.js new file mode 100644 index 0000000..337dc34 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ar.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'ar', { + button : 'شيفرة تضمين اليوتيوب', + title : 'شيفرة تضمين اليوتيوب', + txtEmbed : 'الصق شيفرة التضمين هنا', + txtUrl : 'الصق رابط فيديو اليوتيوب', + txtWidth : 'العرض', + txtHeight : 'الطول', + chkRelated : 'اظهر الفيديوهات المقترحة في نهاية الفيديو', + txtStartAt : 'ابدأ عند (ss او mm:ss او hh:mm:ss)', + chkPrivacy : 'تفعيل وضع تحسين الخصوصية', + chkOlderCode : 'استخدم شيفرة التضمين القديمة', + chkAutoplay : 'Autoplay', + noCode : 'يجب عليك ادخال شيفرة التضمين او الرابط', + invalidEmbed : 'شيفرة التضمين التي قمت بإدخالها تبدو غير صحيحة', + invalidUrl : 'الرابط الذي قمت بإدخاله يبدو غير صحيح', + or : 'او', + noWidth : 'يجب عليك ادخال العرض', + invalidWidth : 'يجب عليك ادخال عرض صحيح', + noHeight : 'يجب عليك ادخال الطول', + invalidHeight : 'يجب عليك ادخال طول صحيح', + invalidTime : 'يجب عليك ادخال وقت بداية صحيح' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/ar_1.js b/libraries/ckeditor/plugins/youtube/lang/ar_1.js new file mode 100644 index 0000000..5eaaac2 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ar_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'ar', { + button : 'شيفرة تضمين اليوتيوب', + title : 'شيفرة تضمين اليوتيوب', + txtEmbed : 'الصق شيفرة التضمين هنا', + txtUrl : 'الصق رابط فيديو اليوتيوب', + txtWidth : 'العرض', + txtHeight : 'الطول', + chkRelated : 'اظهر الفيديوهات المقترحة في نهاية الفيديو', + txtStartAt : 'ابدأ عند (ss او mm:ss او hh:mm:ss)', + chkPrivacy : 'تفعيل وضع تحسين الخصوصية', + chkOlderCode : 'استخدم شيفرة التضمين القديمة', + chkAutoplay : 'Autoplay', + noCode : 'يجب عليك ادخال شيفرة التضمين او الرابط', + invalidEmbed : 'شيفرة التضمين التي قمت بإدخالها تبدو غير صحيحة', + invalidUrl : 'الرابط الذي قمت بإدخاله يبدو غير صحيح', + or : 'او', + noWidth : 'يجب عليك ادخال العرض', + invalidWidth : 'يجب عليك ادخال عرض صحيح', + noHeight : 'يجب عليك ادخال الطول', + invalidHeight : 'يجب عليك ادخال طول صحيح', + invalidTime : 'يجب عليك ادخال وقت بداية صحيح', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/cs.js b/libraries/ckeditor/plugins/youtube/lang/cs.js new file mode 100644 index 0000000..92359d5 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/cs.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'cs', { + button : 'Vložit video YouTube', + title : 'Vložit video YouTube', + txtEmbed : 'Zde vložte kód pro vložení', + txtUrl : 'Vložte adresu URL videa YouTube', + txtWidth : 'Šířka', + txtHeight : 'Výška', + chkRelated : 'Po dohrání videa zobrazit navrhovaná videa', + txtStartAt : 'Začít přehrávat v čase (ss nebo mm:ss nebo hh:mm:ss)', + chkPrivacy : 'Povolit režim s rozšířeným soukromím', + chkOlderCode : 'Použít starý kód pro vložení', + chkAutoplay : 'Automatické spuštění přehrávání', + noCode : 'Musíte vložit kód pro vložení nebo adresu URL', + invalidEmbed : 'Vložený kód pro vložení zřejmě není platný', + invalidUrl : 'Zadaná adresa URL zřejmě není platná', + or : 'nebo', + noWidth : 'Musíte zadat šířku', + invalidWidth : 'Zadejte platnou šířku', + noHeight : 'Musíte zadat výšku', + invalidHeight : 'Zadejte platnou výšku', + invalidTime : 'Zadejte platný počáteční čas', + txtResponsive : 'Responzivní design (ignorovat výšku a šířku, uzpůsobit šířce)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/de.js b/libraries/ckeditor/plugins/youtube/lang/de.js new file mode 100644 index 0000000..a90b397 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/de.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'de', { + button : 'Youtube Video einbinden', + title : 'Youtube Video einbinden', + txtEmbed : 'Embed Code hier einfügen', + txtUrl : 'Youtube Video URL hier einfügen', + txtWidth : 'Breite', + txtHeight : 'Höhe', + chkRelated : 'Video Vorschläge am Video Ende einblenden', + txtStartAt : 'Start bei Position (ss oder mm:ss oder hh:mm:ss)', + chkPrivacy : 'Aktiviere die erweiterte Privatsphäre', + chkOlderCode : 'Benutzer alten Embed Code', + chkAutoplay : 'Autoplay', + noCode : 'Sie müssen einen Embed Code oder URL angeben', + invalidEmbed : 'Der angegebene Embed Code scheint nicht gültig zu sein.', + invalidUrl : 'Die angegebene URL scheint nicht gültig zu sein.', + or : 'oder', + noWidth : 'Geben Sie eine Breite an', + invalidWidth : 'Geben Sie eine gültige Breite an', + noHeight : 'Geben Sie eine Höhe an', + invalidHeight : 'Geben Sie eine gültige Höhe an', + invalidTime : 'Geben Sie eine gültige Startzeit an' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/de_1.js b/libraries/ckeditor/plugins/youtube/lang/de_1.js new file mode 100644 index 0000000..34f8d2b --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/de_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'de', { + button : 'YouTube Video einbinden', + title : 'YouTube Video einbinden', + txtEmbed : 'Embed Code hier einfügen', + txtUrl : 'YouTube Video URL hier einfügen', + txtWidth : 'Breite', + txtHeight : 'Höhe', + chkRelated : 'Vorschläge am Ende des Videos einblenden', + txtStartAt : 'Start bei Position (ss oder mm:ss oder hh:mm:ss)', + chkPrivacy : 'Erweiterten Datenschutzmodus aktivieren', + chkOlderCode : 'Benutze alten Embed Code', + chkAutoplay : 'Autoplay', + noCode : 'Sie müssen einen Embed Code oder URL angeben', + invalidEmbed : 'Der angegebene Embed Code scheint nicht gültig zu sein.', + invalidUrl : 'Die angegebene URL scheint nicht gültig zu sein.', + or : 'oder', + noWidth : 'Geben Sie eine Breite an', + invalidWidth : 'Geben Sie eine gültige Breite an', + noHeight : 'Geben Sie eine Höhe an', + invalidHeight : 'Geben Sie eine gültige Höhe an', + invalidTime : 'Geben Sie eine gültige Startzeit an', + txtResponsive : 'Automatische Größe (ignoriert Breite und Höhe)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/el.js b/libraries/ckeditor/plugins/youtube/lang/el.js new file mode 100644 index 0000000..bc0ebc1 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/el.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'el', { + button: 'Ενσωμάτωση Youtube βίντεο', + title: 'Ενσωμάτωση Youtube βίντεο', + txtEmbed: 'Επικόλλησε τον κώδικα ενσωμάτωσης', + txtUrl: 'Επικόλλησε το URL του βίντεο', + txtWidth: 'Πλάτος', + txtHeight: 'Ύψος', + chkRelated: 'Εμφάνιση προτεινόμενων βίντεο μόλις ολοκληρωθεί', + txtStartAt: 'Χρόνος εκκίνησης (ss or mm:ss or hh:mm:ss)', + chkPrivacy: 'Ενεργοποίηση λειτουργίας ενισχυμένου απορρήτου', + chkOlderCode: 'Χρήση παλαιού κώδικα ενσωμάτωσης', + chkAutoplay: 'Αυτόματη εκκίνηση', + noCode: 'Χρειάζεται κώδικας ενσωμάτωσης ή URL', + invalidEmbed: 'Ο κώδικας ενσωμάτωσης που εισήγατε δεν μοιάζει σωστός', + invalidUrl: 'Το URL που εισήγατε δεν μοιάζει σωστό', + or: 'ή', + noWidth: 'Συμπληρώστε το πλάτος', + invalidWidth: 'Λανθασμένο πλάτος', + noHeight: 'Συμπληρώστε το ύψος', + invalidHeight: 'Λανθασμένο ύψος', + invalidTime: 'Λανθασμένος χρόνος εκκίνησης' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/en.js b/libraries/ckeditor/plugins/youtube/lang/en.js new file mode 100644 index 0000000..7466099 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/en.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'en', { + button : 'Embed Youtube Video', + title : 'Embed Youtube Video', + txtEmbed : 'Paste Embed Code Here', + txtUrl : 'Paste Youtube Video URL', + txtWidth : 'Width', + txtHeight : 'Height', + chkRelated : 'Show suggested videos at the video\'s end', + txtStartAt : 'Start at (ss or mm:ss or hh:mm:ss)', + chkPrivacy : 'Enable privacy-enhanced mode', + chkOlderCode : 'Use old embed code', + chkAutoplay: 'Autoplay', + noCode : 'You must input an embed code or URL', + invalidEmbed : 'The embed code you\'ve entered doesn\'t appear to be valid', + invalidUrl : 'The URL you\'ve entered doesn\'t appear to be valid', + or : 'or', + noWidth : 'You must inform the width', + invalidWidth : 'Inform a valid width', + noHeight : 'You must inform the height', + invalidHeight : 'Inform a valid height', + invalidTime : 'Inform a valid start time' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/en_1.js b/libraries/ckeditor/plugins/youtube/lang/en_1.js new file mode 100644 index 0000000..7e3954d --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/en_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'en', { + button : 'Embed YouTube Video', + title : 'Embed YouTube Video', + txtEmbed : 'Paste Embed Code Here', + txtUrl : 'Paste YouTube Video URL', + txtWidth : 'Width', + txtHeight : 'Height', + chkRelated : 'Show suggested videos at the video\'s end', + txtStartAt : 'Start at (ss or mm:ss or hh:mm:ss)', + chkPrivacy : 'Enable privacy-enhanced mode', + chkOlderCode : 'Use old embed code', + chkAutoplay: 'Autoplay', + noCode : 'You must input an embed code or URL', + invalidEmbed : 'The embed code you\'ve entered doesn\'t appear to be valid', + invalidUrl : 'The URL you\'ve entered doesn\'t appear to be valid', + or : 'or', + noWidth : 'You must inform the width', + invalidWidth : 'Inform a valid width', + noHeight : 'You must inform the height', + invalidHeight : 'Inform a valid height', + invalidTime : 'Inform a valid start time', + txtResponsive : 'Make Responsive (ignore width and height, fit to width)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/es.js b/libraries/ckeditor/plugins/youtube/lang/es.js new file mode 100644 index 0000000..a0e5cb4 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/es.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'es', { + button : 'Embed YouTube video', + title : 'Embed YouTube video', + txtEmbed : 'Pegar el código embed', + txtUrl : 'Pegar la URL al video de Youtube', + txtWidth : 'Anchura', + txtHeight : 'Altura', + chkRelated : 'Mostrar videos sugeridos al final de este video', + txtStartAt : 'Comenzar en (ss or mm:ss or hh:mm:ss)', + chkPrivacy : 'Habilitar el modo privacy-enhanced', + chkOlderCode : 'Usar código embed viejo', + chkAutoplay: 'Autoplay', + noCode : 'Debes de introducir un código embed o URL', + invalidEmbed : 'El código embed introducido parece no ser valido', + invalidUrl : 'La URL introducida parece no ser valida', + or : 'o', + noWidth : 'Debes de dar la anchura', + invalidWidth : 'Da una anchura valida', + noHeight : 'Debes dar una altura valida', + invalidHeight : 'Da una altura valida', + invalidTime : 'Da un tiempo de valido', + txtResponsive : 'Hacer responsivo (ignorar anchura y altura, ajustar a la anchura)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/et.js b/libraries/ckeditor/plugins/youtube/lang/et.js new file mode 100644 index 0000000..9cd94fb --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/et.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'et', { + button : 'Lisa YouTube video', + title : 'YouTube video lisamine', + txtEmbed : 'Kleepige manustatud kood siia', + txtUrl : 'Kleepige YouTube video veebiaadress', + txtWidth : 'Laius', + txtHeight : 'Kõrgus', + chkRelated : 'Näita soovitatud videosi antud video lõppus', + txtStartAt : 'Alguskoht: (ss või mm:ss või hh:mm:ss)', + chkPrivacy : 'Aktiveerige privaatsust täiendav režiim', + chkOlderCode : 'Kasutage vana manuskoodi', + chkAutoplay: 'Automaatesitlus', + noCode : 'Te peate sisestama video manuskoodi või veebiaadressi', + invalidEmbed : 'Manuskood mille sisestasite ei paista olevat korrektne', + invalidUrl : 'Veebiaadress mille sisestasite ei paista olevat korrektne', + or : 'või', + noWidth : 'Te peate sisestama video laiuse', + invalidWidth : 'Sisestage korrektne laius', + noHeight : 'Te peate sisestama video kõrguse', + invalidHeight : 'Sisestage korrektne kõrgus', + invalidTime : 'Sisestage korrektne algusaeg', + txtResponsive : 'Aktiveerige ekraani laiusega ühilduv režiim' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/fi.js b/libraries/ckeditor/plugins/youtube/lang/fi.js new file mode 100644 index 0000000..1228058 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/fi.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'fi', { + button : 'Upota YouTube-video', + title : 'Upota YouTube-video', + txtEmbed : 'Syötä YouTube-videon upotuskoodi', + txtUrl : 'Syötä YouTube-videon www-osoite', + txtWidth : 'Leveys', + txtHeight : 'Korkeus', + chkRelated : 'Näytä suositukset lopussa', + txtStartAt : 'Aloitusaika (ss tai mm:ss tai tt:mm:ss)', + chkPrivacy : 'Aktivoi yksityisyyttä parantava tila', + chkOlderCode : 'Käytä vanhaa upotuskoodia', + chkAutoplay: 'Soita automaattisesti', + noCode : 'Sinun täytyy syötää upotuskoodi tai www-osoite', + invalidEmbed : 'Upotuskoodi on virheellinen', + invalidUrl : 'Www-osoite on virheellinen', + or : 'tai', + noWidth : 'Syötä leveys', + invalidWidth : 'Leveys on virheellinen', + noHeight : 'Syötä korkeus', + invalidHeight : 'Korkeus on virheellinen', + invalidTime : 'Aloitusaika on virheellinen', + txtResponsive : 'Responsiivinen leveys (sovita leveys)' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/youtube/lang/fr.js b/libraries/ckeditor/plugins/youtube/lang/fr.js new file mode 100644 index 0000000..ab657d9 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/fr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'fr', { + button : 'Insérer une vidéo Youtube', + title : 'Insérer une vidéo youtube', + txtEmbed : 'Coller le code embed ici', + txtUrl : 'Coller l\'url de la vidéo ici', + txtWidth : 'Largeur', + txtHeight : 'Hauteur', + chkRelated : 'Montrer les suggestions de vidéo à la fin', + txtStartAt : 'Commencer à (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Activer la protection de la vie privée', + chkOlderCode : 'Utiliser l\'ancien code embed', + chkAutoplay : 'Autoplay', + noCode : 'Vous devez entrer un code embed ou une url', + invalidEmbed : 'Le code embed est invalide', + invalidUrl : 'L\'url est invalide', + or : 'ou', + noWidth : 'Vous devez saisir une largeur', + invalidWidth : 'La largeur saisie est invalide', + noHeight : 'Vous devez saisir une hauteur', + invalidHeight : 'La hauteur saisie est invalide', + invalidTime : 'Le temps de départ de la vidéo est invalide' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/fr_1.js b/libraries/ckeditor/plugins/youtube/lang/fr_1.js new file mode 100644 index 0000000..e4647f9 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/fr_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'fr', { + button : 'Insérer une vidéo Youtube', + title : 'Insérer une vidéo youtube', + txtEmbed : 'Coller le code embed ici', + txtUrl : 'Coller l\'url de la vidéo ici', + txtWidth : 'Largeur', + txtHeight : 'Hauteur', + chkRelated : 'Montrer les suggestions de vidéo à la fin', + txtStartAt : 'Commencer à (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Activer la protection de la vie privée', + chkOlderCode : 'Utiliser l\'ancien code embed', + chkAutoplay : 'Autoplay', + noCode : 'Vous devez entrer un code embed ou une url', + invalidEmbed : 'Le code embed est invalide', + invalidUrl : 'L\'url est invalide', + or : 'ou', + noWidth : 'Vous devez saisir une largeur', + invalidWidth : 'La largeur saisie est invalide', + noHeight : 'Vous devez saisir une hauteur', + invalidHeight : 'La hauteur saisie est invalide', + invalidTime : 'Le temps de départ de la vidéo est invalide', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/he.js b/libraries/ckeditor/plugins/youtube/lang/he.js new file mode 100644 index 0000000..bf4d6ab --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/he.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'he', { + button : 'שבץ וידאו של YouTube', + title : 'שבץ וידאו של YouTube', + txtEmbed : 'הדבק את קוד השיבוץ כאן', + txtUrl : 'הדבק כתובת וידאו YouTube', + txtWidth : 'אורך', + txtHeight : 'גובה', + chkRelated : 'הצג סרטונים מומלצים בסוף הודיאו', + txtStartAt : 'התחל ב (ss או mm:ss או hh:mm:ss)', + chkPrivacy : 'הפעל מצב פרטיות המשופרת', + chkOlderCode : 'השתמש בקוד הטמעה ישן', + chkAutoplay: 'הפעלה אוטומטית', + noCode : 'אתה חייב להזין קוד embed כתובת וידאו אתר', + invalidEmbed : 'קוד ההטמעה שהוזן אינו נראה חוקי', + invalidUrl : 'כתובת הוידאו אינה נראת חוקית', + or : 'או', + noWidth : 'חובה להזין אורך', + invalidWidth : 'האורך שהוזן שגוי', + noHeight : 'חובה להזין גובה', + invalidHeight : 'הגובה שהוזן שגוי', + invalidTime : 'זמן התחלה שהוזן שגוי', + txtResponsive : 'הפוך לרספונסיבי (התעלם מרוחב וגובה, התאם לרוחב)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/hu.js b/libraries/ckeditor/plugins/youtube/lang/hu.js new file mode 100644 index 0000000..3ecff0d --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/hu.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'hu', { + button : 'Youtube videó beillesztése', + title : 'Youtube videó beillesztése', + txtEmbed : 'Illessze be a beágyazott kódot', + txtUrl : 'Illessze be a Youtube videó URL-jét', + txtWidth : 'Szélesség', + txtHeight : 'Magasság', + txtStartAt : 'Kezdő időpont (ss vagy mm:ss vagy hh:mm:ss)', + chkRelated : 'Ajánlott videók megjelenítése, amikor a videó befejeződik', + chkPrivacy : 'Fokozott adatvédelmi mód engedélyezése', + chkOlderCode : 'Régi beágyazott kód használata', + chkAutoplay : 'Automatikus lejátszás', + noCode : 'A beágyazott kód, vagy az URL megadása kötelező', + invalidEmbed : 'A beágyazott kód érvénytelen', + invalidUrl : 'A megadott URL érvénytelen', + or : 'vagy', + noWidth : 'A szélesség megadása kötelező', + invalidWidth : 'Érvényes szélességet adjon meg', + noHeight : 'A magasság megadása kötelező', + invalidHeight : 'Érvényes magasságot adjon meg', + invalidTime : 'Érvényes kezdő időpontot adjon meg' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/hu_1.js b/libraries/ckeditor/plugins/youtube/lang/hu_1.js new file mode 100644 index 0000000..7282df7 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/hu_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'hu', { + button : 'Youtube videó beillesztése', + title : 'Youtube videó beillesztése', + txtEmbed : 'Illessze be a beágyazott kódot', + txtUrl : 'Illessze be a Youtube videó URL-jét', + txtWidth : 'Szélesség', + txtHeight : 'Magasság', + txtStartAt : 'Kezdő időpont (ss vagy mm:ss vagy hh:mm:ss)', + chkRelated : 'Ajánlott videók megjelenítése, amikor a videó befejeződik', + chkPrivacy : 'Fokozott adatvédelmi mód engedélyezése', + chkOlderCode : 'Régi beágyazott kód használata', + chkAutoplay : 'Automatikus lejátszás', + noCode : 'A beágyazott kód, vagy az URL megadása kötelező', + invalidEmbed : 'A beágyazott kód érvénytelen', + invalidUrl : 'A megadott URL érvénytelen', + or : 'vagy', + noWidth : 'A szélesség megadása kötelező', + invalidWidth : 'Érvényes szélességet adjon meg', + noHeight : 'A magasság megadása kötelező', + invalidHeight : 'Érvényes magasságot adjon meg', + invalidTime : 'Érvényes kezdő időpontot adjon meg', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/it.js b/libraries/ckeditor/plugins/youtube/lang/it.js new file mode 100644 index 0000000..e16da43 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/it.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'it', { + button : 'Incorpora video Youtube', + title : 'Incorpora video Youtube', + txtEmbed : 'Incolla qui il codice di incorporamento', + txtUrl : 'Incolla l\'URL del video Youtube', + txtWidth : 'Larghezza', + txtHeight : 'Altezza', + chkRelated : 'Mostra i video suggeriti dopo il video', + txtStartAt : 'Inizia a (ss o mm:ss o hh:mm:ss)', + chkPrivacy : 'Abilita la protezione della privacy', + chkOlderCode : 'Usa il vecchio codice di incorporamento', + chkAutoplay : 'Autoplay', + noCode : 'Devi inserire un codice di incorporamento o un URL', + invalidEmbed : 'Il codice di incorporamento inserito non sembra valido', + invalidUrl : 'L\'URL inserito non sembra valido', + or : 'o', + noWidth : 'Devi indicare la larghezza', + invalidWidth : 'Indica una larghezza valida', + noHeight : 'Devi indicare l\'altezza', + invalidHeight : 'Indica un\'altezza valida', + invalidTime : 'Indica un tempo di inizio valido' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/it_1.js b/libraries/ckeditor/plugins/youtube/lang/it_1.js new file mode 100644 index 0000000..1f19940 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/it_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'it', { + button : 'Incorpora video Youtube', + title : 'Incorpora video Youtube', + txtEmbed : 'Incolla qui il codice di incorporamento', + txtUrl : 'Incolla l\'URL del video Youtube', + txtWidth : 'Larghezza', + txtHeight : 'Altezza', + chkRelated : 'Mostra i video suggeriti dopo il video', + txtStartAt : 'Inizia a (ss o mm:ss o hh:mm:ss)', + chkPrivacy : 'Abilita la protezione della privacy', + chkOlderCode : 'Usa il vecchio codice di incorporamento', + chkAutoplay : 'Autoplay', + noCode : 'Devi inserire un codice di incorporamento o un URL', + invalidEmbed : 'Il codice di incorporamento inserito non sembra valido', + invalidUrl : 'L\'URL inserito non sembra valido', + or : 'o', + noWidth : 'Devi indicare la larghezza', + invalidWidth : 'Indica una larghezza valida', + noHeight : 'Devi indicare l\'altezza', + invalidHeight : 'Indica un\'altezza valida', + invalidTime : 'Indica un tempo di inizio valido', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/ja.js b/libraries/ckeditor/plugins/youtube/lang/ja.js new file mode 100644 index 0000000..a5a833e --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ja.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'ja', { + button : 'Youtube動画埋め込み', + title : 'Youtube動画埋め込み', + txtEmbed : '埋め込みコードを貼り付けてください', + txtUrl : 'URLを貼り付けてください', + txtWidth : '幅', + txtHeight : '高さ', + chkRelated : '動画が終わったら関連動画を表示する', + txtStartAt : 'Start at', + chkPrivacy : 'プライバシー強化モードを有効にする', + chkOlderCode : '以前の埋め込みコードを使用する', + chkAutoplay : '自動再生', + noCode : '埋め込みコードまたはURLを入力してください', + invalidEmbed : '不適切な埋め込みコードが入力されました', + invalidUrl : '不適切なURLが入力されました', + or : 'または', + noWidth : '幅を指定してください', + invalidWidth : '幅指定に誤りがあります', + noHeight : '高さを指定してください', + invalidHeight : '高さ指定に誤りがあります', + invalidTime : 'Inform a valid start time' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/ja_1.js b/libraries/ckeditor/plugins/youtube/lang/ja_1.js new file mode 100644 index 0000000..e9a0d77 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ja_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'ja', { + button : 'Youtube動画埋め込み', + title : 'Youtube動画埋め込み', + txtEmbed : '埋め込みコードを貼り付けてください', + txtUrl : 'URLを貼り付けてください', + txtWidth : '幅', + txtHeight : '高さ', + chkRelated : '動画が終わったら関連動画を表示する', + txtStartAt : 'Start at', + chkPrivacy : 'プライバシー強化モードを有効にする', + chkOlderCode : '以前の埋め込みコードを使用する', + chkAutoplay : '自動再生', + noCode : '埋め込みコードまたはURLを入力してください', + invalidEmbed : '不適切な埋め込みコードが入力されました', + invalidUrl : '不適切なURLが入力されました', + or : 'または', + noWidth : '幅を指定してください', + invalidWidth : '幅指定に誤りがあります', + noHeight : '高さを指定してください', + invalidHeight : '高さ指定に誤りがあります', + invalidTime : 'Inform a valid start time', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/nb.js b/libraries/ckeditor/plugins/youtube/lang/nb.js new file mode 100644 index 0000000..2de7275 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/nb.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'nb', { + button : 'Bygg inn YouTube-video', + title : 'Bygg inn YouTube-video', + txtEmbed : 'Lim inn embed-kode her', + txtUrl : 'Lim inn YouTube video-URL', + txtWidth : 'Bredde', + txtHeight : 'Høyde', + chkRelated : 'Vis foreslåtte videoer når videoen er ferdig', + txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)', + chkPrivacy : 'Bruk personverntilpasset modus', + chkOlderCode : 'Bruk gammel embedkode', + chkAutoplay: 'Spill automatisk', + noCode : 'Du må legge inn en embed-kode eller URL', + invalidEmbed : 'Emded-koden du la inn ser ikke ut til å være gyldig', + invalidUrl : 'URLen du la inn ser ikke ut til å være gyldig', + or : 'eller', + noWidth : 'Du må legge inn bredde', + invalidWidth : 'Legg inn en gyldig bredde', + noHeight : 'Du må legge inn høyde', + invalidHeight : 'Legg inn en gyldig høyde', + invalidTime : 'Legg inn gyldig starttid', + txtResponsive : 'Gjør responsiv (ignorer bredde og høyde, tilpass bredde på sida)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/nl.js b/libraries/ckeditor/plugins/youtube/lang/nl.js new file mode 100644 index 0000000..7ac66d2 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/nl.js @@ -0,0 +1,21 @@ +CKEDITOR.plugins.setLang('youtube', 'nl', { + button : 'Youtube video insluiten', + title : 'Youtube video insluiten', + txtEmbed : 'Plak embedcode hier', + txtUrl : 'Plak video URL', + txtWidth : 'Breedte', + txtHeight : 'Hoogte', + chkRelated : 'Toon gesuggereerde video aan het einde van de video', + txtStartAt : 'Starten op (ss of mm:ss of hh:mm:ss)', + chkPrivacy : 'Privacy-enhanced mode inschakelen', + chkOlderCode : 'Gebruik oude embedcode', + chkAutoplay: 'Automatisch starten', + noCode : 'U moet een embedcode of url ingeven', + invalidEmbed : 'De ingegeven embedcode lijkt niet geldig', + invalidUrl : 'De ingegeven url lijkt niet geldig', + or : 'of', + noWidth : 'U moet een breedte ingeven', + invalidWidth : 'U moet een geldige breedte ingeven', + noHeight : 'U moet een hoogte ingeven', + invalidHeight : 'U moet een geldige starttijd ingeven' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/nl_1.js b/libraries/ckeditor/plugins/youtube/lang/nl_1.js new file mode 100644 index 0000000..cd7b950 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/nl_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'nl', { + button : 'Youtube video insluiten', + title : 'Youtube video insluiten', + txtEmbed : 'Plak embedcode hier', + txtUrl : 'Plak video URL', + txtWidth : 'Breedte', + txtHeight : 'Hoogte', + chkRelated : 'Toon gesuggereerde video aan het einde van de video', + txtStartAt : 'Starten op (ss of mm:ss of hh:mm:ss)', + chkPrivacy : 'Privacy-enhanced mode inschakelen', + chkOlderCode : 'Gebruik oude embedcode', + chkAutoplay: 'Automatisch starten', + noCode : 'U moet een embedcode of url ingeven', + invalidEmbed : 'De ingegeven embedcode lijkt niet geldig', + invalidUrl : 'De ingegeven url lijkt niet geldig', + or : 'of', + noWidth : 'U moet een breedte ingeven', + invalidWidth : 'U moet een geldige breedte ingeven', + noHeight : 'U moet een hoogte ingeven', + invalidHeight : 'U moet een geldige starttijd ingeven', + invalidTime : 'Inform a valid start time', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/nn.js b/libraries/ckeditor/plugins/youtube/lang/nn.js new file mode 100644 index 0000000..37abf41 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/nn.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'nn', { + button : 'Bygg inn YouTube-video', + title : 'Bygg inn YouTube-video', + txtEmbed : 'Lim inn embed-kode her', + txtUrl : 'Lim inn YouTube video-URL', + txtWidth : 'Breidde', + txtHeight : 'Høgde', + chkRelated : 'Vis foreslåtte videoar når videoen er ferdig', + txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)', + chkPrivacy : 'Bruk personverntilpassa modus', + chkOlderCode : 'Bruk gamal embedkode', + chkAutoplay: 'Spel automatisk', + noCode : 'Du må leggja inn ein embed-kode eller URL', + invalidEmbed : 'Emded-koden du la inn ser ikkje ut til å vera gyldig', + invalidUrl : 'URLen du la inn ser ikkje ut til å vera gyldig', + or : 'eller', + noWidth : 'Du må leggja inn breidde', + invalidWidth : 'Legg inn ei gyldig breidde', + noHeight : 'Du må leggja inn høgde', + invalidHeight : 'Legg inn ei gyldig høgde', + invalidTime : 'Legg inn gyldig starttid', + txtResponsive : 'Gjer responsiv (ignorer breidde og høgde, tilpass breidda på sida)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/pl.js b/libraries/ckeditor/plugins/youtube/lang/pl.js new file mode 100644 index 0000000..deb3e92 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/pl.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'pl', { + button : 'Załacznik wideo z Youtube', + title : 'Załacznik wideo z Youtube', + txtEmbed : 'Wklej kod do umieszczenia', + txtUrl : 'Wklej link URL do wideo', + txtWidth : 'Szerokość', + txtHeight : 'Wysokość', + chkRelated : 'Pokaż sugerowane filmy po zakończeniu odtwarzania', + txtStartAt : 'Rozpocznij od (ss lub mm:ss lub gg:mm:ss)', + chkPrivacy : 'Włącz rozszerzony tryb prywatności', + chkOlderCode : 'Użyj starego kodu', + chkAutoplay: 'Autoodtwarzanie', + noCode : 'Musisz wprowadzić kod lub link URL', + invalidEmbed : 'Wprowadzony kod nie jest poprawny', + invalidUrl : 'Wprowadzony link URL nie jest poprawny', + or : 'lub', + noWidth : 'Musisz wpisać szerokość', + invalidWidth : 'Wprowadzona szerokość nie jest poprawna', + noHeight : 'Musisz wprowadzić wysokość', + invalidHeight : 'Wprowadzona wysokość nie jest poprawna', + invalidTime : 'Musisz wprowadzić poprawny czas rozpoczęcia' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/pl_1.js b/libraries/ckeditor/plugins/youtube/lang/pl_1.js new file mode 100644 index 0000000..2524a5e --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/pl_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'pl', { + button : 'Załącznik wideo z YouTube', + title : 'Załącznik wideo z YouTube', + txtEmbed : 'Wklej kod do umieszczenia', + txtUrl : 'Wklej adres URL do wideo z YouTube', + txtWidth : 'Szerokość', + txtHeight : 'Wysokość', + chkRelated : 'Pokaż sugerowane filmy po zakończeniu odtwarzania', + txtStartAt : 'Rozpocznij od (ss lub mm:ss lub gg:mm:ss)', + chkPrivacy : 'Włącz rozszerzony tryb prywatności', + chkOlderCode : 'Użyj starego kodu', + chkAutoplay: 'Autoodtwarzanie', + noCode : 'Musisz wprowadzić kod lub adres URL', + invalidEmbed : 'Wprowadzony kod nie jest poprawny', + invalidUrl : 'Wprowadzony adres URL nie jest poprawny', + or : 'lub', + noWidth : 'Musisz wpisać szerokość', + invalidWidth : 'Wprowadzona szerokość nie jest poprawna', + noHeight : 'Musisz wprowadzić wysokość', + invalidHeight : 'Wprowadzona wysokość nie jest poprawna', + invalidTime : 'Musisz wprowadzić poprawny czas rozpoczęcia', + txtResponsive : 'El. responsywny (ignoruj szerokość i wysokość, dopasuj do szerokości)' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/youtube/lang/pt.js b/libraries/ckeditor/plugins/youtube/lang/pt.js new file mode 100644 index 0000000..e468c55 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/pt.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'pt', { + button : 'Inserir Vídeo do Youtube', + title : 'Inserir Vídeo do Youtube', + txtEmbed : 'Cole aqui o código embed de um vídeo do Youtube', + txtUrl : 'Cole aqui uma URL de um vídeo do Youtube', + txtWidth : 'Largura', + txtHeight : 'Altura', + chkRelated : 'Mostrar vídeos sugeridos ao final do vídeo', + txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Ativar o modo de privacidade aprimorada', + chkOlderCode : 'Usar código de incorporação antigo', + chkAutoplay : 'Reproduzir automaticamente', + noCode : 'Você precisa informar um código embed ou uma URL', + invalidEmbed : 'O código informado não parece ser válido', + invalidUrl : 'A URL informada não parece ser válida', + or : 'ou', + noWidth : 'Você deve informar a largura do vídeo', + invalidWidth : 'Informe uma largura válida', + noHeight : 'Você deve informar a altura do vídeo', + invalidHeight : 'Informe uma altura válida', + invalidTime : 'O tempo informado é inválido' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/pt_1.js b/libraries/ckeditor/plugins/youtube/lang/pt_1.js new file mode 100644 index 0000000..2cfcfdd --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/pt_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'pt', { + button : 'Inserir Vídeo do Youtube', + title : 'Inserir Vídeo do Youtube', + txtEmbed : 'Cole aqui o código embed de um vídeo do Youtube', + txtUrl : 'Cole aqui uma URL de um vídeo do Youtube', + txtWidth : 'Largura', + txtHeight : 'Altura', + chkRelated : 'Mostrar vídeos sugeridos ao final do vídeo', + txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Ativar o modo de privacidade aprimorada', + chkOlderCode : 'Usar código de incorporação antigo', + chkAutoplay : 'Reproduzir automaticamente', + noCode : 'Você precisa informar um código embed ou uma URL', + invalidEmbed : 'O código informado não parece ser válido', + invalidUrl : 'A URL informada não parece ser válida', + or : 'ou', + noWidth : 'Você deve informar a largura do vídeo', + invalidWidth : 'Informe uma largura válida', + noHeight : 'Você deve informar a altura do vídeo', + invalidHeight : 'Informe uma altura válida', + invalidTime : 'O tempo informado é inválido', + txtResponsive : 'Vídeo responsivo' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/ru.js b/libraries/ckeditor/plugins/youtube/lang/ru.js new file mode 100644 index 0000000..ce4e19a --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ru.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'ru', { + button : 'Вставить YouTube видео', + title : 'Вставить YouTube видео', + txtEmbed : 'Вставьте HTML-код сюда', + txtUrl : 'Вставьте адрес видео (URL)', + txtWidth : 'Ширина', + txtHeight : 'Высота', + chkRelated : 'Показать похожие видео после завершения просмотра', + txtStartAt : 'Начать с (сс или мм:сс или чч:мм:сс)', + chkPrivacy : 'Включить режим повышенной конфиденциальности', + chkOlderCode : 'Использовать старый код вставки', + chkAutoplay: 'Автозапуск', + noCode : 'Вы должны ввести HTML-код или адрес', + invalidEmbed : 'Ваш HTML-код не похож на правильный', + invalidUrl : 'Ваш адрес видео не похож на правильный', + or : 'или', + noWidth : 'Вы должны указать ширину', + invalidWidth : 'Укажите правильную ширину', + noHeight : 'Вы должны указать высоту', + invalidHeight : 'Укажите правильную высоту', + invalidTime : 'Укажите правильное время начала' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/ru_1.js b/libraries/ckeditor/plugins/youtube/lang/ru_1.js new file mode 100644 index 0000000..75efb95 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/ru_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'ru', { + button : 'Вставить YouTube видео', + title : 'Вставить YouTube видео', + txtEmbed : 'Вставьте HTML-код сюда', + txtUrl : 'Вставьте адрес видео (URL)', + txtWidth : 'Ширина', + txtHeight : 'Высота', + chkRelated : 'Показать похожие видео после завершения просмотра', + txtStartAt : 'Начать с (сс или мм:сс или чч:мм:сс)', + chkPrivacy : 'Включить режим повышенной конфиденциальности', + chkOlderCode : 'Использовать старый код вставки', + chkAutoplay: 'Автозапуск', + noCode : 'Вы должны ввести HTML-код или адрес', + invalidEmbed : 'Ваш HTML-код не похож на правильный', + invalidUrl : 'Ваш адрес видео не похож на правильный', + or : 'или', + noWidth : 'Вы должны указать ширину', + invalidWidth : 'Укажите правильную ширину', + noHeight : 'Вы должны указать высоту', + invalidHeight : 'Укажите правильную высоту', + invalidTime : 'Укажите правильное время начала', + txtResponsive : 'Растягиваемое видео' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/sk.js b/libraries/ckeditor/plugins/youtube/lang/sk.js new file mode 100644 index 0000000..e5e9103 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/sk.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'sk', { + button : 'Vložiť YouTube video', + title : 'Vložiť YouTube video', + txtEmbed : 'Vložiť Youtube Embed Video kódu', + txtUrl : 'Vložiť pomocou YouTube video URL', + txtWidth : 'Šírka', + txtHeight : 'Výška', + chkRelated : 'Zobraziť odporúčané videá po prehratí', + txtStartAt : 'Začať prehrávanie videa (ss alebo mm:ss alebo hh:mm:ss)', + chkPrivacy : 'Povoliť pokročilý mód súkromia', + chkOlderCode : 'Použiť starú metódu vkladania', + chkAutoplay: 'Automatické prehrávanie', + noCode : 'Musíte vložiť Youtube Embed kód alebo URL', + invalidEmbed : 'Vložený kód nie je valídny', + invalidUrl : 'Vložená URL nie je platná', + or : 'alebo', + noWidth : 'Prosím, zadajte šírku videa', + invalidWidth : 'Zadajte valídnu šírku videa', + noHeight : 'Prosím, zadajte výšku videa', + invalidHeight : 'Zadajte valídnu výšku videa', + invalidTime : 'Zadajte valídny formát začiatku prehrávania videa', + txtResponsive : 'Prispôsobit rozmery videa rozmerom obrazovky (ignoruje šírku a výšku, prispôsobí sa šírke obrazovky)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/tr.js b/libraries/ckeditor/plugins/youtube/lang/tr.js new file mode 100644 index 0000000..c2505f2 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/tr.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'tr', { + button : 'Youtube Video Gömün (Embed)', + title : 'Youtube Video', + txtEmbed : 'Youtube gömülü kodu (embed) buraya yapıştırınız', + txtUrl : 'Youtube linkinizi buraya yapıştırınız', + txtWidth : 'Genişlik', + txtHeight : 'Yükseklik', + chkRelated : 'Önerilen videoları video bitiminde göster', + txtStartAt : 'Video başlangıç anı (ss ya da dd:ss ya da ss:dd:ss)', + chkPrivacy : 'Gizlilik modunu etkinleştir', + chkOlderCode : 'Eski gömülü kodu (embed) kullan', + chkAutoplay: 'Otomatik', + noCode : 'Gömülü kod (embed) veya url yapıştırmak zorundasınız', + invalidEmbed : 'Verdiğiniz gömülü kod (embed) ile video bulunamadı', + invalidUrl : 'Verdiğiniz linkte video bulunamadı', + or : 'ya da', + noWidth : 'Genişliği belirtmek zorundasınız', + invalidWidth : 'Bir genişlik belirtin', + noHeight : 'Yükseliği belirtmek zorundasınız', + invalidHeight : 'Yükseklik belirtin', + invalidTime : 'Başlangıç anını doğru girin, örneğin: 13 (13. saniye) ya da 12:25 (12. dakika 25. saniye) ya da 01.25.33 (1 saat 25 dakika 33 saniye)' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/tr_1.js b/libraries/ckeditor/plugins/youtube/lang/tr_1.js new file mode 100644 index 0000000..66f6e37 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/tr_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'tr', { + button : 'Youtube Video Gömün (Embed)', + title : 'Youtube Video', + txtEmbed : 'Youtube gömülü kodu (embed) buraya yapıştırınız', + txtUrl : 'Youtube linkinizi buraya yapıştırınız', + txtWidth : 'Genişlik', + txtHeight : 'Yükseklik', + chkRelated : 'Önerilen videoları video bitiminde göster', + txtStartAt : 'Video başlangıç anı (ss ya da dd:ss ya da ss:dd:ss)', + chkPrivacy : 'Gizlilik modunu etkinleştir', + chkOlderCode : 'Eski gömülü kodu (embed) kullan', + chkAutoplay: 'Otomatik', + noCode : 'Gömülü kod (embed) veya url yapıştırmak zorundasınız', + invalidEmbed : 'Verdiğiniz gömülü kod (embed) ile video bulunamadı', + invalidUrl : 'Verdiğiniz linkte video bulunamadı', + or : 'ya da', + noWidth : 'Genişliği belirtmek zorundasınız', + invalidWidth : 'Bir genişlik belirtin', + noHeight : 'Yükseliği belirtmek zorundasınız', + invalidHeight : 'Yükseklik belirtin', + invalidTime : 'Başlangıç anını doğru girin, örneğin: 13 (13. saniye) ya da 12:25 (12. dakika 25. saniye) ya da 01.25.33 (1 saat 25 dakika 33 saniye)', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/vi.js b/libraries/ckeditor/plugins/youtube/lang/vi.js new file mode 100644 index 0000000..163fb32 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/vi.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang('youtube', 'vi', { + button : 'Embed Youtube Video', + title : 'Nhúng Video Youtube', + txtEmbed : 'Dãn mã nhúng Embed vào đây', + txtUrl : 'Dãn đường dẫn video Youtube', + txtWidth : 'Rộng', + txtHeight : 'Cao', + chkRelated : 'Hiển thị các video được đề xuất khi video kết thúc', + txtStartAt : 'Bắt đầu (ss hoặc mm:ss hoặc hh:mm:ss)', + chkPrivacy : 'Kích hoạt chế độ bảo mật nâng cao', + chkOlderCode : 'Sử dụng mã nhúng cũ', + chkAutoplay: 'Tự động chạy video', + noCode : 'Bạn phải nhập mã nhúng hoặc URL', + invalidEmbed : 'Mã nhúng bạn đã nhập không đúng', + invalidUrl : 'URL bạn đã nhập không đúng', + or : 'hoặc', + noWidth : 'Bạn phải chiều rộng', + invalidWidth : 'Chiều rộng hợp lệ', + noHeight : 'Bạn phải chiều cao', + invalidHeight : 'Chiều cao hợp lệ', + invalidTime : 'Thời gian bắt đầu không đúng' +}); \ No newline at end of file diff --git a/libraries/ckeditor/plugins/youtube/lang/vi_1.js b/libraries/ckeditor/plugins/youtube/lang/vi_1.js new file mode 100644 index 0000000..3b640d6 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/vi_1.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'vi', { + button : 'Embed Youtube Video', + title : 'Nhúng Video Youtube', + txtEmbed : 'Dãn mã nhúng Embed vào đây', + txtUrl : 'Dãn đường dẫn video Youtube', + txtWidth : 'Rộng', + txtHeight : 'Cao', + chkRelated : 'Hiển thị các video được đề xuất khi video kết thúc', + txtStartAt : 'Bắt đầu (ss hoặc mm:ss hoặc hh:mm:ss)', + chkPrivacy : 'Kích hoạt chế độ bảo mật nâng cao', + chkOlderCode : 'Sử dụng mã nhúng cũ', + chkAutoplay: 'Tự động chạy video', + noCode : 'Bạn phải nhập mã nhúng hoặc URL', + invalidEmbed : 'Mã nhúng bạn đã nhập không đúng', + invalidUrl : 'URL bạn đã nhập không đúng', + or : 'hoặc', + noWidth : 'Bạn phải chiều rộng', + invalidWidth : 'Chiều rộng hợp lệ', + noHeight : 'Bạn phải chiều cao', + invalidHeight : 'Chiều cao hợp lệ', + invalidTime : 'Thời gian bắt đầu không đúng', + txtResponsive : 'Responsive video' +}); diff --git a/libraries/ckeditor/plugins/youtube/lang/zh.js b/libraries/ckeditor/plugins/youtube/lang/zh.js new file mode 100644 index 0000000..19913ed --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/lang/zh.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'zh', { + button: '嵌入 Youtube 影片', + title: '嵌入 Youtube 影片', + txtEmbed: '貼上嵌入碼', + txtUrl: '貼上 Youtube 影片 URL', + txtWidth: '寬', + txtHeight: '高', + txtResponsive: '使用自適應縮放模式 (忽略設定的長寬, 以寬為基準縮放)', + chkRelated: '影片結束時顯示建議影片', + txtStartAt: '開始時間 (ss or mm:ss or hh:mm:ss)', + chkPrivacy: '啟用加強隱私模式', + chkOlderCode: '使用舊的嵌入碼', + chkAutoplay: '自動播放', + noCode: '必須輸入嵌入碼', + invalidEmbed: '錯誤的嵌入碼', + invalidUrl: '錯誤的URL', + or: '或', + noWidth: '必須設定寬', + invalidWidth: '寬設定錯誤', + noHeight: '必須設定高', + invalidHeight: '高設定錯誤', + invalidTime: '開始時間設定錯誤' +}); diff --git a/libraries/ckeditor/plugins/youtube/plugin.js b/libraries/ckeditor/plugins/youtube/plugin.js new file mode 100644 index 0000000..133beba --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/plugin.js @@ -0,0 +1,364 @@ +/* +* Youtube Embed Plugin +* +* @author Jonnas Fonini +* @version 1.0.10 +*/ +( function() { + CKEDITOR.plugins.add( 'youtube', + { + lang: [ 'en', 'pt', 'ja', 'hu', 'it', 'fr', 'tr', 'ru', 'de', 'ar', 'nl', 'pl', 'vi'], + init: function( editor ) + { + editor.addCommand( 'youtube', new CKEDITOR.dialogCommand( 'youtube', { + allowedContent: 'iframe[!width,!height,!src,!frameborder,!allowfullscreen]; object param[*]' + })); + + editor.ui.addButton( 'Youtube', + { + label : editor.lang.youtube.button, + toolbar : 'insert', + command : 'youtube', + icon : this.path + 'images/icon.png' + }); + + CKEDITOR.dialog.add( 'youtube', function ( instance ) + { + var video; + + return { + title : editor.lang.youtube.title, + minWidth : 500, + minHeight : 200, + contents : + [{ + id : 'youtubePlugin', + expand : true, + elements : + [{ + id : 'txtEmbed', + type : 'textarea', + label : editor.lang.youtube.txtEmbed, + autofocus : 'autofocus', + onChange : function ( api ) + { + handleEmbedChange( this, api ); + }, + onKeyUp : function ( api ) + { + handleEmbedChange( this, api ); + }, + validate : function () + { + if ( this.isEnabled() ) + { + if ( !this.getValue() ) + { + alert( editor.lang.youtube.noCode ); + return false; + } + else + if ( this.getValue().length === 0 || this.getValue().indexOf( '//' ) === -1 ) + { + alert( editor.lang.youtube.invalidEmbed ); + return false; + } + } + } + }, + { + type : 'html', + html : editor.lang.youtube.or + '
          ' + }, + { + type : 'hbox', + widths : [ '70%', '15%', '15%' ], + children : + [ + { + id : 'txtUrl', + type : 'text', + label : editor.lang.youtube.txtUrl, + onChange : function ( api ) + { + handleLinkChange( this, api ); + }, + onKeyUp : function ( api ) + { + handleLinkChange( this, api ); + }, + validate : function () + { + if ( this.isEnabled() ) + { + if ( !this.getValue() ) + { + alert( editor.lang.youtube.noCode ); + return false; + } + else{ + video = ytVidId(this.getValue()); + + if ( this.getValue().length === 0 || video === false) + { + alert( editor.lang.youtube.invalidUrl ); + return false; + } + } + } + } + }, + { + type : 'text', + id : 'txtWidth', + width : '60px', + label : editor.lang.youtube.txtWidth, + 'default' : editor.config.youtube_width != null ? editor.config.youtube_width : '640', + validate : function () + { + if ( this.getValue() ) + { + var width = parseInt ( this.getValue() ) || 0; + + if ( width === 0 ) + { + alert( editor.lang.youtube.invalidWidth ); + return false; + } + } + else { + alert( editor.lang.youtube.noWidth ); + return false; + } + } + }, + { + type : 'text', + id : 'txtHeight', + width : '60px', + label : editor.lang.youtube.txtHeight, + 'default' : editor.config.youtube_height != null ? editor.config.youtube_height : '360', + validate : function () + { + if ( this.getValue() ) + { + var height = parseInt ( this.getValue() ) || 0; + + if ( height === 0 ) + { + alert( editor.lang.youtube.invalidHeight ); + return false; + } + } + else { + alert( editor.lang.youtube.noHeight ); + return false; + } + } + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkRelated', + type : 'checkbox', + 'default' : editor.config.youtube_related != null ? editor.config.youtube_related : true, + label : editor.lang.youtube.chkRelated + }, + { + id : 'chkOlderCode', + type : 'checkbox', + 'default' : editor.config.youtube_older != null ? editor.config.youtube_older : false, + label : editor.lang.youtube.chkOlderCode + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkPrivacy', + type : 'checkbox', + label : editor.lang.youtube.chkPrivacy, + 'default' : editor.config.youtube_privacy != null ? editor.config.youtube_privacy : false + }, + { + id : 'chkAutoplay', + type : 'checkbox', + 'default' : editor.config.youtube_autoplay != null ? editor.config.youtube_autoplay : false, + label : editor.lang.youtube.chkAutoplay + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '55%'], + children : + [ + { + id : 'txtStartAt', + type : 'text', + label : editor.lang.youtube.txtStartAt, + validate : function () + { + if ( this.getValue() ) + { + var str = this.getValue(); + + if ( !/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/i.test( str ) ) + { + alert( editor.lang.youtube.invalidTime ); + return false; + } + } + } + }, + { + id: 'empty', + type: 'html', + html: '' + } + ] + } + ] + } + ], + onOk: function() + { + var content = ''; + + if ( this.getContentElement( 'youtubePlugin', 'txtEmbed' ).isEnabled() ) + { + content = this.getValueOf( 'youtubePlugin', 'txtEmbed' ); + } + else { + var url = '//', params = [], startSecs; + var width = this.getValueOf( 'youtubePlugin', 'txtWidth' ); + var height = this.getValueOf( 'youtubePlugin', 'txtHeight' ); + + if ( this.getContentElement( 'youtubePlugin', 'chkPrivacy' ).getValue() === true ) + { + url += 'www.youtube-nocookie.com/'; + } + else { + url += 'www.youtube.com/'; + } + + url += 'embed/' + video; + + if ( this.getContentElement( 'youtubePlugin', 'chkRelated' ).getValue() === false ) + { + params.push('rel=0'); + } + + if ( this.getContentElement( 'youtubePlugin', 'chkAutoplay' ).getValue() === true ) + { + params.push('autoplay=1'); + } + + startSecs = this.getValueOf( 'youtubePlugin', 'txtStartAt' ); + if ( startSecs ){ + var seconds = hmsToSeconds( startSecs ); + + params.push('start=' + seconds); + } + + if ( params.length > 0 ) + { + url = url + '?' + params.join( '&' ); + } + + if ( this.getContentElement( 'youtubePlugin', 'chkOlderCode' ).getValue() === true ) + { + url = url.replace('embed/', 'v/'); + url = url.replace(/&/g, '&'); + + if ( url.indexOf('?')== -1 ) + { + url += '?'; + } + else { + url += '&'; + } + url += 'hl=pt_BR&version=3'; + + content = ''; + content += ''; + content += ''; + content += ''; + content += ' 0 ) + { + el.getDialog().getContentElement( 'youtubePlugin', 'txtEmbed' ).disable(); + } + else { + el.getDialog().getContentElement( 'youtubePlugin', 'txtEmbed' ).enable(); + } +} + +function handleEmbedChange( el, api ) +{ + if ( el.getValue().length > 0 ) + { + el.getDialog().getContentElement( 'youtubePlugin', 'txtUrl' ).disable(); + } + else { + el.getDialog().getContentElement( 'youtubePlugin', 'txtUrl' ).enable(); + } +} + + +/** + * JavaScript function to match (and return) the video Id + * of any valid Youtube Url, given as input string. + * @author: Stephan Schmitz + * @url: http://stackoverflow.com/a/10315969/624466 + */ +function ytVidId( url ) +{ + var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + return ( url.match( p ) ) ? RegExp.$1 : false; +} + +/** + * Converts time in hms format to seconds only + */ +function hmsToSeconds( time ) +{ + var arr = time.split(':'), s = 0, m = 1; + + while (arr.length > 0) + { + s += m * parseInt(arr.pop(), 10); + m *= 60; + } + + return s; +} diff --git a/libraries/ckeditor/plugins/youtube/plugin_1.js b/libraries/ckeditor/plugins/youtube/plugin_1.js new file mode 100644 index 0000000..658fd05 --- /dev/null +++ b/libraries/ckeditor/plugins/youtube/plugin_1.js @@ -0,0 +1,388 @@ +/* +* Youtube Embed Plugin +* +* @author Jonnas Fonini +* @version 2.0.9 +*/ +( function() { + CKEDITOR.plugins.add( 'youtube', + { + lang: [ 'en', 'pt', 'ja', 'hu', 'it', 'fr', 'tr', 'ru', 'de', 'ar', 'nl', 'pl', 'vi', 'zh', 'el', 'he', 'es', 'nb', 'nn', 'fi', 'et', 'sk', 'cs'], + init: function( editor ) + { + editor.addCommand( 'youtube', new CKEDITOR.dialogCommand( 'youtube', { + allowedContent: 'div{*}; iframe{*}[!width,!height,!src,!frameborder,!allowfullscreen]; object param[*]' + })); + + editor.ui.addButton( 'Youtube', + { + label : editor.lang.youtube.button, + toolbar : 'insert', + command : 'youtube', + icon : this.path + 'images/icon.png' + }); + + CKEDITOR.dialog.add( 'youtube', function ( instance ) + { + var video; + + return { + title : editor.lang.youtube.title, + minWidth : 500, + minHeight : 200, + contents : + [{ + id : 'youtubePlugin', + expand : true, + elements : + [{ + id : 'txtEmbed', + type : 'textarea', + label : editor.lang.youtube.txtEmbed, + autofocus : 'autofocus', + onChange : function ( api ) + { + handleEmbedChange( this, api ); + }, + onKeyUp : function ( api ) + { + handleEmbedChange( this, api ); + }, + validate : function () + { + if ( this.isEnabled() ) + { + if ( !this.getValue() ) + { + alert( editor.lang.youtube.noCode ); + return false; + } + else + if ( this.getValue().length === 0 || this.getValue().indexOf( '//' ) === -1 ) + { + alert( editor.lang.youtube.invalidEmbed ); + return false; + } + } + } + }, + { + type : 'html', + html : editor.lang.youtube.or + '
          ' + }, + { + type : 'hbox', + widths : [ '70%', '15%', '15%' ], + children : + [ + { + id : 'txtUrl', + type : 'text', + label : editor.lang.youtube.txtUrl, + onChange : function ( api ) + { + handleLinkChange( this, api ); + }, + onKeyUp : function ( api ) + { + handleLinkChange( this, api ); + }, + validate : function () + { + if ( this.isEnabled() ) + { + if ( !this.getValue() ) + { + alert( editor.lang.youtube.noCode ); + return false; + } + else{ + video = ytVidId(this.getValue()); + + if ( this.getValue().length === 0 || video === false) + { + alert( editor.lang.youtube.invalidUrl ); + return false; + } + } + } + } + }, + { + type : 'text', + id : 'txtWidth', + width : '60px', + label : editor.lang.youtube.txtWidth, + 'default' : editor.config.youtube_width != null ? editor.config.youtube_width : '640', + validate : function () + { + if ( this.getValue() ) + { + var width = parseInt ( this.getValue() ) || 0; + + if ( width === 0 ) + { + alert( editor.lang.youtube.invalidWidth ); + return false; + } + } + else { + alert( editor.lang.youtube.noWidth ); + return false; + } + } + }, + { + type : 'text', + id : 'txtHeight', + width : '60px', + label : editor.lang.youtube.txtHeight, + 'default' : editor.config.youtube_height != null ? editor.config.youtube_height : '360', + validate : function () + { + if ( this.getValue() ) + { + var height = parseInt ( this.getValue() ) || 0; + + if ( height === 0 ) + { + alert( editor.lang.youtube.invalidHeight ); + return false; + } + } + else { + alert( editor.lang.youtube.noHeight ); + return false; + } + } + } + ] + }, + { + type : 'hbox', + widths : [ '100%' ], + children : + [ + { + id : 'chkResponsive', + type : 'checkbox', + label : editor.lang.youtube.txtResponsive, + 'default' : editor.config.youtube_responsive != null ? editor.config.youtube_responsive : false + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkRelated', + type : 'checkbox', + 'default' : editor.config.youtube_related != null ? editor.config.youtube_related : true, + label : editor.lang.youtube.chkRelated + }, + { + id : 'chkOlderCode', + type : 'checkbox', + 'default' : editor.config.youtube_older != null ? editor.config.youtube_older : false, + label : editor.lang.youtube.chkOlderCode + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkPrivacy', + type : 'checkbox', + label : editor.lang.youtube.chkPrivacy, + 'default' : editor.config.youtube_privacy != null ? editor.config.youtube_privacy : false + }, + { + id : 'chkAutoplay', + type : 'checkbox', + 'default' : editor.config.youtube_autoplay != null ? editor.config.youtube_autoplay : false, + label : editor.lang.youtube.chkAutoplay + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%'], + children : + [ + { + id : 'txtStartAt', + type : 'text', + label : editor.lang.youtube.txtStartAt, + validate : function () + { + if ( this.getValue() ) + { + var str = this.getValue(); + + if ( !/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/i.test( str ) ) + { + alert( editor.lang.youtube.invalidTime ); + return false; + } + } + } + }, + { + id: 'empty', + type: 'html', + html: '' + } + ] + } + ] + } + ], + onOk: function() + { + var content = ''; + var responsiveStyle=''; + + if ( this.getContentElement( 'youtubePlugin', 'txtEmbed' ).isEnabled() ) + { + content = this.getValueOf( 'youtubePlugin', 'txtEmbed' ); + } + else { + var url = '//', params = [], startSecs; + var width = this.getValueOf( 'youtubePlugin', 'txtWidth' ); + var height = this.getValueOf( 'youtubePlugin', 'txtHeight' ); + + if ( this.getContentElement( 'youtubePlugin', 'chkPrivacy' ).getValue() === true ) + { + url += 'www.youtube-nocookie.com/'; + } + else { + url += 'www.youtube.com/'; + } + + url += 'embed/' + video; + + if ( this.getContentElement( 'youtubePlugin', 'chkRelated' ).getValue() === false ) + { + params.push('rel=0'); + } + + if ( this.getContentElement( 'youtubePlugin', 'chkAutoplay' ).getValue() === true ) + { + params.push('autoplay=1'); + } + + startSecs = this.getValueOf( 'youtubePlugin', 'txtStartAt' ); + if ( startSecs ){ + var seconds = hmsToSeconds( startSecs ); + + params.push('start=' + seconds); + } + + if ( params.length > 0 ) + { + url = url + '?' + params.join( '&' ); + } + + if ( this.getContentElement( 'youtubePlugin', 'chkResponsive').getValue() === true ) { + content += '
          '; + responsiveStyle = 'style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;"'; + } + + if ( this.getContentElement( 'youtubePlugin', 'chkOlderCode' ).getValue() === true ) + { + url = url.replace('embed/', 'v/'); + url = url.replace(/&/g, '&'); + + if ( url.indexOf('?') === -1 ) + { + url += '?'; + } + else { + url += '&'; + } + url += 'hl=' + (this.getParentEditor().config.language ? this.getParentEditor().config.language : 'en') + '&version=3'; + + content += ''; + content += ''; + content += ''; + content += ''; + content += ' 0 ) + { + el.getDialog().getContentElement( 'youtubePlugin', 'txtEmbed' ).disable(); + } + else { + el.getDialog().getContentElement( 'youtubePlugin', 'txtEmbed' ).enable(); + } +} + +function handleEmbedChange( el, api ) +{ + if ( el.getValue().length > 0 ) + { + el.getDialog().getContentElement( 'youtubePlugin', 'txtUrl' ).disable(); + } + else { + el.getDialog().getContentElement( 'youtubePlugin', 'txtUrl' ).enable(); + } +} + + +/** + * JavaScript function to match (and return) the video Id + * of any valid Youtube Url, given as input string. + * @author: Stephan Schmitz + * @url: http://stackoverflow.com/a/10315969/624466 + */ +function ytVidId( url ) +{ + var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + return ( url.match( p ) ) ? RegExp.$1 : false; +} + +/** + * Converts time in hms format to seconds only + */ +function hmsToSeconds( time ) +{ + var arr = time.split(':'), s = 0, m = 1; + + while (arr.length > 0) + { + s += m * parseInt(arr.pop(), 10); + m *= 60; + } + + return s; +} diff --git a/libraries/ckeditor/skins/moono-lisa/dialog.css b/libraries/ckeditor/skins/moono-lisa/dialog.css new file mode 100644 index 0000000..4806c2b --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/dialog_ie.css b/libraries/ckeditor/skins/moono-lisa/dialog_ie.css new file mode 100644 index 0000000..a5522cc --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/dialog_ie8.css b/libraries/ckeditor/skins/moono-lisa/dialog_ie8.css new file mode 100644 index 0000000..8833e5c --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button{min-height:18px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{min-height:18px}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{padding-top:4px;padding-bottom:2px}select.cke_dialog_ui_input_select{width:100%!important}select.cke_dialog_ui_input_select:focus{margin-left:1px;width:100%!important;padding-top:2px;padding-bottom:2px} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/dialog_iequirks.css b/libraries/ckeditor/skins/moono-lisa/dialog_iequirks.css new file mode 100644 index 0000000..590c5c2 --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%;margin-top:12px}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:1px solid #bcbcbc;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:2px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/editor.css b/libraries/ckeditor/skins/moono-lisa/editor.css new file mode 100644 index 0000000..e8ec511 --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/editor.css @@ -0,0 +1,1884 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset { + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + width: auto; + height: auto; + vertical-align: baseline; + box-sizing: content-box; + position: static; + transition: none; +} +.cke_reset_all, +.cke_reset_all *, +.cke_reset_all a, +.cke_reset_all textarea { + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + width: auto; + height: auto; + vertical-align: baseline; + box-sizing: content-box; + position: static; + transition: none; + border-collapse: collapse; + font: normal normal normal 12px Arial, Helvetica, Tahoma, Verdana, Sans-Serif; + color: #000; + text-align: left; + white-space: nowrap; + cursor: auto; + float: none; +} +.cke_reset_all .cke_rtl * { + text-align: right; +} +.cke_reset_all iframe { + vertical-align: inherit; +} +.cke_reset_all textarea { + white-space: pre-wrap; +} +.cke_reset_all textarea, +.cke_reset_all input[type="text"], +.cke_reset_all input[type="password"] { + cursor: text; +} +.cke_reset_all textarea[disabled], +.cke_reset_all input[type="text"][disabled], +.cke_reset_all input[type="password"][disabled] { + cursor: default; +} +.cke_reset_all fieldset { + padding: 10px; + border: 2px groove #e0dfe3; +} +.cke_reset_all select { + box-sizing: border-box; +} +.cke_reset_all table { + table-layout: auto; +} +.cke_chrome { + display: block; + border: 1px solid #d1d1d1; + padding: 0; +} +.cke_inner { + display: block; + background: #fff; + padding: 0; + -webkit-touch-callout: none; +} +.cke_float { + border: 0; +} +.cke_float .cke_inner { + padding-bottom: 0; +} +.cke_top, +.cke_contents, +.cke_bottom { + display: block; + overflow: hidden; +} +.cke_top { + border-bottom: 1px solid #d1d1d1; + background: #f8f8f8; + padding: 6px 8px 2px; + white-space: normal; +} +.cke_float .cke_top { + border: 1px solid #d1d1d1; +} +.cke_bottom { + padding: 6px 8px 2px; + position: relative; + border-top: 1px solid #d1d1d1; + background: #f8f8f8; +} +.cke_browser_ios .cke_contents { + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} +.cke_resizer { + width: 0; + height: 0; + overflow: hidden; + border-width: 10px 10px 0 0; + border-color: transparent #bcbcbc transparent transparent; + border-style: dashed solid dashed dashed; + font-size: 0; + vertical-align: bottom; + margin-top: 6px; + margin-bottom: 2px; +} +.cke_hc .cke_resizer { + font-size: 15px; + width: auto; + height: auto; + border-width: 0; +} +.cke_resizer_ltr { + cursor: se-resize; + float: right; + margin-right: -4px; +} +.cke_resizer_rtl { + border-width: 10px 0 0 10px; + border-color: transparent transparent transparent #bcbcbc; + border-style: dashed dashed dashed solid; + cursor: sw-resize; + float: left; + margin-left: -4px; + right: auto; +} +.cke_wysiwyg_div { + display: block; + height: 100%; + overflow: auto; + padding: 0 8px; + outline-style: none; + box-sizing: border-box; +} +.cke_panel { + visibility: visible; + width: 120px; + height: 100px; + overflow: hidden; + background-color: #fff; + border: 1px solid #d1d1d1; +} +.cke_menu_panel { + padding: 0; + margin: 0; +} +.cke_combopanel { + width: 150px; + height: 170px; +} +.cke_panel_frame { + width: 100%; + height: 100%; + font-size: 12px; + overflow: auto; + overflow-x: hidden; +} +.cke_panel_container { + overflow-y: auto; + overflow-x: hidden; +} +.cke_panel_block:focus { + outline: 0; +} +.cke_panel_list { + margin: 0; + padding: 0; + list-style-type: none; + white-space: nowrap; +} +.cke_panel_listItem { + margin: 0; + padding: 0; +} +.cke_panel_listItem a { + padding: 6px 7px; + display: block; + color: inherit !important; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; +} +.cke_hc .cke_panel_listItem a { + border-style: none; +} +.cke_panel_listItem.cke_selected a, +.cke_panel_listItem a:hover, +.cke_panel_listItem a:focus, +.cke_panel_listItem a:active { + background-color: #e9e9e9; +} +.cke_panel_listItem a:focus { + outline: 1px dotted #000; +} +.cke_hc .cke_panel_listItem a:hover, +.cke_hc .cke_panel_listItem a:focus, +.cke_hc .cke_panel_listItem a:active { + border: 2px solid; + padding: 4px 5px; +} +.cke_panel_listItem p, +.cke_panel_listItem h1, +.cke_panel_listItem h2, +.cke_panel_listItem h3, +.cke_panel_listItem h4, +.cke_panel_listItem h5, +.cke_panel_listItem h6, +.cke_panel_listItem pre { + margin-top: 0; + margin-bottom: 0; +} +.cke_panel_grouptitle { + cursor: default; + font-size: 11px; + font-weight: bold; + white-space: nowrap; + margin: 0; + padding: 6px 6px 7px 6px; + color: #484848; + border-bottom: 1px solid #d1d1d1; + background: #f8f8f8; +} +.cke_colorblock { + padding: 10px; + font-size: 11px; + font-family: "Microsoft Sans Serif", Tahoma, Arial, Verdana, Sans-Serif; +} +.cke_colorblock, +.cke_colorblock a { + text-decoration: none; + color: #000; +} +a.cke_colorbox { + padding: 2px; + float: left; + width: 20px; + height: 20px; +} +.cke_rtl a.cke_colorbox { + float: right; +} +a:hover.cke_colorbox, +a:focus.cke_colorbox, +a:active.cke_colorbox { + outline: 0; + padding: 0; + border: 2px solid #139ff7; +} +a:hover.cke_colorbox { + border-color: #bcbcbc; +} +span.cke_colorbox { + width: 20px; + height: 20px; + float: left; +} +.cke_rtl span.cke_colorbox { + float: right; +} +a.cke_colorauto, +a.cke_colormore { + border: #fff 1px solid; + padding: 3px; + display: block; + cursor: pointer; +} +a.cke_colorauto { + padding: 0; + border: 1px solid transparent; + margin-bottom: 6px; + height: 26px; + line-height: 26px; +} +a.cke_colormore { + margin-top: 10px; + height: 20px; + line-height: 19px; +} +a:hover.cke_colorauto, +a:hover.cke_colormore, +a:focus.cke_colorauto, +a:focus.cke_colormore, +a:active.cke_colorauto, +a:active.cke_colormore { + outline: 0; + border: #139ff7 1px solid; + background-color: #f8f8f8; +} +a:hover.cke_colorauto, +a:hover.cke_colormore { + border-color: #bcbcbc; +} +.cke_colorauto span.cke_colorbox { + width: 18px; + height: 18px; + border: 1px solid #808080; + margin-left: 1px; + margin-top: 3px; +} +.cke_rtl .cke_colorauto span.cke_colorbox { + margin-left: 0; + margin-right: 1px; +} +span.cke_colorbox[style*="#ffffff"], +span.cke_colorbox[style*="#FFFFFF"], +span.cke_colorbox[style="background-color:#fff"], +span.cke_colorbox[style="background-color:#FFF"], +span.cke_colorbox[style*="rgb(255,255,255)"], +span.cke_colorbox[style*="rgb(255, 255, 255)"] { + border: 1px solid #808080; + width: 18px; + height: 18px; +} +.cke_toolbar { + float: left; +} +.cke_rtl .cke_toolbar { + float: right; +} +.cke_toolgroup { + border: 0; + float: left; + margin: 1px 2px 6px 0; + padding-right: 3px; +} +.cke_rtl .cke_toolgroup { + float: right; + margin: 1px 0 6px 2px; + padding-left: 3px; + padding-right: 0; +} +.cke_hc .cke_toolgroup { + margin-right: 5px; + margin-bottom: 5px; +} +.cke_hc.cke_rtl .cke_toolgroup { + margin-right: 0; + margin-left: 5px; +} +a.cke_button { + display: inline-block; + height: 18px; + padding: 4px 6px; + outline: 0; + cursor: default; + float: left; + border: 0; + position: relative; +} +.cke_rtl a.cke_button { + float: right; +} +.cke_hc a.cke_button { + border: 1px solid black; + padding: 3px 5px; + margin: 0 3px 5px 0; +} +.cke_hc.cke_rtl a.cke_button { + margin: 0 0 5px 3px; +} +a.cke_button_on { + background: #fff; + border: 1px #bcbcbc solid; + padding: 3px 5px; +} +a.cke_button_off:hover, +a.cke_button_off:focus, +a.cke_button_off:active { + background: #e5e5e5; + border: 1px #bcbcbc solid; + padding: 3px 5px; +} +.cke_hc a.cke_button_on, +.cke_hc a.cke_button_off:hover, +.cke_hc a.cke_button_off:focus, +.cke_hc a.cke_button_off:active { + background: #e5e5e5; + border: 3px solid #000; + padding: 1px 3px; +} +a.cke_button_disabled:hover, +a.cke_button_disabled:focus, +a.cke_button_disabled:active { + border: 0; + padding: 4px 6px; + background-color: transparent; +} +a.cke_button_disabled:focus { + border: 1px #bcbcbc solid; + padding: 3px 5px; +} +.cke_hc a.cke_button_disabled:hover, +.cke_hc a.cke_button_disabled:focus, +.cke_hc a.cke_button_disabled:active { + border: 1px solid #acacac; + padding: 3px 5px; + margin: 0 3px 5px 0; +} +.cke_hc a.cke_button_disabled:focus { + border: 3px solid #000; + padding: 1px 3px; +} +.cke_hc.cke_rtl a.cke_button_disabled:hover, +.cke_hc.cke_rtl a.cke_button_disabled:focus, +.cke_hc.cke_rtl a.cke_button_disabled:active { + margin: 0 0 5px 3px; +} +a.cke_button_disabled .cke_button_icon, +a.cke_button_disabled .cke_button_arrow { + opacity: 0.3; +} +.cke_hc a.cke_button_disabled { + border-color: #acacac; +} +.cke_hc a.cke_button_disabled .cke_button_icon, +.cke_hc a.cke_button_disabled .cke_button_label { + opacity: 0.5; +} +.cke_toolgroup a.cke_button:last-child:after, +.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after { + content: ""; + position: absolute; + height: 18px; + width: 0; + border-right: 1px solid #bcbcbc; + margin-top: 4px; + top: 0; + right: -3px; +} +.cke_rtl .cke_toolgroup a.cke_button:last-child:after, +.cke_rtl + .cke_toolgroup + a.cke_button.cke_button_disabled:hover:last-child:after { + border-right: 0; + right: auto; + border-left: 1px solid #bcbcbc; + top: 0; + left: -3px; +} +.cke_hc .cke_toolgroup a.cke_button:last-child:after, +.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after, +.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after { + border-color: #000; + top: 0; + right: -7px; +} +.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after, +.cke_hc.cke_rtl + .cke_toolgroup + a.cke_button.cke_button_disabled:last-child:after, +.cke_hc.cke_rtl + .cke_toolgroup + a.cke_button.cke_button_disabled:hover:last-child:after { + top: 0; + right: auto; + left: -7px; +} +.cke_toolgroup a.cke_button:hover:last-child:after, +.cke_toolgroup a.cke_button.cke_button_on:last-child:after { + top: -1px; + right: -4px; +} +.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after, +.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after { + top: -1px; + right: auto; + left: -4px; +} +.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after, +.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after { + top: -2px; + right: -9px; +} +.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after, +.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after { + top: -2px; + right: auto; + left: -9px; +} +.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after { + content: none; + border: 0; + width: 0; + height: 0; +} +.cke_button_icon { + cursor: inherit; + background-repeat: no-repeat; + margin-top: 1px; + width: 16px; + height: 16px; + float: left; + display: inline-block; +} +.cke_rtl .cke_button_icon { + float: right; +} +.cke_hc .cke_button_icon { + display: none; +} +.cke_button_label { + display: none; + padding-left: 3px; + margin-top: 1px; + line-height: 17px; + vertical-align: middle; + float: left; + cursor: default; + color: #484848; +} +.cke_rtl .cke_button_label { + padding-right: 3px; + padding-left: 0; + float: right; +} +.cke_hc .cke_button_label { + padding: 0; + display: inline-block; + font-size: 12px; +} +.cke_button_arrow { + display: inline-block; + margin: 8px 0 0 1px; + width: 0; + height: 0; + cursor: default; + vertical-align: top; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid #484848; +} +.cke_rtl .cke_button_arrow { + margin-right: 5px; + margin-left: 0; +} +.cke_hc .cke_button_arrow { + font-size: 10px; + margin: 3px 0 0 3px; + width: auto; + border: 0; +} +.cke_toolbar_separator { + float: left; + background-color: #bcbcbc; + margin: 4px 2px 0 2px; + height: 18px; + width: 1px; +} +.cke_rtl .cke_toolbar_separator { + float: right; +} +.cke_hc .cke_toolbar_separator { + background-color: #000; + margin-left: 2px; + margin-right: 5px; + margin-bottom: 9px; +} +.cke_hc.cke_rtl .cke_toolbar_separator { + margin-left: 5px; + margin-right: 2px; +} +.cke_toolbar_break { + display: block; + clear: left; +} +.cke_rtl .cke_toolbar_break { + clear: right; +} +a.cke_toolbox_collapser { + width: 12px; + height: 11px; + float: right; + margin: 11px 0 0; + font-size: 0; + cursor: default; + text-align: center; + border: 1px solid #bcbcbc; +} +.cke_rtl .cke_toolbox_collapser { + float: left; +} +.cke_toolbox_collapser:hover { + background: #e5e5e5; +} +.cke_toolbox_collapser.cke_toolbox_collapser_min { + margin: 0 2px 4px; +} +.cke_toolbox_collapser .cke_arrow { + display: inline-block; + height: 0; + width: 0; + font-size: 0; + margin-top: 1px; + border: 3px solid transparent; + border-bottom-color: #484848; +} +.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow { + margin-top: 4px; + border-bottom-color: transparent; + border-top-color: #484848; +} +.cke_hc .cke_toolbox_collapser .cke_arrow { + font-size: 8px; + width: auto; + border: 0; + margin-top: 0; +} +.cke_menuitem span { + cursor: default; +} +.cke_menubutton { + display: block; +} +.cke_hc .cke_menubutton { + padding: 2px; +} +.cke_menubutton:hover, +.cke_menubutton:focus, +.cke_menubutton:active { + background-color: #e9e9e9; + display: block; + outline: 1px dotted; +} +.cke_menubutton:hover { + outline: 0; +} +.cke_hc .cke_menubutton:hover, +.cke_hc .cke_menubutton:focus, +.cke_hc .cke_menubutton:active { + border: 2px solid; + padding: 0; +} +.cke_menubutton_disabled:hover, +.cke_menubutton_disabled:focus, +.cke_menubutton_disabled:active { + background-color: transparent; + outline: 0; +} +.cke_menubutton_inner { + display: table-row; +} +.cke_menubutton_icon, +.cke_menubutton_label, +.cke_menuarrow { + display: table-cell; +} +.cke_menubutton_icon { + background-color: #f8f8f8; + padding: 6px 4px; +} +.cke_hc .cke_menubutton_icon { + height: 16px; + width: 0; + padding: 4px 0; +} +.cke_menubutton:hover .cke_menubutton_icon, +.cke_menubutton:focus .cke_menubutton_icon, +.cke_menubutton:active .cke_menubutton_icon { + background-color: #e9e9e9; +} +.cke_menubutton_disabled:hover .cke_menubutton_icon, +.cke_menubutton_disabled:focus .cke_menubutton_icon, +.cke_menubutton_disabled:active .cke_menubutton_icon { + background-color: #f8f8f8; + outline: 0; +} +.cke_menuitem .cke_menubutton_on { + background-color: #e9e9e9; + border: 1px solid #dedede; + outline: 0; +} +.cke_menubutton_on .cke_menubutton_icon { + padding-right: 3px; + background-color: #e9e9e9; +} +.cke_menubutton_label { + padding: 0 5px; + background-color: transparent; + width: 100%; + vertical-align: middle; +} +.cke_menubutton_shortcut { + color: #979797; +} +.cke_menubutton_disabled .cke_menubutton_label { + opacity: 0.3; + filter: alpha(opacity=30); +} +.cke_panel_frame .cke_menubutton_label { + display: none; +} +.cke_menuseparator { + background-color: #d1d1d1; + height: 1px; +} +.cke_menuarrow { + background: transparent url(images/arrow.png) no-repeat 0 10px; + padding: 0 5px; +} +.cke_rtl .cke_menuarrow { + background-position: 5px -13px; + background-repeat: no-repeat; +} +.cke_hc .cke_menuarrow { + background-image: none; +} +.cke_menuarrow span { + display: none; +} +.cke_hc .cke_menuarrow span { + vertical-align: middle; + display: inline; +} +.cke_combo { + display: inline-block; + float: left; + position: relative; + margin-bottom: 5px; +} +.cke_rtl .cke_combo { + float: right; +} +.cke_hc .cke_combo { + margin-top: 1px; + margin-bottom: 10px; +} +.cke_combo:after { + content: ""; + position: absolute; + height: 18px; + width: 0; + border-right: 1px solid #bcbcbc; + margin-top: 5px; + top: 0; + right: 0; +} +.cke_rtl .cke_combo:after { + border-right: 0; + border-left: 1px solid #bcbcbc; + right: auto; + left: 0; +} +.cke_hc .cke_combo:after { + border-color: #000; +} +a.cke_combo_button { + cursor: default; + display: inline-block; + float: left; + margin: 0; + padding: 1px; +} +.cke_rtl a.cke_combo_button { + float: right; +} +.cke_hc a.cke_combo_button { + padding: 4px; +} +.cke_combo_on a.cke_combo_button, +.cke_combo_off a.cke_combo_button:hover, +.cke_combo_off a.cke_combo_button:focus, +.cke_combo_off a.cke_combo_button:active { + background: #e5e5e5; + border: 1px solid #bcbcbc; + padding: 0 0 0 1px; + margin-left: -1px; +} +.cke_combo_off a.cke_combo_button:focus { + outline: 0; +} +.cke_combo_on a.cke_combo_button, +.cke_combo_off a.cke_combo_button:active { + background: #fff; +} +.cke_rtl .cke_combo_on a.cke_combo_button, +.cke_rtl .cke_combo_off a.cke_combo_button:hover, +.cke_rtl .cke_combo_off a.cke_combo_button:focus, +.cke_rtl .cke_combo_off a.cke_combo_button:active { + padding: 0 1px 0 0; + margin-left: 0; + margin-right: -1px; +} +.cke_hc .cke_combo_on a.cke_combo_button, +.cke_hc .cke_combo_off a.cke_combo_button:hover, +.cke_hc .cke_combo_off a.cke_combo_button:focus, +.cke_hc .cke_combo_off a.cke_combo_button:active { + border: 3px solid #000; + padding: 1px 1px 1px 2px; +} +.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button, +.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover, +.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus, +.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active { + padding: 1px 2px 1px 1px; +} +.cke_toolbar_start + .cke_combo_on a.cke_combo_button, +.cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover, +.cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus, +.cke_toolbar_start + .cke_combo_off a.cke_combo_button:active { + padding: 0 0 0 3px; + margin-left: -3px; +} +.cke_rtl .cke_toolbar_start + .cke_combo_on a.cke_combo_button, +.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover, +.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus, +.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active { + padding: 0 3px 0 0; + margin-left: 0; + margin-right: -3px; +} +.cke_hc .cke_toolbar > .cke_toolbar_start + .cke_combo_on a.cke_combo_button, +.cke_hc + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_hc + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_hc + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active { + padding: 1px 1px 1px 7px; + margin-left: -6px; +} +.cke_hc.cke_rtl + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_on + a.cke_combo_button, +.cke_hc.cke_rtl + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_hc.cke_rtl + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_hc.cke_rtl + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active { + padding: 1px 7px 1px 1px; + margin-left: 0; + margin-right: -6px; +} +.cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_on + a.cke_combo_button, +.cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active, +.cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_on + a.cke_combo_button, +.cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active { + padding: 0; + margin: 0; +} +.cke_hc + .cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_on + a.cke_combo_button, +.cke_hc + .cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_hc + .cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_hc + .cke_toolbox + .cke_toolbar:first-child + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active, +.cke_hc + .cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_on + a.cke_combo_button, +.cke_hc + .cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:hover, +.cke_hc + .cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:focus, +.cke_hc + .cke_toolbar_break + + .cke_toolbar + > .cke_toolbar_start + + .cke_combo_off + a.cke_combo_button:active { + padding: 1px; + margin: 0; +} +.cke_toolbar .cke_combo + .cke_toolbar_end, +.cke_toolbar .cke_combo + .cke_toolgroup { + margin-right: 0; + margin-left: 2px; +} +.cke_rtl .cke_toolbar .cke_combo + .cke_toolbar_end, +.cke_rtl .cke_toolbar .cke_combo + .cke_toolgroup { + margin-left: 0; + margin-right: 2px; +} +.cke_hc .cke_toolbar .cke_combo + .cke_toolbar_end, +.cke_hc .cke_toolbar .cke_combo + .cke_toolgroup { + margin-left: 5px; +} +.cke_hc.cke_rtl .cke_toolbar .cke_combo + .cke_toolbar_end, +.cke_hc.cke_rtl .cke_toolbar .cke_combo + .cke_toolgroup { + margin-left: 0; + margin-right: 5px; +} +.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n + 2):after { + content: none; + border: 0; + width: 0; + height: 0; +} +.cke_combo_text { + line-height: 26px; + padding-left: 10px; + text-overflow: ellipsis; + overflow: hidden; + float: left; + cursor: default; + color: #484848; + width: 60px; +} +.cke_rtl .cke_combo_text { + float: right; + text-align: right; + padding-left: 0; + padding-right: 10px; +} +.cke_hc .cke_combo_text { + line-height: 18px; + font-size: 12px; +} +.cke_combo_open { + cursor: default; + display: inline-block; + font-size: 0; + height: 19px; + line-height: 17px; + margin: 1px 10px 1px; + width: 5px; +} +.cke_hc .cke_combo_open { + height: 12px; +} +.cke_combo_arrow { + cursor: default; + margin: 11px 0 0; + float: left; + height: 0; + width: 0; + font-size: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid #484848; +} +.cke_hc .cke_combo_arrow { + font-size: 10px; + width: auto; + border: 0; + margin-top: 3px; +} +.cke_combo_label { + display: none; + float: left; + line-height: 26px; + vertical-align: top; + margin-right: 5px; +} +.cke_rtl .cke_combo_label { + float: right; + margin-left: 5px; + margin-right: 0; +} +.cke_combo_disabled .cke_combo_inlinelabel, +.cke_combo_disabled .cke_combo_open { + opacity: 0.3; +} +.cke_path { + float: left; + margin: -2px 0 2px; +} +a.cke_path_item, +span.cke_path_empty { + display: inline-block; + float: left; + padding: 3px 4px; + margin-right: 2px; + cursor: default; + text-decoration: none; + outline: 0; + border: 0; + color: #484848; + font-weight: bold; + font-size: 11px; +} +.cke_rtl .cke_path, +.cke_rtl .cke_path_item, +.cke_rtl .cke_path_empty { + float: right; +} +a.cke_path_item:hover, +a.cke_path_item:focus, +a.cke_path_item:active { + background-color: #e5e5e5; +} +.cke_hc a.cke_path_item:hover, +.cke_hc a.cke_path_item:focus, +.cke_hc a.cke_path_item:active { + border: 2px solid; + padding: 1px 2px; +} +.cke_button__source_label, +.cke_button__sourcedialog_label { + display: inline; +} +.cke_combopanel__fontsize { + width: 135px; +} +textarea.cke_source { + font-family: "Courier New", Monospace; + font-size: small; + background-color: #fff; + white-space: pre-wrap; + border: 0; + padding: 0; + margin: 0; + display: block; +} +.cke_wysiwyg_frame, +.cke_wysiwyg_div { + background-color: #fff; +} +.cke_notifications_area { + pointer-events: none; +} +.cke_notification { + pointer-events: auto; + position: relative; + margin: 10px; + width: 300px; + color: white; + text-align: center; + opacity: 0.95; + filter: alpha(opacity = 95); + -webkit-animation: fadeIn 0.7s; + animation: fadeIn 0.7s; +} +.cke_notification_message a { + color: #12306f; +} +@-webkit-keyframes fadeIn { + from { + opacity: 0.4; + } + to { + opacity: 0.95; + } +} +@keyframes fadeIn { + from { + opacity: 0.4; + } + to { + opacity: 0.95; + } +} +.cke_notification_success { + background: #72b572; + border: 1px solid #63a563; +} +.cke_notification_warning { + background: #c83939; + border: 1px solid #902b2b; +} +.cke_notification_info { + background: #2e9ad0; + border: 1px solid #0f74a8; +} +.cke_notification_info span.cke_notification_progress { + background-color: #0f74a8; + display: block; + padding: 0; + margin: 0; + height: 100%; + overflow: hidden; + position: absolute; + z-index: 1; +} +.cke_notification_message { + position: relative; + margin: 4px 23px 3px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + line-height: 18px; + z-index: 4; + text-overflow: ellipsis; + overflow: hidden; +} +.cke_notification_close { + background-image: url(images/close.png); + background-repeat: no-repeat; + background-position: 50%; + position: absolute; + cursor: pointer; + text-align: center; + height: 20px; + width: 20px; + top: 1px; + right: 1px; + padding: 0; + margin: 0; + z-index: 5; + opacity: 0.6; + filter: alpha(opacity = 60); +} +.cke_notification_close:hover { + opacity: 1; + filter: alpha(opacity = 100); +} +.cke_notification_close span { + display: none; +} +.cke_notification_warning a.cke_notification_close { + opacity: 0.8; + filter: alpha(opacity = 80); +} +.cke_notification_warning a.cke_notification_close:hover { + opacity: 1; + filter: alpha(opacity = 100); +} +.cke_chrome { + visibility: inherit; +} +.cke_voice_label { + display: none; +} +legend.cke_voice_label { + display: none; +} +.cke_button__about_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -0px !important; +} +.cke_button__bold_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -24px !important; +} +.cke_button__italic_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -48px !important; +} +.cke_button__strike_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -72px !important; +} +.cke_button__subscript_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -96px !important; +} +.cke_button__superscript_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -120px !important; +} +.cke_button__underline_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -144px !important; +} +.cke_button__bidiltr_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -168px !important; +} +.cke_button__bidirtl_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -192px !important; +} +.cke_button__blockquote_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -216px !important; +} +.cke_rtl .cke_button__copy_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -240px !important; +} +.cke_ltr .cke_button__copy_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -264px !important; +} +.cke_rtl .cke_button__cut_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -288px !important; +} +.cke_ltr .cke_button__cut_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -312px !important; +} +.cke_rtl .cke_button__paste_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -336px !important; +} +.cke_ltr .cke_button__paste_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -360px !important; +} +.cke_button__bgcolor_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -384px !important; +} +.cke_button__textcolor_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -408px !important; +} +.cke_rtl .cke_button__templates_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -432px !important; +} +.cke_ltr .cke_button__templates_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -456px !important; +} +.cke_button__copyformatting_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -480px !important; +} +.cke_button__creatediv_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -504px !important; +} +.cke_rtl .cke_button__find_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__find_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -528px !important; +} +.cke_ltr .cke_button__find_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -552px !important; +} +.cke_button__replace_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -576px !important; +} +.cke_button__flash_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -600px !important; +} +.cke_button__button_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -624px !important; +} +.cke_button__checkbox_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -648px !important; +} +.cke_button__form_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -672px !important; +} +.cke_button__hiddenfield_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -696px !important; +} +.cke_button__imagebutton_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -720px !important; +} +.cke_button__radio_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -744px !important; +} +.cke_rtl .cke_button__select_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__select_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -768px !important; +} +.cke_ltr .cke_button__select_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -792px !important; +} +.cke_rtl .cke_button__textarea_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -816px !important; +} +.cke_ltr .cke_button__textarea_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -840px !important; +} +.cke_rtl .cke_button__textfield_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -864px !important; +} +.cke_ltr .cke_button__textfield_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -888px !important; +} +.cke_button__horizontalrule_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -912px !important; +} +.cke_button__iframe_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -936px !important; +} +.cke_button__image_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -960px !important; +} +.cke_rtl .cke_button__indent_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -984px !important; +} +.cke_ltr .cke_button__indent_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1008px !important; +} +.cke_rtl .cke_button__outdent_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1032px !important; +} +.cke_ltr .cke_button__outdent_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1056px !important; +} +.cke_button__smiley_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1080px !important; +} +.cke_button__justifyblock_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1104px !important; +} +.cke_button__justifycenter_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1128px !important; +} +.cke_button__justifyleft_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1152px !important; +} +.cke_button__justifyright_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1176px !important; +} +.cke_button__language_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1200px !important; +} +.cke_rtl .cke_button__anchor_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1224px !important; +} +.cke_ltr .cke_button__anchor_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1248px !important; +} +.cke_button__link_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1272px !important; +} +.cke_button__unlink_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1296px !important; +} +.cke_rtl .cke_button__bulletedlist_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1320px !important; +} +.cke_ltr .cke_button__bulletedlist_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1344px !important; +} +.cke_rtl .cke_button__numberedlist_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1368px !important; +} +.cke_ltr .cke_button__numberedlist_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1392px !important; +} +.cke_button__maximize_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1416px !important; +} +.cke_rtl .cke_button__newpage_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1440px !important; +} +.cke_ltr .cke_button__newpage_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1464px !important; +} +.cke_rtl .cke_button__pagebreak_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1488px !important; +} +.cke_ltr .cke_button__pagebreak_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1512px !important; +} +.cke_rtl .cke_button__pastetext_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1536px !important; +} +.cke_ltr .cke_button__pastetext_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1560px !important; +} +.cke_rtl .cke_button__pastefromword_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1584px !important; +} +.cke_ltr .cke_button__pastefromword_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1608px !important; +} +.cke_rtl .cke_button__preview_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1632px !important; +} +.cke_ltr .cke_button__preview_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1656px !important; +} +.cke_button__print_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1680px !important; +} +.cke_button__removeformat_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1704px !important; +} +.cke_button__save_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1728px !important; +} +.cke_button__selectall_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1752px !important; +} +.cke_rtl .cke_button__showblocks_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1776px !important; +} +.cke_ltr .cke_button__showblocks_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1800px !important; +} +.cke_rtl .cke_button__source_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__source_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1824px !important; +} +.cke_ltr .cke_button__source_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1848px !important; +} +.cke_button__specialchar_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1872px !important; +} +.cke_button__scayt_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1896px !important; +} +.cke_button__table_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1920px !important; +} +.cke_rtl .cke_button__redo_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1944px !important; +} +.cke_ltr .cke_button__redo_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1968px !important; +} +.cke_rtl .cke_button__undo_icon, +.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -1992px !important; +} +.cke_ltr .cke_button__undo_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -2016px !important; +} +.cke_button__spellchecker_icon { + background: url(icons.png?t=dee99e2) no-repeat 0 -2040px !important; +} +.cke_hidpi .cke_button__about_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -0px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__bold_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -24px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__italic_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -48px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__strike_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -72px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__subscript_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -96px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__superscript_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -120px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__underline_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -144px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__bidiltr_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -168px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__bidirtl_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -192px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__blockquote_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -216px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__copy_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -240px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__copy_icon, +.cke_ltr.cke_hidpi .cke_button__copy_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -264px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__cut_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -288px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__cut_icon, +.cke_ltr.cke_hidpi .cke_button__cut_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -312px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__paste_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -336px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__paste_icon, +.cke_ltr.cke_hidpi .cke_button__paste_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -360px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__bgcolor_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -384px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__textcolor_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -408px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__templates_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -432px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__templates_icon, +.cke_ltr.cke_hidpi .cke_button__templates_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -456px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__copyformatting_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -480px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__creatediv_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -504px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__find_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -528px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__find_icon, +.cke_ltr.cke_hidpi .cke_button__find_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -552px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__replace_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -576px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__flash_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -600px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__button_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -624px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__checkbox_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -648px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__form_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -672px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__hiddenfield_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -696px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__imagebutton_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -720px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__radio_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -744px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__select_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -768px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__select_icon, +.cke_ltr.cke_hidpi .cke_button__select_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -792px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__textarea_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -816px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__textarea_icon, +.cke_ltr.cke_hidpi .cke_button__textarea_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -840px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__textfield_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -864px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__textfield_icon, +.cke_ltr.cke_hidpi .cke_button__textfield_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -888px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__horizontalrule_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -912px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__iframe_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -936px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__image_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -960px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__indent_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -984px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__indent_icon, +.cke_ltr.cke_hidpi .cke_button__indent_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1008px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__outdent_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1032px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__outdent_icon, +.cke_ltr.cke_hidpi .cke_button__outdent_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1056px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__smiley_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1080px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__justifyblock_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1104px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__justifycenter_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1128px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__justifyleft_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1152px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__justifyright_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1176px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__language_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1200px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__anchor_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1224px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__anchor_icon, +.cke_ltr.cke_hidpi .cke_button__anchor_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1248px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__link_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1272px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__unlink_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1296px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1320px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon, +.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1344px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1368px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__numberedlist_icon, +.cke_ltr.cke_hidpi .cke_button__numberedlist_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1392px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__maximize_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1416px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__newpage_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1440px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__newpage_icon, +.cke_ltr.cke_hidpi .cke_button__newpage_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1464px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1488px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__pagebreak_icon, +.cke_ltr.cke_hidpi .cke_button__pagebreak_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1512px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__pastetext_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1536px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__pastetext_icon, +.cke_ltr.cke_hidpi .cke_button__pastetext_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1560px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1584px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__pastefromword_icon, +.cke_ltr.cke_hidpi .cke_button__pastefromword_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1608px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__preview_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1632px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__preview_icon, +.cke_ltr.cke_hidpi .cke_button__preview_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1656px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__print_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1680px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__removeformat_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1704px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__save_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1728px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__selectall_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1752px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__showblocks_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1776px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__showblocks_icon, +.cke_ltr.cke_hidpi .cke_button__showblocks_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1800px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__source_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1824px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__source_icon, +.cke_ltr.cke_hidpi .cke_button__source_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1848px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__specialchar_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1872px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__scayt_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1896px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__table_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1920px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__redo_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1944px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__redo_icon, +.cke_ltr.cke_hidpi .cke_button__redo_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1968px !important; + background-size: 16px !important; +} +.cke_rtl.cke_hidpi .cke_button__undo_icon, +.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1992px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_ltr .cke_button__undo_icon, +.cke_ltr.cke_hidpi .cke_button__undo_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2016px !important; + background-size: 16px !important; +} +.cke_hidpi .cke_button__spellchecker_icon { + background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2040px !important; + background-size: 16px !important; +} diff --git a/libraries/ckeditor/skins/moono-lisa/editor_gecko.css b/libraries/ckeditor/skins/moono-lisa/editor_gecko.css new file mode 100644 index 0000000..ce1ed8c --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -456px !important;}.cke_button__copyformatting_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -480px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -504px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -528px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -552px !important;}.cke_button__replace_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -576px !important;}.cke_button__flash_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -600px !important;}.cke_button__button_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -624px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -648px !important;}.cke_button__form_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -672px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -696px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -720px !important;}.cke_button__radio_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -744px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -768px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -792px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -816px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -888px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -912px !important;}.cke_button__iframe_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -936px !important;}.cke_button__image_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -960px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -984px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1056px !important;}.cke_button__smiley_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1080px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1104px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1128px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1152px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1176px !important;}.cke_button__language_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1200px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1224px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1248px !important;}.cke_button__link_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1272px !important;}.cke_button__unlink_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1296px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1320px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1344px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1368px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1392px !important;}.cke_button__maximize_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1416px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1440px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1608px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1632px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1656px !important;}.cke_button__print_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1680px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1704px !important;}.cke_button__save_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1728px !important;}.cke_button__selectall_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1752px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1776px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1848px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1872px !important;}.cke_button__scayt_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1896px !important;}.cke_button__table_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1920px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1944px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2016px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2040px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__copyformatting_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2040px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/editor_ie.css b/libraries/ckeditor/skins/moono-lisa/editor_ie.css new file mode 100644 index 0000000..ff700dc --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -456px !important;}.cke_button__copyformatting_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -480px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -504px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -528px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -552px !important;}.cke_button__replace_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -576px !important;}.cke_button__flash_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -600px !important;}.cke_button__button_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -624px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -648px !important;}.cke_button__form_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -672px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -696px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -720px !important;}.cke_button__radio_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -744px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -768px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -792px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -816px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -888px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -912px !important;}.cke_button__iframe_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -936px !important;}.cke_button__image_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -960px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -984px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1056px !important;}.cke_button__smiley_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1080px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1104px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1128px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1152px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1176px !important;}.cke_button__language_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1200px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1224px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1248px !important;}.cke_button__link_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1272px !important;}.cke_button__unlink_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1296px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1320px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1344px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1368px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1392px !important;}.cke_button__maximize_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1416px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1440px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1608px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1632px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1656px !important;}.cke_button__print_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1680px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1704px !important;}.cke_button__save_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1728px !important;}.cke_button__selectall_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1752px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1776px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1848px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1872px !important;}.cke_button__scayt_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1896px !important;}.cke_button__table_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1920px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1944px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2016px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2040px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__copyformatting_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2040px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/editor_ie8.css b/libraries/ckeditor/skins/moono-lisa/editor_ie8.css new file mode 100644 index 0000000..2280ec4 --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0}.cke_button__about_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -456px !important;}.cke_button__copyformatting_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -480px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -504px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -528px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -552px !important;}.cke_button__replace_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -576px !important;}.cke_button__flash_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -600px !important;}.cke_button__button_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -624px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -648px !important;}.cke_button__form_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -672px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -696px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -720px !important;}.cke_button__radio_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -744px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -768px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -792px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -816px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -888px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -912px !important;}.cke_button__iframe_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -936px !important;}.cke_button__image_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -960px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -984px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1056px !important;}.cke_button__smiley_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1080px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1104px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1128px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1152px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1176px !important;}.cke_button__language_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1200px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1224px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1248px !important;}.cke_button__link_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1272px !important;}.cke_button__unlink_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1296px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1320px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1344px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1368px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1392px !important;}.cke_button__maximize_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1416px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1440px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1608px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1632px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1656px !important;}.cke_button__print_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1680px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1704px !important;}.cke_button__save_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1728px !important;}.cke_button__selectall_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1752px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1776px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1848px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1872px !important;}.cke_button__scayt_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1896px !important;}.cke_button__table_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1920px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1944px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2016px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2040px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__copyformatting_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2040px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/editor_iequirks.css b/libraries/ckeditor/skins/moono-lisa/editor_iequirks.css new file mode 100644 index 0000000..cc793a2 --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -456px !important;}.cke_button__copyformatting_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -480px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -504px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -528px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -552px !important;}.cke_button__replace_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -576px !important;}.cke_button__flash_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -600px !important;}.cke_button__button_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -624px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -648px !important;}.cke_button__form_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -672px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -696px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -720px !important;}.cke_button__radio_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -744px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -768px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -792px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -816px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -888px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -912px !important;}.cke_button__iframe_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -936px !important;}.cke_button__image_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -960px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -984px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1056px !important;}.cke_button__smiley_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1080px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1104px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1128px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1152px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1176px !important;}.cke_button__language_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1200px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1224px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1248px !important;}.cke_button__link_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1272px !important;}.cke_button__unlink_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1296px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1320px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1344px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1368px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1392px !important;}.cke_button__maximize_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1416px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1440px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1608px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1632px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1656px !important;}.cke_button__print_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1680px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1704px !important;}.cke_button__save_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1728px !important;}.cke_button__selectall_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1752px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1776px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1848px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1872px !important;}.cke_button__scayt_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1896px !important;}.cke_button__table_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1920px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1944px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2016px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=dee99e2) no-repeat 0 -2040px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__copyformatting_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=dee99e2) no-repeat 0 -2040px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/libraries/ckeditor/skins/moono-lisa/icons.png b/libraries/ckeditor/skins/moono-lisa/icons.png new file mode 100644 index 0000000..958eedc Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/icons.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/icons_hidpi.png b/libraries/ckeditor/skins/moono-lisa/icons_hidpi.png new file mode 100644 index 0000000..7b06991 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/icons_hidpi.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/arrow.png b/libraries/ckeditor/skins/moono-lisa/images/arrow.png new file mode 100644 index 0000000..d72b5f3 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/arrow.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/close.png b/libraries/ckeditor/skins/moono-lisa/images/close.png new file mode 100644 index 0000000..40caa6d Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/close.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/hidpi/close.png b/libraries/ckeditor/skins/moono-lisa/images/hidpi/close.png new file mode 100644 index 0000000..fa00f4f Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/hidpi/close.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png b/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png new file mode 100644 index 0000000..c899789 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock.png b/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock.png new file mode 100644 index 0000000..25ad0f4 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/hidpi/lock.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/hidpi/refresh.png b/libraries/ckeditor/skins/moono-lisa/images/hidpi/refresh.png new file mode 100644 index 0000000..117a2d4 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/hidpi/refresh.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/lock-open.png b/libraries/ckeditor/skins/moono-lisa/images/lock-open.png new file mode 100644 index 0000000..42df5f4 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/lock-open.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/lock.png b/libraries/ckeditor/skins/moono-lisa/images/lock.png new file mode 100644 index 0000000..bde6772 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/lock.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/refresh.png b/libraries/ckeditor/skins/moono-lisa/images/refresh.png new file mode 100644 index 0000000..e363764 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/refresh.png differ diff --git a/libraries/ckeditor/skins/moono-lisa/images/spinner.gif b/libraries/ckeditor/skins/moono-lisa/images/spinner.gif new file mode 100644 index 0000000..d898d41 Binary files /dev/null and b/libraries/ckeditor/skins/moono-lisa/images/spinner.gif differ diff --git a/libraries/ckeditor/skins/moono-lisa/readme.md b/libraries/ckeditor/skins/moono-lisa/readme.md new file mode 100644 index 0000000..7ed4c78 --- /dev/null +++ b/libraries/ckeditor/skins/moono-lisa/readme.md @@ -0,0 +1,46 @@ +"Moono-lisa" Skin +================= + +This skin has been made a **default skin** starting from CKEditor 4.6.0 and is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono-lisa" is a monochromatic skin, which offers a modern, flat and minimalistic look which blends very well in modern design. +It comes with the following features: + +- Chameleon feature with brightness. +- High-contrast compatibility. +- Graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG and PNG source of the skin icons. + +License +------- + +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + +For licensing, see LICENSE.md or [http://ckeditor.com/license](http://ckeditor.com/license) diff --git a/libraries/ckeditor/styles.js b/libraries/ckeditor/styles.js new file mode 100644 index 0000000..d809226 --- /dev/null +++ b/libraries/ckeditor/styles.js @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin which shows the Styles drop-down +// list containing all styles in the editor toolbar. Other plugins, like +// the "div" plugin, use a subset of the styles for their features. +// +// If you do not have plugins that depend on this file in your editor build, you can simply +// ignore it. Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. +// +// For more information refer to: http://docs.ckeditor.com/#!/guide/dev_styles-section-style-rules + +CKEDITOR.stylesSet.add( 'default', [ + /* Block styles */ + + // These styles are already available in the "Format" drop-down list ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles drop-down list, removing them from the toolbar. + // (This requires the "stylescombo" plugin.) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object styles */ + + { + name: 'Styled Image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled Image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact Table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } }, + + /* Widget styles */ + + { name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } }, + { name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } }, + + { name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } }, + + { name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } }, + + { name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' }, + { name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' }, + { name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' }, + { name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' }, + { name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' }, + + // Adding space after the style name is an intended workaround. For now, there + // is no option to create two styles with the same name for different widget types. See http://dev.ckeditor.com/ticket/16664. + { name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' }, + { name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' }, + { name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' }, + { name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' }, + { name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' } + +] ); + diff --git a/libraries/codemirror/addon/comment/comment.js b/libraries/codemirror/addon/comment/comment.js new file mode 100644 index 0000000..3aa4680 --- /dev/null +++ b/libraries/codemirror/addon/comment/comment.js @@ -0,0 +1,196 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var noOptions = {}; + var nonWS = /[^\s\u00a0]/; + var Pos = CodeMirror.Pos; + + function firstNonWS(str) { + var found = str.search(nonWS); + return found == -1 ? 0 : found; + } + + CodeMirror.commands.toggleComment = function(cm) { + cm.toggleComment(); + }; + + CodeMirror.defineExtension("toggleComment", function(options) { + if (!options) options = noOptions; + var cm = this; + var minLine = Infinity, ranges = this.listSelections(), mode = null; + for (var i = ranges.length - 1; i >= 0; i--) { + var from = ranges[i].from(), to = ranges[i].to(); + if (from.line >= minLine) continue; + if (to.line >= minLine) to = Pos(minLine, 0); + minLine = from.line; + if (mode == null) { + if (cm.uncomment(from, to, options)) mode = "un"; + else { cm.lineComment(from, to, options); mode = "line"; } + } else if (mode == "un") { + cm.uncomment(from, to, options); + } else { + cm.lineComment(from, to, options); + } + } + }); + + CodeMirror.defineExtension("lineComment", function(from, to, options) { + if (!options) options = noOptions; + var self = this, mode = self.getModeAt(from); + var commentString = options.lineComment || mode.lineComment; + if (!commentString) { + if (options.blockCommentStart || mode.blockCommentStart) { + options.fullLines = true; + self.blockComment(from, to, options); + } + return; + } + var firstLine = self.getLine(from.line); + if (firstLine == null) return; + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); + var pad = options.padding == null ? " " : options.padding; + var blankLines = options.commentBlankLines || from.line == to.line; + + self.operation(function() { + if (options.indent) { + var baseString = null; + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i); + var whitespace = line.slice(0, firstNonWS(line)); + if (baseString == null || baseString.length > whitespace.length) { + baseString = whitespace; + } + } + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i), cut = baseString.length; + if (!blankLines && !nonWS.test(line)) continue; + if (line.slice(0, cut) != baseString) cut = firstNonWS(line); + self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); + } + } else { + for (var i = from.line; i < end; ++i) { + if (blankLines || nonWS.test(self.getLine(i))) + self.replaceRange(commentString + pad, Pos(i, 0)); + } + } + }); + }); + + CodeMirror.defineExtension("blockComment", function(from, to, options) { + if (!options) options = noOptions; + var self = this, mode = self.getModeAt(from); + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) { + if ((options.lineComment || mode.lineComment) && options.fullLines != false) + self.lineComment(from, to, options); + return; + } + + var end = Math.min(to.line, self.lastLine()); + if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; + + var pad = options.padding == null ? " " : options.padding; + if (from.line > end) return; + + self.operation(function() { + if (options.fullLines != false) { + var lastLineHasText = nonWS.test(self.getLine(end)); + self.replaceRange(pad + endString, Pos(end)); + self.replaceRange(startString + pad, Pos(from.line, 0)); + var lead = options.blockCommentLead || mode.blockCommentLead; + if (lead != null) for (var i = from.line + 1; i <= end; ++i) + if (i != end || lastLineHasText) + self.replaceRange(lead + pad, Pos(i, 0)); + } else { + self.replaceRange(endString, to); + self.replaceRange(startString, from); + } + }); + }); + + CodeMirror.defineExtension("uncomment", function(from, to, options) { + if (!options) options = noOptions; + var self = this, mode = self.getModeAt(from); + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end); + + // Try finding line comments + var lineString = options.lineComment || mode.lineComment, lines = []; + var pad = options.padding == null ? " " : options.padding, didSomething; + lineComment: { + if (!lineString) break lineComment; + for (var i = start; i <= end; ++i) { + var line = self.getLine(i); + var found = line.indexOf(lineString); + if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; + if (found == -1 && (i != end || i == start) && nonWS.test(line)) break lineComment; + if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; + lines.push(line); + } + self.operation(function() { + for (var i = start; i <= end; ++i) { + var line = lines[i - start]; + var pos = line.indexOf(lineString), endPos = pos + lineString.length; + if (pos < 0) continue; + if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; + didSomething = true; + self.replaceRange("", Pos(i, pos), Pos(i, endPos)); + } + }); + if (didSomething) return true; + } + + // Try block comments + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) return false; + var lead = options.blockCommentLead || mode.blockCommentLead; + var startLine = self.getLine(start), endLine = end == start ? startLine : self.getLine(end); + var open = startLine.indexOf(startString), close = endLine.lastIndexOf(endString); + if (close == -1 && start != end) { + endLine = self.getLine(--end); + close = endLine.lastIndexOf(endString); + } + if (open == -1 || close == -1 || + !/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) || + !/comment/.test(self.getTokenTypeAt(Pos(end, close + 1)))) + return false; + + // Avoid killing block comments completely outside the selection. + // Positions of the last startString before the start of the selection, and the first endString after it. + var lastStart = startLine.lastIndexOf(startString, from.ch); + var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); + if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; + // Positions of the first endString after the end of the selection, and the last startString before it. + firstEnd = endLine.indexOf(endString, to.ch); + var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); + lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart; + if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; + + self.operation(function() { + self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), + Pos(end, close + endString.length)); + var openEnd = open + startString.length; + if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; + self.replaceRange("", Pos(start, open), Pos(start, openEnd)); + if (lead) for (var i = start + 1; i <= end; ++i) { + var line = self.getLine(i), found = line.indexOf(lead); + if (found == -1 || nonWS.test(line.slice(0, found))) continue; + var foundEnd = found + lead.length; + if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; + self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); + } + }); + return true; + }); +}); diff --git a/libraries/codemirror/addon/comment/continuecomment.js b/libraries/codemirror/addon/comment/continuecomment.js new file mode 100644 index 0000000..b11d51e --- /dev/null +++ b/libraries/codemirror/addon/comment/continuecomment.js @@ -0,0 +1,85 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var modes = ["clike", "css", "javascript"]; + + for (var i = 0; i < modes.length; ++i) + CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "}); + + function continueComment(cm) { + if (cm.getOption("disableInput")) return CodeMirror.Pass; + var ranges = cm.listSelections(), mode, inserts = []; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].head, token = cm.getTokenAt(pos); + if (token.type != "comment") return CodeMirror.Pass; + var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode; + if (!mode) mode = modeHere; + else if (mode != modeHere) return CodeMirror.Pass; + + var insert = null; + if (mode.blockCommentStart && mode.blockCommentContinue) { + var end = token.string.indexOf(mode.blockCommentEnd); + var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; + if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) { + // Comment ended, don't continue it + } else if (token.string.indexOf(mode.blockCommentStart) == 0) { + insert = full.slice(0, token.start); + if (!/^\s*$/.test(insert)) { + insert = ""; + for (var j = 0; j < token.start; ++j) insert += " "; + } + } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && + found + mode.blockCommentContinue.length > token.start && + /^\s*$/.test(full.slice(0, found))) { + insert = full.slice(0, found); + } + if (insert != null) insert += mode.blockCommentContinue; + } + if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) { + var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); + if (found > -1) { + insert = line.slice(0, found); + if (/\S/.test(insert)) insert = null; + else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0]; + } + } + if (insert == null) return CodeMirror.Pass; + inserts[i] = "\n" + insert; + } + + cm.operation(function() { + for (var i = ranges.length - 1; i >= 0; i--) + cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert"); + }); + } + + function continueLineCommentEnabled(cm) { + var opt = cm.getOption("continueComments"); + if (opt && typeof opt == "object") + return opt.continueLineComment !== false; + return true; + } + + CodeMirror.defineOption("continueComments", null, function(cm, val, prev) { + if (prev && prev != CodeMirror.Init) + cm.removeKeyMap("continueComment"); + if (val) { + var key = "Enter"; + if (typeof val == "string") + key = val; + else if (typeof val == "object" && val.key) + key = val.key; + var map = {name: "continueComment"}; + map[key] = continueComment; + cm.addKeyMap(map); + } + }); +}); diff --git a/libraries/codemirror/addon/dialog/dialog.css b/libraries/codemirror/addon/dialog/dialog.css new file mode 100644 index 0000000..677c078 --- /dev/null +++ b/libraries/codemirror/addon/dialog/dialog.css @@ -0,0 +1,32 @@ +.CodeMirror-dialog { + position: absolute; + left: 0; right: 0; + background: inherit; + z-index: 15; + padding: .1em .8em; + overflow: hidden; + color: inherit; +} + +.CodeMirror-dialog-top { + border-bottom: 1px solid #eee; + top: 0; +} + +.CodeMirror-dialog-bottom { + border-top: 1px solid #eee; + bottom: 0; +} + +.CodeMirror-dialog input { + border: none; + outline: none; + background: transparent; + width: 20em; + color: inherit; + font-family: monospace; +} + +.CodeMirror-dialog button { + font-size: 70%; +} diff --git a/libraries/codemirror/addon/dialog/dialog.js b/libraries/codemirror/addon/dialog/dialog.js new file mode 100644 index 0000000..323b200 --- /dev/null +++ b/libraries/codemirror/addon/dialog/dialog.js @@ -0,0 +1,157 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Open simple dialogs on top of an editor. Relies on dialog.css. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + function dialogDiv(cm, template, bottom) { + var wrap = cm.getWrapperElement(); + var dialog; + dialog = wrap.appendChild(document.createElement("div")); + if (bottom) + dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; + else + dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; + + if (typeof template == "string") { + dialog.innerHTML = template; + } else { // Assuming it's a detached DOM element. + dialog.appendChild(template); + } + return dialog; + } + + function closeNotification(cm, newVal) { + if (cm.state.currentNotificationClose) + cm.state.currentNotificationClose(); + cm.state.currentNotificationClose = newVal; + } + + CodeMirror.defineExtension("openDialog", function(template, callback, options) { + if (!options) options = {}; + + closeNotification(this, null); + + var dialog = dialogDiv(this, template, options.bottom); + var closed = false, me = this; + function close(newVal) { + if (typeof newVal == 'string') { + inp.value = newVal; + } else { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + me.focus(); + + if (options.onClose) options.onClose(dialog); + } + } + + var inp = dialog.getElementsByTagName("input")[0], button; + if (inp) { + if (options.value) { + inp.value = options.value; + if (options.selectValueOnOpen !== false) { + inp.select(); + } + } + + if (options.onInput) + CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); + if (options.onKeyUp) + CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); + + CodeMirror.on(inp, "keydown", function(e) { + if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } + if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { + inp.blur(); + CodeMirror.e_stop(e); + close(); + } + if (e.keyCode == 13) callback(inp.value, e); + }); + + if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); + + inp.focus(); + } else if (button = dialog.getElementsByTagName("button")[0]) { + CodeMirror.on(button, "click", function() { + close(); + me.focus(); + }); + + if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); + + button.focus(); + } + return close; + }); + + CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { + closeNotification(this, null); + var dialog = dialogDiv(this, template, options && options.bottom); + var buttons = dialog.getElementsByTagName("button"); + var closed = false, me = this, blurring = 1; + function close() { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + me.focus(); + } + buttons[0].focus(); + for (var i = 0; i < buttons.length; ++i) { + var b = buttons[i]; + (function(callback) { + CodeMirror.on(b, "click", function(e) { + CodeMirror.e_preventDefault(e); + close(); + if (callback) callback(me); + }); + })(callbacks[i]); + CodeMirror.on(b, "blur", function() { + --blurring; + setTimeout(function() { if (blurring <= 0) close(); }, 200); + }); + CodeMirror.on(b, "focus", function() { ++blurring; }); + } + }); + + /* + * openNotification + * Opens a notification, that can be closed with an optional timer + * (default 5000ms timer) and always closes on click. + * + * If a notification is opened while another is opened, it will close the + * currently opened one and open the new one immediately. + */ + CodeMirror.defineExtension("openNotification", function(template, options) { + closeNotification(this, close); + var dialog = dialogDiv(this, template, options && options.bottom); + var closed = false, doneTimer; + var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; + + function close() { + if (closed) return; + closed = true; + clearTimeout(doneTimer); + dialog.parentNode.removeChild(dialog); + } + + CodeMirror.on(dialog, 'click', function(e) { + CodeMirror.e_preventDefault(e); + close(); + }); + + if (duration) + doneTimer = setTimeout(close, duration); + + return close; + }); +}); diff --git a/libraries/codemirror/addon/display/autorefresh.js b/libraries/codemirror/addon/display/autorefresh.js new file mode 100644 index 0000000..1e0e850 --- /dev/null +++ b/libraries/codemirror/addon/display/autorefresh.js @@ -0,0 +1,47 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod) + else // Plain browser env + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + + CodeMirror.defineOption("autoRefresh", false, function(cm, val) { + if (cm.state.autoRefresh) { + stopListening(cm, cm.state.autoRefresh) + cm.state.autoRefresh = null + } + if (val && cm.display.wrapper.offsetHeight == 0) + startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250}) + }) + + function startListening(cm, state) { + function check() { + if (cm.display.wrapper.offsetHeight) { + stopListening(cm, state) + if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight) + cm.refresh() + } else { + state.timeout = setTimeout(check, state.delay) + } + } + state.timeout = setTimeout(check, state.delay) + state.hurry = function() { + clearTimeout(state.timeout) + state.timeout = setTimeout(check, 50) + } + CodeMirror.on(window, "mouseup", state.hurry) + CodeMirror.on(window, "keyup", state.hurry) + } + + function stopListening(_cm, state) { + clearTimeout(state.timeout) + CodeMirror.off(window, "mouseup", state.hurry) + CodeMirror.off(window, "keyup", state.hurry) + } +}); diff --git a/libraries/codemirror/addon/display/fullscreen.css b/libraries/codemirror/addon/display/fullscreen.css new file mode 100644 index 0000000..437acd8 --- /dev/null +++ b/libraries/codemirror/addon/display/fullscreen.css @@ -0,0 +1,6 @@ +.CodeMirror-fullscreen { + position: fixed; + top: 0; left: 0; right: 0; bottom: 0; + height: auto; + z-index: 9; +} diff --git a/libraries/codemirror/addon/display/fullscreen.js b/libraries/codemirror/addon/display/fullscreen.js new file mode 100644 index 0000000..cd3673b --- /dev/null +++ b/libraries/codemirror/addon/display/fullscreen.js @@ -0,0 +1,41 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { + if (old == CodeMirror.Init) old = false; + if (!old == !val) return; + if (val) setFullscreen(cm); + else setNormal(cm); + }); + + function setFullscreen(cm) { + var wrap = cm.getWrapperElement(); + cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, + width: wrap.style.width, height: wrap.style.height}; + wrap.style.width = ""; + wrap.style.height = "auto"; + wrap.className += " CodeMirror-fullscreen"; + document.documentElement.style.overflow = "hidden"; + cm.refresh(); + } + + function setNormal(cm) { + var wrap = cm.getWrapperElement(); + wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); + document.documentElement.style.overflow = ""; + var info = cm.state.fullScreenRestore; + wrap.style.width = info.width; wrap.style.height = info.height; + window.scrollTo(info.scrollLeft, info.scrollTop); + cm.refresh(); + } +}); diff --git a/libraries/codemirror/addon/display/panel.js b/libraries/codemirror/addon/display/panel.js new file mode 100644 index 0000000..ba29484 --- /dev/null +++ b/libraries/codemirror/addon/display/panel.js @@ -0,0 +1,112 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + CodeMirror.defineExtension("addPanel", function(node, options) { + options = options || {}; + + if (!this.state.panels) initPanels(this); + + var info = this.state.panels; + var wrapper = info.wrapper; + var cmWrapper = this.getWrapperElement(); + + if (options.after instanceof Panel && !options.after.cleared) { + wrapper.insertBefore(node, options.before.node.nextSibling); + } else if (options.before instanceof Panel && !options.before.cleared) { + wrapper.insertBefore(node, options.before.node); + } else if (options.replace instanceof Panel && !options.replace.cleared) { + wrapper.insertBefore(node, options.replace.node); + options.replace.clear(); + } else if (options.position == "bottom") { + wrapper.appendChild(node); + } else if (options.position == "before-bottom") { + wrapper.insertBefore(node, cmWrapper.nextSibling); + } else if (options.position == "after-top") { + wrapper.insertBefore(node, cmWrapper); + } else { + wrapper.insertBefore(node, wrapper.firstChild); + } + + var height = (options && options.height) || node.offsetHeight; + this._setSize(null, info.heightLeft -= height); + info.panels++; + return new Panel(this, node, options, height); + }); + + function Panel(cm, node, options, height) { + this.cm = cm; + this.node = node; + this.options = options; + this.height = height; + this.cleared = false; + } + + Panel.prototype.clear = function() { + if (this.cleared) return; + this.cleared = true; + var info = this.cm.state.panels; + this.cm._setSize(null, info.heightLeft += this.height); + info.wrapper.removeChild(this.node); + if (--info.panels == 0) removePanels(this.cm); + }; + + Panel.prototype.changed = function(height) { + var newHeight = height == null ? this.node.offsetHeight : height; + var info = this.cm.state.panels; + this.cm._setSize(null, info.height += (newHeight - this.height)); + this.height = newHeight; + }; + + function initPanels(cm) { + var wrap = cm.getWrapperElement(); + var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle; + var height = parseInt(style.height); + var info = cm.state.panels = { + setHeight: wrap.style.height, + heightLeft: height, + panels: 0, + wrapper: document.createElement("div") + }; + wrap.parentNode.insertBefore(info.wrapper, wrap); + var hasFocus = cm.hasFocus(); + info.wrapper.appendChild(wrap); + if (hasFocus) cm.focus(); + + cm._setSize = cm.setSize; + if (height != null) cm.setSize = function(width, newHeight) { + if (newHeight == null) return this._setSize(width, newHeight); + info.setHeight = newHeight; + if (typeof newHeight != "number") { + var px = /^(\d+\.?\d*)px$/.exec(newHeight); + if (px) { + newHeight = Number(px[1]); + } else { + info.wrapper.style.height = newHeight; + newHeight = info.wrapper.offsetHeight; + info.wrapper.style.height = ""; + } + } + cm._setSize(width, info.heightLeft += (newHeight - height)); + height = newHeight; + }; + } + + function removePanels(cm) { + var info = cm.state.panels; + cm.state.panels = null; + + var wrap = cm.getWrapperElement(); + info.wrapper.parentNode.replaceChild(wrap, info.wrapper); + wrap.style.height = info.setHeight; + cm.setSize = cm._setSize; + cm.setSize(); + } +}); diff --git a/libraries/codemirror/addon/display/placeholder.js b/libraries/codemirror/addon/display/placeholder.js new file mode 100644 index 0000000..babddfb --- /dev/null +++ b/libraries/codemirror/addon/display/placeholder.js @@ -0,0 +1,60 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + CodeMirror.defineOption("placeholder", "", function(cm, val, old) { + var prev = old && old != CodeMirror.Init; + if (val && !prev) { + cm.on("blur", onBlur); + cm.on("change", onChange); + onChange(cm); + } else if (!val && prev) { + cm.off("blur", onBlur); + cm.off("change", onChange); + clearPlaceholder(cm); + var wrapper = cm.getWrapperElement(); + wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); + } + + if (val && !cm.hasFocus()) onBlur(cm); + }); + + function clearPlaceholder(cm) { + if (cm.state.placeholder) { + cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); + cm.state.placeholder = null; + } + } + function setPlaceholder(cm) { + clearPlaceholder(cm); + var elt = cm.state.placeholder = document.createElement("pre"); + elt.style.cssText = "height: 0; overflow: visible"; + elt.className = "CodeMirror-placeholder"; + var placeHolder = cm.getOption("placeholder") + if (typeof placeHolder == "string") placeHolder = document.createTextNode(placeHolder) + elt.appendChild(placeHolder) + cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); + } + + function onBlur(cm) { + if (isEmpty(cm)) setPlaceholder(cm); + } + function onChange(cm) { + var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); + wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); + + if (empty) setPlaceholder(cm); + else clearPlaceholder(cm); + } + + function isEmpty(cm) { + return (cm.lineCount() === 1) && (cm.getLine(0) === ""); + } +}); diff --git a/libraries/codemirror/addon/display/rulers.js b/libraries/codemirror/addon/display/rulers.js new file mode 100644 index 0000000..01f6566 --- /dev/null +++ b/libraries/codemirror/addon/display/rulers.js @@ -0,0 +1,63 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("rulers", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + clearRulers(cm); + cm.off("refresh", refreshRulers); + } + if (val && val.length) { + setRulers(cm); + cm.on("refresh", refreshRulers); + } + }); + + function clearRulers(cm) { + for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) { + var node = cm.display.lineSpace.childNodes[i]; + if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className)) + node.parentNode.removeChild(node); + } + } + + function setRulers(cm) { + var val = cm.getOption("rulers"); + var cw = cm.defaultCharWidth(); + var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left; + var minH = cm.display.scroller.offsetHeight + 30; + for (var i = 0; i < val.length; i++) { + var elt = document.createElement("div"); + elt.className = "CodeMirror-ruler"; + var col, conf = val[i]; + if (typeof conf == "number") { + col = conf; + } else { + col = conf.column; + if (conf.className) elt.className += " " + conf.className; + if (conf.color) elt.style.borderColor = conf.color; + if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle; + if (conf.width) elt.style.borderLeftWidth = conf.width; + } + elt.style.left = (left + col * cw) + "px"; + elt.style.top = "-50px"; + elt.style.bottom = "-20px"; + elt.style.minHeight = minH + "px"; + cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv); + } + } + + function refreshRulers(cm) { + clearRulers(cm); + setRulers(cm); + } +}); diff --git a/libraries/codemirror/addon/edit/closebrackets.js b/libraries/codemirror/addon/edit/closebrackets.js new file mode 100644 index 0000000..3eb9d8e --- /dev/null +++ b/libraries/codemirror/addon/edit/closebrackets.js @@ -0,0 +1,195 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var defaults = { + pairs: "()[]{}''\"\"", + triples: "", + explode: "[]{}" + }; + + var Pos = CodeMirror.Pos; + + CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.removeKeyMap(keyMap); + cm.state.closeBrackets = null; + } + if (val) { + cm.state.closeBrackets = val; + cm.addKeyMap(keyMap); + } + }); + + function getOption(conf, name) { + if (name == "pairs" && typeof conf == "string") return conf; + if (typeof conf == "object" && conf[name] != null) return conf[name]; + return defaults[name]; + } + + var bind = defaults.pairs + "`"; + var keyMap = {Backspace: handleBackspace, Enter: handleEnter}; + for (var i = 0; i < bind.length; i++) + keyMap["'" + bind.charAt(i) + "'"] = handler(bind.charAt(i)); + + function handler(ch) { + return function(cm) { return handleChar(cm, ch); }; + } + + function getConfig(cm) { + var deflt = cm.state.closeBrackets; + if (!deflt) return null; + var mode = cm.getModeAt(cm.getCursor()); + return mode.closeBrackets || deflt; + } + + function handleBackspace(cm) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + + var pairs = getOption(conf, "pairs"); + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + for (var i = ranges.length - 1; i >= 0; i--) { + var cur = ranges[i].head; + cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); + } + } + + function handleEnter(cm) { + var conf = getConfig(cm); + var explode = conf && getOption(conf, "explode"); + if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; + + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + cm.operation(function() { + cm.replaceSelection("\n\n", null); + cm.execCommand("goCharLeft"); + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var line = ranges[i].head.line; + cm.indentLine(line, null, true); + cm.indentLine(line + 1, null, true); + } + }); + } + + function contractSelection(sel) { + var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; + return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), + head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))}; + } + + function handleChar(cm, ch) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + + var pairs = getOption(conf, "pairs"); + var pos = pairs.indexOf(ch); + if (pos == -1) return CodeMirror.Pass; + var triples = getOption(conf, "triples"); + + var identical = pairs.charAt(pos + 1) == ch; + var ranges = cm.listSelections(); + var opening = pos % 2 == 0; + + var type, next; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], cur = range.head, curType; + var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); + if (opening && !range.empty()) { + curType = "surround"; + } else if ((identical || !opening) && next == ch) { + if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) + curType = "skipThree"; + else + curType = "skip"; + } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && + cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch && + (cur.ch <= 2 || cm.getRange(Pos(cur.line, cur.ch - 3), Pos(cur.line, cur.ch - 2)) != ch)) { + curType = "addFour"; + } else if (identical) { + if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, ch)) curType = "both"; + else return CodeMirror.Pass; + } else if (opening && (cm.getLine(cur.line).length == cur.ch || + isClosingBracket(next, pairs) || + /\s/.test(next))) { + curType = "both"; + } else { + return CodeMirror.Pass; + } + if (!type) type = curType; + else if (type != curType) return CodeMirror.Pass; + } + + var left = pos % 2 ? pairs.charAt(pos - 1) : ch; + var right = pos % 2 ? ch : pairs.charAt(pos + 1); + cm.operation(function() { + if (type == "skip") { + cm.execCommand("goCharRight"); + } else if (type == "skipThree") { + for (var i = 0; i < 3; i++) + cm.execCommand("goCharRight"); + } else if (type == "surround") { + var sels = cm.getSelections(); + for (var i = 0; i < sels.length; i++) + sels[i] = left + sels[i] + right; + cm.replaceSelections(sels, "around"); + sels = cm.listSelections().slice(); + for (var i = 0; i < sels.length; i++) + sels[i] = contractSelection(sels[i]); + cm.setSelections(sels); + } else if (type == "both") { + cm.replaceSelection(left + right, null); + cm.triggerElectric(left + right); + cm.execCommand("goCharLeft"); + } else if (type == "addFour") { + cm.replaceSelection(left + left + left + left, "before"); + cm.execCommand("goCharRight"); + } + }); + } + + function isClosingBracket(ch, pairs) { + var pos = pairs.lastIndexOf(ch); + return pos > -1 && pos % 2 == 1; + } + + function charsAround(cm, pos) { + var str = cm.getRange(Pos(pos.line, pos.ch - 1), + Pos(pos.line, pos.ch + 1)); + return str.length == 2 ? str : null; + } + + // Project the token type that will exists after the given char is + // typed, and use it to determine whether it would cause the start + // of a string token. + function enteringString(cm, pos, ch) { + var line = cm.getLine(pos.line); + var token = cm.getTokenAt(pos); + if (/\bstring2?\b/.test(token.type)) return false; + var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4); + stream.pos = stream.start = token.start; + for (;;) { + var type1 = cm.getMode().token(stream, token.state); + if (stream.pos >= pos.ch + 1) return /\bstring2?\b/.test(type1); + stream.start = stream.pos; + } + } +}); diff --git a/libraries/codemirror/addon/edit/closetag.js b/libraries/codemirror/addon/edit/closetag.js new file mode 100644 index 0000000..a518da3 --- /dev/null +++ b/libraries/codemirror/addon/edit/closetag.js @@ -0,0 +1,169 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Tag-closer extension for CodeMirror. + * + * This extension adds an "autoCloseTags" option that can be set to + * either true to get the default behavior, or an object to further + * configure its behavior. + * + * These are supported options: + * + * `whenClosing` (default true) + * Whether to autoclose when the '/' of a closing tag is typed. + * `whenOpening` (default true) + * Whether to autoclose the tag when the final '>' of an opening + * tag is typed. + * `dontCloseTags` (default is empty tags for HTML, none for XML) + * An array of tag names that should not be autoclosed. + * `indentTags` (default is block tags for HTML, none for XML) + * An array of tag names that should, when opened, cause a + * blank line to be added inside the tag, and the blank line and + * closing line to be indented. + * + * See demos/closetag.html for a usage example. + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../fold/xml-fold")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../fold/xml-fold"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) { + if (old != CodeMirror.Init && old) + cm.removeKeyMap("autoCloseTags"); + if (!val) return; + var map = {name: "autoCloseTags"}; + if (typeof val != "object" || val.whenClosing) + map["'/'"] = function(cm) { return autoCloseSlash(cm); }; + if (typeof val != "object" || val.whenOpening) + map["'>'"] = function(cm) { return autoCloseGT(cm); }; + cm.addKeyMap(map); + }); + + var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", + "source", "track", "wbr"]; + var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4", + "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"]; + + function autoCloseGT(cm) { + if (cm.getOption("disableInput")) return CodeMirror.Pass; + var ranges = cm.listSelections(), replacements = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var pos = ranges[i].head, tok = cm.getTokenAt(pos); + var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; + if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass; + + var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html"; + var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose); + var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent); + + var tagName = state.tagName; + if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch); + var lowerTagName = tagName.toLowerCase(); + // Don't process the '>' at the end of an end-tag or self-closing tag + if (!tagName || + tok.type == "string" && (tok.end != pos.ch || !/[\"\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) || + tok.type == "tag" && state.type == "closeTag" || + tok.string.indexOf("/") == (tok.string.length - 1) || // match something like + dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 || + closingTagExists(cm, tagName, pos, state, true)) + return CodeMirror.Pass; + + var indent = indentTags && indexOf(indentTags, lowerTagName) > -1; + replacements[i] = {indent: indent, + text: ">" + (indent ? "\n\n" : "") + "", + newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)}; + } + + for (var i = ranges.length - 1; i >= 0; i--) { + var info = replacements[i]; + cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert"); + var sel = cm.listSelections().slice(0); + sel[i] = {head: info.newPos, anchor: info.newPos}; + cm.setSelections(sel); + if (info.indent) { + cm.indentLine(info.newPos.line, null, true); + cm.indentLine(info.newPos.line + 1, null, true); + } + } + } + + function autoCloseCurrent(cm, typingSlash) { + var ranges = cm.listSelections(), replacements = []; + var head = typingSlash ? "/" : "") replacement += ">"; + replacements[i] = replacement; + } + cm.replaceSelections(replacements); + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) + if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line) + cm.indentLine(ranges[i].head.line); + } + + function autoCloseSlash(cm) { + if (cm.getOption("disableInput")) return CodeMirror.Pass; + return autoCloseCurrent(cm, true); + } + + CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); }; + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + + // If xml-fold is loaded, we use its functionality to try and verify + // whether a given tag is actually unclosed. + function closingTagExists(cm, tagName, pos, state, newTag) { + if (!CodeMirror.scanForClosingTag) return false; + var end = Math.min(cm.lastLine() + 1, pos.line + 500); + var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end); + if (!nextClose || nextClose.tag != tagName) return false; + var cx = state.context; + // If the immediate wrapping context contains onCx instances of + // the same tag, a closing tag only exists if there are at least + // that many closing tags of that type following. + for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx; + pos = nextClose.to; + for (var i = 1; i < onCx; i++) { + var next = CodeMirror.scanForClosingTag(cm, pos, null, end); + if (!next || next.tag != tagName) return false; + pos = next.to; + } + return true; + } +}); diff --git a/libraries/codemirror/addon/edit/continuelist.js b/libraries/codemirror/addon/edit/continuelist.js new file mode 100644 index 0000000..df5179f --- /dev/null +++ b/libraries/codemirror/addon/edit/continuelist.js @@ -0,0 +1,51 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/, + emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/, + unorderedListRE = /[*+-]\s/; + + CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { + if (cm.getOption("disableInput")) return CodeMirror.Pass; + var ranges = cm.listSelections(), replacements = []; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].head; + var eolState = cm.getStateAfter(pos.line); + var inList = eolState.list !== false; + var inQuote = eolState.quote !== 0; + + var line = cm.getLine(pos.line), match = listRE.exec(line); + if (!ranges[i].empty() || (!inList && !inQuote) || !match) { + cm.execCommand("newlineAndIndent"); + return; + } + if (emptyListRE.test(line)) { + cm.replaceRange("", { + line: pos.line, ch: 0 + }, { + line: pos.line, ch: pos.ch + 1 + }); + replacements[i] = "\n"; + } else { + var indent = match[1], after = match[5]; + var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0 + ? match[2] + : (parseInt(match[3], 10) + 1) + match[4]; + + replacements[i] = "\n" + indent + bullet + after; + } + } + + cm.replaceSelections(replacements); + }; +}); diff --git a/libraries/codemirror/addon/edit/matchbrackets.js b/libraries/codemirror/addon/edit/matchbrackets.js new file mode 100644 index 0000000..70e1ae1 --- /dev/null +++ b/libraries/codemirror/addon/edit/matchbrackets.js @@ -0,0 +1,120 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && + (document.documentMode == null || document.documentMode < 8); + + var Pos = CodeMirror.Pos; + + var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; + + function findMatchingBracket(cm, where, strict, config) { + var line = cm.getLineHandle(where.line), pos = where.ch - 1; + var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; + if (!match) return null; + var dir = match.charAt(1) == ">" ? 1 : -1; + if (strict && (dir > 0) != (pos == where.ch)) return null; + var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); + + var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); + if (found == null) return null; + return {from: Pos(where.line, pos), to: found && found.pos, + match: found && found.ch == match.charAt(0), forward: dir > 0}; + } + + // bracketRegex is used to specify which type of bracket to scan + // should be a regexp, e.g. /[[\]]/ + // + // Note: If "where" is on an open bracket, then this bracket is ignored. + // + // Returns false when no bracket was found, null when it reached + // maxScanLines and gave up + function scanForBracket(cm, where, dir, style, config) { + var maxScanLen = (config && config.maxScanLineLength) || 10000; + var maxScanLines = (config && config.maxScanLines) || 1000; + + var stack = []; + var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; + var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) + : Math.max(cm.firstLine() - 1, where.line - maxScanLines); + for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { + var line = cm.getLine(lineNo); + if (!line) continue; + var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; + if (line.length > maxScanLen) continue; + if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); + for (; pos != end; pos += dir) { + var ch = line.charAt(pos); + if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { + var match = matching[ch]; + if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); + else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; + else stack.pop(); + } + } + } + return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; + } + + function matchBrackets(cm, autoclear, config) { + // Disable brace matching in long lines, since it'll cause hugely slow updates + var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; + var marks = [], ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); + if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { + var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); + if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) + marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); + } + } + + if (marks.length) { + // Kludge to work around the IE bug from issue #1193, where text + // input stops going to the textare whever this fires. + if (ie_lt8 && cm.state.focused) cm.focus(); + + var clear = function() { + cm.operation(function() { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + }); + }; + if (autoclear) setTimeout(clear, 800); + else return clear; + } + } + + var currentlyHighlighted = null; + function doMatchBrackets(cm) { + cm.operation(function() { + if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} + currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); + }); + } + + CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) + cm.off("cursorActivity", doMatchBrackets); + if (val) { + cm.state.matchBrackets = typeof val == "object" ? val : {}; + cm.on("cursorActivity", doMatchBrackets); + } + }); + + CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); + CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ + return findMatchingBracket(this, pos, strict, config); + }); + CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ + return scanForBracket(this, pos, dir, style, config); + }); +}); diff --git a/libraries/codemirror/addon/edit/matchtags.js b/libraries/codemirror/addon/edit/matchtags.js new file mode 100644 index 0000000..fb1911a --- /dev/null +++ b/libraries/codemirror/addon/edit/matchtags.js @@ -0,0 +1,66 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../fold/xml-fold")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../fold/xml-fold"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("matchTags", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.off("cursorActivity", doMatchTags); + cm.off("viewportChange", maybeUpdateMatch); + clear(cm); + } + if (val) { + cm.state.matchBothTags = typeof val == "object" && val.bothTags; + cm.on("cursorActivity", doMatchTags); + cm.on("viewportChange", maybeUpdateMatch); + doMatchTags(cm); + } + }); + + function clear(cm) { + if (cm.state.tagHit) cm.state.tagHit.clear(); + if (cm.state.tagOther) cm.state.tagOther.clear(); + cm.state.tagHit = cm.state.tagOther = null; + } + + function doMatchTags(cm) { + cm.state.failedTagMatch = false; + cm.operation(function() { + clear(cm); + if (cm.somethingSelected()) return; + var cur = cm.getCursor(), range = cm.getViewport(); + range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); + var match = CodeMirror.findMatchingTag(cm, cur, range); + if (!match) return; + if (cm.state.matchBothTags) { + var hit = match.at == "open" ? match.open : match.close; + if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); + } + var other = match.at == "close" ? match.open : match.close; + if (other) + cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); + else + cm.state.failedTagMatch = true; + }); + } + + function maybeUpdateMatch(cm) { + if (cm.state.failedTagMatch) doMatchTags(cm); + } + + CodeMirror.commands.toMatchingTag = function(cm) { + var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); + if (found) { + var other = found.at == "close" ? found.open : found.close; + if (other) cm.extendSelection(other.to, other.from); + } + }; +}); diff --git a/libraries/codemirror/addon/edit/trailingspace.js b/libraries/codemirror/addon/edit/trailingspace.js new file mode 100644 index 0000000..fa7b56b --- /dev/null +++ b/libraries/codemirror/addon/edit/trailingspace.js @@ -0,0 +1,27 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { + if (prev == CodeMirror.Init) prev = false; + if (prev && !val) + cm.removeOverlay("trailingspace"); + else if (!prev && val) + cm.addOverlay({ + token: function(stream) { + for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} + if (i > stream.pos) { stream.pos = i; return null; } + stream.pos = l; + return "trailingspace"; + }, + name: "trailingspace" + }); + }); +}); diff --git a/libraries/codemirror/addon/fold/brace-fold.js b/libraries/codemirror/addon/fold/brace-fold.js new file mode 100644 index 0000000..1605f6c --- /dev/null +++ b/libraries/codemirror/addon/fold/brace-fold.js @@ -0,0 +1,105 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("fold", "brace", function(cm, start) { + var line = start.line, lineText = cm.getLine(line); + var startCh, tokenType; + + function findOpening(openCh) { + for (var at = start.ch, pass = 0;;) { + var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); + if (found == -1) { + if (pass == 1) break; + pass = 1; + at = lineText.length; + continue; + } + if (pass == 1 && found < start.ch) break; + tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); + if (!/^(comment|string)/.test(tokenType)) return found + 1; + at = found - 1; + } + } + + var startToken = "{", endToken = "}", startCh = findOpening("{"); + if (startCh == null) { + startToken = "[", endToken = "]"; + startCh = findOpening("["); + } + + if (startCh == null) return; + var count = 1, lastLine = cm.lastLine(), end, endCh; + outer: for (var i = line; i <= lastLine; ++i) { + var text = cm.getLine(i), pos = i == line ? startCh : 0; + for (;;) { + var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); + if (nextOpen < 0) nextOpen = text.length; + if (nextClose < 0) nextClose = text.length; + pos = Math.min(nextOpen, nextClose); + if (pos == text.length) break; + if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { + if (pos == nextOpen) ++count; + else if (!--count) { end = i; endCh = pos; break outer; } + } + ++pos; + } + } + if (end == null || line == end && endCh == startCh) return; + return {from: CodeMirror.Pos(line, startCh), + to: CodeMirror.Pos(end, endCh)}; +}); + +CodeMirror.registerHelper("fold", "import", function(cm, start) { + function hasImport(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type != "keyword" || start.string != "import") return null; + // Now find closing semicolon, return its position + for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { + var text = cm.getLine(i), semi = text.indexOf(";"); + if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; + } + } + + var start = start.line, has = hasImport(start), prev; + if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) + return null; + for (var end = has.end;;) { + var next = hasImport(end.line + 1); + if (next == null) break; + end = next.end; + } + return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; +}); + +CodeMirror.registerHelper("fold", "include", function(cm, start) { + function hasInclude(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; + } + + var start = start.line, has = hasInclude(start); + if (has == null || hasInclude(start - 1) != null) return null; + for (var end = start;;) { + var next = hasInclude(end + 1); + if (next == null) break; + ++end; + } + return {from: CodeMirror.Pos(start, has + 1), + to: cm.clipPos(CodeMirror.Pos(end))}; +}); + +}); diff --git a/libraries/codemirror/addon/fold/comment-fold.js b/libraries/codemirror/addon/fold/comment-fold.js new file mode 100644 index 0000000..60fa3e4 --- /dev/null +++ b/libraries/codemirror/addon/fold/comment-fold.js @@ -0,0 +1,59 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { + return mode.blockCommentStart && mode.blockCommentEnd; +}, function(cm, start) { + var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; + if (!startToken || !endToken) return; + var line = start.line, lineText = cm.getLine(line); + + var startCh; + for (var at = start.ch, pass = 0;;) { + var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); + if (found == -1) { + if (pass == 1) return; + pass = 1; + at = lineText.length; + continue; + } + if (pass == 1 && found < start.ch) return; + if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1))) && + (lineText.slice(found - endToken.length, found) == endToken || + !/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found))))) { + startCh = found + startToken.length; + break; + } + at = found - 1; + } + + var depth = 1, lastLine = cm.lastLine(), end, endCh; + outer: for (var i = line; i <= lastLine; ++i) { + var text = cm.getLine(i), pos = i == line ? startCh : 0; + for (;;) { + var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); + if (nextOpen < 0) nextOpen = text.length; + if (nextClose < 0) nextClose = text.length; + pos = Math.min(nextOpen, nextClose); + if (pos == text.length) break; + if (pos == nextOpen) ++depth; + else if (!--depth) { end = i; endCh = pos; break outer; } + ++pos; + } + } + if (end == null || line == end && endCh == startCh) return; + return {from: CodeMirror.Pos(line, startCh), + to: CodeMirror.Pos(end, endCh)}; +}); + +}); diff --git a/libraries/codemirror/addon/fold/foldcode.js b/libraries/codemirror/addon/fold/foldcode.js new file mode 100644 index 0000000..62911f9 --- /dev/null +++ b/libraries/codemirror/addon/fold/foldcode.js @@ -0,0 +1,149 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function doFold(cm, pos, options, force) { + if (options && options.call) { + var finder = options; + options = null; + } else { + var finder = getOption(cm, options, "rangeFinder"); + } + if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); + var minSize = getOption(cm, options, "minFoldSize"); + + function getRange(allowFolded) { + var range = finder(cm, pos); + if (!range || range.to.line - range.from.line < minSize) return null; + var marks = cm.findMarksAt(range.from); + for (var i = 0; i < marks.length; ++i) { + if (marks[i].__isFold && force !== "fold") { + if (!allowFolded) return null; + range.cleared = true; + marks[i].clear(); + } + } + return range; + } + + var range = getRange(true); + if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { + pos = CodeMirror.Pos(pos.line - 1, 0); + range = getRange(false); + } + if (!range || range.cleared || force === "unfold") return; + + var myWidget = makeWidget(cm, options); + CodeMirror.on(myWidget, "mousedown", function(e) { + myRange.clear(); + CodeMirror.e_preventDefault(e); + }); + var myRange = cm.markText(range.from, range.to, { + replacedWith: myWidget, + clearOnEnter: true, + __isFold: true + }); + myRange.on("clear", function(from, to) { + CodeMirror.signal(cm, "unfold", cm, from, to); + }); + CodeMirror.signal(cm, "fold", cm, range.from, range.to); + } + + function makeWidget(cm, options) { + var widget = getOption(cm, options, "widget"); + if (typeof widget == "string") { + var text = document.createTextNode(widget); + widget = document.createElement("span"); + widget.appendChild(text); + widget.className = "CodeMirror-foldmarker"; + } + return widget; + } + + // Clumsy backwards-compatible interface + CodeMirror.newFoldFunction = function(rangeFinder, widget) { + return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; + }; + + // New-style interface + CodeMirror.defineExtension("foldCode", function(pos, options, force) { + doFold(this, pos, options, force); + }); + + CodeMirror.defineExtension("isFolded", function(pos) { + var marks = this.findMarksAt(pos); + for (var i = 0; i < marks.length; ++i) + if (marks[i].__isFold) return true; + }); + + CodeMirror.commands.toggleFold = function(cm) { + cm.foldCode(cm.getCursor()); + }; + CodeMirror.commands.fold = function(cm) { + cm.foldCode(cm.getCursor(), null, "fold"); + }; + CodeMirror.commands.unfold = function(cm) { + cm.foldCode(cm.getCursor(), null, "unfold"); + }; + CodeMirror.commands.foldAll = function(cm) { + cm.operation(function() { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) + cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); + }); + }; + CodeMirror.commands.unfoldAll = function(cm) { + cm.operation(function() { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) + cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); + }); + }; + + CodeMirror.registerHelper("fold", "combine", function() { + var funcs = Array.prototype.slice.call(arguments, 0); + return function(cm, start) { + for (var i = 0; i < funcs.length; ++i) { + var found = funcs[i](cm, start); + if (found) return found; + } + }; + }); + + CodeMirror.registerHelper("fold", "auto", function(cm, start) { + var helpers = cm.getHelpers(start, "fold"); + for (var i = 0; i < helpers.length; i++) { + var cur = helpers[i](cm, start); + if (cur) return cur; + } + }); + + var defaultOptions = { + rangeFinder: CodeMirror.fold.auto, + widget: "\u2194", + minFoldSize: 0, + scanUp: false + }; + + CodeMirror.defineOption("foldOptions", null); + + function getOption(cm, options, name) { + if (options && options[name] !== undefined) + return options[name]; + var editorOptions = cm.options.foldOptions; + if (editorOptions && editorOptions[name] !== undefined) + return editorOptions[name]; + return defaultOptions[name]; + } + + CodeMirror.defineExtension("foldOption", function(options, name) { + return getOption(this, options, name); + }); +}); diff --git a/libraries/codemirror/addon/fold/foldgutter.css b/libraries/codemirror/addon/fold/foldgutter.css new file mode 100644 index 0000000..ad19ae2 --- /dev/null +++ b/libraries/codemirror/addon/fold/foldgutter.css @@ -0,0 +1,20 @@ +.CodeMirror-foldmarker { + color: blue; + text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; + font-family: arial; + line-height: .3; + cursor: pointer; +} +.CodeMirror-foldgutter { + width: .7em; +} +.CodeMirror-foldgutter-open, +.CodeMirror-foldgutter-folded { + cursor: pointer; +} +.CodeMirror-foldgutter-open:after { + content: "\25BE"; +} +.CodeMirror-foldgutter-folded:after { + content: "\25B8"; +} diff --git a/libraries/codemirror/addon/fold/foldgutter.js b/libraries/codemirror/addon/fold/foldgutter.js new file mode 100644 index 0000000..f101e26 --- /dev/null +++ b/libraries/codemirror/addon/fold/foldgutter.js @@ -0,0 +1,146 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./foldcode")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./foldcode"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.clearGutter(cm.state.foldGutter.options.gutter); + cm.state.foldGutter = null; + cm.off("gutterClick", onGutterClick); + cm.off("change", onChange); + cm.off("viewportChange", onViewportChange); + cm.off("fold", onFold); + cm.off("unfold", onFold); + cm.off("swapDoc", onChange); + } + if (val) { + cm.state.foldGutter = new State(parseOptions(val)); + updateInViewport(cm); + cm.on("gutterClick", onGutterClick); + cm.on("change", onChange); + cm.on("viewportChange", onViewportChange); + cm.on("fold", onFold); + cm.on("unfold", onFold); + cm.on("swapDoc", onChange); + } + }); + + var Pos = CodeMirror.Pos; + + function State(options) { + this.options = options; + this.from = this.to = 0; + } + + function parseOptions(opts) { + if (opts === true) opts = {}; + if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; + if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; + if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; + return opts; + } + + function isFolded(cm, line) { + var marks = cm.findMarksAt(Pos(line)); + for (var i = 0; i < marks.length; ++i) + if (marks[i].__isFold && marks[i].find().from.line == line) return marks[i]; + } + + function marker(spec) { + if (typeof spec == "string") { + var elt = document.createElement("div"); + elt.className = spec + " CodeMirror-guttermarker-subtle"; + return elt; + } else { + return spec.cloneNode(true); + } + } + + function updateFoldInfo(cm, from, to) { + var opts = cm.state.foldGutter.options, cur = from; + var minSize = cm.foldOption(opts, "minFoldSize"); + var func = cm.foldOption(opts, "rangeFinder"); + cm.eachLine(from, to, function(line) { + var mark = null; + if (isFolded(cm, cur)) { + mark = marker(opts.indicatorFolded); + } else { + var pos = Pos(cur, 0); + var range = func && func(cm, pos); + if (range && range.to.line - range.from.line >= minSize) + mark = marker(opts.indicatorOpen); + } + cm.setGutterMarker(line, opts.gutter, mark); + ++cur; + }); + } + + function updateInViewport(cm) { + var vp = cm.getViewport(), state = cm.state.foldGutter; + if (!state) return; + cm.operation(function() { + updateFoldInfo(cm, vp.from, vp.to); + }); + state.from = vp.from; state.to = vp.to; + } + + function onGutterClick(cm, line, gutter) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + if (gutter != opts.gutter) return; + var folded = isFolded(cm, line); + if (folded) folded.clear(); + else cm.foldCode(Pos(line, 0), opts.rangeFinder); + } + + function onChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + state.from = state.to = 0; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); + } + + function onViewportChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function() { + var vp = cm.getViewport(); + if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { + updateInViewport(cm); + } else { + cm.operation(function() { + if (vp.from < state.from) { + updateFoldInfo(cm, vp.from, state.from); + state.from = vp.from; + } + if (vp.to > state.to) { + updateFoldInfo(cm, state.to, vp.to); + state.to = vp.to; + } + }); + } + }, opts.updateViewportTimeSpan || 400); + } + + function onFold(cm, from) { + var state = cm.state.foldGutter; + if (!state) return; + var line = from.line; + if (line >= state.from && line < state.to) + updateFoldInfo(cm, line, line + 1); + } +}); diff --git a/libraries/codemirror/addon/fold/indent-fold.js b/libraries/codemirror/addon/fold/indent-fold.js new file mode 100644 index 0000000..e29f15e --- /dev/null +++ b/libraries/codemirror/addon/fold/indent-fold.js @@ -0,0 +1,44 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("fold", "indent", function(cm, start) { + var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); + if (!/\S/.test(firstLine)) return; + var getIndent = function(line) { + return CodeMirror.countColumn(line, null, tabSize); + }; + var myIndent = getIndent(firstLine); + var lastLineInFold = null; + // Go through lines until we find a line that definitely doesn't belong in + // the block we're folding, or to the end. + for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { + var curLine = cm.getLine(i); + var curIndent = getIndent(curLine); + if (curIndent > myIndent) { + // Lines with a greater indent are considered part of the block. + lastLineInFold = i; + } else if (!/\S/.test(curLine)) { + // Empty lines might be breaks within the block we're trying to fold. + } else { + // A non-empty line at an indent equal to or less than ours marks the + // start of another block. + break; + } + } + if (lastLineInFold) return { + from: CodeMirror.Pos(start.line, firstLine.length), + to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) + }; +}); + +}); diff --git a/libraries/codemirror/addon/fold/markdown-fold.js b/libraries/codemirror/addon/fold/markdown-fold.js new file mode 100644 index 0000000..ce84c94 --- /dev/null +++ b/libraries/codemirror/addon/fold/markdown-fold.js @@ -0,0 +1,49 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("fold", "markdown", function(cm, start) { + var maxDepth = 100; + + function isHeader(lineNo) { + var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); + return tokentype && /\bheader\b/.test(tokentype); + } + + function headerLevel(lineNo, line, nextLine) { + var match = line && line.match(/^#+/); + if (match && isHeader(lineNo)) return match[0].length; + match = nextLine && nextLine.match(/^[=\-]+\s*$/); + if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; + return maxDepth; + } + + var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); + var level = headerLevel(start.line, firstLine, nextLine); + if (level === maxDepth) return undefined; + + var lastLineNo = cm.lastLine(); + var end = start.line, nextNextLine = cm.getLine(end + 2); + while (end < lastLineNo) { + if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; + ++end; + nextLine = nextNextLine; + nextNextLine = cm.getLine(end + 2); + } + + return { + from: CodeMirror.Pos(start.line, firstLine.length), + to: CodeMirror.Pos(end, cm.getLine(end).length) + }; +}); + +}); diff --git a/libraries/codemirror/addon/fold/xml-fold.js b/libraries/codemirror/addon/fold/xml-fold.js new file mode 100644 index 0000000..504727f --- /dev/null +++ b/libraries/codemirror/addon/fold/xml-fold.js @@ -0,0 +1,182 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } + + var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; + var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; + var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g"); + + function Iter(cm, line, ch, range) { + this.line = line; this.ch = ch; + this.cm = cm; this.text = cm.getLine(line); + this.min = range ? range.from : cm.firstLine(); + this.max = range ? range.to - 1 : cm.lastLine(); + } + + function tagAt(iter, ch) { + var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch)); + return type && /\btag\b/.test(type); + } + + function nextLine(iter) { + if (iter.line >= iter.max) return; + iter.ch = 0; + iter.text = iter.cm.getLine(++iter.line); + return true; + } + function prevLine(iter) { + if (iter.line <= iter.min) return; + iter.text = iter.cm.getLine(--iter.line); + iter.ch = iter.text.length; + return true; + } + + function toTagEnd(iter) { + for (;;) { + var gt = iter.text.indexOf(">", iter.ch); + if (gt == -1) { if (nextLine(iter)) continue; else return; } + if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; } + var lastSlash = iter.text.lastIndexOf("/", gt); + var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); + iter.ch = gt + 1; + return selfClose ? "selfClose" : "regular"; + } + } + function toTagStart(iter) { + for (;;) { + var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1; + if (lt == -1) { if (prevLine(iter)) continue; else return; } + if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; } + xmlTagStart.lastIndex = lt; + iter.ch = lt; + var match = xmlTagStart.exec(iter.text); + if (match && match.index == lt) return match; + } + } + + function toNextTag(iter) { + for (;;) { + xmlTagStart.lastIndex = iter.ch; + var found = xmlTagStart.exec(iter.text); + if (!found) { if (nextLine(iter)) continue; else return; } + if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; } + iter.ch = found.index + found[0].length; + return found; + } + } + function toPrevTag(iter) { + for (;;) { + var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1; + if (gt == -1) { if (prevLine(iter)) continue; else return; } + if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; } + var lastSlash = iter.text.lastIndexOf("/", gt); + var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); + iter.ch = gt + 1; + return selfClose ? "selfClose" : "regular"; + } + } + + function findMatchingClose(iter, tag) { + var stack = []; + for (;;) { + var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0); + if (!next || !(end = toTagEnd(iter))) return; + if (end == "selfClose") continue; + if (next[1]) { // closing tag + for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) { + stack.length = i; + break; + } + if (i < 0 && (!tag || tag == next[2])) return { + tag: next[2], + from: Pos(startLine, startCh), + to: Pos(iter.line, iter.ch) + }; + } else { // opening tag + stack.push(next[2]); + } + } + } + function findMatchingOpen(iter, tag) { + var stack = []; + for (;;) { + var prev = toPrevTag(iter); + if (!prev) return; + if (prev == "selfClose") { toTagStart(iter); continue; } + var endLine = iter.line, endCh = iter.ch; + var start = toTagStart(iter); + if (!start) return; + if (start[1]) { // closing tag + stack.push(start[2]); + } else { // opening tag + for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) { + stack.length = i; + break; + } + if (i < 0 && (!tag || tag == start[2])) return { + tag: start[2], + from: Pos(iter.line, iter.ch), + to: Pos(endLine, endCh) + }; + } + } + } + + CodeMirror.registerHelper("fold", "xml", function(cm, start) { + var iter = new Iter(cm, start.line, 0); + for (;;) { + var openTag = toNextTag(iter), end; + if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return; + if (!openTag[1] && end != "selfClose") { + var start = Pos(iter.line, iter.ch); + var close = findMatchingClose(iter, openTag[2]); + return close && {from: start, to: close.from}; + } + } + }); + CodeMirror.findMatchingTag = function(cm, pos, range) { + var iter = new Iter(cm, pos.line, pos.ch, range); + if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return; + var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch); + var start = end && toTagStart(iter); + if (!end || !start || cmp(iter, pos) > 0) return; + var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]}; + if (end == "selfClose") return {open: here, close: null, at: "open"}; + + if (start[1]) { // closing tag + return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"}; + } else { // opening tag + iter = new Iter(cm, to.line, to.ch, range); + return {open: here, close: findMatchingClose(iter, start[2]), at: "open"}; + } + }; + + CodeMirror.findEnclosingTag = function(cm, pos, range) { + var iter = new Iter(cm, pos.line, pos.ch, range); + for (;;) { + var open = findMatchingOpen(iter); + if (!open) break; + var forward = new Iter(cm, pos.line, pos.ch, range); + var close = findMatchingClose(forward, open.tag); + if (close) return {open: open, close: close}; + } + }; + + // Used by addon/edit/closetag.js + CodeMirror.scanForClosingTag = function(cm, pos, name, end) { + var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null); + return findMatchingClose(iter, name); + }; +}); diff --git a/libraries/codemirror/addon/hint/anyword-hint.js b/libraries/codemirror/addon/hint/anyword-hint.js new file mode 100644 index 0000000..dae78e2 --- /dev/null +++ b/libraries/codemirror/addon/hint/anyword-hint.js @@ -0,0 +1,41 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var WORD = /[\w$]+/, RANGE = 500; + + CodeMirror.registerHelper("hint", "anyword", function(editor, options) { + var word = options && options.word || WORD; + var range = options && options.range || RANGE; + var cur = editor.getCursor(), curLine = editor.getLine(cur.line); + var end = cur.ch, start = end; + while (start && word.test(curLine.charAt(start - 1))) --start; + var curWord = start != end && curLine.slice(start, end); + + var list = options && options.list || [], seen = {}; + var re = new RegExp(word.source, "g"); + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine; line += dir) { + var text = editor.getLine(line), m; + while (m = re.exec(text)) { + if (line == cur.line && m[0] === curWord) continue; + if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { + seen[m[0]] = true; + list.push(m[0]); + } + } + } + } + return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; + }); +}); diff --git a/libraries/codemirror/addon/hint/css-hint.js b/libraries/codemirror/addon/hint/css-hint.js new file mode 100644 index 0000000..2264272 --- /dev/null +++ b/libraries/codemirror/addon/hint/css-hint.js @@ -0,0 +1,60 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../mode/css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../mode/css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1, + "first-letter": 1, "first-line": 1, "first-child": 1, + before: 1, after: 1, lang: 1}; + + CodeMirror.registerHelper("hint", "css", function(cm) { + var cur = cm.getCursor(), token = cm.getTokenAt(cur); + var inner = CodeMirror.innerMode(cm.getMode(), token.state); + if (inner.mode.name != "css") return; + + if (token.type == "keyword" && "!important".indexOf(token.string) == 0) + return {list: ["!important"], from: CodeMirror.Pos(cur.line, token.start), + to: CodeMirror.Pos(cur.line, token.end)}; + + var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); + if (/[^\w$_-]/.test(word)) { + word = ""; start = end = cur.ch; + } + + var spec = CodeMirror.resolveMode("text/css"); + + var result = []; + function add(keywords) { + for (var name in keywords) + if (!word || name.lastIndexOf(word, 0) == 0) + result.push(name); + } + + var st = inner.state.state; + if (st == "pseudo" || token.type == "variable-3") { + add(pseudoClasses); + } else if (st == "block" || st == "maybeprop") { + add(spec.propertyKeywords); + } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { + add(spec.valueKeywords); + add(spec.colorKeywords); + } else if (st == "media" || st == "media_parens") { + add(spec.mediaTypes); + add(spec.mediaFeatures); + } + + if (result.length) return { + list: result, + from: CodeMirror.Pos(cur.line, start), + to: CodeMirror.Pos(cur.line, end) + }; + }); +}); diff --git a/libraries/codemirror/addon/hint/html-hint.js b/libraries/codemirror/addon/hint/html-hint.js new file mode 100644 index 0000000..c6769bc --- /dev/null +++ b/libraries/codemirror/addon/hint/html-hint.js @@ -0,0 +1,348 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./xml-hint")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./xml-hint"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "); + var targets = ["_blank", "_self", "_top", "_parent"]; + var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"]; + var methods = ["get", "post", "put", "delete"]; + var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]; + var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech", + "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait", + "orientation:landscape", "device-height: [X]", "device-width: [X]"]; + var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags + + var data = { + a: { + attrs: { + href: null, ping: null, type: null, + media: media, + target: targets, + hreflang: langs + } + }, + abbr: s, + acronym: s, + address: s, + applet: s, + area: { + attrs: { + alt: null, coords: null, href: null, target: null, ping: null, + media: media, hreflang: langs, type: null, + shape: ["default", "rect", "circle", "poly"] + } + }, + article: s, + aside: s, + audio: { + attrs: { + src: null, mediagroup: null, + crossorigin: ["anonymous", "use-credentials"], + preload: ["none", "metadata", "auto"], + autoplay: ["", "autoplay"], + loop: ["", "loop"], + controls: ["", "controls"] + } + }, + b: s, + base: { attrs: { href: null, target: targets } }, + basefont: s, + bdi: s, + bdo: s, + big: s, + blockquote: { attrs: { cite: null } }, + body: s, + br: s, + button: { + attrs: { + form: null, formaction: null, name: null, value: null, + autofocus: ["", "autofocus"], + disabled: ["", "autofocus"], + formenctype: encs, + formmethod: methods, + formnovalidate: ["", "novalidate"], + formtarget: targets, + type: ["submit", "reset", "button"] + } + }, + canvas: { attrs: { width: null, height: null } }, + caption: s, + center: s, + cite: s, + code: s, + col: { attrs: { span: null } }, + colgroup: { attrs: { span: null } }, + command: { + attrs: { + type: ["command", "checkbox", "radio"], + label: null, icon: null, radiogroup: null, command: null, title: null, + disabled: ["", "disabled"], + checked: ["", "checked"] + } + }, + data: { attrs: { value: null } }, + datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } }, + datalist: { attrs: { data: null } }, + dd: s, + del: { attrs: { cite: null, datetime: null } }, + details: { attrs: { open: ["", "open"] } }, + dfn: s, + dir: s, + div: s, + dl: s, + dt: s, + em: s, + embed: { attrs: { src: null, type: null, width: null, height: null } }, + eventsource: { attrs: { src: null } }, + fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } }, + figcaption: s, + figure: s, + font: s, + footer: s, + form: { + attrs: { + action: null, name: null, + "accept-charset": charsets, + autocomplete: ["on", "off"], + enctype: encs, + method: methods, + novalidate: ["", "novalidate"], + target: targets + } + }, + frame: s, + frameset: s, + h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, + head: { + attrs: {}, + children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"] + }, + header: s, + hgroup: s, + hr: s, + html: { + attrs: { manifest: null }, + children: ["head", "body"] + }, + i: s, + iframe: { + attrs: { + src: null, srcdoc: null, name: null, width: null, height: null, + sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"], + seamless: ["", "seamless"] + } + }, + img: { + attrs: { + alt: null, src: null, ismap: null, usemap: null, width: null, height: null, + crossorigin: ["anonymous", "use-credentials"] + } + }, + input: { + attrs: { + alt: null, dirname: null, form: null, formaction: null, + height: null, list: null, max: null, maxlength: null, min: null, + name: null, pattern: null, placeholder: null, size: null, src: null, + step: null, value: null, width: null, + accept: ["audio/*", "video/*", "image/*"], + autocomplete: ["on", "off"], + autofocus: ["", "autofocus"], + checked: ["", "checked"], + disabled: ["", "disabled"], + formenctype: encs, + formmethod: methods, + formnovalidate: ["", "novalidate"], + formtarget: targets, + multiple: ["", "multiple"], + readonly: ["", "readonly"], + required: ["", "required"], + type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", + "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", + "file", "submit", "image", "reset", "button"] + } + }, + ins: { attrs: { cite: null, datetime: null } }, + kbd: s, + keygen: { + attrs: { + challenge: null, form: null, name: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + keytype: ["RSA"] + } + }, + label: { attrs: { "for": null, form: null } }, + legend: s, + li: { attrs: { value: null } }, + link: { + attrs: { + href: null, type: null, + hreflang: langs, + media: media, + sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"] + } + }, + map: { attrs: { name: null } }, + mark: s, + menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } }, + meta: { + attrs: { + content: null, + charset: charsets, + name: ["viewport", "application-name", "author", "description", "generator", "keywords"], + "http-equiv": ["content-language", "content-type", "default-style", "refresh"] + } + }, + meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, + nav: s, + noframes: s, + noscript: s, + object: { + attrs: { + data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, + typemustmatch: ["", "typemustmatch"] + } + }, + ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } }, + optgroup: { attrs: { disabled: ["", "disabled"], label: null } }, + option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } }, + output: { attrs: { "for": null, form: null, name: null } }, + p: s, + param: { attrs: { name: null, value: null } }, + pre: s, + progress: { attrs: { value: null, max: null } }, + q: { attrs: { cite: null } }, + rp: s, + rt: s, + ruby: s, + s: s, + samp: s, + script: { + attrs: { + type: ["text/javascript"], + src: null, + async: ["", "async"], + defer: ["", "defer"], + charset: charsets + } + }, + section: s, + select: { + attrs: { + form: null, name: null, size: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + multiple: ["", "multiple"] + } + }, + small: s, + source: { attrs: { src: null, type: null, media: null } }, + span: s, + strike: s, + strong: s, + style: { + attrs: { + type: ["text/css"], + media: media, + scoped: null + } + }, + sub: s, + summary: s, + sup: s, + table: s, + tbody: s, + td: { attrs: { colspan: null, rowspan: null, headers: null } }, + textarea: { + attrs: { + dirname: null, form: null, maxlength: null, name: null, placeholder: null, + rows: null, cols: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + readonly: ["", "readonly"], + required: ["", "required"], + wrap: ["soft", "hard"] + } + }, + tfoot: s, + th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } }, + thead: s, + time: { attrs: { datetime: null } }, + title: s, + tr: s, + track: { + attrs: { + src: null, label: null, "default": null, + kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"], + srclang: langs + } + }, + tt: s, + u: s, + ul: s, + "var": s, + video: { + attrs: { + src: null, poster: null, width: null, height: null, + crossorigin: ["anonymous", "use-credentials"], + preload: ["auto", "metadata", "none"], + autoplay: ["", "autoplay"], + mediagroup: ["movie"], + muted: ["", "muted"], + controls: ["", "controls"] + } + }, + wbr: s + }; + + var globalAttrs = { + accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + "class": null, + contenteditable: ["true", "false"], + contextmenu: null, + dir: ["ltr", "rtl", "auto"], + draggable: ["true", "false", "auto"], + dropzone: ["copy", "move", "link", "string:", "file:"], + hidden: ["hidden"], + id: null, + inert: ["inert"], + itemid: null, + itemprop: null, + itemref: null, + itemscope: ["itemscope"], + itemtype: null, + lang: ["en", "es"], + spellcheck: ["true", "false"], + style: null, + tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"], + title: null, + translate: ["yes", "no"], + onclick: null, + rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"] + }; + function populate(obj) { + for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) + obj.attrs[attr] = globalAttrs[attr]; + } + + populate(s); + for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) + populate(data[tag]); + + CodeMirror.htmlSchema = data; + function htmlHint(cm, options) { + var local = {schemaInfo: data}; + if (options) for (var opt in options) local[opt] = options[opt]; + return CodeMirror.hint.xml(cm, local); + } + CodeMirror.registerHelper("hint", "html", htmlHint); +}); diff --git a/libraries/codemirror/addon/hint/javascript-hint.js b/libraries/codemirror/addon/hint/javascript-hint.js new file mode 100644 index 0000000..7bcbf4a --- /dev/null +++ b/libraries/codemirror/addon/hint/javascript-hint.js @@ -0,0 +1,146 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var Pos = CodeMirror.Pos; + + function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); + } + + function arrayContains(arr, item) { + if (!Array.prototype.indexOf) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + return true; + } + } + return false; + } + return arr.indexOf(item) != -1; + } + + function scriptHint(editor, keywords, getToken, options) { + // Find the token at the cursor + var cur = editor.getCursor(), token = getToken(editor, cur); + if (/\b(?:string|comment)\b/.test(token.type)) return; + token.state = CodeMirror.innerMode(editor.getMode(), token.state).state; + + // If it's not a 'word-style' token, ignore the token. + if (!/^[\w$_]*$/.test(token.string)) { + token = {start: cur.ch, end: cur.ch, string: "", state: token.state, + type: token.string == "." ? "property" : null}; + } else if (token.end > cur.ch) { + token.end = cur.ch; + token.string = token.string.slice(0, cur.ch - token.start); + } + + var tprop = token; + // If it is a property, find out what it is a property of. + while (tprop.type == "property") { + tprop = getToken(editor, Pos(cur.line, tprop.start)); + if (tprop.string != ".") return; + tprop = getToken(editor, Pos(cur.line, tprop.start)); + if (!context) var context = []; + context.push(tprop); + } + return {list: getCompletions(token, context, keywords, options), + from: Pos(cur.line, token.start), + to: Pos(cur.line, token.end)}; + } + + function javascriptHint(editor, options) { + return scriptHint(editor, javascriptKeywords, + function (e, cur) {return e.getTokenAt(cur);}, + options); + }; + CodeMirror.registerHelper("hint", "javascript", javascriptHint); + + function getCoffeeScriptToken(editor, cur) { + // This getToken, it is for coffeescript, imitates the behavior of + // getTokenAt method in javascript.js, that is, returning "property" + // type and treat "." as indepenent token. + var token = editor.getTokenAt(cur); + if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { + token.end = token.start; + token.string = '.'; + token.type = "property"; + } + else if (/^\.[\w$_]*$/.test(token.string)) { + token.type = "property"; + token.start++; + token.string = token.string.replace(/\./, ''); + } + return token; + } + + function coffeescriptHint(editor, options) { + return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options); + } + CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint); + + var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + + "toUpperCase toLowerCase split concat match replace search").split(" "); + var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + + "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); + var funcProps = "prototype apply call bind".split(" "); + var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + + "if in instanceof new null return switch throw true try typeof var void while with").split(" "); + var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + + "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); + + function getCompletions(token, context, keywords, options) { + var found = [], start = token.string, global = options && options.globalScope || window; + function maybeAdd(str) { + if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str); + } + function gatherCompletions(obj) { + if (typeof obj == "string") forEach(stringProps, maybeAdd); + else if (obj instanceof Array) forEach(arrayProps, maybeAdd); + else if (obj instanceof Function) forEach(funcProps, maybeAdd); + for (var name in obj) maybeAdd(name); + } + + if (context && context.length) { + // If this is a property, see if it belongs to some object we can + // find in the current environment. + var obj = context.pop(), base; + if (obj.type && obj.type.indexOf("variable") === 0) { + if (options && options.additionalContext) + base = options.additionalContext[obj.string]; + if (!options || options.useGlobalScope !== false) + base = base || global[obj.string]; + } else if (obj.type == "string") { + base = ""; + } else if (obj.type == "atom") { + base = 1; + } else if (obj.type == "function") { + if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && + (typeof global.jQuery == 'function')) + base = global.jQuery(); + else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function')) + base = global._(); + } + while (base != null && context.length) + base = base[context.pop().string]; + if (base != null) gatherCompletions(base); + } else { + // If not, just look in the global object and any local scope + // (reading into JS mode internals to get at the local and global variables) + for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); + for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name); + if (!options || options.useGlobalScope !== false) + gatherCompletions(global); + forEach(keywords, maybeAdd); + } + return found; + } +}); diff --git a/libraries/codemirror/addon/hint/show-hint.css b/libraries/codemirror/addon/hint/show-hint.css new file mode 100644 index 0000000..924e638 --- /dev/null +++ b/libraries/codemirror/addon/hint/show-hint.css @@ -0,0 +1,38 @@ +.CodeMirror-hints { + position: absolute; + z-index: 10; + overflow: hidden; + list-style: none; + + margin: 0; + padding: 2px; + + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + border-radius: 3px; + border: 1px solid silver; + + background: white; + font-size: 90%; + font-family: monospace; + + max-height: 20em; + overflow-y: auto; +} + +.CodeMirror-hint { + margin: 0; + padding: 0 4px; + border-radius: 2px; + max-width: 19em; + overflow: hidden; + white-space: pre; + color: black; + cursor: pointer; +} + +li.CodeMirror-hint-active { + background: #08f; + color: white; +} diff --git a/libraries/codemirror/addon/hint/show-hint.js b/libraries/codemirror/addon/hint/show-hint.js new file mode 100644 index 0000000..cbe3b39 --- /dev/null +++ b/libraries/codemirror/addon/hint/show-hint.js @@ -0,0 +1,440 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var HINT_ELEMENT_CLASS = "CodeMirror-hint"; + var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; + + // This is the old interface, kept around for now to stay + // backwards-compatible. + CodeMirror.showHint = function(cm, getHints, options) { + if (!getHints) return cm.showHint(options); + if (options && options.async) getHints.async = true; + var newOpts = {hint: getHints}; + if (options) for (var prop in options) newOpts[prop] = options[prop]; + return cm.showHint(newOpts); + }; + + CodeMirror.defineExtension("showHint", function(options) { + options = parseOptions(this, this.getCursor("start"), options); + var selections = this.listSelections() + if (selections.length > 1) return; + // By default, don't allow completion when something is selected. + // A hint function can have a `supportsSelection` property to + // indicate that it can handle selections. + if (this.somethingSelected()) { + if (!options.hint.supportsSelection) return; + // Don't try with cross-line selections + for (var i = 0; i < selections.length; i++) + if (selections[i].head.line != selections[i].anchor.line) return; + } + + if (this.state.completionActive) this.state.completionActive.close(); + var completion = this.state.completionActive = new Completion(this, options); + if (!completion.options.hint) return; + + CodeMirror.signal(this, "startCompletion", this); + completion.update(true); + }); + + function Completion(cm, options) { + this.cm = cm; + this.options = options; + this.widget = null; + this.debounce = 0; + this.tick = 0; + this.startPos = this.cm.getCursor("start"); + this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; + + var self = this; + cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); }); + } + + var requestAnimationFrame = window.requestAnimationFrame || function(fn) { + return setTimeout(fn, 1000/60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; + + Completion.prototype = { + close: function() { + if (!this.active()) return; + this.cm.state.completionActive = null; + this.tick = null; + this.cm.off("cursorActivity", this.activityFunc); + + if (this.widget && this.data) CodeMirror.signal(this.data, "close"); + if (this.widget) this.widget.close(); + CodeMirror.signal(this.cm, "endCompletion", this.cm); + }, + + active: function() { + return this.cm.state.completionActive == this; + }, + + pick: function(data, i) { + var completion = data.list[i]; + if (completion.hint) completion.hint(this.cm, data, completion); + else this.cm.replaceRange(getText(completion), completion.from || data.from, + completion.to || data.to, "complete"); + CodeMirror.signal(data, "pick", completion); + this.close(); + }, + + cursorActivity: function() { + if (this.debounce) { + cancelAnimationFrame(this.debounce); + this.debounce = 0; + } + + var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line); + if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || + pos.ch < this.startPos.ch || this.cm.somethingSelected() || + (pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) { + this.close(); + } else { + var self = this; + this.debounce = requestAnimationFrame(function() {self.update();}); + if (this.widget) this.widget.disable(); + } + }, + + update: function(first) { + if (this.tick == null) return; + if (!this.options.hint.async) { + this.finishUpdate(this.options.hint(this.cm, this.options), first); + } else { + var myTick = ++this.tick, self = this; + this.options.hint(this.cm, function(data) { + if (self.tick == myTick) self.finishUpdate(data, first); + }, this.options); + } + }, + + finishUpdate: function(data, first) { + if (this.data) CodeMirror.signal(this.data, "update"); + if (data && this.data && CodeMirror.cmpPos(data.from, this.data.from)) data = null; + this.data = data; + + var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle); + if (this.widget) this.widget.close(); + if (data && data.list.length) { + if (picked && data.list.length == 1) { + this.pick(data, 0); + } else { + this.widget = new Widget(this, data); + CodeMirror.signal(data, "shown"); + } + } + } + }; + + function parseOptions(cm, pos, options) { + var editor = cm.options.hintOptions; + var out = {}; + for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; + if (editor) for (var prop in editor) + if (editor[prop] !== undefined) out[prop] = editor[prop]; + if (options) for (var prop in options) + if (options[prop] !== undefined) out[prop] = options[prop]; + if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos) + return out; + } + + function getText(completion) { + if (typeof completion == "string") return completion; + else return completion.text; + } + + function buildKeyMap(completion, handle) { + var baseMap = { + Up: function() {handle.moveFocus(-1);}, + Down: function() {handle.moveFocus(1);}, + PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, + PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, + Home: function() {handle.setFocus(0);}, + End: function() {handle.setFocus(handle.length - 1);}, + Enter: handle.pick, + Tab: handle.pick, + Esc: handle.close + }; + var custom = completion.options.customKeys; + var ourMap = custom ? {} : baseMap; + function addBinding(key, val) { + var bound; + if (typeof val != "string") + bound = function(cm) { return val(cm, handle); }; + // This mechanism is deprecated + else if (baseMap.hasOwnProperty(val)) + bound = baseMap[val]; + else + bound = val; + ourMap[key] = bound; + } + if (custom) + for (var key in custom) if (custom.hasOwnProperty(key)) + addBinding(key, custom[key]); + var extra = completion.options.extraKeys; + if (extra) + for (var key in extra) if (extra.hasOwnProperty(key)) + addBinding(key, extra[key]); + return ourMap; + } + + function getHintElement(hintsElement, el) { + while (el && el != hintsElement) { + if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; + el = el.parentNode; + } + } + + function Widget(completion, data) { + this.completion = completion; + this.data = data; + this.picked = false; + var widget = this, cm = completion.cm; + + var hints = this.hints = document.createElement("ul"); + hints.className = "CodeMirror-hints"; + this.selectedHint = data.selectedHint || 0; + + var completions = data.list; + for (var i = 0; i < completions.length; ++i) { + var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; + var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); + if (cur.className != null) className = cur.className + " " + className; + elt.className = className; + if (cur.render) cur.render(elt, data, cur); + else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); + elt.hintId = i; + } + + var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); + var left = pos.left, top = pos.bottom, below = true; + hints.style.left = left + "px"; + hints.style.top = top + "px"; + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); + var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); + (completion.options.container || document.body).appendChild(hints); + var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; + if (overlapY > 0) { + var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { // Fits above cursor + hints.style.top = (top = pos.top - height) + "px"; + below = false; + } else if (height > winH) { + hints.style.height = (winH - 5) + "px"; + hints.style.top = (top = pos.bottom - box.top) + "px"; + var cursor = cm.getCursor(); + if (data.from.ch != cursor.ch) { + pos = cm.cursorCoords(cursor); + hints.style.left = (left = pos.left) + "px"; + box = hints.getBoundingClientRect(); + } + } + } + var overlapX = box.right - winW; + if (overlapX > 0) { + if (box.right - box.left > winW) { + hints.style.width = (winW - 5) + "px"; + overlapX -= (box.right - box.left) - winW; + } + hints.style.left = (left = pos.left - overlapX) + "px"; + } + + cm.addKeyMap(this.keyMap = buildKeyMap(completion, { + moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, + setFocus: function(n) { widget.changeActive(n); }, + menuSize: function() { return widget.screenAmount(); }, + length: completions.length, + close: function() { completion.close(); }, + pick: function() { widget.pick(); }, + data: data + })); + + if (completion.options.closeOnUnfocus) { + var closingOnBlur; + cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); + cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); + } + + var startScroll = cm.getScrollInfo(); + cm.on("scroll", this.onScroll = function() { + var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); + var newTop = top + startScroll.top - curScroll.top; + var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); + if (!below) point += hints.offsetHeight; + if (point <= editor.top || point >= editor.bottom) return completion.close(); + hints.style.top = newTop + "px"; + hints.style.left = (left + startScroll.left - curScroll.left) + "px"; + }); + + CodeMirror.on(hints, "dblclick", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} + }); + + CodeMirror.on(hints, "click", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + if (completion.options.completeOnSingleClick) widget.pick(); + } + }); + + CodeMirror.on(hints, "mousedown", function() { + setTimeout(function(){cm.focus();}, 20); + }); + + CodeMirror.signal(data, "select", completions[0], hints.firstChild); + return true; + } + + Widget.prototype = { + close: function() { + if (this.completion.widget != this) return; + this.completion.widget = null; + this.hints.parentNode.removeChild(this.hints); + this.completion.cm.removeKeyMap(this.keyMap); + + var cm = this.completion.cm; + if (this.completion.options.closeOnUnfocus) { + cm.off("blur", this.onBlur); + cm.off("focus", this.onFocus); + } + cm.off("scroll", this.onScroll); + }, + + disable: function() { + this.completion.cm.removeKeyMap(this.keyMap); + var widget = this; + this.keyMap = {Enter: function() { widget.picked = true; }}; + this.completion.cm.addKeyMap(this.keyMap); + }, + + pick: function() { + this.completion.pick(this.data, this.selectedHint); + }, + + changeActive: function(i, avoidWrap) { + if (i >= this.data.list.length) + i = avoidWrap ? this.data.list.length - 1 : 0; + else if (i < 0) + i = avoidWrap ? 0 : this.data.list.length - 1; + if (this.selectedHint == i) return; + var node = this.hints.childNodes[this.selectedHint]; + node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); + node = this.hints.childNodes[this.selectedHint = i]; + node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; + if (node.offsetTop < this.hints.scrollTop) + this.hints.scrollTop = node.offsetTop - 3; + else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) + this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; + CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); + }, + + screenAmount: function() { + return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; + } + }; + + function applicableHelpers(cm, helpers) { + if (!cm.somethingSelected()) return helpers + var result = [] + for (var i = 0; i < helpers.length; i++) + if (helpers[i].supportsSelection) result.push(helpers[i]) + return result + } + + function resolveAutoHints(cm, pos) { + var helpers = cm.getHelpers(pos, "hint"), words + if (helpers.length) { + var async = false, resolved + for (var i = 0; i < helpers.length; i++) if (helpers[i].async) async = true + if (async) { + resolved = function(cm, callback, options) { + var app = applicableHelpers(cm, helpers) + function run(i, result) { + if (i == app.length) return callback(null) + var helper = app[i] + if (helper.async) { + helper(cm, function(result) { + if (result) callback(result) + else run(i + 1) + }, options) + } else { + var result = helper(cm, options) + if (result) callback(result) + else run(i + 1) + } + } + run(0) + } + resolved.async = true + } else { + resolved = function(cm, options) { + var app = applicableHelpers(cm, helpers) + for (var i = 0; i < app.length; i++) { + var cur = app[i](cm, options) + if (cur && cur.list.length) return cur + } + } + } + resolved.supportsSelection = true + return resolved + } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { + return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) } + } else if (CodeMirror.hint.anyword) { + return function(cm, options) { return CodeMirror.hint.anyword(cm, options) } + } else { + return function() {} + } + } + + CodeMirror.registerHelper("hint", "auto", { + resolve: resolveAutoHints + }); + + CodeMirror.registerHelper("hint", "fromList", function(cm, options) { + var cur = cm.getCursor(), token = cm.getTokenAt(cur); + var to = CodeMirror.Pos(cur.line, token.end); + if (token.string && /\w/.test(token.string[token.string.length - 1])) { + var term = token.string, from = CodeMirror.Pos(cur.line, token.start); + } else { + var term = "", from = to; + } + var found = []; + for (var i = 0; i < options.words.length; i++) { + var word = options.words[i]; + if (word.slice(0, term.length) == term) + found.push(word); + } + + if (found.length) return {list: found, from: from, to: to}; + }); + + CodeMirror.commands.autocomplete = CodeMirror.showHint; + + var defaultOptions = { + hint: CodeMirror.hint.auto, + completeSingle: true, + alignWithWord: true, + closeCharacters: /[\s()\[\]{};:>,]/, + closeOnUnfocus: true, + completeOnSingleClick: true, + container: null, + customKeys: null, + extraKeys: null + }; + + CodeMirror.defineOption("hintOptions", null); +}); diff --git a/libraries/codemirror/addon/hint/sql-hint.js b/libraries/codemirror/addon/hint/sql-hint.js new file mode 100644 index 0000000..22124b5 --- /dev/null +++ b/libraries/codemirror/addon/hint/sql-hint.js @@ -0,0 +1,254 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../mode/sql/sql")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../mode/sql/sql"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var tables; + var defaultTable; + var keywords; + var CONS = { + QUERY_DIV: ";", + ALIAS_KEYWORD: "AS" + }; + var Pos = CodeMirror.Pos; + + function getKeywords(editor) { + var mode = editor.doc.modeOption; + if (mode === "sql") mode = "text/x-sql"; + return CodeMirror.resolveMode(mode).keywords; + } + + function getText(item) { + return typeof item == "string" ? item : item.text; + } + + function getItem(list, item) { + if (!list.slice) return list[item]; + for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item) + return list[i]; + } + + function shallowClone(object) { + var result = {}; + for (var key in object) if (object.hasOwnProperty(key)) + result[key] = object[key]; + return result; + } + + function match(string, word) { + var len = string.length; + var sub = getText(word).substr(0, len); + return string.toUpperCase() === sub.toUpperCase(); + } + + function addMatches(result, search, wordlist, formatter) { + for (var word in wordlist) { + if (!wordlist.hasOwnProperty(word)) continue; + if (wordlist.slice) word = wordlist[word]; + + if (match(search, word)) result.push(formatter(word)); + } + } + + function cleanName(name) { + // Get rid name from backticks(`) and preceding dot(.) + if (name.charAt(0) == ".") { + name = name.substr(1); + } + return name.replace(/`/g, ""); + } + + function insertBackticks(name) { + var nameParts = getText(name).split("."); + for (var i = 0; i < nameParts.length; i++) + nameParts[i] = "`" + nameParts[i] + "`"; + var escaped = nameParts.join("."); + if (typeof name == "string") return escaped; + name = shallowClone(name); + name.text = escaped; + return name; + } + + function nameCompletion(cur, token, result, editor) { + // Try to complete table, colunm names and return start position of completion + var useBacktick = false; + var nameParts = []; + var start = token.start; + var cont = true; + while (cont) { + cont = (token.string.charAt(0) == "."); + useBacktick = useBacktick || (token.string.charAt(0) == "`"); + + start = token.start; + nameParts.unshift(cleanName(token.string)); + + token = editor.getTokenAt(Pos(cur.line, token.start)); + if (token.string == ".") { + cont = true; + token = editor.getTokenAt(Pos(cur.line, token.start)); + } + } + + // Try to complete table names + var string = nameParts.join("."); + addMatches(result, string, tables, function(w) { + return useBacktick ? insertBackticks(w) : w; + }); + + // Try to complete columns from defaultTable + addMatches(result, string, defaultTable, function(w) { + return useBacktick ? insertBackticks(w) : w; + }); + + // Try to complete columns + string = nameParts.pop(); + var table = nameParts.join("."); + + var alias = false; + var aliasTable = table; + // Check if table is available. If not, find table by Alias + if (!getItem(tables, table)) { + var oldTable = table; + table = findTableByAlias(table, editor); + if (table !== oldTable) alias = true; + } + + var columns = getItem(tables, table); + if (columns && columns.columns) + columns = columns.columns; + + if (columns) { + addMatches(result, string, columns, function(w) { + var tableInsert = table; + if (alias == true) tableInsert = aliasTable; + if (typeof w == "string") { + w = tableInsert + "." + w; + } else { + w = shallowClone(w); + w.text = tableInsert + "." + w.text; + } + return useBacktick ? insertBackticks(w) : w; + }); + } + + return start; + } + + function eachWord(lineText, f) { + if (!lineText) return; + var excepted = /[,;]/g; + var words = lineText.split(" "); + for (var i = 0; i < words.length; i++) { + f(words[i]?words[i].replace(excepted, '') : ''); + } + } + + function convertCurToNumber(cur) { + // max characters of a line is 999,999. + return cur.line + cur.ch / Math.pow(10, 6); + } + + function convertNumberToCur(num) { + return Pos(Math.floor(num), +num.toString().split('.').pop()); + } + + function findTableByAlias(alias, editor) { + var doc = editor.doc; + var fullQuery = doc.getValue(); + var aliasUpperCase = alias.toUpperCase(); + var previousWord = ""; + var table = ""; + var separator = []; + var validRange = { + start: Pos(0, 0), + end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length) + }; + + //add separator + var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV); + while(indexOfSeparator != -1) { + separator.push(doc.posFromIndex(indexOfSeparator)); + indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1); + } + separator.unshift(Pos(0, 0)); + separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length)); + + //find valid range + var prevItem = 0; + var current = convertCurToNumber(editor.getCursor()); + for (var i=0; i< separator.length; i++) { + var _v = convertCurToNumber(separator[i]); + if (current > prevItem && current <= _v) { + validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) }; + break; + } + prevItem = _v; + } + + var query = doc.getRange(validRange.start, validRange.end, false); + + for (var i = 0; i < query.length; i++) { + var lineText = query[i]; + eachWord(lineText, function(word) { + var wordUpperCase = word.toUpperCase(); + if (wordUpperCase === aliasUpperCase && getItem(tables, previousWord)) + table = previousWord; + if (wordUpperCase !== CONS.ALIAS_KEYWORD) + previousWord = word; + }); + if (table) break; + } + return table; + } + + CodeMirror.registerHelper("hint", "sql", function(editor, options) { + tables = (options && options.tables) || {}; + var defaultTableName = options && options.defaultTable; + var disableKeywords = options && options.disableKeywords; + defaultTable = defaultTableName && getItem(tables, defaultTableName); + keywords = keywords || getKeywords(editor); + + if (defaultTableName && !defaultTable) + defaultTable = findTableByAlias(defaultTableName, editor); + + defaultTable = defaultTable || []; + + if (defaultTable.columns) + defaultTable = defaultTable.columns; + + var cur = editor.getCursor(); + var result = []; + var token = editor.getTokenAt(cur), start, end, search; + if (token.end > cur.ch) { + token.end = cur.ch; + token.string = token.string.slice(0, cur.ch - token.start); + } + + if (token.string.match(/^[.`\w@]\w*$/)) { + search = token.string; + start = token.start; + end = token.end; + } else { + start = end = cur.ch; + search = ""; + } + if (search.charAt(0) == "." || search.charAt(0) == "`") { + start = nameCompletion(cur, token, result, editor); + } else { + addMatches(result, search, tables, function(w) {return w;}); + addMatches(result, search, defaultTable, function(w) {return w;}); + if (!disableKeywords) + addMatches(result, search, keywords, function(w) {return w.toUpperCase();}); + } + + return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)}; + }); +}); diff --git a/libraries/codemirror/addon/hint/xml-hint.js b/libraries/codemirror/addon/hint/xml-hint.js new file mode 100644 index 0000000..9b9baa0 --- /dev/null +++ b/libraries/codemirror/addon/hint/xml-hint.js @@ -0,0 +1,110 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + + function getHints(cm, options) { + var tags = options && options.schemaInfo; + var quote = (options && options.quoteChar) || '"'; + if (!tags) return; + var cur = cm.getCursor(), token = cm.getTokenAt(cur); + if (token.end > cur.ch) { + token.end = cur.ch; + token.string = token.string.slice(0, cur.ch - token.start); + } + var inner = CodeMirror.innerMode(cm.getMode(), token.state); + if (inner.mode.name != "xml") return; + var result = [], replaceToken = false, prefix; + var tag = /\btag\b/.test(token.type) && !/>$/.test(token.string); + var tagName = tag && /^\w/.test(token.string), tagStart; + + if (tagName) { + var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start); + var tagType = /<\/$/.test(before) ? "close" : /<$/.test(before) ? "open" : null; + if (tagType) tagStart = token.start - (tagType == "close" ? 2 : 1); + } else if (tag && token.string == "<") { + tagType = "open"; + } else if (tag && token.string == ""); + } else { + // Attribute completion + var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs; + var globalAttrs = tags["!attrs"]; + if (!attrs && !globalAttrs) return; + if (!attrs) { + attrs = globalAttrs; + } else if (globalAttrs) { // Combine tag-local and global attributes + var set = {}; + for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm]; + for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm]; + attrs = set; + } + if (token.type == "string" || token.string == "=") { // A value + var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)), + Pos(cur.line, token.type == "string" ? token.start : token.end)); + var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues; + if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return; + if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget + if (token.type == "string") { + prefix = token.string; + var n = 0; + if (/['"]/.test(token.string.charAt(0))) { + quote = token.string.charAt(0); + prefix = token.string.slice(1); + n++; + } + var len = token.string.length; + if (/['"]/.test(token.string.charAt(len - 1))) { + quote = token.string.charAt(len - 1); + prefix = token.string.substr(n, len - 2); + } + replaceToken = true; + } + for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].lastIndexOf(prefix, 0) == 0) + result.push(quote + atValues[i] + quote); + } else { // An attribute name + if (token.type == "attribute") { + prefix = token.string; + replaceToken = true; + } + for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.lastIndexOf(prefix, 0) == 0)) + result.push(attr); + } + } + return { + list: result, + from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur, + to: replaceToken ? Pos(cur.line, token.end) : cur + }; + } + + CodeMirror.registerHelper("hint", "xml", getHints); +}); diff --git a/libraries/codemirror/addon/lint/coffeescript-lint.js b/libraries/codemirror/addon/lint/coffeescript-lint.js new file mode 100644 index 0000000..7e39428 --- /dev/null +++ b/libraries/codemirror/addon/lint/coffeescript-lint.js @@ -0,0 +1,41 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js + +// declare global: coffeelint + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("lint", "coffeescript", function(text) { + var found = []; + var parseError = function(err) { + var loc = err.lineNumber; + found.push({from: CodeMirror.Pos(loc-1, 0), + to: CodeMirror.Pos(loc, 0), + severity: err.level, + message: err.message}); + }; + try { + var res = coffeelint.lint(text); + for(var i = 0; i < res.length; i++) { + parseError(res[i]); + } + } catch(e) { + found.push({from: CodeMirror.Pos(e.location.first_line, 0), + to: CodeMirror.Pos(e.location.last_line, e.location.last_column), + severity: 'error', + message: e.message}); + } + return found; +}); + +}); diff --git a/libraries/codemirror/addon/lint/css-lint.js b/libraries/codemirror/addon/lint/css-lint.js new file mode 100644 index 0000000..1f61b47 --- /dev/null +++ b/libraries/codemirror/addon/lint/css-lint.js @@ -0,0 +1,35 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Depends on csslint.js from https://github.com/stubbornella/csslint + +// declare global: CSSLint + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("lint", "css", function(text) { + var found = []; + if (!window.CSSLint) return found; + var results = CSSLint.verify(text), messages = results.messages, message = null; + for ( var i = 0; i < messages.length; i++) { + message = messages[i]; + var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; + found.push({ + from: CodeMirror.Pos(startLine, startCol), + to: CodeMirror.Pos(endLine, endCol), + message: message.message, + severity : message.type + }); + } + return found; +}); + +}); diff --git a/libraries/codemirror/addon/lint/html-lint.js b/libraries/codemirror/addon/lint/html-lint.js new file mode 100644 index 0000000..1e84170 --- /dev/null +++ b/libraries/codemirror/addon/lint/html-lint.js @@ -0,0 +1,46 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Depends on htmlhint.js from http://htmlhint.com/js/htmlhint.js + +// declare global: HTMLHint + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("htmlhint")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "htmlhint"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaultRules = { + "tagname-lowercase": true, + "attr-lowercase": true, + "attr-value-double-quotes": true, + "doctype-first": false, + "tag-pair": true, + "spec-char-escape": true, + "id-unique": true, + "src-not-empty": true, + "attr-no-duplication": true + }; + + CodeMirror.registerHelper("lint", "html", function(text, options) { + var found = []; + if (!window.HTMLHint) return found; + var messages = HTMLHint.verify(text, options && options.rules || defaultRules); + for (var i = 0; i < messages.length; i++) { + var message = messages[i]; + var startLine = message.line - 1, endLine = message.line - 1, startCol = message.col - 1, endCol = message.col; + found.push({ + from: CodeMirror.Pos(startLine, startCol), + to: CodeMirror.Pos(endLine, endCol), + message: message.message, + severity : message.type + }); + } + return found; + }); +}); diff --git a/libraries/codemirror/addon/lint/javascript-lint.js b/libraries/codemirror/addon/lint/javascript-lint.js new file mode 100644 index 0000000..d4f2ae9 --- /dev/null +++ b/libraries/codemirror/addon/lint/javascript-lint.js @@ -0,0 +1,136 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + // declare global: JSHINT + + var bogus = [ "Dangerous comment" ]; + + var warnings = [ [ "Expected '{'", + "Statement body should be inside '{ }' braces." ] ]; + + var errors = [ "Missing semicolon", "Extra comma", "Missing property name", + "Unmatched ", " and instead saw", " is not defined", + "Unclosed string", "Stopping, unable to continue" ]; + + function validator(text, options) { + if (!window.JSHINT) return []; + JSHINT(text, options, options.globals); + var errors = JSHINT.data().errors, result = []; + if (errors) parseErrors(errors, result); + return result; + } + + CodeMirror.registerHelper("lint", "javascript", validator); + + function cleanup(error) { + // All problems are warnings by default + fixWith(error, warnings, "warning", true); + fixWith(error, errors, "error"); + + return isBogus(error) ? null : error; + } + + function fixWith(error, fixes, severity, force) { + var description, fix, find, replace, found; + + description = error.description; + + for ( var i = 0; i < fixes.length; i++) { + fix = fixes[i]; + find = (typeof fix === "string" ? fix : fix[0]); + replace = (typeof fix === "string" ? null : fix[1]); + found = description.indexOf(find) !== -1; + + if (force || found) { + error.severity = severity; + } + if (found && replace) { + error.description = replace; + } + } + } + + function isBogus(error) { + var description = error.description; + for ( var i = 0; i < bogus.length; i++) { + if (description.indexOf(bogus[i]) !== -1) { + return true; + } + } + return false; + } + + function parseErrors(errors, output) { + for ( var i = 0; i < errors.length; i++) { + var error = errors[i]; + if (error) { + var linetabpositions, index; + + linetabpositions = []; + + // This next block is to fix a problem in jshint. Jshint + // replaces + // all tabs with spaces then performs some checks. The error + // positions (character/space) are then reported incorrectly, + // not taking the replacement step into account. Here we look + // at the evidence line and try to adjust the character position + // to the correct value. + if (error.evidence) { + // Tab positions are computed once per line and cached + var tabpositions = linetabpositions[error.line]; + if (!tabpositions) { + var evidence = error.evidence; + tabpositions = []; + // ugggh phantomjs does not like this + // forEachChar(evidence, function(item, index) { + Array.prototype.forEach.call(evidence, function(item, + index) { + if (item === '\t') { + // First col is 1 (not 0) to match error + // positions + tabpositions.push(index + 1); + } + }); + linetabpositions[error.line] = tabpositions; + } + if (tabpositions.length > 0) { + var pos = error.character; + tabpositions.forEach(function(tabposition) { + if (pos > tabposition) pos -= 1; + }); + error.character = pos; + } + } + + var start = error.character - 1, end = start + 1; + if (error.evidence) { + index = error.evidence.substring(start).search(/.\b/); + if (index > -1) { + end += index; + } + } + + // Convert to format expected by validation service + error.description = error.reason;// + "(jshint)"; + error.start = error.character; + error.end = end; + error = cleanup(error); + + if (error) + output.push({message: error.description, + severity: error.severity, + from: CodeMirror.Pos(error.line - 1, start), + to: CodeMirror.Pos(error.line - 1, end)}); + } + } + } +}); diff --git a/libraries/codemirror/addon/lint/json-lint.js b/libraries/codemirror/addon/lint/json-lint.js new file mode 100644 index 0000000..9dbb616 --- /dev/null +++ b/libraries/codemirror/addon/lint/json-lint.js @@ -0,0 +1,31 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Depends on jsonlint.js from https://github.com/zaach/jsonlint + +// declare global: jsonlint + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("lint", "json", function(text) { + var found = []; + jsonlint.parseError = function(str, hash) { + var loc = hash.loc; + found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), + to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), + message: str}); + }; + try { jsonlint.parse(text); } + catch(e) {} + return found; +}); + +}); diff --git a/libraries/codemirror/addon/lint/lint.css b/libraries/codemirror/addon/lint/lint.css new file mode 100644 index 0000000..414a9a0 --- /dev/null +++ b/libraries/codemirror/addon/lint/lint.css @@ -0,0 +1,73 @@ +/* The lint marker gutter */ +.CodeMirror-lint-markers { + width: 16px; +} + +.CodeMirror-lint-tooltip { + background-color: infobackground; + border: 1px solid black; + border-radius: 4px 4px 4px 4px; + color: infotext; + font-family: monospace; + font-size: 10pt; + overflow: hidden; + padding: 2px 5px; + position: fixed; + white-space: pre; + white-space: pre-wrap; + z-index: 100; + max-width: 600px; + opacity: 0; + transition: opacity .4s; + -moz-transition: opacity .4s; + -webkit-transition: opacity .4s; + -o-transition: opacity .4s; + -ms-transition: opacity .4s; +} + +.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { + background-position: left bottom; + background-repeat: repeat-x; +} + +.CodeMirror-lint-mark-error { + background-image: + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==") + ; +} + +.CodeMirror-lint-mark-warning { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); +} + +.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { + background-position: center center; + background-repeat: no-repeat; + cursor: pointer; + display: inline-block; + height: 16px; + width: 16px; + vertical-align: middle; + position: relative; +} + +.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { + padding-left: 18px; + background-position: top left; + background-repeat: no-repeat; +} + +.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); +} + +.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); +} + +.CodeMirror-lint-marker-multiple { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: right bottom; + width: 100%; height: 100%; +} diff --git a/libraries/codemirror/addon/lint/lint.js b/libraries/codemirror/addon/lint/lint.js new file mode 100644 index 0000000..5afe49d --- /dev/null +++ b/libraries/codemirror/addon/lint/lint.js @@ -0,0 +1,231 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var GUTTER_ID = "CodeMirror-lint-markers"; + + function showTooltip(e, content) { + var tt = document.createElement("div"); + tt.className = "CodeMirror-lint-tooltip"; + tt.appendChild(content.cloneNode(true)); + document.body.appendChild(tt); + + function position(e) { + if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); + tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; + tt.style.left = (e.clientX + 5) + "px"; + } + CodeMirror.on(document, "mousemove", position); + position(e); + if (tt.style.opacity != null) tt.style.opacity = 1; + return tt; + } + function rm(elt) { + if (elt.parentNode) elt.parentNode.removeChild(elt); + } + function hideTooltip(tt) { + if (!tt.parentNode) return; + if (tt.style.opacity == null) rm(tt); + tt.style.opacity = 0; + setTimeout(function() { rm(tt); }, 600); + } + + function showTooltipFor(e, content, node) { + var tooltip = showTooltip(e, content); + function hide() { + CodeMirror.off(node, "mouseout", hide); + if (tooltip) { hideTooltip(tooltip); tooltip = null; } + } + var poll = setInterval(function() { + if (tooltip) for (var n = node;; n = n.parentNode) { + if (n && n.nodeType == 11) n = n.host; + if (n == document.body) return; + if (!n) { hide(); break; } + } + if (!tooltip) return clearInterval(poll); + }, 400); + CodeMirror.on(node, "mouseout", hide); + } + + function LintState(cm, options, hasGutter) { + this.marked = []; + this.options = options; + this.timeout = null; + this.hasGutter = hasGutter; + this.onMouseOver = function(e) { onMouseOver(cm, e); }; + this.waitingFor = 0 + } + + function parseOptions(_cm, options) { + if (options instanceof Function) return {getAnnotations: options}; + if (!options || options === true) options = {}; + return options; + } + + function clearMarks(cm) { + var state = cm.state.lint; + if (state.hasGutter) cm.clearGutter(GUTTER_ID); + for (var i = 0; i < state.marked.length; ++i) + state.marked[i].clear(); + state.marked.length = 0; + } + + function makeMarker(labels, severity, multiple, tooltips) { + var marker = document.createElement("div"), inner = marker; + marker.className = "CodeMirror-lint-marker-" + severity; + if (multiple) { + inner = marker.appendChild(document.createElement("div")); + inner.className = "CodeMirror-lint-marker-multiple"; + } + + if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) { + showTooltipFor(e, labels, inner); + }); + + return marker; + } + + function getMaxSeverity(a, b) { + if (a == "error") return a; + else return b; + } + + function groupByLine(annotations) { + var lines = []; + for (var i = 0; i < annotations.length; ++i) { + var ann = annotations[i], line = ann.from.line; + (lines[line] || (lines[line] = [])).push(ann); + } + return lines; + } + + function annotationTooltip(ann) { + var severity = ann.severity; + if (!severity) severity = "error"; + var tip = document.createElement("div"); + tip.className = "CodeMirror-lint-message-" + severity; + tip.appendChild(document.createTextNode(ann.message)); + return tip; + } + + function lintAsync(cm, getAnnotations, passOptions) { + var state = cm.state.lint + var id = ++state.waitingFor + function abort() { + id = -1 + cm.off("change", abort) + } + cm.on("change", abort) + getAnnotations(cm.getValue(), function(annotations, arg2) { + cm.off("change", abort) + if (state.waitingFor != id) return + if (arg2 && annotations instanceof CodeMirror) annotations = arg2 + updateLinting(cm, annotations) + }, passOptions, cm); + } + + function startLinting(cm) { + var state = cm.state.lint, options = state.options; + var passOptions = options.options || options; // Support deprecated passing of `options` property in options + var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); + if (!getAnnotations) return; + if (options.async || getAnnotations.async) { + lintAsync(cm, getAnnotations, passOptions) + } else { + updateLinting(cm, getAnnotations(cm.getValue(), passOptions, cm)); + } + } + + function updateLinting(cm, annotationsNotSorted) { + clearMarks(cm); + var state = cm.state.lint, options = state.options; + + var annotations = groupByLine(annotationsNotSorted); + + for (var line = 0; line < annotations.length; ++line) { + var anns = annotations[line]; + if (!anns) continue; + + var maxSeverity = null; + var tipLabel = state.hasGutter && document.createDocumentFragment(); + + for (var i = 0; i < anns.length; ++i) { + var ann = anns[i]; + var severity = ann.severity; + if (!severity) severity = "error"; + maxSeverity = getMaxSeverity(maxSeverity, severity); + + if (options.formatAnnotation) ann = options.formatAnnotation(ann); + if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); + + if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { + className: "CodeMirror-lint-mark-" + severity, + __annotation: ann + })); + } + + if (state.hasGutter) + cm.setGutterMarker(line, GUTTER_ID, makeMarker(tipLabel, maxSeverity, anns.length > 1, + state.options.tooltips)); + } + if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); + } + + function onChange(cm) { + var state = cm.state.lint; + if (!state) return; + clearTimeout(state.timeout); + state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500); + } + + function popupSpanTooltip(ann, e) { + var target = e.target || e.srcElement; + showTooltipFor(e, annotationTooltip(ann), target); + } + + function onMouseOver(cm, e) { + var target = e.target || e.srcElement; + if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; + var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; + var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); + for (var i = 0; i < spans.length; ++i) { + var ann = spans[i].__annotation; + if (ann) return popupSpanTooltip(ann, e); + } + } + + CodeMirror.defineOption("lint", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + clearMarks(cm); + if (cm.state.lint.options.lintOnChange !== false) + cm.off("change", onChange); + CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); + clearTimeout(cm.state.lint.timeout); + delete cm.state.lint; + } + + if (val) { + var gutters = cm.getOption("gutters"), hasLintGutter = false; + for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; + var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter); + if (state.options.lintOnChange !== false) + cm.on("change", onChange); + if (state.options.tooltips != false) + CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); + + startLinting(cm); + } + }); + + CodeMirror.defineExtension("performLint", function() { + if (this.state.lint) startLinting(this); + }); +}); diff --git a/libraries/codemirror/addon/lint/yaml-lint.js b/libraries/codemirror/addon/lint/yaml-lint.js new file mode 100644 index 0000000..3f77e52 --- /dev/null +++ b/libraries/codemirror/addon/lint/yaml-lint.js @@ -0,0 +1,28 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +// Depends on js-yaml.js from https://github.com/nodeca/js-yaml + +// declare global: jsyaml + +CodeMirror.registerHelper("lint", "yaml", function(text) { + var found = []; + try { jsyaml.load(text); } + catch(e) { + var loc = e.mark; + found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); + } + return found; +}); + +}); diff --git a/libraries/codemirror/addon/merge/merge.css b/libraries/codemirror/addon/merge/merge.css new file mode 100644 index 0000000..bda3d9f --- /dev/null +++ b/libraries/codemirror/addon/merge/merge.css @@ -0,0 +1,113 @@ +.CodeMirror-merge { + position: relative; + border: 1px solid #ddd; + white-space: pre; +} + +.CodeMirror-merge, .CodeMirror-merge .CodeMirror { + height: 350px; +} + +.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; } +.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; } +.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; } +.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; } + +.CodeMirror-merge-pane { + display: inline-block; + white-space: normal; + vertical-align: top; +} +.CodeMirror-merge-pane-rightmost { + position: absolute; + right: 0px; + z-index: 1; +} + +.CodeMirror-merge-gap { + z-index: 2; + display: inline-block; + height: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + position: relative; + background: #f8f8f8; +} + +.CodeMirror-merge-scrolllock-wrap { + position: absolute; + bottom: 0; left: 50%; +} +.CodeMirror-merge-scrolllock { + position: relative; + left: -50%; + cursor: pointer; + color: #555; + line-height: 1; +} + +.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right { + position: absolute; + left: 0; top: 0; + right: 0; bottom: 0; + line-height: 1; +} + +.CodeMirror-merge-copy { + position: absolute; + cursor: pointer; + color: #44c; + z-index: 3; +} + +.CodeMirror-merge-copy-reverse { + position: absolute; + cursor: pointer; + color: #44c; +} + +.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; } +.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; } + +.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==); + background-position: bottom left; + background-repeat: repeat-x; +} + +.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==); + background-position: bottom left; + background-repeat: repeat-x; +} + +.CodeMirror-merge-r-chunk { background: #ffffe0; } +.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; } +.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; } +.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; } + +.CodeMirror-merge-l-chunk { background: #eef; } +.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; } +.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; } +.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; } + +.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; } +.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; } +.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; } + +.CodeMirror-merge-collapsed-widget:before { + content: "(...)"; +} +.CodeMirror-merge-collapsed-widget { + cursor: pointer; + color: #88b; + background: #eef; + border: 1px solid #ddf; + font-size: 90%; + padding: 0 3px; + border-radius: 4px; +} +.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; } diff --git a/libraries/codemirror/addon/merge/merge.js b/libraries/codemirror/addon/merge/merge.js new file mode 100644 index 0000000..129faff --- /dev/null +++ b/libraries/codemirror/addon/merge/merge.js @@ -0,0 +1,773 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); // Note non-packaged dependency diff_match_patch + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "diff_match_patch"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var Pos = CodeMirror.Pos; + var svgNS = "http://www.w3.org/2000/svg"; + + function DiffView(mv, type) { + this.mv = mv; + this.type = type; + this.classes = type == "left" + ? {chunk: "CodeMirror-merge-l-chunk", + start: "CodeMirror-merge-l-chunk-start", + end: "CodeMirror-merge-l-chunk-end", + insert: "CodeMirror-merge-l-inserted", + del: "CodeMirror-merge-l-deleted", + connect: "CodeMirror-merge-l-connect"} + : {chunk: "CodeMirror-merge-r-chunk", + start: "CodeMirror-merge-r-chunk-start", + end: "CodeMirror-merge-r-chunk-end", + insert: "CodeMirror-merge-r-inserted", + del: "CodeMirror-merge-r-deleted", + connect: "CodeMirror-merge-r-connect"}; + } + + DiffView.prototype = { + constructor: DiffView, + init: function(pane, orig, options) { + this.edit = this.mv.edit; + (this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this); + this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); + this.orig.state.diffViews = [this]; + + this.diff = getDiff(asString(orig), asString(options.value)); + this.chunks = getChunks(this.diff); + this.diffOutOfDate = this.dealigned = false; + + this.showDifferences = options.showDifferences !== false; + this.forceUpdate = registerUpdate(this); + setScrollLock(this, true, false); + registerScroll(this); + }, + setShowDifferences: function(val) { + val = val !== false; + if (val != this.showDifferences) { + this.showDifferences = val; + this.forceUpdate("full"); + } + } + }; + + function ensureDiff(dv) { + if (dv.diffOutOfDate) { + dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue()); + dv.chunks = getChunks(dv.diff); + dv.diffOutOfDate = false; + CodeMirror.signal(dv.edit, "updateDiff", dv.diff); + } + } + + var updating = false; + function registerUpdate(dv) { + var edit = {from: 0, to: 0, marked: []}; + var orig = {from: 0, to: 0, marked: []}; + var debounceChange, updatingFast = false; + function update(mode) { + updating = true; + updatingFast = false; + if (mode == "full") { + if (dv.svg) clear(dv.svg); + if (dv.copyButtons) clear(dv.copyButtons); + clearMarks(dv.edit, edit.marked, dv.classes); + clearMarks(dv.orig, orig.marked, dv.classes); + edit.from = edit.to = orig.from = orig.to = 0; + } + ensureDiff(dv); + if (dv.showDifferences) { + updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes); + updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes); + } + makeConnections(dv); + + if (dv.mv.options.connect == "align") + alignChunks(dv); + updating = false; + } + function setDealign(fast) { + if (updating) return; + dv.dealigned = true; + set(fast); + } + function set(fast) { + if (updating || updatingFast) return; + clearTimeout(debounceChange); + if (fast === true) updatingFast = true; + debounceChange = setTimeout(update, fast === true ? 20 : 250); + } + function change(_cm, change) { + if (!dv.diffOutOfDate) { + dv.diffOutOfDate = true; + edit.from = edit.to = orig.from = orig.to = 0; + } + // Update faster when a line was added/removed + setDealign(change.text.length - 1 != change.to.line - change.from.line); + } + dv.edit.on("change", change); + dv.orig.on("change", change); + dv.edit.on("markerAdded", setDealign); + dv.edit.on("markerCleared", setDealign); + dv.orig.on("markerAdded", setDealign); + dv.orig.on("markerCleared", setDealign); + dv.edit.on("viewportChange", function() { set(false); }); + dv.orig.on("viewportChange", function() { set(false); }); + update(); + return update; + } + + function registerScroll(dv) { + dv.edit.on("scroll", function() { + syncScroll(dv, DIFF_INSERT) && makeConnections(dv); + }); + dv.orig.on("scroll", function() { + syncScroll(dv, DIFF_DELETE) && makeConnections(dv); + }); + } + + function syncScroll(dv, type) { + // Change handler will do a refresh after a timeout when diff is out of date + if (dv.diffOutOfDate) return false; + if (!dv.lockScroll) return true; + var editor, other, now = +new Date; + if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; } + else { editor = dv.orig; other = dv.edit; } + // Don't take action if the position of this editor was recently set + // (to prevent feedback loops) + if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false; + + var sInfo = editor.getScrollInfo(); + if (dv.mv.options.connect == "align") { + targetPos = sInfo.top; + } else { + var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen; + var mid = editor.lineAtHeight(midY, "local"); + var around = chunkBoundariesAround(dv.chunks, mid, type == DIFF_INSERT); + var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig); + var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit); + var ratio = (midY - off.top) / (off.bot - off.top); + var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top); + + var botDist, mix; + // Some careful tweaking to make sure no space is left out of view + // when scrolling to top or bottom. + if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) { + targetPos = targetPos * mix + sInfo.top * (1 - mix); + } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) { + var otherInfo = other.getScrollInfo(); + var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos; + if (botDistOther > botDist && (mix = botDist / halfScreen) < 1) + targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix); + } + } + + other.scrollTo(sInfo.left, targetPos); + other.state.scrollSetAt = now; + other.state.scrollSetBy = dv; + return true; + } + + function getOffsets(editor, around) { + var bot = around.after; + if (bot == null) bot = editor.lastLine() + 1; + return {top: editor.heightAtLine(around.before || 0, "local"), + bot: editor.heightAtLine(bot, "local")}; + } + + function setScrollLock(dv, val, action) { + dv.lockScroll = val; + if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv); + dv.lockButton.innerHTML = val ? "\u21db\u21da" : "\u21db  \u21da"; + } + + // Updating the marks for editor content + + function clearMarks(editor, arr, classes) { + for (var i = 0; i < arr.length; ++i) { + var mark = arr[i]; + if (mark instanceof CodeMirror.TextMarker) { + mark.clear(); + } else if (mark.parent) { + editor.removeLineClass(mark, "background", classes.chunk); + editor.removeLineClass(mark, "background", classes.start); + editor.removeLineClass(mark, "background", classes.end); + } + } + arr.length = 0; + } + + // FIXME maybe add a margin around viewport to prevent too many updates + function updateMarks(editor, diff, state, type, classes) { + var vp = editor.getViewport(); + editor.operation(function() { + if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { + clearMarks(editor, state.marked, classes); + markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); + state.from = vp.from; state.to = vp.to; + } else { + if (vp.from < state.from) { + markChanges(editor, diff, type, state.marked, vp.from, state.from, classes); + state.from = vp.from; + } + if (vp.to > state.to) { + markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); + state.to = vp.to; + } + } + }); + } + + function markChanges(editor, diff, type, marks, from, to, classes) { + var pos = Pos(0, 0); + var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); + var cls = type == DIFF_DELETE ? classes.del : classes.insert; + function markChunk(start, end) { + var bfrom = Math.max(from, start), bto = Math.min(to, end); + for (var i = bfrom; i < bto; ++i) { + var line = editor.addLineClass(i, "background", classes.chunk); + if (i == start) editor.addLineClass(line, "background", classes.start); + if (i == end - 1) editor.addLineClass(line, "background", classes.end); + marks.push(line); + } + // When the chunk is empty, make sure a horizontal line shows up + if (start == end && bfrom == end && bto == end) { + if (bfrom) + marks.push(editor.addLineClass(bfrom - 1, "background", classes.end)); + else + marks.push(editor.addLineClass(bfrom, "background", classes.start)); + } + } + + var chunkStart = 0; + for (var i = 0; i < diff.length; ++i) { + var part = diff[i], tp = part[0], str = part[1]; + if (tp == DIFF_EQUAL) { + var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); + moveOver(pos, str); + var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); + if (cleanTo > cleanFrom) { + if (i) markChunk(chunkStart, cleanFrom); + chunkStart = cleanTo; + } + } else { + if (tp == type) { + var end = moveOver(pos, str, true); + var a = posMax(top, pos), b = posMin(bot, end); + if (!posEq(a, b)) + marks.push(editor.markText(a, b, {className: cls})); + pos = end; + } + } + } + if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1); + } + + // Updating the gap between editor and original + + function makeConnections(dv) { + if (!dv.showDifferences) return; + + if (dv.svg) { + clear(dv.svg); + var w = dv.gap.offsetWidth; + attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight); + } + if (dv.copyButtons) clear(dv.copyButtons); + + var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport(); + var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top; + for (var i = 0; i < dv.chunks.length; i++) { + var ch = dv.chunks[i]; + if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from && + ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from) + drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w); + } + } + + function getMatchingOrigLine(editLine, chunks) { + var editStart = 0, origStart = 0; + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null; + if (chunk.editFrom > editLine) break; + editStart = chunk.editTo; + origStart = chunk.origTo; + } + return origStart + (editLine - editStart); + } + + function findAlignedLines(dv, other) { + var linesToAlign = []; + for (var i = 0; i < dv.chunks.length; i++) { + var chunk = dv.chunks[i]; + linesToAlign.push([chunk.origTo, chunk.editTo, other ? getMatchingOrigLine(chunk.editTo, other.chunks) : null]); + } + if (other) { + for (var i = 0; i < other.chunks.length; i++) { + var chunk = other.chunks[i]; + for (var j = 0; j < linesToAlign.length; j++) { + var align = linesToAlign[j]; + if (align[1] == chunk.editTo) { + j = -1; + break; + } else if (align[1] > chunk.editTo) { + break; + } + } + if (j > -1) + linesToAlign.splice(j - 1, 0, [getMatchingOrigLine(chunk.editTo, dv.chunks), chunk.editTo, chunk.origTo]); + } + } + return linesToAlign; + } + + function alignChunks(dv, force) { + if (!dv.dealigned && !force) return; + if (!dv.orig.curOp) return dv.orig.operation(function() { + alignChunks(dv, force); + }); + + dv.dealigned = false; + var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; + if (other) { + ensureDiff(other); + other.dealigned = false; + } + var linesToAlign = findAlignedLines(dv, other); + + // Clear old aligners + var aligners = dv.mv.aligners; + for (var i = 0; i < aligners.length; i++) + aligners[i].clear(); + aligners.length = 0; + + var cm = [dv.orig, dv.edit], scroll = []; + if (other) cm.push(other.orig); + for (var i = 0; i < cm.length; i++) + scroll.push(cm[i].getScrollInfo().top); + + for (var ln = 0; ln < linesToAlign.length; ln++) + alignLines(cm, linesToAlign[ln], aligners); + + for (var i = 0; i < cm.length; i++) + cm[i].scrollTo(null, scroll[i]); + } + + function alignLines(cm, lines, aligners) { + var maxOffset = 0, offset = []; + for (var i = 0; i < cm.length; i++) if (lines[i] != null) { + var off = cm[i].heightAtLine(lines[i], "local"); + offset[i] = off; + maxOffset = Math.max(maxOffset, off); + } + for (var i = 0; i < cm.length; i++) if (lines[i] != null) { + var diff = maxOffset - offset[i]; + if (diff > 1) + aligners.push(padAbove(cm[i], lines[i], diff)); + } + } + + function padAbove(cm, line, size) { + var above = true; + if (line > cm.lastLine()) { + line--; + above = false; + } + var elt = document.createElement("div"); + elt.className = "CodeMirror-merge-spacer"; + elt.style.height = size + "px"; elt.style.minWidth = "1px"; + return cm.addLineWidget(line, elt, {height: size, above: above}); + } + + function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) { + var flip = dv.type == "left"; + var top = dv.orig.heightAtLine(chunk.origFrom, "local") - sTopOrig; + if (dv.svg) { + var topLpx = top; + var topRpx = dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit; + if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; } + var botLpx = dv.orig.heightAtLine(chunk.origTo, "local") - sTopOrig; + var botRpx = dv.edit.heightAtLine(chunk.editTo, "local") - sTopEdit; + if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; } + var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx; + var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx; + attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")), + "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z", + "class", dv.classes.connect); + } + if (dv.copyButtons) { + var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc", + "CodeMirror-merge-copy")); + var editOriginals = dv.mv.options.allowEditingOriginals; + copy.title = editOriginals ? "Push to left" : "Revert chunk"; + copy.chunk = chunk; + copy.style.top = top + "px"; + + if (editOriginals) { + var topReverse = dv.orig.heightAtLine(chunk.editFrom, "local") - sTopEdit; + var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc", + "CodeMirror-merge-copy-reverse")); + copyReverse.title = "Push to right"; + copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo, + origFrom: chunk.editFrom, origTo: chunk.editTo}; + copyReverse.style.top = topReverse + "px"; + dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px"; + } + } + } + + function copyChunk(dv, to, from, chunk) { + if (dv.diffOutOfDate) return; + var start = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0) + to.replaceRange(from.getRange(Pos(chunk.origFrom, 0), Pos(chunk.origTo, 0)), + start, Pos(chunk.editTo, 0)); + } + + // Merge view, containing 0, 1, or 2 diff views. + + var MergeView = CodeMirror.MergeView = function(node, options) { + if (!(this instanceof MergeView)) return new MergeView(node, options); + + this.options = options; + var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight; + + var hasLeft = origLeft != null, hasRight = origRight != null; + var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); + var wrap = [], left = this.left = null, right = this.right = null; + var self = this; + + if (hasLeft) { + left = this.left = new DiffView(this, "left"); + var leftPane = elt("div", null, "CodeMirror-merge-pane"); + wrap.push(leftPane); + wrap.push(buildGap(left)); + } + + var editPane = elt("div", null, "CodeMirror-merge-pane"); + wrap.push(editPane); + + if (hasRight) { + right = this.right = new DiffView(this, "right"); + wrap.push(buildGap(right)); + var rightPane = elt("div", null, "CodeMirror-merge-pane"); + wrap.push(rightPane); + } + + (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost"; + + wrap.push(elt("div", null, null, "height: 0; clear: both;")); + + var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane")); + this.edit = CodeMirror(editPane, copyObj(options)); + + if (left) left.init(leftPane, origLeft, options); + if (right) right.init(rightPane, origRight, options); + + if (options.collapseIdentical) + this.editor().operation(function() { + collapseIdenticalStretches(self, options.collapseIdentical); + }); + if (options.connect == "align") { + this.aligners = []; + alignChunks(this.left || this.right, true); + } + + var onResize = function() { + if (left) makeConnections(left); + if (right) makeConnections(right); + }; + CodeMirror.on(window, "resize", onResize); + var resizeInterval = setInterval(function() { + for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {} + if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); } + }, 5000); + }; + + function buildGap(dv) { + var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock"); + lock.title = "Toggle locked scrolling"; + var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap"); + CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); }); + var gapElts = [lockWrap]; + if (dv.mv.options.revertButtons !== false) { + dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type); + CodeMirror.on(dv.copyButtons, "click", function(e) { + var node = e.target || e.srcElement; + if (!node.chunk) return; + if (node.className == "CodeMirror-merge-copy-reverse") { + copyChunk(dv, dv.orig, dv.edit, node.chunk); + return; + } + copyChunk(dv, dv.edit, dv.orig, node.chunk); + }); + gapElts.unshift(dv.copyButtons); + } + if (dv.mv.options.connect != "align") { + var svg = document.createElementNS && document.createElementNS(svgNS, "svg"); + if (svg && !svg.createSVGRect) svg = null; + dv.svg = svg; + if (svg) gapElts.push(svg); + } + + return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap"); + } + + MergeView.prototype = { + constuctor: MergeView, + editor: function() { return this.edit; }, + rightOriginal: function() { return this.right && this.right.orig; }, + leftOriginal: function() { return this.left && this.left.orig; }, + setShowDifferences: function(val) { + if (this.right) this.right.setShowDifferences(val); + if (this.left) this.left.setShowDifferences(val); + }, + rightChunks: function() { + if (this.right) { ensureDiff(this.right); return this.right.chunks; } + }, + leftChunks: function() { + if (this.left) { ensureDiff(this.left); return this.left.chunks; } + } + }; + + function asString(obj) { + if (typeof obj == "string") return obj; + else return obj.getValue(); + } + + // Operations on diffs + + var dmp = new diff_match_patch(); + function getDiff(a, b) { + var diff = dmp.diff_main(a, b); + dmp.diff_cleanupSemantic(diff); + // The library sometimes leaves in empty parts, which confuse the algorithm + for (var i = 0; i < diff.length; ++i) { + var part = diff[i]; + if (!part[1]) { + diff.splice(i--, 1); + } else if (i && diff[i - 1][0] == part[0]) { + diff.splice(i--, 1); + diff[i][1] += part[1]; + } + } + return diff; + } + + function getChunks(diff) { + var chunks = []; + var startEdit = 0, startOrig = 0; + var edit = Pos(0, 0), orig = Pos(0, 0); + for (var i = 0; i < diff.length; ++i) { + var part = diff[i], tp = part[0]; + if (tp == DIFF_EQUAL) { + var startOff = startOfLineClean(diff, i) ? 0 : 1; + var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; + moveOver(edit, part[1], null, orig); + var endOff = endOfLineClean(diff, i) ? 1 : 0; + var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; + if (cleanToEdit > cleanFromEdit) { + if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig, + editFrom: startEdit, editTo: cleanFromEdit}); + startEdit = cleanToEdit; startOrig = cleanToOrig; + } + } else { + moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); + } + } + if (startEdit <= edit.line || startOrig <= orig.line) + chunks.push({origFrom: startOrig, origTo: orig.line + 1, + editFrom: startEdit, editTo: edit.line + 1}); + return chunks; + } + + function endOfLineClean(diff, i) { + if (i == diff.length - 1) return true; + var next = diff[i + 1][1]; + if (next.length == 1 || next.charCodeAt(0) != 10) return false; + if (i == diff.length - 2) return true; + next = diff[i + 2][1]; + return next.length > 1 && next.charCodeAt(0) == 10; + } + + function startOfLineClean(diff, i) { + if (i == 0) return true; + var last = diff[i - 1][1]; + if (last.charCodeAt(last.length - 1) != 10) return false; + if (i == 1) return true; + last = diff[i - 2][1]; + return last.charCodeAt(last.length - 1) == 10; + } + + function chunkBoundariesAround(chunks, n, nInEdit) { + var beforeE, afterE, beforeO, afterO; + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom; + var toLocal = nInEdit ? chunk.editTo : chunk.origTo; + if (afterE == null) { + if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; } + else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; } + } + if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; } + else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; } + } + return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}}; + } + + function collapseSingle(cm, from, to) { + cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); + var widget = document.createElement("span"); + widget.className = "CodeMirror-merge-collapsed-widget"; + widget.title = "Identical text collapsed. Click to expand."; + var mark = cm.markText(Pos(from, 0), Pos(to - 1), { + inclusiveLeft: true, + inclusiveRight: true, + replacedWith: widget, + clearOnEnter: true + }); + function clear() { + mark.clear(); + cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); + } + CodeMirror.on(widget, "click", clear); + return {mark: mark, clear: clear}; + } + + function collapseStretch(size, editors) { + var marks = []; + function clear() { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + } + for (var i = 0; i < editors.length; i++) { + var editor = editors[i]; + var mark = collapseSingle(editor.cm, editor.line, editor.line + size); + marks.push(mark); + mark.mark.on("clear", clear); + } + return marks[0].mark; + } + + function unclearNearChunks(dv, margin, off, clear) { + for (var i = 0; i < dv.chunks.length; i++) { + var chunk = dv.chunks[i]; + for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) { + var pos = l + off; + if (pos >= 0 && pos < clear.length) clear[pos] = false; + } + } + } + + function collapseIdenticalStretches(mv, margin) { + if (typeof margin != "number") margin = 2; + var clear = [], edit = mv.editor(), off = edit.firstLine(); + for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true); + if (mv.left) unclearNearChunks(mv.left, margin, off, clear); + if (mv.right) unclearNearChunks(mv.right, margin, off, clear); + + for (var i = 0; i < clear.length; i++) { + if (clear[i]) { + var line = i + off; + for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {} + if (size > margin) { + var editors = [{line: line, cm: edit}]; + if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig}); + if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig}); + var mark = collapseStretch(size, editors); + if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark); + } + } + } + } + + // General utilities + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + function clear(node) { + for (var count = node.childNodes.length; count > 0; --count) + node.removeChild(node.firstChild); + } + + function attrs(elt) { + for (var i = 1; i < arguments.length; i += 2) + elt.setAttribute(arguments[i], arguments[i+1]); + } + + function copyObj(obj, target) { + if (!target) target = {}; + for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; + return target; + } + + function moveOver(pos, str, copy, other) { + var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0; + for (;;) { + var nl = str.indexOf("\n", at); + if (nl == -1) break; + ++out.line; + if (other) ++other.line; + at = nl + 1; + } + out.ch = (at ? 0 : out.ch) + (str.length - at); + if (other) other.ch = (at ? 0 : other.ch) + (str.length - at); + return out; + } + + function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; } + function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; } + function posEq(a, b) { return a.line == b.line && a.ch == b.ch; } + + function findPrevDiff(chunks, start, isOrig) { + for (var i = chunks.length - 1; i >= 0; i--) { + var chunk = chunks[i]; + var to = (isOrig ? chunk.origTo : chunk.editTo) - 1; + if (to < start) return to; + } + } + + function findNextDiff(chunks, start, isOrig) { + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + var from = (isOrig ? chunk.origFrom : chunk.editFrom); + if (from > start) return from; + } + } + + function goNearbyDiff(cm, dir) { + var found = null, views = cm.state.diffViews, line = cm.getCursor().line; + if (views) for (var i = 0; i < views.length; i++) { + var dv = views[i], isOrig = cm == dv.orig; + ensureDiff(dv); + var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig); + if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found))) + found = pos; + } + if (found != null) + cm.setCursor(found, 0); + else + return CodeMirror.Pass; + } + + CodeMirror.commands.goNextDiff = function(cm) { + return goNearbyDiff(cm, 1); + }; + CodeMirror.commands.goPrevDiff = function(cm) { + return goNearbyDiff(cm, -1); + }; +}); diff --git a/libraries/codemirror/addon/mode/loadmode.js b/libraries/codemirror/addon/mode/loadmode.js new file mode 100644 index 0000000..10117ec --- /dev/null +++ b/libraries/codemirror/addon/mode/loadmode.js @@ -0,0 +1,64 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), "cjs"); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); + else // Plain browser env + mod(CodeMirror, "plain"); +})(function(CodeMirror, env) { + if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; + + var loading = {}; + function splitCallback(cont, n) { + var countDown = n; + return function() { if (--countDown == 0) cont(); }; + } + function ensureDeps(mode, cont) { + var deps = CodeMirror.modes[mode].dependencies; + if (!deps) return cont(); + var missing = []; + for (var i = 0; i < deps.length; ++i) { + if (!CodeMirror.modes.hasOwnProperty(deps[i])) + missing.push(deps[i]); + } + if (!missing.length) return cont(); + var split = splitCallback(cont, missing.length); + for (var i = 0; i < missing.length; ++i) + CodeMirror.requireMode(missing[i], split); + } + + CodeMirror.requireMode = function(mode, cont) { + if (typeof mode != "string") mode = mode.name; + if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); + if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); + + var file = CodeMirror.modeURL.replace(/%N/g, mode); + if (env == "plain") { + var script = document.createElement("script"); + script.src = file; + var others = document.getElementsByTagName("script")[0]; + var list = loading[mode] = [cont]; + CodeMirror.on(script, "load", function() { + ensureDeps(mode, function() { + for (var i = 0; i < list.length; ++i) list[i](); + }); + }); + others.parentNode.insertBefore(script, others); + } else if (env == "cjs") { + require(file); + cont(); + } else if (env == "amd") { + requirejs([file], cont); + } + }; + + CodeMirror.autoLoadMode = function(instance, mode) { + if (!CodeMirror.modes.hasOwnProperty(mode)) + CodeMirror.requireMode(mode, function() { + instance.setOption("mode", instance.getOption("mode")); + }); + }; +}); diff --git a/libraries/codemirror/addon/mode/multiplex.js b/libraries/codemirror/addon/mode/multiplex.js new file mode 100644 index 0000000..3d8b34c --- /dev/null +++ b/libraries/codemirror/addon/mode/multiplex.js @@ -0,0 +1,123 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.multiplexingMode = function(outer /*, others */) { + // Others should be {open, close, mode [, delimStyle] [, innerStyle]} objects + var others = Array.prototype.slice.call(arguments, 1); + + function indexOf(string, pattern, from, returnEnd) { + if (typeof pattern == "string") { + var found = string.indexOf(pattern, from); + return returnEnd && found > -1 ? found + pattern.length : found; + } + var m = pattern.exec(from ? string.slice(from) : string); + return m ? m.index + from + (returnEnd ? m[0].length : 0) : -1; + } + + return { + startState: function() { + return { + outer: CodeMirror.startState(outer), + innerActive: null, + inner: null + }; + }, + + copyState: function(state) { + return { + outer: CodeMirror.copyState(outer, state.outer), + innerActive: state.innerActive, + inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner) + }; + }, + + token: function(stream, state) { + if (!state.innerActive) { + var cutOff = Infinity, oldContent = stream.string; + for (var i = 0; i < others.length; ++i) { + var other = others[i]; + var found = indexOf(oldContent, other.open, stream.pos); + if (found == stream.pos) { + if (!other.parseDelimiters) stream.match(other.open); + state.innerActive = other; + state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0); + return other.delimStyle && (other.delimStyle + " " + other.delimStyle + "-open"); + } else if (found != -1 && found < cutOff) { + cutOff = found; + } + } + if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); + var outerToken = outer.token(stream, state.outer); + if (cutOff != Infinity) stream.string = oldContent; + return outerToken; + } else { + var curInner = state.innerActive, oldContent = stream.string; + if (!curInner.close && stream.sol()) { + state.innerActive = state.inner = null; + return this.token(stream, state); + } + var found = curInner.close ? indexOf(oldContent, curInner.close, stream.pos, curInner.parseDelimiters) : -1; + if (found == stream.pos && !curInner.parseDelimiters) { + stream.match(curInner.close); + state.innerActive = state.inner = null; + return curInner.delimStyle && (curInner.delimStyle + " " + curInner.delimStyle + "-close"); + } + if (found > -1) stream.string = oldContent.slice(0, found); + var innerToken = curInner.mode.token(stream, state.inner); + if (found > -1) stream.string = oldContent; + + if (found == stream.pos && curInner.parseDelimiters) + state.innerActive = state.inner = null; + + if (curInner.innerStyle) { + if (innerToken) innerToken = innerToken + " " + curInner.innerStyle; + else innerToken = curInner.innerStyle; + } + + return innerToken; + } + }, + + indent: function(state, textAfter) { + var mode = state.innerActive ? state.innerActive.mode : outer; + if (!mode.indent) return CodeMirror.Pass; + return mode.indent(state.innerActive ? state.inner : state.outer, textAfter); + }, + + blankLine: function(state) { + var mode = state.innerActive ? state.innerActive.mode : outer; + if (mode.blankLine) { + mode.blankLine(state.innerActive ? state.inner : state.outer); + } + if (!state.innerActive) { + for (var i = 0; i < others.length; ++i) { + var other = others[i]; + if (other.open === "\n") { + state.innerActive = other; + state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0); + } + } + } else if (state.innerActive.close === "\n") { + state.innerActive = state.inner = null; + } + }, + + electricChars: outer.electricChars, + + innerMode: function(state) { + return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer}; + } + }; +}; + +}); diff --git a/libraries/codemirror/addon/mode/multiplex_test.js b/libraries/codemirror/addon/mode/multiplex_test.js new file mode 100644 index 0000000..24e5e67 --- /dev/null +++ b/libraries/codemirror/addon/mode/multiplex_test.js @@ -0,0 +1,33 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + CodeMirror.defineMode("markdown_with_stex", function(){ + var inner = CodeMirror.getMode({}, "stex"); + var outer = CodeMirror.getMode({}, "markdown"); + + var innerOptions = { + open: '$', + close: '$', + mode: inner, + delimStyle: 'delim', + innerStyle: 'inner' + }; + + return CodeMirror.multiplexingMode(outer, innerOptions); + }); + + var mode = CodeMirror.getMode({}, "markdown_with_stex"); + + function MT(name) { + test.mode( + name, + mode, + Array.prototype.slice.call(arguments, 1), + 'multiplexing'); + } + + MT( + "stexInsideMarkdown", + "[strong **Equation:**] [delim&delim-open $][inner&tag \\pi][delim&delim-close $]"); +})(); diff --git a/libraries/codemirror/addon/mode/overlay.js b/libraries/codemirror/addon/mode/overlay.js new file mode 100644 index 0000000..e1b9ed3 --- /dev/null +++ b/libraries/codemirror/addon/mode/overlay.js @@ -0,0 +1,85 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Utility function that allows modes to be combined. The mode given +// as the base argument takes care of most of the normal mode +// functionality, but a second (typically simple) mode is used, which +// can override the style of text. Both modes get to parse all of the +// text, but when both assign a non-null style to a piece of code, the +// overlay wins, unless the combine argument was true and not overridden, +// or state.overlay.combineTokens was true, in which case the styles are +// combined. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.overlayMode = function(base, overlay, combine) { + return { + startState: function() { + return { + base: CodeMirror.startState(base), + overlay: CodeMirror.startState(overlay), + basePos: 0, baseCur: null, + overlayPos: 0, overlayCur: null, + streamSeen: null + }; + }, + copyState: function(state) { + return { + base: CodeMirror.copyState(base, state.base), + overlay: CodeMirror.copyState(overlay, state.overlay), + basePos: state.basePos, baseCur: null, + overlayPos: state.overlayPos, overlayCur: null + }; + }, + + token: function(stream, state) { + if (stream != state.streamSeen || + Math.min(state.basePos, state.overlayPos) < stream.start) { + state.streamSeen = stream; + state.basePos = state.overlayPos = stream.start; + } + + if (stream.start == state.basePos) { + state.baseCur = base.token(stream, state.base); + state.basePos = stream.pos; + } + if (stream.start == state.overlayPos) { + stream.pos = stream.start; + state.overlayCur = overlay.token(stream, state.overlay); + state.overlayPos = stream.pos; + } + stream.pos = Math.min(state.basePos, state.overlayPos); + + // state.overlay.combineTokens always takes precedence over combine, + // unless set to null + if (state.overlayCur == null) return state.baseCur; + else if (state.baseCur != null && + state.overlay.combineTokens || + combine && state.overlay.combineTokens == null) + return state.baseCur + " " + state.overlayCur; + else return state.overlayCur; + }, + + indent: base.indent && function(state, textAfter) { + return base.indent(state.base, textAfter); + }, + electricChars: base.electricChars, + + innerMode: function(state) { return {state: state.base, mode: base}; }, + + blankLine: function(state) { + if (base.blankLine) base.blankLine(state.base); + if (overlay.blankLine) overlay.blankLine(state.overlay); + } + }; +}; + +}); diff --git a/libraries/codemirror/addon/mode/simple.js b/libraries/codemirror/addon/mode/simple.js new file mode 100644 index 0000000..df66336 --- /dev/null +++ b/libraries/codemirror/addon/mode/simple.js @@ -0,0 +1,213 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode = function(name, states) { + CodeMirror.defineMode(name, function(config) { + return CodeMirror.simpleMode(config, states); + }); + }; + + CodeMirror.simpleMode = function(config, states) { + ensureState(states, "start"); + var states_ = {}, meta = states.meta || {}, hasIndentation = false; + for (var state in states) if (state != meta && states.hasOwnProperty(state)) { + var list = states_[state] = [], orig = states[state]; + for (var i = 0; i < orig.length; i++) { + var data = orig[i]; + list.push(new Rule(data, states)); + if (data.indent || data.dedent) hasIndentation = true; + } + } + var mode = { + startState: function() { + return {state: "start", pending: null, + local: null, localState: null, + indent: hasIndentation ? [] : null}; + }, + copyState: function(state) { + var s = {state: state.state, pending: state.pending, + local: state.local, localState: null, + indent: state.indent && state.indent.slice(0)}; + if (state.localState) + s.localState = CodeMirror.copyState(state.local.mode, state.localState); + if (state.stack) + s.stack = state.stack.slice(0); + for (var pers = state.persistentStates; pers; pers = pers.next) + s.persistentStates = {mode: pers.mode, + spec: pers.spec, + state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), + next: s.persistentStates}; + return s; + }, + token: tokenFunction(states_, config), + innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, + indent: indentFunction(states_, meta) + }; + if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) + mode[prop] = meta[prop]; + return mode; + }; + + function ensureState(states, name) { + if (!states.hasOwnProperty(name)) + throw new Error("Undefined state " + name + " in simple mode"); + } + + function toRegex(val, caret) { + if (!val) return /(?:)/; + var flags = ""; + if (val instanceof RegExp) { + if (val.ignoreCase) flags = "i"; + val = val.source; + } else { + val = String(val); + } + return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); + } + + function asToken(val) { + if (!val) return null; + if (typeof val == "string") return val.replace(/\./g, " "); + var result = []; + for (var i = 0; i < val.length; i++) + result.push(val[i] && val[i].replace(/\./g, " ")); + return result; + } + + function Rule(data, states) { + if (data.next || data.push) ensureState(states, data.next || data.push); + this.regex = toRegex(data.regex); + this.token = asToken(data.token); + this.data = data; + } + + function tokenFunction(states, config) { + return function(stream, state) { + if (state.pending) { + var pend = state.pending.shift(); + if (state.pending.length == 0) state.pending = null; + stream.pos += pend.text.length; + return pend.token; + } + + if (state.local) { + if (state.local.end && stream.match(state.local.end)) { + var tok = state.local.endToken || null; + state.local = state.localState = null; + return tok; + } else { + var tok = state.local.mode.token(stream, state.localState), m; + if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) + stream.pos = stream.start + m.index; + return tok; + } + } + + var curState = states[state.state]; + for (var i = 0; i < curState.length; i++) { + var rule = curState[i]; + var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); + if (matches) { + if (rule.data.next) { + state.state = rule.data.next; + } else if (rule.data.push) { + (state.stack || (state.stack = [])).push(state.state); + state.state = rule.data.push; + } else if (rule.data.pop && state.stack && state.stack.length) { + state.state = state.stack.pop(); + } + + if (rule.data.mode) + enterLocalMode(config, state, rule.data.mode, rule.token); + if (rule.data.indent) + state.indent.push(stream.indentation() + config.indentUnit); + if (rule.data.dedent) + state.indent.pop(); + if (matches.length > 2) { + state.pending = []; + for (var j = 2; j < matches.length; j++) + if (matches[j]) + state.pending.push({text: matches[j], token: rule.token[j - 1]}); + stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); + return rule.token[0]; + } else if (rule.token && rule.token.join) { + return rule.token[0]; + } else { + return rule.token; + } + } + } + stream.next(); + return null; + }; + } + + function cmp(a, b) { + if (a === b) return true; + if (!a || typeof a != "object" || !b || typeof b != "object") return false; + var props = 0; + for (var prop in a) if (a.hasOwnProperty(prop)) { + if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; + props++; + } + for (var prop in b) if (b.hasOwnProperty(prop)) props--; + return props == 0; + } + + function enterLocalMode(config, state, spec, token) { + var pers; + if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) + if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; + var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); + var lState = pers ? pers.state : CodeMirror.startState(mode); + if (spec.persistent && !pers) + state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; + + state.localState = lState; + state.local = {mode: mode, + end: spec.end && toRegex(spec.end), + endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), + endToken: token && token.join ? token[token.length - 1] : token}; + } + + function indexOf(val, arr) { + for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; + } + + function indentFunction(states, meta) { + return function(state, textAfter, line) { + if (state.local && state.local.mode.indent) + return state.local.mode.indent(state.localState, textAfter, line); + if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) + return CodeMirror.Pass; + + var pos = state.indent.length - 1, rules = states[state.state]; + scan: for (;;) { + for (var i = 0; i < rules.length; i++) { + var rule = rules[i]; + if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { + var m = rule.regex.exec(textAfter); + if (m && m[0]) { + pos--; + if (rule.next || rule.push) rules = states[rule.next || rule.push]; + textAfter = textAfter.slice(m[0].length); + continue scan; + } + } + } + break; + } + return pos < 0 ? 0 : state.indent[pos]; + }; + } +}); diff --git a/libraries/codemirror/addon/runmode/colorize.js b/libraries/codemirror/addon/runmode/colorize.js new file mode 100644 index 0000000..eb7060d --- /dev/null +++ b/libraries/codemirror/addon/runmode/colorize.js @@ -0,0 +1,40 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./runmode")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./runmode"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; + + function textContent(node, out) { + if (node.nodeType == 3) return out.push(node.nodeValue); + for (var ch = node.firstChild; ch; ch = ch.nextSibling) { + textContent(ch, out); + if (isBlock.test(node.nodeType)) out.push("\n"); + } + } + + CodeMirror.colorize = function(collection, defaultMode) { + if (!collection) collection = document.body.getElementsByTagName("pre"); + + for (var i = 0; i < collection.length; ++i) { + var node = collection[i]; + var mode = node.getAttribute("data-lang") || defaultMode; + if (!mode) continue; + + var text = []; + textContent(node, text); + node.innerHTML = ""; + CodeMirror.runMode(text.join(""), mode, node); + + node.className += " cm-s-default"; + } + }; +}); diff --git a/libraries/codemirror/addon/runmode/runmode-standalone.js b/libraries/codemirror/addon/runmode/runmode-standalone.js new file mode 100644 index 0000000..f4f352c --- /dev/null +++ b/libraries/codemirror/addon/runmode/runmode-standalone.js @@ -0,0 +1,157 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +window.CodeMirror = {}; + +(function() { +"use strict"; + +function splitLines(string){ return string.split(/\r?\n|\r/); }; + +function StringStream(string) { + this.pos = this.start = 0; + this.string = string; + this.lineStart = 0; +} +StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || null;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() {return this.start - this.lineStart;}, + indentation: function() {return 0;}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } +}; +CodeMirror.StringStream = StringStream; + +CodeMirror.startState = function (mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; +}; + +var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; +CodeMirror.defineMode = function (name, mode) { + if (arguments.length > 2) + mode.dependencies = Array.prototype.slice.call(arguments, 2); + modes[name] = mode; +}; +CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; }; +CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + spec = mimeModes[spec.name]; + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; +}; +CodeMirror.getMode = function (options, spec) { + spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) throw new Error("Unknown mode: " + spec); + return mfactory(options, spec); +}; +CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min; +CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; +}); +CodeMirror.defineMIME("text/plain", "null"); + +CodeMirror.runMode = function (string, modespec, callback, options) { + var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec); + + if (callback.nodeType == 1) { + var tabSize = (options && options.tabSize) || 4; + var node = callback, col = 0; + node.innerHTML = ""; + callback = function (text, style) { + if (text == "\n") { + node.appendChild(document.createElement("br")); + col = 0; + return; + } + var content = ""; + // replace tabs + for (var pos = 0; ;) { + var idx = text.indexOf("\t", pos); + if (idx == -1) { + content += text.slice(pos); + col += text.length - pos; + break; + } else { + col += idx - pos; + content += text.slice(pos, idx); + var size = tabSize - col % tabSize; + col += size; + for (var i = 0; i < size; ++i) content += " "; + pos = idx + 1; + } + } + + if (style) { + var sp = node.appendChild(document.createElement("span")); + sp.className = "cm-" + style.replace(/ +/g, " cm-"); + sp.appendChild(document.createTextNode(content)); + } else { + node.appendChild(document.createTextNode(content)); + } + }; + } + + var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new CodeMirror.StringStream(lines[i]); + if (!stream.string && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start, state); + stream.start = stream.pos; + } + } +}; +})(); diff --git a/libraries/codemirror/addon/runmode/runmode.js b/libraries/codemirror/addon/runmode/runmode.js new file mode 100644 index 0000000..a51c6d0 --- /dev/null +++ b/libraries/codemirror/addon/runmode/runmode.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.runMode = function(string, modespec, callback, options) { + var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); + + if (callback.appendChild) { + var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; + var node = callback, col = 0; + node.innerHTML = ""; + callback = function(text, style) { + if (text == "\n") { + // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. + // Emitting a carriage return makes everything ok. + node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); + col = 0; + return; + } + var content = ""; + // replace tabs + for (var pos = 0;;) { + var idx = text.indexOf("\t", pos); + if (idx == -1) { + content += text.slice(pos); + col += text.length - pos; + break; + } else { + col += idx - pos; + content += text.slice(pos, idx); + var size = tabSize - col % tabSize; + col += size; + for (var i = 0; i < size; ++i) content += " "; + pos = idx + 1; + } + } + + if (style) { + var sp = node.appendChild(document.createElement("span")); + sp.className = "cm-" + style.replace(/ +/g, " cm-"); + sp.appendChild(document.createTextNode(content)); + } else { + node.appendChild(document.createTextNode(content)); + } + }; + } + + var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new CodeMirror.StringStream(lines[i]); + if (!stream.string && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start, state); + stream.start = stream.pos; + } + } +}; + +}); diff --git a/libraries/codemirror/addon/runmode/runmode.node.js b/libraries/codemirror/addon/runmode/runmode.node.js new file mode 100644 index 0000000..b22a518 --- /dev/null +++ b/libraries/codemirror/addon/runmode/runmode.node.js @@ -0,0 +1,179 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* Just enough of CodeMirror to run runMode under node.js */ + +function splitLines(string){return string.split(/\r\n?|\n/);}; + +// Counts the column offset in a string, taking tabs into account. +// Used mostly to find indentation. +var countColumn = function(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + return n + (end - i); + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } +}; + +function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; +}; + +StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == this.lineStart;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + indentation: function() { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } +}; +exports.StringStream = StringStream; + +exports.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; +}; + +var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; +exports.defineMode = function(name, mode) { + if (arguments.length > 2) + mode.dependencies = Array.prototype.slice.call(arguments, 2); + modes[name] = mode; +}; +exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; + +exports.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; +}); +exports.defineMIME("text/plain", "null"); + +exports.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + spec = mimeModes[spec.name]; + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; +}; + +function copyObj(obj, target, overwrite) { + if (!target) target = {}; + for (var prop in obj) + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + target[prop] = obj[prop]; + return target; +} + +// This can be used to attach properties to mode objects from +// outside the actual mode definition. +var modeExtensions = exports.modeExtensions = {}; +exports.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); +}; + +exports.getMode = function(options, spec) { + var spec = exports.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return exports.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) modeObj.helperType = spec.helperType; + if (spec.modeProps) for (var prop in spec.modeProps) + modeObj[prop] = spec.modeProps[prop]; + + return modeObj; +}; +exports.registerHelper = exports.registerGlobalHelper = Math.min; + +exports.runMode = function(string, modespec, callback, options) { + var mode = exports.getMode({indentUnit: 2}, modespec); + var lines = splitLines(string), state = (options && options.state) || exports.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new exports.StringStream(lines[i]); + if (!stream.string && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start, state); + stream.start = stream.pos; + } + } +}; + +require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")]; +require.cache[require.resolve("../../addon/runmode/runmode")] = require.cache[require.resolve("./runmode.node")]; diff --git a/libraries/codemirror/addon/scroll/annotatescrollbar.js b/libraries/codemirror/addon/scroll/annotatescrollbar.js new file mode 100644 index 0000000..5e748e8 --- /dev/null +++ b/libraries/codemirror/addon/scroll/annotatescrollbar.js @@ -0,0 +1,118 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineExtension("annotateScrollbar", function(options) { + if (typeof options == "string") options = {className: options}; + return new Annotation(this, options); + }); + + CodeMirror.defineOption("scrollButtonHeight", 0); + + function Annotation(cm, options) { + this.cm = cm; + this.options = options; + this.buttonHeight = options.scrollButtonHeight || cm.getOption("scrollButtonHeight"); + this.annotations = []; + this.doRedraw = this.doUpdate = null; + this.div = cm.getWrapperElement().appendChild(document.createElement("div")); + this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none"; + this.computeScale(); + + function scheduleRedraw(delay) { + clearTimeout(self.doRedraw); + self.doRedraw = setTimeout(function() { self.redraw(); }, delay); + } + + var self = this; + cm.on("refresh", this.resizeHandler = function() { + clearTimeout(self.doUpdate); + self.doUpdate = setTimeout(function() { + if (self.computeScale()) scheduleRedraw(20); + }, 100); + }); + cm.on("markerAdded", this.resizeHandler); + cm.on("markerCleared", this.resizeHandler); + if (options.listenForChanges !== false) + cm.on("change", this.changeHandler = function() { + scheduleRedraw(250); + }); + } + + Annotation.prototype.computeScale = function() { + var cm = this.cm; + var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) / + cm.getScrollerElement().scrollHeight + if (hScale != this.hScale) { + this.hScale = hScale; + return true; + } + }; + + Annotation.prototype.update = function(annotations) { + this.annotations = annotations; + this.redraw(); + }; + + Annotation.prototype.redraw = function(compute) { + if (compute !== false) this.computeScale(); + var cm = this.cm, hScale = this.hScale; + + var frag = document.createDocumentFragment(), anns = this.annotations; + + var wrapping = cm.getOption("lineWrapping"); + var singleLineH = wrapping && cm.defaultTextHeight() * 1.5; + var curLine = null, curLineObj = null; + function getY(pos, top) { + if (curLine != pos.line) { + curLine = pos.line; + curLineObj = cm.getLineHandle(curLine); + } + if (wrapping && curLineObj.height > singleLineH) + return cm.charCoords(pos, "local")[top ? "top" : "bottom"]; + var topY = cm.heightAtLine(curLineObj, "local"); + return topY + (top ? 0 : curLineObj.height); + } + + if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) { + var ann = anns[i]; + var top = nextTop || getY(ann.from, true) * hScale; + var bottom = getY(ann.to, false) * hScale; + while (i < anns.length - 1) { + nextTop = getY(anns[i + 1].from, true) * hScale; + if (nextTop > bottom + .9) break; + ann = anns[++i]; + bottom = getY(ann.to, false) * hScale; + } + if (bottom == top) continue; + var height = Math.max(bottom - top, 3); + + var elt = frag.appendChild(document.createElement("div")); + elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: " + + (top + this.buttonHeight) + "px; height: " + height + "px"; + elt.className = this.options.className; + if (ann.id) { + elt.setAttribute("annotation-id", ann.id); + } + } + this.div.textContent = ""; + this.div.appendChild(frag); + }; + + Annotation.prototype.clear = function() { + this.cm.off("refresh", this.resizeHandler); + this.cm.off("markerAdded", this.resizeHandler); + this.cm.off("markerCleared", this.resizeHandler); + if (this.changeHandler) this.cm.off("change", this.changeHandler); + this.div.parentNode.removeChild(this.div); + }; +}); diff --git a/libraries/codemirror/addon/scroll/scrollpastend.js b/libraries/codemirror/addon/scroll/scrollpastend.js new file mode 100644 index 0000000..008ae4c --- /dev/null +++ b/libraries/codemirror/addon/scroll/scrollpastend.js @@ -0,0 +1,46 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.off("change", onChange); + cm.off("refresh", updateBottomMargin); + cm.display.lineSpace.parentNode.style.paddingBottom = ""; + cm.state.scrollPastEndPadding = null; + } + if (val) { + cm.on("change", onChange); + cm.on("refresh", updateBottomMargin); + updateBottomMargin(cm); + } + }); + + function onChange(cm, change) { + if (CodeMirror.changeEnd(change).line == cm.lastLine()) + updateBottomMargin(cm); + } + + function updateBottomMargin(cm) { + var padding = ""; + if (cm.lineCount() > 1) { + var totalH = cm.display.scroller.clientHeight - 30, + lastLineH = cm.getLineHandle(cm.lastLine()).height; + padding = (totalH - lastLineH) + "px"; + } + if (cm.state.scrollPastEndPadding != padding) { + cm.state.scrollPastEndPadding = padding; + cm.display.lineSpace.parentNode.style.paddingBottom = padding; + cm.setSize(); + } + } +}); diff --git a/libraries/codemirror/addon/scroll/simplescrollbars.css b/libraries/codemirror/addon/scroll/simplescrollbars.css new file mode 100644 index 0000000..5eea7aa --- /dev/null +++ b/libraries/codemirror/addon/scroll/simplescrollbars.css @@ -0,0 +1,66 @@ +.CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { + position: absolute; + background: #ccc; + -moz-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #bbb; + border-radius: 2px; +} + +.CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { + position: absolute; + z-index: 6; + background: #eee; +} + +.CodeMirror-simplescroll-horizontal { + bottom: 0; left: 0; + height: 8px; +} +.CodeMirror-simplescroll-horizontal div { + bottom: 0; + height: 100%; +} + +.CodeMirror-simplescroll-vertical { + right: 0; top: 0; + width: 8px; +} +.CodeMirror-simplescroll-vertical div { + right: 0; + width: 100%; +} + + +.CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { + display: none; +} + +.CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { + position: absolute; + background: #bcd; + border-radius: 3px; +} + +.CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { + position: absolute; + z-index: 6; +} + +.CodeMirror-overlayscroll-horizontal { + bottom: 0; left: 0; + height: 6px; +} +.CodeMirror-overlayscroll-horizontal div { + bottom: 0; + height: 100%; +} + +.CodeMirror-overlayscroll-vertical { + right: 0; top: 0; + width: 6px; +} +.CodeMirror-overlayscroll-vertical div { + right: 0; + width: 100%; +} diff --git a/libraries/codemirror/addon/scroll/simplescrollbars.js b/libraries/codemirror/addon/scroll/simplescrollbars.js new file mode 100644 index 0000000..f78353a --- /dev/null +++ b/libraries/codemirror/addon/scroll/simplescrollbars.js @@ -0,0 +1,147 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function Bar(cls, orientation, scroll) { + this.orientation = orientation; + this.scroll = scroll; + this.screen = this.total = this.size = 1; + this.pos = 0; + + this.node = document.createElement("div"); + this.node.className = cls + "-" + orientation; + this.inner = this.node.appendChild(document.createElement("div")); + + var self = this; + CodeMirror.on(this.inner, "mousedown", function(e) { + if (e.which != 1) return; + CodeMirror.e_preventDefault(e); + var axis = self.orientation == "horizontal" ? "pageX" : "pageY"; + var start = e[axis], startpos = self.pos; + function done() { + CodeMirror.off(document, "mousemove", move); + CodeMirror.off(document, "mouseup", done); + } + function move(e) { + if (e.which != 1) return done(); + self.moveTo(startpos + (e[axis] - start) * (self.total / self.size)); + } + CodeMirror.on(document, "mousemove", move); + CodeMirror.on(document, "mouseup", done); + }); + + CodeMirror.on(this.node, "click", function(e) { + CodeMirror.e_preventDefault(e); + var innerBox = self.inner.getBoundingClientRect(), where; + if (self.orientation == "horizontal") + where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0; + else + where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0; + self.moveTo(self.pos + where * self.screen); + }); + + function onWheel(e) { + var moved = CodeMirror.wheelEventPixels(e)[self.orientation == "horizontal" ? "x" : "y"]; + var oldPos = self.pos; + self.moveTo(self.pos + moved); + if (self.pos != oldPos) CodeMirror.e_preventDefault(e); + } + CodeMirror.on(this.node, "mousewheel", onWheel); + CodeMirror.on(this.node, "DOMMouseScroll", onWheel); + } + + Bar.prototype.moveTo = function(pos, update) { + if (pos < 0) pos = 0; + if (pos > this.total - this.screen) pos = this.total - this.screen; + if (pos == this.pos) return; + this.pos = pos; + this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = + (pos * (this.size / this.total)) + "px"; + if (update !== false) this.scroll(pos, this.orientation); + }; + + var minButtonSize = 10; + + Bar.prototype.update = function(scrollSize, clientSize, barSize) { + this.screen = clientSize; + this.total = scrollSize; + this.size = barSize; + + var buttonSize = this.screen * (this.size / this.total); + if (buttonSize < minButtonSize) { + this.size -= minButtonSize - buttonSize; + buttonSize = minButtonSize; + } + this.inner.style[this.orientation == "horizontal" ? "width" : "height"] = + buttonSize + "px"; + this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = + this.pos * (this.size / this.total) + "px"; + }; + + function SimpleScrollbars(cls, place, scroll) { + this.addClass = cls; + this.horiz = new Bar(cls, "horizontal", scroll); + place(this.horiz.node); + this.vert = new Bar(cls, "vertical", scroll); + place(this.vert.node); + this.width = null; + } + + SimpleScrollbars.prototype.update = function(measure) { + if (this.width == null) { + var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle; + if (style) this.width = parseInt(style.height); + } + var width = this.width || 0; + + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + this.vert.node.style.display = needsV ? "block" : "none"; + this.horiz.node.style.display = needsH ? "block" : "none"; + + if (needsV) { + this.vert.update(measure.scrollHeight, measure.clientHeight, + measure.viewHeight - (needsH ? width : 0)); + this.vert.node.style.display = "block"; + this.vert.node.style.bottom = needsH ? width + "px" : "0"; + } + if (needsH) { + this.horiz.update(measure.scrollWidth, measure.clientWidth, + measure.viewWidth - (needsV ? width : 0) - measure.barLeft); + this.horiz.node.style.right = needsV ? width + "px" : "0"; + this.horiz.node.style.left = measure.barLeft + "px"; + } + + return {right: needsV ? width : 0, bottom: needsH ? width : 0}; + }; + + SimpleScrollbars.prototype.setScrollTop = function(pos) { + this.vert.moveTo(pos, false); + }; + + SimpleScrollbars.prototype.setScrollLeft = function(pos) { + this.horiz.moveTo(pos, false); + }; + + SimpleScrollbars.prototype.clear = function() { + var parent = this.horiz.node.parentNode; + parent.removeChild(this.horiz.node); + parent.removeChild(this.vert.node); + }; + + CodeMirror.scrollbarModel.simple = function(place, scroll) { + return new SimpleScrollbars("CodeMirror-simplescroll", place, scroll); + }; + CodeMirror.scrollbarModel.overlay = function(place, scroll) { + return new SimpleScrollbars("CodeMirror-overlayscroll", place, scroll); + }; +}); diff --git a/libraries/codemirror/addon/search/jump-to-line.js b/libraries/codemirror/addon/search/jump-to-line.js new file mode 100644 index 0000000..8b599cb --- /dev/null +++ b/libraries/codemirror/addon/search/jump-to-line.js @@ -0,0 +1,49 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Defines jumpToLine command. Uses dialog.js if present. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../dialog/dialog")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../dialog/dialog"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true}); + else f(prompt(shortText, deflt)); + } + + var jumpDialog = + 'Jump to line: (Use line:column or scroll% syntax)'; + + function interpretLine(cm, string) { + var num = Number(string) + if (/^[-+]/.test(string)) return cm.getCursor().line + num + else return num - 1 + } + + CodeMirror.commands.jumpToLine = function(cm) { + var cur = cm.getCursor(); + dialog(cm, jumpDialog, "Jump to line:", (cur.line + 1) + ":" + cur.ch, function(posStr) { + if (!posStr) return; + + var match; + if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), Number(match[2])) + } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { + var line = Math.round(cm.lineCount() * Number(match[1]) / 100); + if (/^[-+]/.test(match[1])) line = cur.line + line + 1; + cm.setCursor(line - 1, cur.ch); + } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), cur.ch); + } + }); + }; + + CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; +}); diff --git a/libraries/codemirror/addon/search/match-highlighter.js b/libraries/codemirror/addon/search/match-highlighter.js new file mode 100644 index 0000000..8f02f01 --- /dev/null +++ b/libraries/codemirror/addon/search/match-highlighter.js @@ -0,0 +1,149 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Highlighting text that matches the selection +// +// Defines an option highlightSelectionMatches, which, when enabled, +// will style strings that match the selection throughout the +// document. +// +// The option can be set to true to simply enable it, or to a +// {minChars, style, wordsOnly, showToken, delay} object to explicitly +// configure it. minChars is the minimum amount of characters that should be +// selected for the behavior to occur, and style is the token style to +// apply to the matches. This will be prefixed by "cm-" to create an +// actual CSS class name. If wordsOnly is enabled, the matches will be +// highlighted only if the selected text is a word. showToken, when enabled, +// will cause the current token to be highlighted when nothing is selected. +// delay is used to specify how much time to wait, in milliseconds, before +// highlighting the matches. If annotateScrollbar is enabled, the occurances +// will be highlighted on the scrollbar via the matchesonscrollbar addon. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./matchesonscrollbar")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./matchesonscrollbar"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var DEFAULT_MIN_CHARS = 2; + var DEFAULT_TOKEN_STYLE = "matchhighlight"; + var DEFAULT_DELAY = 100; + var DEFAULT_WORDS_ONLY = false; + + function State(options) { + if (typeof options == "object") { + this.minChars = options.minChars; + this.style = options.style; + this.showToken = options.showToken; + this.delay = options.delay; + this.wordsOnly = options.wordsOnly; + this.annotateScrollbar = options.annotateScrollbar; + } + if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; + if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; + if (this.delay == null) this.delay = DEFAULT_DELAY; + if (this.wordsOnly == null) this.wordsOnly = DEFAULT_WORDS_ONLY; + this.overlay = this.timeout = null; + this.matchesonscroll = null; + } + + CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + removeOverlay(cm); + clearTimeout(cm.state.matchHighlighter.timeout); + cm.state.matchHighlighter = null; + cm.off("cursorActivity", cursorActivity); + } + if (val) { + cm.state.matchHighlighter = new State(val); + highlightMatches(cm); + cm.on("cursorActivity", cursorActivity); + } + }); + + function cursorActivity(cm) { + var state = cm.state.matchHighlighter; + clearTimeout(state.timeout); + state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); + } + + function addOverlay(cm, query, hasBoundary, style) { + var state = cm.state.matchHighlighter; + cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style)); + if (state.annotateScrollbar) { + var searchFor = hasBoundary ? new RegExp("\\b" + query + "\\b") : query; + state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, true, + {className: "CodeMirror-selection-highlight-scrollbar"}); + } + } + + function removeOverlay(cm) { + var state = cm.state.matchHighlighter; + if (state.overlay) { + cm.removeOverlay(state.overlay); + state.overlay = null; + if (state.annotateScrollbar) { + state.matchesonscroll.clear(); + state.matchesonscroll = null; + } + } + } + + function highlightMatches(cm) { + cm.operation(function() { + var state = cm.state.matchHighlighter; + removeOverlay(cm); + if (!cm.somethingSelected() && state.showToken) { + var re = state.showToken === true ? /[\w$]/ : state.showToken; + var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; + while (start && re.test(line.charAt(start - 1))) --start; + while (end < line.length && re.test(line.charAt(end))) ++end; + if (start < end) + addOverlay(cm, line.slice(start, end), re, state.style); + return; + } + var from = cm.getCursor("from"), to = cm.getCursor("to"); + if (from.line != to.line) return; + if (state.wordsOnly && !isWord(cm, from, to)) return; + var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, ""); + if (selection.length >= state.minChars) + addOverlay(cm, selection, false, state.style); + }); + } + + function isWord(cm, from, to) { + var str = cm.getRange(from, to); + if (str.match(/^\w+$/) !== null) { + if (from.ch > 0) { + var pos = {line: from.line, ch: from.ch - 1}; + var chr = cm.getRange(pos, from); + if (chr.match(/\W/) === null) return false; + } + if (to.ch < cm.getLine(from.line).length) { + var pos = {line: to.line, ch: to.ch + 1}; + var chr = cm.getRange(to, pos); + if (chr.match(/\W/) === null) return false; + } + return true; + } else return false; + } + + function boundariesAround(stream, re) { + return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && + (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); + } + + function makeOverlay(query, hasBoundary, style) { + return {token: function(stream) { + if (stream.match(query) && + (!hasBoundary || boundariesAround(stream, hasBoundary))) + return style; + stream.next(); + stream.skipTo(query.charAt(0)) || stream.skipToEnd(); + }}; + } +}); diff --git a/libraries/codemirror/addon/search/matchesonscrollbar.css b/libraries/codemirror/addon/search/matchesonscrollbar.css new file mode 100644 index 0000000..77932cc --- /dev/null +++ b/libraries/codemirror/addon/search/matchesonscrollbar.css @@ -0,0 +1,8 @@ +.CodeMirror-search-match { + background: gold; + border-top: 1px solid orange; + border-bottom: 1px solid orange; + -moz-box-sizing: border-box; + box-sizing: border-box; + opacity: .5; +} diff --git a/libraries/codemirror/addon/search/matchesonscrollbar.js b/libraries/codemirror/addon/search/matchesonscrollbar.js new file mode 100644 index 0000000..8d19228 --- /dev/null +++ b/libraries/codemirror/addon/search/matchesonscrollbar.js @@ -0,0 +1,97 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, options) { + if (typeof options == "string") options = {className: options}; + if (!options) options = {}; + return new SearchAnnotation(this, query, caseFold, options); + }); + + function SearchAnnotation(cm, query, caseFold, options) { + this.cm = cm; + this.options = options; + var annotateOptions = {listenForChanges: false}; + for (var prop in options) annotateOptions[prop] = options[prop]; + if (!annotateOptions.className) annotateOptions.className = "CodeMirror-search-match"; + this.annotation = cm.annotateScrollbar(annotateOptions); + this.query = query; + this.caseFold = caseFold; + this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; + this.matches = []; + this.update = null; + + this.findMatches(); + this.annotation.update(this.matches); + + var self = this; + cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); + } + + var MAX_MATCHES = 1000; + + SearchAnnotation.prototype.findMatches = function() { + if (!this.gap) return; + for (var i = 0; i < this.matches.length; i++) { + var match = this.matches[i]; + if (match.from.line >= this.gap.to) break; + if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); + } + var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), this.caseFold); + var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES; + while (cursor.findNext()) { + var match = {from: cursor.from(), to: cursor.to()}; + if (match.from.line >= this.gap.to) break; + this.matches.splice(i++, 0, match); + if (this.matches.length > maxMatches) break; + } + this.gap = null; + }; + + function offsetLine(line, changeStart, sizeChange) { + if (line <= changeStart) return line; + return Math.max(changeStart, line + sizeChange); + } + + SearchAnnotation.prototype.onChange = function(change) { + var startLine = change.from.line; + var endLine = CodeMirror.changeEnd(change).line; + var sizeChange = endLine - change.to.line; + if (this.gap) { + this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); + this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); + } else { + this.gap = {from: change.from.line, to: endLine + 1}; + } + + if (sizeChange) for (var i = 0; i < this.matches.length; i++) { + var match = this.matches[i]; + var newFrom = offsetLine(match.from.line, startLine, sizeChange); + if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); + var newTo = offsetLine(match.to.line, startLine, sizeChange); + if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); + } + clearTimeout(this.update); + var self = this; + this.update = setTimeout(function() { self.updateAfterChange(); }, 250); + }; + + SearchAnnotation.prototype.updateAfterChange = function() { + this.findMatches(); + this.annotation.update(this.matches); + }; + + SearchAnnotation.prototype.clear = function() { + this.cm.off("change", this.changeHandler); + this.annotation.clear(); + }; +}); diff --git a/libraries/codemirror/addon/search/search.js b/libraries/codemirror/addon/search/search.js new file mode 100644 index 0000000..93e90b3 --- /dev/null +++ b/libraries/codemirror/addon/search/search.js @@ -0,0 +1,228 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Define search commands. Depends on dialog.js or another +// implementation of the openDialog method. + +// Replace works a little oddly -- it will do the replace on the next +// Ctrl-G (or whatever is bound to findNext) press. You prevent a +// replace by making sure the match is no longer selected when hitting +// Ctrl-G. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function searchOverlay(query, caseInsensitive) { + if (typeof query == "string") + query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); + else if (!query.global) + query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); + + return {token: function(stream) { + query.lastIndex = stream.pos; + var match = query.exec(stream.string); + if (match && match.index == stream.pos) { + stream.pos += match[0].length || 1; + return "searching"; + } else if (match) { + stream.pos = match.index; + } else { + stream.skipToEnd(); + } + }}; + } + + function SearchState() { + this.posFrom = this.posTo = this.lastQuery = this.query = null; + this.overlay = null; + } + + function getSearchState(cm) { + return cm.state.search || (cm.state.search = new SearchState()); + } + + function queryCaseInsensitive(query) { + return typeof query == "string" && query == query.toLowerCase(); + } + + function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor(query, pos, queryCaseInsensitive(query)); + } + + function persistentDialog(cm, text, deflt, f) { + cm.openDialog(text, f, { + value: deflt, + selectValueOnOpen: true, + closeOnEnter: false, + onClose: function() { clearSearch(cm); } + }); + } + + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true}); + else f(prompt(shortText, deflt)); + } + + function confirmDialog(cm, text, shortText, fs) { + if (cm.openConfirm) cm.openConfirm(text, fs); + else if (confirm(shortText)) fs[0](); + } + + function parseString(string) { + return string.replace(/\\(.)/g, function(_, ch) { + if (ch == "n") return "\n" + if (ch == "r") return "\r" + return ch + }) + } + + function parseQuery(query) { + var isRE = query.match(/^\/(.*)\/([a-z]*)$/); + if (isRE) { + try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } + catch(e) {} // Not a regular expression after all, do a string search + } else { + query = parseString(query) + } + if (typeof query == "string" ? query == "" : query.test("")) + query = /x^/; + return query; + } + + var queryDialog = + 'Search: (Use /re/ syntax for regexp search)'; + + function startSearch(cm, state, query) { + state.queryText = query; + state.query = parseQuery(query); + cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); + state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); + cm.addOverlay(state.overlay); + if (cm.showMatchesOnScrollbar) { + if (state.annotate) { state.annotate.clear(); state.annotate = null; } + state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); + } + } + + function doSearch(cm, rev, persistent) { + var state = getSearchState(cm); + if (state.query) return findNext(cm, rev); + var q = cm.getSelection() || state.lastQuery; + if (persistent && cm.openDialog) { + var hiding = null + persistentDialog(cm, queryDialog, q, function(query, event) { + CodeMirror.e_stop(event); + if (!query) return; + if (query != state.queryText) startSearch(cm, state, query); + if (hiding) hiding.style.opacity = 1 + findNext(cm, event.shiftKey, function(_, to) { + var dialog + if (to.line < 3 && document.querySelector && + (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && + dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) + (hiding = dialog).style.opacity = .4 + }) + }); + } else { + dialog(cm, queryDialog, "Search for:", q, function(query) { + if (query && !state.query) cm.operation(function() { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + findNext(cm, rev); + }); + }); + } + } + + function findNext(cm, rev, callback) {cm.operation(function() { + var state = getSearchState(cm); + var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); + if (!cursor.find(rev)) { + cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); + if (!cursor.find(rev)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20); + state.posFrom = cursor.from(); state.posTo = cursor.to(); + if (callback) callback(cursor.from(), cursor.to()) + });} + + function clearSearch(cm) {cm.operation(function() { + var state = getSearchState(cm); + state.lastQuery = state.query; + if (!state.query) return; + state.query = state.queryText = null; + cm.removeOverlay(state.overlay); + if (state.annotate) { state.annotate.clear(); state.annotate = null; } + });} + + var replaceQueryDialog = + ' (Use /re/ syntax for regexp search)'; + var replacementQueryDialog = 'With: '; + var doReplaceConfirm = "Replace? "; + + function replaceAll(cm, query, text) { + cm.operation(function() { + for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { + if (typeof query != "string") { + var match = cm.getRange(cursor.from(), cursor.to()).match(query); + cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); + } else cursor.replace(text); + } + }); + } + + function replace(cm, all) { + if (cm.getOption("readOnly")) return; + var query = cm.getSelection() || getSearchState(cm).lastQuery; + var dialogText = all ? "Replace all:" : "Replace:" + dialog(cm, dialogText + replaceQueryDialog, dialogText, query, function(query) { + if (!query) return; + query = parseQuery(query); + dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) { + text = parseString(text) + if (all) { + replaceAll(cm, query, text) + } else { + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor()); + var advance = function() { + var start = cursor.from(), match; + if (!(match = cursor.findNext())) { + cursor = getSearchCursor(cm, query); + if (!(match = cursor.findNext()) || + (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); + confirmDialog(cm, doReplaceConfirm, "Replace?", + [function() {doReplace(match);}, advance, + function() {replaceAll(cm, query, text)}]); + }; + var doReplace = function(match) { + cursor.replace(typeof query == "string" ? text : + text.replace(/\$(\d)/g, function(_, i) {return match[i];})); + advance(); + }; + advance(); + } + }); + }); + } + + CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; + CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);}; + CodeMirror.commands.findNext = doSearch; + CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; + CodeMirror.commands.clearSearch = clearSearch; + CodeMirror.commands.replace = replace; + CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; +}); diff --git a/libraries/codemirror/addon/search/searchcursor.js b/libraries/codemirror/addon/search/searchcursor.js new file mode 100644 index 0000000..b70242e --- /dev/null +++ b/libraries/codemirror/addon/search/searchcursor.js @@ -0,0 +1,189 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var Pos = CodeMirror.Pos; + + function SearchCursor(doc, query, pos, caseFold) { + this.atOccurrence = false; this.doc = doc; + if (caseFold == null && typeof query == "string") caseFold = false; + + pos = pos ? doc.clipPos(pos) : Pos(0, 0); + this.pos = {from: pos, to: pos}; + + // The matches method is filled in based on the type of query. + // It takes a position and a direction, and returns an object + // describing the next occurrence of the query, or null if no + // more matches were found. + if (typeof query != "string") { // Regexp match + if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); + this.matches = function(reverse, pos) { + if (reverse) { + query.lastIndex = 0; + var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start; + for (;;) { + query.lastIndex = cutOff; + var newMatch = query.exec(line); + if (!newMatch) break; + match = newMatch; + start = match.index; + cutOff = match.index + (match[0].length || 1); + if (cutOff == line.length) break; + } + var matchLen = (match && match[0].length) || 0; + if (!matchLen) { + if (start == 0 && line.length == 0) {match = undefined;} + else if (start != doc.getLine(pos.line).length) { + matchLen++; + } + } + } else { + query.lastIndex = pos.ch; + var line = doc.getLine(pos.line), match = query.exec(line); + var matchLen = (match && match[0].length) || 0; + var start = match && match.index; + if (start + matchLen != line.length && !matchLen) matchLen = 1; + } + if (match && matchLen) + return {from: Pos(pos.line, start), + to: Pos(pos.line, start + matchLen), + match: match}; + }; + } else { // String query + var origQuery = query; + if (caseFold) query = query.toLowerCase(); + var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; + var target = query.split("\n"); + // Different methods for single-line and multi-line queries + if (target.length == 1) { + if (!query.length) { + // Empty string would match anything and never progress, so + // we define it to match nothing instead. + this.matches = function() {}; + } else { + this.matches = function(reverse, pos) { + if (reverse) { + var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig); + var match = line.lastIndexOf(query); + if (match > -1) { + match = adjustPos(orig, line, match); + return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; + } + } else { + var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig); + var match = line.indexOf(query); + if (match > -1) { + match = adjustPos(orig, line, match) + pos.ch; + return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; + } + } + }; + } + } else { + var origTarget = origQuery.split("\n"); + this.matches = function(reverse, pos) { + var last = target.length - 1; + if (reverse) { + if (pos.line - (target.length - 1) < doc.firstLine()) return; + if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return; + var to = Pos(pos.line, origTarget[last].length); + for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln) + if (target[i] != fold(doc.getLine(ln))) return; + var line = doc.getLine(ln), cut = line.length - origTarget[0].length; + if (fold(line.slice(cut)) != target[0]) return; + return {from: Pos(ln, cut), to: to}; + } else { + if (pos.line + (target.length - 1) > doc.lastLine()) return; + var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length; + if (fold(line.slice(cut)) != target[0]) return; + var from = Pos(pos.line, cut); + for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln) + if (target[i] != fold(doc.getLine(ln))) return; + if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return; + return {from: from, to: Pos(ln, origTarget[last].length)}; + } + }; + } + } + } + + SearchCursor.prototype = { + findNext: function() {return this.find(false);}, + findPrevious: function() {return this.find(true);}, + + find: function(reverse) { + var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); + function savePosAndFail(line) { + var pos = Pos(line, 0); + self.pos = {from: pos, to: pos}; + self.atOccurrence = false; + return false; + } + + for (;;) { + if (this.pos = this.matches(reverse, pos)) { + this.atOccurrence = true; + return this.pos.match || true; + } + if (reverse) { + if (!pos.line) return savePosAndFail(0); + pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length); + } + else { + var maxLine = this.doc.lineCount(); + if (pos.line == maxLine - 1) return savePosAndFail(maxLine); + pos = Pos(pos.line + 1, 0); + } + } + }, + + from: function() {if (this.atOccurrence) return this.pos.from;}, + to: function() {if (this.atOccurrence) return this.pos.to;}, + + replace: function(newText, origin) { + if (!this.atOccurrence) return; + var lines = CodeMirror.splitLines(newText); + this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); + this.pos.to = Pos(this.pos.from.line + lines.length - 1, + lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); + } + }; + + // Maps a position in a case-folded line back to a position in the original line + // (compensating for codepoints increasing in number during folding) + function adjustPos(orig, folded, pos) { + if (orig.length == folded.length) return pos; + for (var pos1 = Math.min(pos, orig.length);;) { + var len1 = orig.slice(0, pos1).toLowerCase().length; + if (len1 < pos) ++pos1; + else if (len1 > pos) --pos1; + else return pos1; + } + } + + CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { + return new SearchCursor(this.doc, query, pos, caseFold); + }); + CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { + return new SearchCursor(this, query, pos, caseFold); + }); + + CodeMirror.defineExtension("selectMatches", function(query, caseFold) { + var ranges = []; + var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); + while (cur.findNext()) { + if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; + ranges.push({anchor: cur.from(), head: cur.to()}); + } + if (ranges.length) + this.setSelections(ranges, 0); + }); +}); diff --git a/libraries/codemirror/addon/selection/active-line.js b/libraries/codemirror/addon/selection/active-line.js new file mode 100644 index 0000000..b0b3f61 --- /dev/null +++ b/libraries/codemirror/addon/selection/active-line.js @@ -0,0 +1,74 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Because sometimes you need to style the cursor's line. +// +// Adds an option 'styleActiveLine' which, when enabled, gives the +// active line's wrapping
          the CSS class "CodeMirror-activeline", +// and gives its background
          the class "CodeMirror-activeline-background". + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var WRAP_CLASS = "CodeMirror-activeline"; + var BACK_CLASS = "CodeMirror-activeline-background"; + var GUTT_CLASS = "CodeMirror-activeline-gutter"; + + CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { + var prev = old && old != CodeMirror.Init; + if (val && !prev) { + cm.state.activeLines = []; + updateActiveLines(cm, cm.listSelections()); + cm.on("beforeSelectionChange", selectionChange); + } else if (!val && prev) { + cm.off("beforeSelectionChange", selectionChange); + clearActiveLines(cm); + delete cm.state.activeLines; + } + }); + + function clearActiveLines(cm) { + for (var i = 0; i < cm.state.activeLines.length; i++) { + cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); + } + } + + function sameArray(a, b) { + if (a.length != b.length) return false; + for (var i = 0; i < a.length; i++) + if (a[i] != b[i]) return false; + return true; + } + + function updateActiveLines(cm, ranges) { + var active = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) continue; + var line = cm.getLineHandleVisualStart(range.head.line); + if (active[active.length - 1] != line) active.push(line); + } + if (sameArray(cm.state.activeLines, active)) return; + cm.operation(function() { + clearActiveLines(cm); + for (var i = 0; i < active.length; i++) { + cm.addLineClass(active[i], "wrap", WRAP_CLASS); + cm.addLineClass(active[i], "background", BACK_CLASS); + cm.addLineClass(active[i], "gutter", GUTT_CLASS); + } + cm.state.activeLines = active; + }); + } + + function selectionChange(cm, sel) { + updateActiveLines(cm, sel.ranges); + } +}); diff --git a/libraries/codemirror/addon/selection/mark-selection.js b/libraries/codemirror/addon/selection/mark-selection.js new file mode 100644 index 0000000..5c42d21 --- /dev/null +++ b/libraries/codemirror/addon/selection/mark-selection.js @@ -0,0 +1,118 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Because sometimes you need to mark the selected *text*. +// +// Adds an option 'styleSelectedText' which, when enabled, gives +// selected text the CSS class given as option value, or +// "CodeMirror-selectedtext" when the value is not a string. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { + var prev = old && old != CodeMirror.Init; + if (val && !prev) { + cm.state.markedSelection = []; + cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; + reset(cm); + cm.on("cursorActivity", onCursorActivity); + cm.on("change", onChange); + } else if (!val && prev) { + cm.off("cursorActivity", onCursorActivity); + cm.off("change", onChange); + clear(cm); + cm.state.markedSelection = cm.state.markedSelectionStyle = null; + } + }); + + function onCursorActivity(cm) { + cm.operation(function() { update(cm); }); + } + + function onChange(cm) { + if (cm.state.markedSelection.length) + cm.operation(function() { clear(cm); }); + } + + var CHUNK_SIZE = 8; + var Pos = CodeMirror.Pos; + var cmp = CodeMirror.cmpPos; + + function coverRange(cm, from, to, addAt) { + if (cmp(from, to) == 0) return; + var array = cm.state.markedSelection; + var cls = cm.state.markedSelectionStyle; + for (var line = from.line;;) { + var start = line == from.line ? from : Pos(line, 0); + var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; + var end = atEnd ? to : Pos(endLine, 0); + var mark = cm.markText(start, end, {className: cls}); + if (addAt == null) array.push(mark); + else array.splice(addAt++, 0, mark); + if (atEnd) break; + line = endLine; + } + } + + function clear(cm) { + var array = cm.state.markedSelection; + for (var i = 0; i < array.length; ++i) array[i].clear(); + array.length = 0; + } + + function reset(cm) { + clear(cm); + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) + coverRange(cm, ranges[i].from(), ranges[i].to()); + } + + function update(cm) { + if (!cm.somethingSelected()) return clear(cm); + if (cm.listSelections().length > 1) return reset(cm); + + var from = cm.getCursor("start"), to = cm.getCursor("end"); + + var array = cm.state.markedSelection; + if (!array.length) return coverRange(cm, from, to); + + var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); + if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE || + cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) + return reset(cm); + + while (cmp(from, coverStart.from) > 0) { + array.shift().clear(); + coverStart = array[0].find(); + } + if (cmp(from, coverStart.from) < 0) { + if (coverStart.to.line - from.line < CHUNK_SIZE) { + array.shift().clear(); + coverRange(cm, from, coverStart.to, 0); + } else { + coverRange(cm, from, coverStart.from, 0); + } + } + + while (cmp(to, coverEnd.to) < 0) { + array.pop().clear(); + coverEnd = array[array.length - 1].find(); + } + if (cmp(to, coverEnd.to) > 0) { + if (to.line - coverEnd.from.line < CHUNK_SIZE) { + array.pop().clear(); + coverRange(cm, coverEnd.from, to); + } else { + coverRange(cm, coverEnd.to, to); + } + } + } +}); diff --git a/libraries/codemirror/addon/selection/selection-pointer.js b/libraries/codemirror/addon/selection/selection-pointer.js new file mode 100644 index 0000000..ef5e404 --- /dev/null +++ b/libraries/codemirror/addon/selection/selection-pointer.js @@ -0,0 +1,98 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("selectionPointer", false, function(cm, val) { + var data = cm.state.selectionPointer; + if (data) { + CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove); + CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout); + CodeMirror.off(window, "scroll", data.windowScroll); + cm.off("cursorActivity", reset); + cm.off("scroll", reset); + cm.state.selectionPointer = null; + cm.display.lineDiv.style.cursor = ""; + } + if (val) { + data = cm.state.selectionPointer = { + value: typeof val == "string" ? val : "default", + mousemove: function(event) { mousemove(cm, event); }, + mouseout: function(event) { mouseout(cm, event); }, + windowScroll: function() { reset(cm); }, + rects: null, + mouseX: null, mouseY: null, + willUpdate: false + }; + CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove); + CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout); + CodeMirror.on(window, "scroll", data.windowScroll); + cm.on("cursorActivity", reset); + cm.on("scroll", reset); + } + }); + + function mousemove(cm, event) { + var data = cm.state.selectionPointer; + if (event.buttons == null ? event.which : event.buttons) { + data.mouseX = data.mouseY = null; + } else { + data.mouseX = event.clientX; + data.mouseY = event.clientY; + } + scheduleUpdate(cm); + } + + function mouseout(cm, event) { + if (!cm.getWrapperElement().contains(event.relatedTarget)) { + var data = cm.state.selectionPointer; + data.mouseX = data.mouseY = null; + scheduleUpdate(cm); + } + } + + function reset(cm) { + cm.state.selectionPointer.rects = null; + scheduleUpdate(cm); + } + + function scheduleUpdate(cm) { + if (!cm.state.selectionPointer.willUpdate) { + cm.state.selectionPointer.willUpdate = true; + setTimeout(function() { + update(cm); + cm.state.selectionPointer.willUpdate = false; + }, 50); + } + } + + function update(cm) { + var data = cm.state.selectionPointer; + if (!data) return; + if (data.rects == null && data.mouseX != null) { + data.rects = []; + if (cm.somethingSelected()) { + for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling) + data.rects.push(sel.getBoundingClientRect()); + } + } + var inside = false; + if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) { + var rect = data.rects[i]; + if (rect.left <= data.mouseX && rect.right >= data.mouseX && + rect.top <= data.mouseY && rect.bottom >= data.mouseY) + inside = true; + } + var cursor = inside ? data.value : ""; + if (cm.display.lineDiv.style.cursor != cursor) + cm.display.lineDiv.style.cursor = cursor; + } +}); diff --git a/libraries/codemirror/addon/tern/tern.css b/libraries/codemirror/addon/tern/tern.css new file mode 100644 index 0000000..c4b8a2f --- /dev/null +++ b/libraries/codemirror/addon/tern/tern.css @@ -0,0 +1,87 @@ +.CodeMirror-Tern-completion { + padding-left: 22px; + position: relative; + line-height: 1.5; +} +.CodeMirror-Tern-completion:before { + position: absolute; + left: 2px; + bottom: 2px; + border-radius: 50%; + font-size: 12px; + font-weight: bold; + height: 15px; + width: 15px; + line-height: 16px; + text-align: center; + color: white; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.CodeMirror-Tern-completion-unknown:before { + content: "?"; + background: #4bb; +} +.CodeMirror-Tern-completion-object:before { + content: "O"; + background: #77c; +} +.CodeMirror-Tern-completion-fn:before { + content: "F"; + background: #7c7; +} +.CodeMirror-Tern-completion-array:before { + content: "A"; + background: #c66; +} +.CodeMirror-Tern-completion-number:before { + content: "1"; + background: #999; +} +.CodeMirror-Tern-completion-string:before { + content: "S"; + background: #999; +} +.CodeMirror-Tern-completion-bool:before { + content: "B"; + background: #999; +} + +.CodeMirror-Tern-completion-guess { + color: #999; +} + +.CodeMirror-Tern-tooltip { + border: 1px solid silver; + border-radius: 3px; + color: #444; + padding: 2px 5px; + font-size: 90%; + font-family: monospace; + background-color: white; + white-space: pre-wrap; + + max-width: 40em; + position: absolute; + z-index: 10; + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + + transition: opacity 1s; + -moz-transition: opacity 1s; + -webkit-transition: opacity 1s; + -o-transition: opacity 1s; + -ms-transition: opacity 1s; +} + +.CodeMirror-Tern-hint-doc { + max-width: 25em; + margin-top: -3px; +} + +.CodeMirror-Tern-fname { color: black; } +.CodeMirror-Tern-farg { color: #70a; } +.CodeMirror-Tern-farg-current { text-decoration: underline; } +.CodeMirror-Tern-type { color: #07c; } +.CodeMirror-Tern-fhint-guess { opacity: .7; } diff --git a/libraries/codemirror/addon/tern/tern.js b/libraries/codemirror/addon/tern/tern.js new file mode 100644 index 0000000..c345c49 --- /dev/null +++ b/libraries/codemirror/addon/tern/tern.js @@ -0,0 +1,701 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Glue code between CodeMirror and Tern. +// +// Create a CodeMirror.TernServer to wrap an actual Tern server, +// register open documents (CodeMirror.Doc instances) with it, and +// call its methods to activate the assisting functions that Tern +// provides. +// +// Options supported (all optional): +// * defs: An array of JSON definition data structures. +// * plugins: An object mapping plugin names to configuration +// options. +// * getFile: A function(name, c) that can be used to access files in +// the project that haven't been loaded yet. Simply do c(null) to +// indicate that a file is not available. +// * fileFilter: A function(value, docName, doc) that will be applied +// to documents before passing them on to Tern. +// * switchToDoc: A function(name, doc) that should, when providing a +// multi-file view, switch the view or focus to the named file. +// * showError: A function(editor, message) that can be used to +// override the way errors are displayed. +// * completionTip: Customize the content in tooltips for completions. +// Is passed a single argument—the completion's data as returned by +// Tern—and may return a string, DOM node, or null to indicate that +// no tip should be shown. By default the docstring is shown. +// * typeTip: Like completionTip, but for the tooltips shown for type +// queries. +// * responseFilter: A function(doc, query, request, error, data) that +// will be applied to the Tern responses before treating them +// +// +// It is possible to run the Tern server in a web worker by specifying +// these additional options: +// * useWorker: Set to true to enable web worker mode. You'll probably +// want to feature detect the actual value you use here, for example +// !!window.Worker. +// * workerScript: The main script of the worker. Point this to +// wherever you are hosting worker.js from this directory. +// * workerDeps: An array of paths pointing (relative to workerScript) +// to the Acorn and Tern libraries and any Tern plugins you want to +// load. Or, if you minified those into a single script and included +// them in the workerScript, simply leave this undefined. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + // declare global: tern + + CodeMirror.TernServer = function(options) { + var self = this; + this.options = options || {}; + var plugins = this.options.plugins || (this.options.plugins = {}); + if (!plugins.doc_comment) plugins.doc_comment = true; + this.docs = Object.create(null); + if (this.options.useWorker) { + this.server = new WorkerServer(this); + } else { + this.server = new tern.Server({ + getFile: function(name, c) { return getFile(self, name, c); }, + async: true, + defs: this.options.defs || [], + plugins: plugins + }); + } + this.trackChange = function(doc, change) { trackChange(self, doc, change); }; + + this.cachedArgHints = null; + this.activeArgHints = null; + this.jumpStack = []; + + this.getHint = function(cm, c) { return hint(self, cm, c); }; + this.getHint.async = true; + }; + + CodeMirror.TernServer.prototype = { + addDoc: function(name, doc) { + var data = {doc: doc, name: name, changed: null}; + this.server.addFile(name, docValue(this, data)); + CodeMirror.on(doc, "change", this.trackChange); + return this.docs[name] = data; + }, + + delDoc: function(id) { + var found = resolveDoc(this, id); + if (!found) return; + CodeMirror.off(found.doc, "change", this.trackChange); + delete this.docs[found.name]; + this.server.delFile(found.name); + }, + + hideDoc: function(id) { + closeArgHints(this); + var found = resolveDoc(this, id); + if (found && found.changed) sendDoc(this, found); + }, + + complete: function(cm) { + cm.showHint({hint: this.getHint}); + }, + + showType: function(cm, pos, c) { showContextInfo(this, cm, pos, "type", c); }, + + showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, "documentation", c); }, + + updateArgHints: function(cm) { updateArgHints(this, cm); }, + + jumpToDef: function(cm) { jumpToDef(this, cm); }, + + jumpBack: function(cm) { jumpBack(this, cm); }, + + rename: function(cm) { rename(this, cm); }, + + selectName: function(cm) { selectName(this, cm); }, + + request: function (cm, query, c, pos) { + var self = this; + var doc = findDoc(this, cm.getDoc()); + var request = buildRequest(this, doc, query, pos); + var extraOptions = request.query && this.options.queryOptions && this.options.queryOptions[request.query.type] + if (extraOptions) for (var prop in extraOptions) request.query[prop] = extraOptions[prop]; + + this.server.request(request, function (error, data) { + if (!error && self.options.responseFilter) + data = self.options.responseFilter(doc, query, request, error, data); + c(error, data); + }); + }, + + destroy: function () { + closeArgHints(this) + if (this.worker) { + this.worker.terminate(); + this.worker = null; + } + } + }; + + var Pos = CodeMirror.Pos; + var cls = "CodeMirror-Tern-"; + var bigDoc = 250; + + function getFile(ts, name, c) { + var buf = ts.docs[name]; + if (buf) + c(docValue(ts, buf)); + else if (ts.options.getFile) + ts.options.getFile(name, c); + else + c(null); + } + + function findDoc(ts, doc, name) { + for (var n in ts.docs) { + var cur = ts.docs[n]; + if (cur.doc == doc) return cur; + } + if (!name) for (var i = 0;; ++i) { + n = "[doc" + (i || "") + "]"; + if (!ts.docs[n]) { name = n; break; } + } + return ts.addDoc(name, doc); + } + + function resolveDoc(ts, id) { + if (typeof id == "string") return ts.docs[id]; + if (id instanceof CodeMirror) id = id.getDoc(); + if (id instanceof CodeMirror.Doc) return findDoc(ts, id); + } + + function trackChange(ts, doc, change) { + var data = findDoc(ts, doc); + + var argHints = ts.cachedArgHints; + if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) <= 0) + ts.cachedArgHints = null; + + var changed = data.changed; + if (changed == null) + data.changed = changed = {from: change.from.line, to: change.from.line}; + var end = change.from.line + (change.text.length - 1); + if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end); + if (end >= changed.to) changed.to = end + 1; + if (changed.from > change.from.line) changed.from = change.from.line; + + if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() { + if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data); + }, 200); + } + + function sendDoc(ts, doc) { + ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) { + if (error) window.console.error(error); + else doc.changed = null; + }); + } + + // Completion + + function hint(ts, cm, c) { + ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) { + if (error) return showError(ts, cm, error); + var completions = [], after = ""; + var from = data.start, to = data.end; + if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" && + cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]") + after = "\"]"; + + for (var i = 0; i < data.completions.length; ++i) { + var completion = data.completions[i], className = typeToIcon(completion.type); + if (data.guess) className += " " + cls + "guess"; + completions.push({text: completion.name + after, + displayText: completion.displayName || completion.name, + className: className, + data: completion}); + } + + var obj = {from: from, to: to, list: completions}; + var tooltip = null; + CodeMirror.on(obj, "close", function() { remove(tooltip); }); + CodeMirror.on(obj, "update", function() { remove(tooltip); }); + CodeMirror.on(obj, "select", function(cur, node) { + remove(tooltip); + var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc; + if (content) { + tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset, + node.getBoundingClientRect().top + window.pageYOffset, content); + tooltip.className += " " + cls + "hint-doc"; + } + }); + c(obj); + }); + } + + function typeToIcon(type) { + var suffix; + if (type == "?") suffix = "unknown"; + else if (type == "number" || type == "string" || type == "bool") suffix = type; + else if (/^fn\(/.test(type)) suffix = "fn"; + else if (/^\[/.test(type)) suffix = "array"; + else suffix = "object"; + return cls + "completion " + cls + "completion-" + suffix; + } + + // Type queries + + function showContextInfo(ts, cm, pos, queryName, c) { + ts.request(cm, queryName, function(error, data) { + if (error) return showError(ts, cm, error); + if (ts.options.typeTip) { + var tip = ts.options.typeTip(data); + } else { + var tip = elt("span", null, elt("strong", null, data.type || "not found")); + if (data.doc) + tip.appendChild(document.createTextNode(" — " + data.doc)); + if (data.url) { + tip.appendChild(document.createTextNode(" ")); + var child = tip.appendChild(elt("a", null, "[docs]")); + child.href = data.url; + child.target = "_blank"; + } + } + tempTooltip(cm, tip, ts); + if (c) c(); + }, pos); + } + + // Maintaining argument hints + + function updateArgHints(ts, cm) { + closeArgHints(ts); + + if (cm.somethingSelected()) return; + var state = cm.getTokenAt(cm.getCursor()).state; + var inner = CodeMirror.innerMode(cm.getMode(), state); + if (inner.mode.name != "javascript") return; + var lex = inner.state.lexical; + if (lex.info != "call") return; + + var ch, argPos = lex.pos || 0, tabSize = cm.getOption("tabSize"); + for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) { + var str = cm.getLine(line), extra = 0; + for (var pos = 0;;) { + var tab = str.indexOf("\t", pos); + if (tab == -1) break; + extra += tabSize - (tab + extra) % tabSize - 1; + pos = tab + 1; + } + ch = lex.column - extra; + if (str.charAt(ch) == "(") {found = true; break;} + } + if (!found) return; + + var start = Pos(line, ch); + var cache = ts.cachedArgHints; + if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0) + return showArgHints(ts, cm, argPos); + + ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) { + if (error || !data.type || !(/^fn\(/).test(data.type)) return; + ts.cachedArgHints = { + start: pos, + type: parseFnType(data.type), + name: data.exprName || data.name || "fn", + guess: data.guess, + doc: cm.getDoc() + }; + showArgHints(ts, cm, argPos); + }); + } + + function showArgHints(ts, cm, pos) { + closeArgHints(ts); + + var cache = ts.cachedArgHints, tp = cache.type; + var tip = elt("span", cache.guess ? cls + "fhint-guess" : null, + elt("span", cls + "fname", cache.name), "("); + for (var i = 0; i < tp.args.length; ++i) { + if (i) tip.appendChild(document.createTextNode(", ")); + var arg = tp.args[i]; + tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?")); + if (arg.type != "?") { + tip.appendChild(document.createTextNode(":\u00a0")); + tip.appendChild(elt("span", cls + "type", arg.type)); + } + } + tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); + if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); + var place = cm.cursorCoords(null, "page"); + ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip); + } + + function parseFnType(text) { + var args = [], pos = 3; + + function skipMatching(upto) { + var depth = 0, start = pos; + for (;;) { + var next = text.charAt(pos); + if (upto.test(next) && !depth) return text.slice(start, pos); + if (/[{\[\(]/.test(next)) ++depth; + else if (/[}\]\)]/.test(next)) --depth; + ++pos; + } + } + + // Parse arguments + if (text.charAt(pos) != ")") for (;;) { + var name = text.slice(pos).match(/^([^, \(\[\{]+): /); + if (name) { + pos += name[0].length; + name = name[1]; + } + args.push({name: name, type: skipMatching(/[\),]/)}); + if (text.charAt(pos) == ")") break; + pos += 2; + } + + var rettype = text.slice(pos).match(/^\) -> (.*)$/); + + return {args: args, rettype: rettype && rettype[1]}; + } + + // Moving to the definition of something + + function jumpToDef(ts, cm) { + function inner(varName) { + var req = {type: "definition", variable: varName || null}; + var doc = findDoc(ts, cm.getDoc()); + ts.server.request(buildRequest(ts, doc, req), function(error, data) { + if (error) return showError(ts, cm, error); + if (!data.file && data.url) { window.open(data.url); return; } + + if (data.file) { + var localDoc = ts.docs[data.file], found; + if (localDoc && (found = findContext(localDoc.doc, data))) { + ts.jumpStack.push({file: doc.name, + start: cm.getCursor("from"), + end: cm.getCursor("to")}); + moveTo(ts, doc, localDoc, found.start, found.end); + return; + } + } + showError(ts, cm, "Could not find a definition."); + }); + } + + if (!atInterestingExpression(cm)) + dialog(cm, "Jump to variable", function(name) { if (name) inner(name); }); + else + inner(); + } + + function jumpBack(ts, cm) { + var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file]; + if (!doc) return; + moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end); + } + + function moveTo(ts, curDoc, doc, start, end) { + doc.doc.setSelection(start, end); + if (curDoc != doc && ts.options.switchToDoc) { + closeArgHints(ts); + ts.options.switchToDoc(doc.name, doc.doc); + } + } + + // The {line,ch} representation of positions makes this rather awkward. + function findContext(doc, data) { + var before = data.context.slice(0, data.contextOffset).split("\n"); + var startLine = data.start.line - (before.length - 1); + var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length); + + var text = doc.getLine(startLine).slice(start.ch); + for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur) + text += "\n" + doc.getLine(cur); + if (text.slice(0, data.context.length) == data.context) return data; + + var cursor = doc.getSearchCursor(data.context, 0, false); + var nearest, nearestDist = Infinity; + while (cursor.findNext()) { + var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000; + if (!dist) dist = Math.abs(from.ch - start.ch); + if (dist < nearestDist) { nearest = from; nearestDist = dist; } + } + if (!nearest) return null; + + if (before.length == 1) + nearest.ch += before[0].length; + else + nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length); + if (data.start.line == data.end.line) + var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch)); + else + var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch); + return {start: nearest, end: end}; + } + + function atInterestingExpression(cm) { + var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos); + if (tok.start < pos.ch && tok.type == "comment") return false; + return /[\w)\]]/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1)); + } + + // Variable renaming + + function rename(ts, cm) { + var token = cm.getTokenAt(cm.getCursor()); + if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable"); + dialog(cm, "New name for " + token.string, function(newName) { + ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) { + if (error) return showError(ts, cm, error); + applyChanges(ts, data.changes); + }); + }); + } + + function selectName(ts, cm) { + var name = findDoc(ts, cm.doc).name; + ts.request(cm, {type: "refs"}, function(error, data) { + if (error) return showError(ts, cm, error); + var ranges = [], cur = 0; + var curPos = cm.getCursor(); + for (var i = 0; i < data.refs.length; i++) { + var ref = data.refs[i]; + if (ref.file == name) { + ranges.push({anchor: ref.start, head: ref.end}); + if (cmpPos(curPos, ref.start) >= 0 && cmpPos(curPos, ref.end) <= 0) + cur = ranges.length - 1; + } + } + cm.setSelections(ranges, cur); + }); + } + + var nextChangeOrig = 0; + function applyChanges(ts, changes) { + var perFile = Object.create(null); + for (var i = 0; i < changes.length; ++i) { + var ch = changes[i]; + (perFile[ch.file] || (perFile[ch.file] = [])).push(ch); + } + for (var file in perFile) { + var known = ts.docs[file], chs = perFile[file];; + if (!known) continue; + chs.sort(function(a, b) { return cmpPos(b.start, a.start); }); + var origin = "*rename" + (++nextChangeOrig); + for (var i = 0; i < chs.length; ++i) { + var ch = chs[i]; + known.doc.replaceRange(ch.text, ch.start, ch.end, origin); + } + } + } + + // Generic request-building helper + + function buildRequest(ts, doc, query, pos) { + var files = [], offsetLines = 0, allowFragments = !query.fullDocs; + if (!allowFragments) delete query.fullDocs; + if (typeof query == "string") query = {type: query}; + query.lineCharPositions = true; + if (query.end == null) { + query.end = pos || doc.doc.getCursor("end"); + if (doc.doc.somethingSelected()) + query.start = doc.doc.getCursor("start"); + } + var startPos = query.start || query.end; + + if (doc.changed) { + if (doc.doc.lineCount() > bigDoc && allowFragments !== false && + doc.changed.to - doc.changed.from < 100 && + doc.changed.from <= startPos.line && doc.changed.to > query.end.line) { + files.push(getFragmentAround(doc, startPos, query.end)); + query.file = "#0"; + var offsetLines = files[0].offsetLines; + if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch); + query.end = Pos(query.end.line - offsetLines, query.end.ch); + } else { + files.push({type: "full", + name: doc.name, + text: docValue(ts, doc)}); + query.file = doc.name; + doc.changed = null; + } + } else { + query.file = doc.name; + } + for (var name in ts.docs) { + var cur = ts.docs[name]; + if (cur.changed && cur != doc) { + files.push({type: "full", name: cur.name, text: docValue(ts, cur)}); + cur.changed = null; + } + } + + return {query: query, files: files}; + } + + function getFragmentAround(data, start, end) { + var doc = data.doc; + var minIndent = null, minLine = null, endLine, tabSize = 4; + for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) { + var line = doc.getLine(p), fn = line.search(/\bfunction\b/); + if (fn < 0) continue; + var indent = CodeMirror.countColumn(line, null, tabSize); + if (minIndent != null && minIndent <= indent) continue; + minIndent = indent; + minLine = p; + } + if (minLine == null) minLine = min; + var max = Math.min(doc.lastLine(), end.line + 20); + if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize)) + endLine = max; + else for (endLine = end.line + 1; endLine < max; ++endLine) { + var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize); + if (indent <= minIndent) break; + } + var from = Pos(minLine, 0); + + return {type: "part", + name: data.name, + offsetLines: from.line, + text: doc.getRange(from, Pos(endLine, 0))}; + } + + // Generic utilities + + var cmpPos = CodeMirror.cmpPos; + + function elt(tagname, cls /*, ... elts*/) { + var e = document.createElement(tagname); + if (cls) e.className = cls; + for (var i = 2; i < arguments.length; ++i) { + var elt = arguments[i]; + if (typeof elt == "string") elt = document.createTextNode(elt); + e.appendChild(elt); + } + return e; + } + + function dialog(cm, text, f) { + if (cm.openDialog) + cm.openDialog(text + ": ", f); + else + f(prompt(text, "")); + } + + // Tooltips + + function tempTooltip(cm, content, ts) { + if (cm.state.ternTooltip) remove(cm.state.ternTooltip); + var where = cm.cursorCoords(); + var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content); + function maybeClear() { + old = true; + if (!mouseOnTip) clear(); + } + function clear() { + cm.state.ternTooltip = null; + if (!tip.parentNode) return; + cm.off("cursorActivity", clear); + cm.off('blur', clear); + cm.off('scroll', clear); + fadeOut(tip); + } + var mouseOnTip = false, old = false; + CodeMirror.on(tip, "mousemove", function() { mouseOnTip = true; }); + CodeMirror.on(tip, "mouseout", function(e) { + if (!CodeMirror.contains(tip, e.relatedTarget || e.toElement)) { + if (old) clear(); + else mouseOnTip = false; + } + }); + setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700); + cm.on("cursorActivity", clear); + cm.on('blur', clear); + cm.on('scroll', clear); + } + + function makeTooltip(x, y, content) { + var node = elt("div", cls + "tooltip", content); + node.style.left = x + "px"; + node.style.top = y + "px"; + document.body.appendChild(node); + return node; + } + + function remove(node) { + var p = node && node.parentNode; + if (p) p.removeChild(node); + } + + function fadeOut(tooltip) { + tooltip.style.opacity = "0"; + setTimeout(function() { remove(tooltip); }, 1100); + } + + function showError(ts, cm, msg) { + if (ts.options.showError) + ts.options.showError(cm, msg); + else + tempTooltip(cm, String(msg), ts); + } + + function closeArgHints(ts) { + if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; } + } + + function docValue(ts, doc) { + var val = doc.doc.getValue(); + if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc); + return val; + } + + // Worker wrapper + + function WorkerServer(ts) { + var worker = ts.worker = new Worker(ts.options.workerScript); + worker.postMessage({type: "init", + defs: ts.options.defs, + plugins: ts.options.plugins, + scripts: ts.options.workerDeps}); + var msgId = 0, pending = {}; + + function send(data, c) { + if (c) { + data.id = ++msgId; + pending[msgId] = c; + } + worker.postMessage(data); + } + worker.onmessage = function(e) { + var data = e.data; + if (data.type == "getFile") { + getFile(ts, data.name, function(err, text) { + send({type: "getFile", err: String(err), text: text, id: data.id}); + }); + } else if (data.type == "debug") { + window.console.log(data.message); + } else if (data.id && pending[data.id]) { + pending[data.id](data.err, data.body); + delete pending[data.id]; + } + }; + worker.onerror = function(e) { + for (var id in pending) pending[id](e); + pending = {}; + }; + + this.addFile = function(name, text) { send({type: "add", name: name, text: text}); }; + this.delFile = function(name) { send({type: "del", name: name}); }; + this.request = function(body, c) { send({type: "req", body: body}, c); }; + } +}); diff --git a/libraries/codemirror/addon/tern/worker.js b/libraries/codemirror/addon/tern/worker.js new file mode 100644 index 0000000..887f906 --- /dev/null +++ b/libraries/codemirror/addon/tern/worker.js @@ -0,0 +1,44 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// declare global: tern, server + +var server; + +this.onmessage = function(e) { + var data = e.data; + switch (data.type) { + case "init": return startServer(data.defs, data.plugins, data.scripts); + case "add": return server.addFile(data.name, data.text); + case "del": return server.delFile(data.name); + case "req": return server.request(data.body, function(err, reqData) { + postMessage({id: data.id, body: reqData, err: err && String(err)}); + }); + case "getFile": + var c = pending[data.id]; + delete pending[data.id]; + return c(data.err, data.text); + default: throw new Error("Unknown message type: " + data.type); + } +}; + +var nextId = 0, pending = {}; +function getFile(file, c) { + postMessage({type: "getFile", name: file, id: ++nextId}); + pending[nextId] = c; +} + +function startServer(defs, plugins, scripts) { + if (scripts) importScripts.apply(null, scripts); + + server = new tern.Server({ + getFile: getFile, + async: true, + defs: defs, + plugins: plugins + }); +} + +this.console = { + log: function(v) { postMessage({type: "debug", message: v}); } +}; diff --git a/libraries/codemirror/addon/wrap/hardwrap.js b/libraries/codemirror/addon/wrap/hardwrap.js new file mode 100644 index 0000000..8806fbe --- /dev/null +++ b/libraries/codemirror/addon/wrap/hardwrap.js @@ -0,0 +1,142 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + + function findParagraph(cm, pos, options) { + var startRE = options.paragraphStart || cm.getHelper(pos, "paragraphStart"); + for (var start = pos.line, first = cm.firstLine(); start > first; --start) { + var line = cm.getLine(start); + if (startRE && startRE.test(line)) break; + if (!/\S/.test(line)) { ++start; break; } + } + var endRE = options.paragraphEnd || cm.getHelper(pos, "paragraphEnd"); + for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) { + var line = cm.getLine(end); + if (endRE && endRE.test(line)) { ++end; break; } + if (!/\S/.test(line)) break; + } + return {from: start, to: end}; + } + + function findBreakPoint(text, column, wrapOn, killTrailingSpace) { + for (var at = column; at > 0; --at) + if (wrapOn.test(text.slice(at - 1, at + 1))) break; + for (var first = true;; first = false) { + var endOfText = at; + if (killTrailingSpace) + while (text.charAt(endOfText - 1) == " ") --endOfText; + if (endOfText == 0 && first) at = column; + else return {from: endOfText, to: at}; + } + } + + function wrapRange(cm, from, to, options) { + from = cm.clipPos(from); to = cm.clipPos(to); + var column = options.column || 80; + var wrapOn = options.wrapOn || /\s\S|-[^\.\d]/; + var killTrailing = options.killTrailingSpace !== false; + var changes = [], curLine = "", curNo = from.line; + var lines = cm.getRange(from, to, false); + if (!lines.length) return null; + var leadingSpace = lines[0].match(/^[ \t]*/)[0]; + + for (var i = 0; i < lines.length; ++i) { + var text = lines[i], oldLen = curLine.length, spaceInserted = 0; + if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) { + curLine += " "; + spaceInserted = 1; + } + var spaceTrimmed = ""; + if (i) { + spaceTrimmed = text.match(/^\s*/)[0]; + text = text.slice(spaceTrimmed.length); + } + curLine += text; + if (i) { + var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed && + findBreakPoint(curLine, column, wrapOn, killTrailing); + // If this isn't broken, or is broken at a different point, remove old break + if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) { + changes.push({text: [spaceInserted ? " " : ""], + from: Pos(curNo, oldLen), + to: Pos(curNo + 1, spaceTrimmed.length)}); + } else { + curLine = leadingSpace + text; + ++curNo; + } + } + while (curLine.length > column) { + var bp = findBreakPoint(curLine, column, wrapOn, killTrailing); + changes.push({text: ["", leadingSpace], + from: Pos(curNo, bp.from), + to: Pos(curNo, bp.to)}); + curLine = leadingSpace + curLine.slice(bp.to); + ++curNo; + } + } + if (changes.length) cm.operation(function() { + for (var i = 0; i < changes.length; ++i) { + var change = changes[i]; + if (change.text || CodeMirror.cmpPos(change.from, change.to)) + cm.replaceRange(change.text, change.from, change.to); + } + }); + return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null; + } + + CodeMirror.defineExtension("wrapParagraph", function(pos, options) { + options = options || {}; + if (!pos) pos = this.getCursor(); + var para = findParagraph(this, pos, options); + return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options); + }); + + CodeMirror.commands.wrapLines = function(cm) { + cm.operation(function() { + var ranges = cm.listSelections(), at = cm.lastLine() + 1; + for (var i = ranges.length - 1; i >= 0; i--) { + var range = ranges[i], span; + if (range.empty()) { + var para = findParagraph(cm, range.head, {}); + span = {from: Pos(para.from, 0), to: Pos(para.to - 1)}; + } else { + span = {from: range.from(), to: range.to()}; + } + if (span.to.line >= at) continue; + at = span.from.line; + wrapRange(cm, span.from, span.to, {}); + } + }); + }; + + CodeMirror.defineExtension("wrapRange", function(from, to, options) { + return wrapRange(this, from, to, options || {}); + }); + + CodeMirror.defineExtension("wrapParagraphsInRange", function(from, to, options) { + options = options || {}; + var cm = this, paras = []; + for (var line = from.line; line <= to.line;) { + var para = findParagraph(cm, Pos(line, 0), options); + paras.push(para); + line = para.to; + } + var madeChange = false; + if (paras.length) cm.operation(function() { + for (var i = paras.length - 1; i >= 0; --i) + madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options); + }); + return madeChange; + }); +}); diff --git a/libraries/codemirror/lib/codemirror.css b/libraries/codemirror/lib/codemirror.css new file mode 100644 index 0000000..1067b3e --- /dev/null +++ b/libraries/codemirror/lib/codemirror.css @@ -0,0 +1,334 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} + +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-ruler { + border-left: 1px solid #ccc; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + margin-bottom: -30px; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { position: absolute; } +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/libraries/codemirror/lib/codemirror.js b/libraries/codemirror/lib/codemirror.js new file mode 100644 index 0000000..47e21e4 --- /dev/null +++ b/libraries/codemirror/lib/codemirror.js @@ -0,0 +1,8891 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + module.exports = mod(); + else if (typeof define == "function" && define.amd) // AMD + return define([], mod); + else // Plain browser env + (this || window).CodeMirror = mod(); +})(function() { + "use strict"; + + // BROWSER SNIFFING + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); + var webkit = /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + + var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var windows = /win/i.test(platform); + + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) presto_version = Number(presto_version[1]); + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && ie_version >= 9); + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // EDITOR CONSTRUCTOR + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator); + this.doc = doc; + + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + if (options.autofocus && !mobile) display.input.focus(); + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + var cm = this; + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || cm.hasFocus()) + setTimeout(bind(onFocus, this), 20); + else + onBlur(this); + + for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) + optionHandlers[opt](this, options[opt], Init); + maybeUpdateLineNumberWidth(this); + if (options.finishInit) options.finishInit(this); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + display.lineDiv.style.textRendering = "auto"; + } + + // DISPLAY CONSTRUCTOR + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = elt("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; + + if (place) { + if (place.appendChild) place.appendChild(d.wrapper); + else place(d.wrapper); + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + input.init(d); + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) return 0; + + var widgetsHeight = 0; + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; + } + + if (wrapping) + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + else + return widgetsHeight + th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + updateGutterSpace(cm); + } + + function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(0, true); + len -= cur.text.length - found.from.ch; + cur = found.to.line; + len += cur.text.length - found.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + }; + } + + function NativeScrollbars(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + place(vert); place(horiz); + + on(vert, "scroll", function() { + if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); + }); + on(horiz, "scroll", function() { + if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; + } + + NativeScrollbars.prototype = copyObj({ + update: function(measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) this.zeroWidthHack(); + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; + }, + setScrollLeft: function(pos) { + if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; + if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz); + }, + setScrollTop: function(pos) { + if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; + if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert); + }, + zeroWidthHack: function() { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; + }, + enableZeroWidthBar: function(bar, delay) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // left corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = document.elementFromPoint(box.left + 1, box.bottom - 1); + if (elt != bar) bar.style.pointerEvents = "none"; + else delay.set(1000, maybeDisable); + } + delay.set(1000, maybeDisable); + }, + clear: function() { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + } + }, NativeScrollbars.prototype); + + function NullScrollbars() {} + + NullScrollbars.prototype = copyObj({ + update: function() { return {bottom: 0, right: 0}; }, + setScrollLeft: function() {}, + setScrollTop: function() {}, + clear: function() {} + }, NullScrollbars.prototype); + + CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + + cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function() { + if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); + }); + node.setAttribute("cm-not-content", "true"); + }, function(pos, axis) { + if (axis == "horizontal") setScrollLeft(cm, pos); + else setScrollTop(cm, pos); + }, cm); + if (cm.display.scrollbars.addClass) + addClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + + function updateScrollbars(cm, measure) { + if (!measure) measure = measureForScrollbars(cm); + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + updateHeightsInViewport(cm); + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else d.scrollbarFiller.style.display = ""; + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else d.gutterFiller.style.display = ""; + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)}; + } + + // LINE NUMBERS + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) if (!view[i].hidden) { + if (cm.options.fixedGutter && view[i].gutter) + view[i].gutter.style.left = left; + var align = view[i].alignable; + if (align) for (var j = 0; j < align.length; j++) + align[j].style.left = left; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm); + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // DISPLAY DRAWING + + function DisplayUpdate(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + } + + DisplayUpdate.prototype.signal = function(emitter, type) { + if (hasHandler(emitter, type)) + this.events.push(arguments); + }; + DisplayUpdate.prototype.finish = function() { + for (var i = 0; i < this.events.length; i++) + signal.apply(null, this.events[i]); + }; + + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + return false; + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); + if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + return false; + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt(); + if (toUpdate > 4) display.lineDiv.style.display = "none"; + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) display.lineDiv.style.display = ""; + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true; + } + + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + break; + } + if (!updateDisplayIfNeeded(cm, update)) break; + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + setDocumentHeight(cm, barMeasure); + updateScrollbars(cm, barMeasure); + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } + } + + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + setDocumentHeight(cm, barMeasure); + updateScrollbars(cm, barMeasure); + update.finish(); + } + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + var total = measure.docHeight + cm.display.barHeight; + cm.display.heightForcer.style.top = total + "px"; + cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height; + if (cur.hidden) continue; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = cur.line.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) for (var j = 0; j < cur.rest.length; j++) + updateWidgetHeight(cur.rest[j]); + } + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) + line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; + width[cm.options.gutters[i]] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + node.style.display = "none"; + else + node.parentNode.removeChild(node); + return next; + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) cur = rm(cur); + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) cur = rm(cur); + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") updateLineText(cm, lineView); + else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); + else if (type == "class") updateLineClasses(lineView); + else if (type == "widget") updateLineWidgets(cm, lineView, dims); + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) lineView.node.style.zIndex = 2; + } + return lineView.node; + } + + function updateLineBackground(lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) cls += " CodeMirror-linebackground"; + if (lineView.background) { + if (cls) lineView.background.className = cls; + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) lineView.node = built.pre; + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(lineView) { + updateLineBackground(lineView); + if (lineView.line.wrapClass) + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + else if (lineView.node != lineView.text) + lineView.node.className = ""; + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + + "px; width: " + dims.gutterTotalWidth + "px"); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); + cm.display.input.setUneditable(gutterWrap); + wrap.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + gutterWrap.className += " " + lineView.line.gutterClass; + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + cm.display.lineNumInnerWidth + "px")); + if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) lineView.alignable = null; + for (var node = lineView.node.firstChild, next; node; node = next) { + var next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + lineView.node.removeChild(node); + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) lineView.bgClass = built.bgClass; + if (built.textClass) lineView.textClass = built.textClass; + + updateLineClasses(lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); + } + + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) return; + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + wrap.insertBefore(node, lineView.gutter || lineView.text); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // POSITION OBJECT + + // A Pos instance represents a position within the text. + var Pos = CodeMirror.Pos = function(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + }; + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; + + function copyPos(x) {return Pos(x.line, x.ch);} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } + + // INPUT HANDLING + + function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } + } + + // This will be set to an array of strings when copying, so that, + // when pasting, we know what kind of selections the copied text + // was made out of. + var lastCopied = null; + + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) sel = doc.sel; + + var paste = cm.state.pasteIncoming || origin == "paste"; + var textLines = doc.splitLines(inserted), multiPaste = null; + // When pasing N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.length; i++) + multiPaste.push(doc.splitLines(lastCopied[i])); + } + } else if (textLines.length == sel.ranges.length) { + multiPaste = map(textLines, function(l) { return [l]; }); + } + } + + // Normal behavior is to insert the new text into every selection + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + var from = range.from(), to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + from = Pos(from.line, from.ch - deleted); + else if (cm.state.overwrite && !paste) // Handle overwrite + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + } + var updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + triggerElectric(cm, inserted); + + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = false; + } + + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) + runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); }); + return true; + } + } + + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) return; + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue; + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break; + } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + indented = indentLine(cm, range.head.line, "smart"); + } + if (indented) signalLater(cm, "electricInput", cm, range.head.line); + } + } + + function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges}; + } + + function disableBrowserMagic(field) { + field.setAttribute("autocorrect", "off"); + field.setAttribute("autocapitalize", "off"); + field.setAttribute("spellcheck", "false"); + } + + // TEXTAREA INPUT STYLE + + function TextareaInput(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Tracks when input.reset has punted to just putting a short + // string into the textarea instead of the full selection. + this.inaccurateSelection = false; + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) te.style.width = "1000px"; + else te.setAttribute("wrap", "off"); + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) te.style.border = "1px solid black"; + disableBrowserMagic(te); + return div; + } + + TextareaInput.prototype = copyObj({ + init: function(display) { + var input = this, cm = this.cm; + + // Wraps and hides input textarea + var div = this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var te = this.textarea = div.firstChild; + display.wrapper.insertBefore(div, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) te.style.width = "0px"; + + on(te, "input", function() { + if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; + input.poll(); + }); + + on(te, "paste", function(e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return + + cm.state.pasteIncoming = true; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) return + if (cm.somethingSelected()) { + lastCopied = cm.getSelections(); + if (input.inaccurateSelection) { + input.prevInput = ""; + input.inaccurateSelection = false; + te.value = lastCopied.join("\n"); + selectInput(te); + } + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + lastCopied = ranges.text; + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") cm.state.cutIncoming = true; + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function(e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return; + cm.state.pasteIncoming = true; + input.focus(); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function(e) { + if (!eventInWidget(display, e)) e_preventDefault(e); + }); + + on(te, "compositionstart", function() { + var start = cm.getCursor("from"); + if (input.composing) input.composing.range.clear() + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function() { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }, + + prepareSelection: function() { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result; + }, + + showSelection: function(drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }, + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + reset: function(typing) { + if (this.contextMenuPending) return; + var minimal, selected, cm = this.cm, doc = cm.doc; + if (cm.somethingSelected()) { + this.prevInput = ""; + var range = doc.sel.primary(); + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) selectInput(this.textarea); + if (ie && ie_version >= 9) this.hasSelection = content; + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) this.hasSelection = null; + } + this.inaccurateSelection = minimal; + }, + + getField: function() { return this.textarea; }, + + supportsTouch: function() { return false; }, + + focus: function() { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }, + + blur: function() { this.textarea.blur(); }, + + resetPosition: function() { + this.wrapper.style.top = this.wrapper.style.left = 0; + }, + + receivedFocus: function() { this.slowPoll(); }, + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + slowPoll: function() { + var input = this; + if (input.pollingFast) return; + input.polling.set(this.cm.options.pollInterval, function() { + input.poll(); + if (input.cm.state.focused) input.slowPoll(); + }); + }, + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + fastPoll: function() { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); + }, + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + poll: function() { + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + return false; + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) return false; + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false; + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) prevInput = "\u200b"; + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + + var self = this; + runInOp(cm, function() { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, self.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; + else self.prevInput = text; + + if (self.composing) { + self.composing.range.clear(); + self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true; + }, + + ensurePolled: function() { + if (this.pollingFast && this.poll()) this.pollingFast = false; + }, + + onKeyPress: function() { + if (ie && ie_version >= 9) this.hasSelection = null; + this.fastPoll(); + }, + + onContextMenu: function(e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) return; // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + input.wrapper.style.cssText = "position: absolute" + var wrapperBox = input.wrapper.getBoundingClientRect() + te.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (e.clientY - wrapperBox.top - 5) + + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px; z-index: 1000; background: " + + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) window.scrollTo(null, oldScrollY); + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) te.value = input.prevInput = " "; + input.contextMenuPending = true; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS + te.style.cssText = oldCSS; + if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); + var i = 0, poll = function() { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); + else display.input.reset(); + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) prepareSelectAllHack(); + if (captureRightClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }, + + readOnlyChanged: function(val) { + if (!val) this.reset(); + }, + + setUneditable: nothing, + + needsContentAttribute: false + }, TextareaInput.prototype); + + // CONTENTEDITABLE INPUT STYLE + + function ContentEditableInput(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.gracePeriod = false; + } + + ContentEditableInput.prototype = copyObj({ + init: function(display) { + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + disableBrowserMagic(div); + + on(div, "paste", function(e) { + if (!signalDOMEvent(cm, e)) handlePaste(e, cm); + }) + + on(div, "compositionstart", function(e) { + var data = e.data; + input.composing = {sel: cm.doc.sel, data: data, startData: data}; + if (!data) return; + var prim = cm.doc.sel.primary(); + var line = cm.getLine(prim.head.line); + var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); + if (found > -1 && found <= prim.head.ch) + input.composing.sel = simpleSelection(Pos(prim.head.line, found), + Pos(prim.head.line, found + data.length)); + }); + on(div, "compositionupdate", function(e) { + input.composing.data = e.data; + }); + on(div, "compositionend", function(e) { + var ours = input.composing; + if (!ours) return; + if (e.data != ours.startData && !/\u200b/.test(e.data)) + ours.data = e.data; + // Need a small delay to prevent other code (input event, + // selection polling) from doing damage when fired right after + // compositionend. + setTimeout(function() { + if (!ours.handled) + input.applyComposition(ours); + if (input.composing == ours) + input.composing = null; + }, 50); + }); + + on(div, "touchstart", function() { + input.forceCompositionEnd(); + }); + + on(div, "input", function() { + if (input.composing) return; + if (cm.isReadOnly() || !input.pollContent()) + runInOp(input.cm, function() {regChange(cm);}); + }); + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) return + if (cm.somethingSelected()) { + lastCopied = cm.getSelections(); + if (e.type == "cut") cm.replaceSelection("", null, "cut"); + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + lastCopied = ranges.text; + if (e.type == "cut") { + cm.operation(function() { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + // iOS exposes the clipboard API, but seems to discard content inserted into it + if (e.clipboardData && !ios) { + e.preventDefault(); + e.clipboardData.clearData(); + e.clipboardData.setData("text/plain", lastCopied.join("\n")); + } else { + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.join("\n"); + var hadFocus = document.activeElement; + selectInput(te); + setTimeout(function() { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + }, 50); + } + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }, + + prepareSelection: function() { + var result = prepareSelection(this.cm, false); + result.focus = this.cm.state.focused; + return result; + }, + + showSelection: function(info) { + if (!info || !this.cm.display.view.length) return; + if (info.focus) this.showPrimarySelection(); + this.showMultipleSelections(info); + }, + + showPrimarySelection: function() { + var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); + var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && + cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) + return; + + var start = posToDOM(this.cm, prim.from()); + var end = posToDOM(this.cm, prim.to()); + if (!start && !end) return; + + var view = this.cm.display.view; + var old = sel.rangeCount && sel.getRangeAt(0); + if (!start) { + start = {node: view[0].measure.map[2], offset: 0}; + } else if (!end) { // FIXME dangerously hacky + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; + } + + try { var rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && this.cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) sel.addRange(rng); + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) sel.addRange(old); + else if (gecko) this.startGracePeriod(); + } + this.rememberSelection(); + }, + + startGracePeriod: function() { + var input = this; + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function() { + input.gracePeriod = false; + if (input.selectionChanged()) + input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); + }, 20); + }, + + showMultipleSelections: function(info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }, + + rememberSelection: function() { + var sel = window.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; + }, + + selectionInEditor: function() { + var sel = window.getSelection(); + if (!sel.rangeCount) return false; + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node); + }, + + focus: function() { + if (this.cm.options.readOnly != "nocursor") this.div.focus(); + }, + blur: function() { this.div.blur(); }, + getField: function() { return this.div; }, + + supportsTouch: function() { return true; }, + + receivedFocus: function() { + var input = this; + if (this.selectionInEditor()) + this.pollSelection(); + else + runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }, + + selectionChanged: function() { + var sel = window.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; + }, + + pollSelection: function() { + if (!this.composing && !this.gracePeriod && this.selectionChanged()) { + var sel = window.getSelection(), cm = this.cm; + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) runInOp(cm, function() { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; + }); + } + }, + + pollContent: function() { + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; + + var fromIndex; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + var fromLine = lineNo(display.view[0].line); + var fromNode = display.view[0].node; + } else { + var fromLine = lineNo(display.view[fromIndex].line); + var fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + if (toIndex == display.view.length - 1) { + var toLine = display.viewTo - 1; + var toNode = display.lineDiv.lastChild; + } else { + var toLine = lineNo(display.view[toIndex + 1].line) - 1; + var toNode = display.view[toIndex + 1].node.previousSibling; + } + + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else break; + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + ++cutFront; + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + ++cutEnd; + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); + newText[0] = newText[0].slice(cutFront); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true; + } + }, + + ensurePolled: function() { + this.forceCompositionEnd(); + }, + reset: function() { + this.forceCompositionEnd(); + }, + forceCompositionEnd: function() { + if (!this.composing || this.composing.handled) return; + this.applyComposition(this.composing); + this.composing.handled = true; + this.div.blur(); + this.div.focus(); + }, + applyComposition: function(composing) { + if (this.cm.isReadOnly()) + operation(this.cm, regChange)(this.cm) + else if (composing.data && composing.data != composing.startData) + operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); + }, + + setUneditable: function(node) { + node.contentEditable = "false" + }, + + onKeyPress: function(e) { + e.preventDefault(); + if (!this.cm.isReadOnly()) + operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); + }, + + readOnlyChanged: function(val) { + this.div.contentEditable = String(val != "nocursor") + }, + + onContextMenu: nothing, + resetPosition: nothing, + + needsContentAttribute: true + }, ContentEditableInput.prototype); + + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) return null; + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result; + } + + function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } + + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) return null; + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + return locateNodeInLineView(lineView, node, offset); + } + } + + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad); + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) offset = textNode.nodeValue.length; + } + while (topNode.parentNode != wrapper) topNode = topNode.parentNode; + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; + return Pos(line, ch); + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) return badPos(found, bad); + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + return badPos(Pos(found.line, found.ch - dist), bad); + else + dist += after.textContent.length; + } + for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + return badPos(Pos(found.line, found.ch + dist), bad); + else + dist += after.textContent.length; + } + } + + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(); + function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText != null) { + if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); + text += cmText; + return; + } + var markerID = node.getAttribute("cm-marker"), range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find())) + text += getBetween(cm.doc, range.from, range.to).join(lineSep); + return; + } + if (node.getAttribute("contenteditable") == "false") return; + for (var i = 0; i < node.childNodes.length; i++) + walk(node.childNodes[i]); + if (/^(pre|div|p)$/i.test(node.nodeName)) + closing = true; + } else if (node.nodeType == 3) { + var val = node.nodeValue; + if (!val) return; + if (closing) { + text += lineSep; + closing = false; + } + text += val; + } + } + for (;;) { + walk(from); + if (from == to) break; + from = from.nextSibling; + } + return text; + } + + CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + + // SELECTION / CURSOR + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + function Selection(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + } + + Selection.prototype = { + primary: function() { return this.ranges[this.primIndex]; }, + equals: function(other) { + if (other == this) return true; + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; + } + return true; + }, + deepCopy: function() { + for (var out = [], i = 0; i < this.ranges.length; i++) + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + return new Selection(out, this.primIndex); + }, + somethingSelected: function() { + for (var i = 0; i < this.ranges.length; i++) + if (!this.ranges[i].empty()) return true; + return false; + }, + contains: function(pos, end) { + if (!end) end = pos; + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + return i; + } + return -1; + } + }; + + function Range(anchor, head) { + this.anchor = anchor; this.head = head; + } + + Range.prototype = { + from: function() { return minPos(this.anchor, this.head); }, + to: function() { return maxPos(this.anchor, this.head); }, + empty: function() { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + } + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex]; + ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) --primIndex; + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + function clipPosArray(doc, array) { + for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); + return out; + } + + // SELECTION UPDATES + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + for (var out = [], i = 0; i < doc.sel.ranges.length; i++) + out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); + var newSel = normalizeSelection(out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); + else return sel; + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + sel = filterSelectionChange(doc, sel, options); + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + ensureCursorVisible(doc.cm); + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) return; + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) out = sel.ranges.slice(0, i); + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel; + } + + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff; + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) near = movePos(doc, near, -dir, line); + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + return skipAtomicInner(doc, near, pos, dir, mayClear); + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) far = movePos(doc, far, dir, line); + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; + } + } + return pos; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0); + } + return found; + } + + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1)); + else return null; + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0); + else return null; + } else { + return new Pos(pos.line, pos.ch + dir); + } + } + + // SELECTION DRAWING + + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + + function prepareSelection(cm, primary) { + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (primary === false && i == doc.sel.primIndex) continue; + var range = doc.sel.ranges[i]; + var collapsed = range.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + drawSelectionCursor(cm, range.head, curFragment); + if (!collapsed) + drawSelectionRange(cm, range, selFragment); + } + return result; + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1, "right"); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (fromArg == null && from == 0) left = leftSide; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = leftSide; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = rightSide; + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + start = leftPos; + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + end = rightPos; + if (left < leftSide + 1) left = leftSide; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return {start: start, end: end}; + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + display.blinker = setInterval(function() { + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + else if (cm.options.cursorBlinkRate < 0) + display.cursorDiv.style.visibility = "hidden"; + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.viewTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + var changedLines = []; + + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength; + var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true); + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) line.styleClasses = newCls; + else if (oldCls) line.styleClasses = null; + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) changedLines.push(doc.frontier); + line.stateAfter = tooLong ? state : copyState(doc.mode, state); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + processLine(cm, line.text, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + if (changedLines.length) runInOp(cm, function() { + for (var i = 0; i < changedLines.length; i++) + regLineChange(cm, changedLines[i], "text"); + }); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter && (!precise || search <= doc.frontier)) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line.text, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + if (precise) doc.frontier = pos; + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingH(display) { + if (display.cachedPaddingH) return display.cachedPaddingH; + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; + return data; + } + + function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + return {map: lineView.measure.map, cache: lineView.measure.cache}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineView.rest[i] == line) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineNo(lineView.rest[i]) > lineN) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + return cm.display.view[findViewIndex(cm, lineN)]; + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + return ext; + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + view = updateExternalMeasurement(cm, line); + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) ch = -1; + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + prepared.rect = prepared.view.text.getBoundingClientRect(); + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) prepared.cache[key] = found; + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom}; + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + var mStart = map[i], mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) collapse = "right"; + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + collapse = bias; + if (bias == "left" && start == 0) + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + if (bias == "right" && start == mEnd - mStart) + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + break; + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; + } + + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { + rect = node.parentNode.getBoundingClientRect(); + } else if (ie && cm.options.lineWrapping) { + var rects = range(node, start, end).getClientRects(); + if (rects.length) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = nullRect; + } else { + rect = range(node, start, end).getBoundingClientRect() || nullRect; + } + if (rect.left || rect.right || start == 0) break; + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) collapse = bias = "right"; + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = node.getBoundingClientRect(); + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; + else + rect = nullRect; + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + for (var i = 0; i < heights.length - 1; i++) + if (mid < heights[i]) break; + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) result.bogus = true; + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result; + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + return rect; + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY}; + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + lineView.measure.caches[i] = {}; + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + clearLineMeasurementCacheFor(cm.display.view[i]); + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } + function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"/null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(lineObj); + if (context == "local") yOff += paddingTop(cm.display); + else yOff -= cm.display.viewOffset; + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"/null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0, pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height}; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, outside, xRel) { + var pos = Pos(line, ch); + pos.xRel = xRel; + if (outside) pos.outside = true; + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosWithInfo(doc.first, 0, true, -1); + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); + if (x < 0) x = 0; + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(0, true); + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + lineN = lineNo(lineObj = mergedPos.to.line); + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var ch = x < fromX || x - fromX <= toX - x ? from : to; + var xDiff = x - (ch == from ? fromX : toX); + while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; + var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, + xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var operationGroup = null; + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + }; + if (operationGroup) { + operationGroup.ops.push(cm.curOp); + } else { + cm.curOp.ownsGroup = operationGroup = { + ops: [cm.curOp], + delayedCallbacks: [] + }; + } + } + + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + callbacks[i].call(null); + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); + } + } while (i < callbacks.length); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp, group = op.ownsGroup; + if (!group) return; + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + for (var i = 0; i < group.ops.length; i++) + group.ops[i].cm.curOp = null; + endOperations(group); + } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_R1(ops[i]); + for (var i = 0; i < ops.length; i++) // Write DOM (maybe) + endOperation_W1(ops[i]); + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_R2(ops[i]); + for (var i = 0; i < ops.length; i++) // Write DOM (maybe) + endOperation_W2(ops[i]); + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_finish(ops[i]); + } + + function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) findMaxLine(cm); + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + } + + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + + function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) updateHeightsInViewport(cm); + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + op.preparedSelection = display.input.prepareSelection(); + } + + function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); + cm.display.maxLineChanged = false; + } + + if (op.preparedSelection) + cm.display.input.showSelection(op.preparedSelection); + if (op.updatedDisplay) + setDocumentHeight(cm, op.barMeasure); + if (op.updatedDisplay || op.startHeight != cm.doc.height) + updateScrollbars(cm, op.barMeasure); + + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + cm.display.input.reset(op.typing); + if (op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())) + ensureFocus(op.cm); + } + + function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) postUpdateDisplay(cm, op.update); + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + display.wheelStartX = display.wheelStartY = null; + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { + doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); + display.scrollbars.setScrollTop(doc.scrollTop); + display.scroller.scrollTop = doc.scrollTop; + } + if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { + doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); + display.scrollbars.setScrollLeft(doc.scrollLeft); + display.scroller.scrollLeft = doc.scrollLeft; + alignHorizontally(cm); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + if (display.wrapper.offsetHeight) + doc.scrollTop = cm.display.scroller.scrollTop; + + // Fire change events, and delayed event handlers + if (op.changeObjs) + signal(cm, "changes", cm, op.changeObjs); + if (op.update) + op.update.finish(); + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) return f(); + startOperation(cm); + try { return f(); } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) return f.apply(cm, arguments); + startOperation(cm); + try { return f.apply(cm, arguments); } + finally { endOperation(cm); } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) return f.apply(this, arguments); + startOperation(this); + try { return f.apply(this, arguments); } + finally { endOperation(this); } + }; + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) return f.apply(this, arguments); + startOperation(cm); + try { return f.apply(this, arguments); } + finally { endOperation(cm); } + }; + } + + // VIEW TRACKING + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + if (!lendiff) lendiff = 0; + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + display.updateLineNumbers = from; + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + resetView(cm); + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut = viewCuttingPoint(cm, from, from, -1); + if (cut) { + display.view = display.view.slice(0, cut.index); + display.viewTo = cut.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + ext.lineN += lendiff; + else if (from < ext.lineN + ext.size) + display.externalMeasured = null; + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + display.externalMeasured = null; + + if (line < display.viewFrom || line >= display.viewTo) return; + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) return; + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) arr.push(type); + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) return null; + n -= cm.display.viewFrom; + if (n < 0) return null; + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) return i; + } + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + return {index: index, lineN: newN}; + for (var i = 0, n = cm.display.viewFrom; i < index; i++) + n += view[i].size; + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) return null; + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) return null; + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN}; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + else if (display.viewFrom < from) + display.view = display.view.slice(findViewIndex(cm, from)); + display.viewFrom = from; + if (display.viewTo < to) + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + else if (display.viewTo > to) + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; + } + return dirty; + } + + // EVENT HANDLERS + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + on(d.scroller, "dblclick", operation(cm, function(e) { + if (signalDOMEvent(cm, e)) return; + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + else + on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + }; + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) return false; + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1; + } + function farAway(touch, other) { + if (other.left == null) return true; + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20; + } + on(d.scroller, "touchstart", function(e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function() { + if (d.activeTouch) d.activeTouch.moved = true; + }); + on(d.scroller, "touchend", function(e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + range = new Range(pos, pos); + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + range = cm.findWordAt(pos); + else // Triple tap + range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, + over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function(e){onDragStart(cm, e);}, + drop: operation(cm, onDrop), + leave: function() {clearDragCursor(cm);} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", bind(onFocus, cm)); + on(inp, "blur", bind(onBlur, cm)); + } + + function dragDropChanged(cm, value, old) { + var wasOn = old && old != CodeMirror.Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) + return; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + + // MOUSE EVENTS + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + return true; + } + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null; } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords; + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return; + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + window.focus(); + + switch (e_button(e)) { + case 1: + // #3261: make sure, that we're not starting a second selection + if (cm.state.selectingText) + cm.state.selectingText(e); + else if (start) + leftButtonDown(cm, e, start); + else if (e_target(e) == display.scroller) + e_preventDefault(e); + break; + case 2: + if (webkit) cm.state.lastMiddleDown = +new Date; + if (start) extendSelection(cm.doc, start); + setTimeout(function() {display.input.focus();}, 20); + e_preventDefault(e); + break; + case 3: + if (captureRightClick) onContextMenu(cm, e); + else delayBlurEvent(cm); + break; + } + } + + var lastClick, lastDoubleClick; + function leftButtonDown(cm, e, start) { + if (ie) setTimeout(bind(ensureFocus, cm), 0); + else cm.curOp.focus = activeElt(); + + var now = +new Date, type; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple"; + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + } else { + type = "single"; + lastClick = {time: now, pos: start}; + } + + var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + type == "single" && (contained = sel.contains(start)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && + (cmp(contained.to(), start) > 0 || start.xRel < 0)) + leftButtonStartDrag(cm, e, start, modifier); + else + leftButtonSelect(cm, e, start, type, modifier); + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, e, start, modifier) { + var display = cm.display, startTime = +new Date; + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + if (!modifier && +new Date - 200 < startTime) + extendSelection(cm.doc, start); + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + setTimeout(function() {document.body.focus(); display.input.focus();}, 20); + else + display.input.focus(); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc; + e_preventDefault(e); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (addNew && !e.shiftKey) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + ourRange = ranges[ourIndex]; + else + ourRange = new Range(start, start); + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (e.altKey) { + type = "rect"; + if (!addNew) ourRange = new Range(start, start); + start = posFromMouse(cm, e, true, true); + ourIndex = -1; + } else if (type == "double") { + var word = cm.findWordAt(start); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, word.anchor, word.head); + else + ourRange = word; + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, line.anchor, line.head); + else + ourRange = line; + } else { + ourRange = extendRange(doc, ourRange, start); + } + + if (!addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) return; + lastPos = pos; + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + else if (text.length > leftPos) + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + if (!ranges.length) ranges.push(new Range(start, start)); + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var anchor = oldRange.anchor, head = pos; + if (type != "single") { + if (type == "double") + var range = cm.findWordAt(pos); + else + var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + } + var ranges = startSel.ranges.slice(0); + ranges[ourIndex] = new Range(clipPos(doc, anchor), head); + setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, type == "rect"); + if (!cur) return; + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + e_preventDefault(e); + display.input.focus(); + off(document, "mousemove", move); + off(document, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function(e) { + if (!e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; + if (prevent) e_preventDefault(e); + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signal(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e); + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true); + } + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + return; + e_preventDefault(e); + if (ie) lastDrop = +new Date; + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) return; + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + return; + + var reader = new FileReader; + reader.onload = operation(cm, function() { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) content = ""; + text[i] = content; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }); + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function() {cm.display.input.focus();}, 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) + var selected = cm.listSelections(); + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) for (var i = 0; i < selected.length; ++i) + replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); + cm.replaceSelection(text, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; + + e.dataTransfer.setData("Text", cm.getSelection()); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) img.parentNode.removeChild(img); + } + } + + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) return; + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // SCROLL EVENTS + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplaySimple(cm, {top: val}); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (gecko) updateDisplaySimple(cm); + startWorker(cm, 100); + } + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + cm.display.scrollbars.setScrollLeft(val); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + var wheelEventDelta = function(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + return {x: dx, y: dy}; + }; + CodeMirror.wheelEventPixels = function(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta; + }; + + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // KEY EVENTS + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) cm.state.suppressEdits = true; + if (dropShift) cm.display.shift = false; + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) return result; + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm); + } + + var stopSeq = new Delayed; + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) return "handled"; + stopSeq.set(50, function() { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); + name = seq + " " + name; + } + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + cm.state.keySeq = name; + if (result == "handled") + signalLater(cm, "keyHandled", cm, name, e); + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + if (seq && !result && /\'$/.test(name)) { + e_preventDefault(e); + return true; + } + return !!result; + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) return false; + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) + || dispatchKey(cm, name, e, function(b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + return doHandleBinding(cm, b); + }); + } else { + return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, + function(b) { return doHandleBinding(cm, b, true); }); + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) return; + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection("", null, "cut"); + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + showCrossHair(cm); + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (e.keyCode == 16) this.doc.sel.shift = false; + signalDOMEvent(this, e); + } + + function onKeyPress(e) { + var cm = this; + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (handleCharBinding(cm, e, ch)) return; + cm.display.input.onKeyPress(e); + } + + // FOCUS/BLUR EVENTS + + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function() { + if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + onBlur(cm); + } + }, 100); + } + + function onFocus(cm) { + if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; + + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.delayingBlurEvent) return; + + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; + if (signalDOMEvent(cm, e, "contextmenu")) return; + cm.display.input.onContextMenu(e); + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) return false; + return gutterEvent(cm, e, "gutterContextMenu", false); + } + + // UPDATING + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + var changeEnd = CodeMirror.changeEnd = function(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + }; + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) return pos; + if (cmp(pos, change.to) <= 0) return changeEnd(change); + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; + return Pos(line, ch); + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(out, doc.sel.primIndex); + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + return Pos(nw.line, pos.ch - old.ch + nw.ch); + else + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function() { this.canceled = true; } + }; + if (update) obj.update = function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + for (var i = 0; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + break; + } + if (i == source.length) return; + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return; + } + selAfter = event; + } + else break; + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return; + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) return; + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function(range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + regLineChange(doc.cm, l, "gutter"); + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); + else updateDoc(doc, change, spans); + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + signalCursorActivity(cm); + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + regChange(cm); + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + regLineChange(cm, from.line, "text"); + else + regChange(cm, from.line, to.line + 1, lendiff); + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) signalLater(cm, "change", cm, obj); + if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } + cm.display.selForContextMenu = null; + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = doc.splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, coords) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) return; + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + + coords.left + "px; width: 2px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) margin = 0; + for (var limit = 0; limit < 5; limit++) { + var changed = false, coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), + Math.min(coords.top, endCoords.top) - margin, + Math.max(coords.left, endCoords.left), + Math.max(coords.bottom, endCoords.bottom) + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) break; + } + return coords; + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (y1 < 0) y1 = 0; + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (y2 - y1 > screen) y2 = y1 + screen; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); + var tooWide = x2 - x1 > screenw; + if (tooWide) x2 = x1 + screenw; + if (x1 < 10) + result.scrollLeft = 0; + else if (x1 < screenleft) + result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); + else if (x2 > screenw + screenleft - 3) + result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollPos(cm, left, top) { + if (left != null || top != null) resolveScrollToPos(cm); + if (left != null) + cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; + if (top != null) + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(), from = cur, to = cur; + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; + to = Pos(cur.line, cur.ch + 1); + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), + Math.min(from.top, to.top) - range.margin, + Math.max(from.right, to.right), + Math.max(from.bottom, to.bottom) + range.margin); + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + } + + // API UTILITIES + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) how = "add"; + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) how = "prev"; + else state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) line.stateAfter = null; + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true; + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i, new Range(pos, pos)); + break; + } + } + } + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); + return line; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function() { + for (var i = kill.length - 1; i >= 0; i--) + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + ensureCursorVisible(cm); + }); + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "char", "column" (like char, but doesn't + // cross line boundaries), "word" (across next word), or "group" (to + // the start of next group of word or non-word-non-whitespace + // chars). The visually param controls whether, in right-to-left + // text, direction 1 means to move towards the next index in the + // string, or towards the character to the right of the current + // position. The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return false + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return false + } else ch = next; + return true; + } + + if (unit == "char") { + moveOnce() + } else if (unit == "column") { + moveOnce(true) + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) type = "s"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true); + if (!cmp(pos, result)) result.hitSide = true; + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + // EDITOR METHODS + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + indentLine(this, j, how); + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) ensureCursorVisible(this); + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise); + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true); + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) type = styles[2]; + else for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; + else if (styles[mid * 2 + 1] < ch) before = mid + 1; + else { type = styles[mid * 2 + 2]; break; } + } + var cut = type ? type.indexOf("cm-overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) return mode; + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0]; + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) return found; + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) found.push(help[mode[type]]); + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) found.push(val); + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i = 0; i < help._global.length; i++) { + var cur = help._global[i]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + found.push(cur.val); + } + return found; + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1, precise); + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) pos = range.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? range.from() : range.to(); + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function(line, mode) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) line = this.doc.first; + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: methodOp(function(line, gutterID, value) { + return changeLine(this.doc, line, "gutter", function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: methodOp(function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regLineChange(cm, i, "gutter"); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + return commands[cmd].call(null, this); + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: methodOp(function(dir, unit) { + var cm = this; + cm.extendSelectionsBy(function(range) { + if (cm.display.shift || cm.doc.extend || range.empty()) + return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); + else + return dir < 0 ? range.from() : range.to(); + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + doc.replaceSelection("", null, "+delete"); + else + deleteNearSelection(this, function(range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; + }); + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: methodOp(function(dir, unit) { + var cm = this, doc = this.doc, goals = []; + var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function(range) { + if (collapse) + return dir < 0 ? range.from() : range.to(); + var headPos = cursorCoords(cm, range.head, "div"); + if (range.goalColumn != null) headPos.left = range.goalColumn; + goals.push(headPos.left); + var pos = findPosV(cm, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); + return pos; + }, sel_move); + if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) + doc.sel.ranges[i].goalColumn = goals[i]; + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function(ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + addClass(this.display.cursorDiv, "CodeMirror-overwrite"); + else + rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt(); }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) resolveScrollToPos(this); + if (x != null) this.curOp.scrollLeft = x; + if (y != null) this.curOp.scrollTop = y; + }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) margin = this.options.cursorScrollMargin; + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) range.to = range.from; + range.margin = margin || 0; + + if (range.from.line != null) { + resolveScrollToPos(this); + this.curOp.scrollToPos = range; + } else { + var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), + Math.min(range.from.top, range.to.top) - range.margin, + Math.max(range.from.right, range.to.right), + Math.max(range.from.bottom, range.to.bottom) + range.margin); + this.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + }), + + setSize: methodOp(function(width, height) { + var cm = this; + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) cm.display.wrapper.style.width = interpret(width); + if (height != null) cm.display.wrapper.style.height = interpret(height); + if (cm.options.lineWrapping) clearLineMeasurementCache(this); + var lineNo = cm.display.viewFrom; + cm.doc.iter(lineNo, cm.display.viewTo, function(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) + if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } + ++lineNo; + }); + cm.curOp.forceUpdate = true; + signal(cm, "refresh", this); + }), + + operation: function(f){return runInOp(this, f);}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + estimateLineHeights(this); + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + this.scrollTo(doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old; + }), + + getInputField: function(){return this.display.input.getField();}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + eventMixin(CodeMirror); + + // OPTION DEFAULTS + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + // Functions to run when options are changed. + var optionHandlers = CodeMirror.optionHandlers = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + // Passed to option handlers when there is no old value. + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("lineSeparator", null, function(cm, val) { + cm.doc.lineSep = val; + if (!val) return; + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function(line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) break; + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) + }); + option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != CodeMirror.Init) cm.refresh(); + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function() { + throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME + }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", function(cm, val, old) { + var next = getKeyMap(val); + var prev = old != CodeMirror.Init && getKeyMap(old); + if (prev && prev.detach) prev.detach(cm, next); + if (next.attach) next.attach(cm, prev || null); + }); + option("extraKeys", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); + option("scrollbarStyle", "native", function(cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + cm.display.disabled = true; + } else { + cm.display.disabled = false; + } + cm.display.input.readOnlyChanged(val) + }); + option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.input.resetPosition(); + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.getField().tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) + mode.dependencies = Array.prototype.slice.call(arguments, 2); + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") found = {name: found}; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) modeObj.helperType = spec.helperType; + if (spec.modeProps) for (var prop in spec.modeProps) + modeObj[prop] = spec.modeProps[prop]; + + return modeObj; + }; + + // Minimal default mode. + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var helpers = CodeMirror.helpers = {}; + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because nested + // modes need to do this for their inner modes. + + var copyState = CodeMirror.copyState = function(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + }; + + var startState = CodeMirror.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + }; + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + if (!info || info.mode == mode) break; + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, + singleSelection: function(cm) { + cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function(cm) { + deleteNearSelection(cm, function(range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + return {from: range.head, to: Pos(range.head.line + 1, 0)}; + else + return {from: range.head, to: Pos(range.head.line, len)}; + } else { + return {from: range.from(), to: range.to()}; + } + }); + }, + deleteLine: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; + }); + }, + delLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), to: range.from()}; + }); + }, + delWrappedLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()}; + }); + }, + delWrappedLineRight: function(cm) { + deleteNearSelection(cm, function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos }; + }); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + undoSelection: function(cm) {cm.undoSelection();}, + redoSelection: function(cm) {cm.redoSelection();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1}); + }, + goLineStartSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + return lineStartSmart(cm, range.head); + }, {origin: "+move", bias: 1}); + }, + goLineEnd: function(cm) { + cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1}); + }, + goLineRight: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + }, sel_move); + }, + goLineLeft: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div"); + }, sel_move); + }, + goLineLeftSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); + return pos; + }, sel_move); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t");}, + insertSoftTab: function(cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); + } + cm.replaceSelections(spaces); + }, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.execCommand("insertTab"); + }, + transposeChars: function(cm) { + runInOp(cm, function() { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); + }, + newlineAndIndent: function(cm) { + runInOp(cm, function() { + var len = cm.listSelections().length; + for (var i = 0; i < len; i++) { + var range = cm.listSelections()[i]; + cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, "+input"); + cm.indentLine(range.from().line + 1, null, true); + } + ensureCursorVisible(cm); + }); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; + else if (/^a(lt)?$/i.test(mod)) alt = true; + else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; + else if (/^s(hift)$/i.test(mod)) shift = true; + else throw new Error("Unrecognized modifier name: " + mod); + } + if (alt) name = "Alt-" + name; + if (ctrl) name = "Ctrl-" + name; + if (cmd) name = "Cmd-" + name; + if (shift) name = "Shift-" + name; + return name; + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + CodeMirror.normalizeKeyMap = function(keymap) { + var copy = {}; + for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; + if (value == "...") { delete keymap[keyname]; continue; } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val, name; + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) copy[name] = val; + else if (prev != val) throw new Error("Inconsistent bindings for " + name); + } + delete keymap[keyname]; + } + for (var prop in copy) keymap[prop] = copy[prop]; + return keymap; + }; + + var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) return "nothing"; + if (found === "...") return "multi"; + if (found != null && handle(found)) return "handled"; + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + return lookupKey(key, map.fallthrough, handle, context); + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) return result; + } + } + }; + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + var isModifierKey = CodeMirror.isModifierKey = function(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + }; + + // Look up the name of a key as indicated by an event object. + var keyName = CodeMirror.keyName = function(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) return false; + var base = keyNames[event.keyCode], name = base; + if (name == null || event.altGraphKey) return false; + if (event.altKey && base != "Alt") name = "Alt-" + name; + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; + if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; + return name; + }; + + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val; + } + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + options.tabindex = textarea.tabIndex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function(cm) { + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = CodeMirror.StringStream = function(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + }; + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == this.lineStart;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + indentation: function() { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } + }; + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + var nextMarkerId = 0; + + var TextMarker = CodeMirror.TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + eventMixin(TextMarker); + + // Clear the marker. + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) signalLater(this, "clear", found.from, found.to); + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); + else if (cm) { + if (span.to != null) max = lineNo(line); + if (span.from != null) min = lineNo(line); + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(this.lines[i]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm.doc); + } + if (cm) signalLater(cm, "markerCleared", cm, this); + if (withOp) endOperation(cm); + if (this.parent) this.parent.clear(); + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function(side, lineObj) { + if (side == null && this.type == "bookmark") side = 1; + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) return from; + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) return to; + } + } + return from && {from: from, to: to}; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function() { + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) return; + runInOp(cm, function() { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + updateLineHeight(line, line.height + dHeight); + } + }); + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) return markTextShared(doc, from, to, options, type); + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) copyObj(options, marker, false); + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + return marker; + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); + if (options.insertLeft) marker.widgetNode.insertLeft = true; + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + sawCollapsedSpans = true; + } + + if (marker.addToHistory) + addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + updateMaxLine = true; + if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.collapsed) + regChange(cm, from.line, to.line + 1); + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); + if (marker.atomic) reCheckSelection(cm.doc); + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + markers[i].parent = this; + }; + eventMixin(SharedTextMarker); + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function(side, lineObj) { + return this.primary.find(side, lineObj); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function(doc) { + if (widget) options.widgetNode = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), + function(m) { return m.parent; }); + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], linked = [marker.primary.doc];; + linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + } + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + // Add a span to a line. + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) return null; + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + // Make sure we didn't create any zero-length spans + if (first) first = clearEmptySpans(first); + if (last && last != first) last = clearEmptySpans(last); + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + spans.splice(i--, 1); + } + if (!spans.length) return null; + return spans; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + newParts.push({from: p.from, to: m.from}); + if (dto > 0 || !mk.inclusiveRight && !dto) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) return lenDiff; + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) return -fromCmp; + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) return toCmp; + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) continue; + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; + if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || + fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) + return true; + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = merged.find(-1, true).line; + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) return lineN; + return lineNo(vis); + } + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) return lineN; + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) return lineN; + while (merged = collapsedSpanAtEnd(line)) + line = merged.find(1, true).line; + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.marker.widgetNode) continue; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + // LINE WIDGETS + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.doc = doc; + this.node = node; + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + addToScrollPos(cm, null, diff); + } + + LineWidget.prototype.clear = function() { + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) line.widgets = null; + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) runInOp(cm, function() { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + }; + LineWidget.prototype.changed = function() { + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + updateLineHeight(line, line.height + diff); + if (cm) runInOp(cm, function() { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + }); + }; + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + var cm = widget.doc.cm; + if (!cm) return 0; + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; + if (widget.noHScroll) + parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight; + } + + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) cm.display.alignWidgets = true; + changeLine(doc, handle, "widget", function(line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) widgets.push(widget); + else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, null, widget.height); + cm.curOp.forceUpdate = true; + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + eventMixin(Line); + Line.prototype.lineNo = function() { return lineNo(this); }; + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + function extractLineClasses(type, output) { + if (type) for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) break; + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + output[prop] = lineClass[2]; + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + output[prop] += " " + lineClass[2]; + } + return type; + } + + function callBlankLine(mode, state) { + if (mode.blankLine) return mode.blankLine(state); + if (!mode.innerMode) return; + var inner = CodeMirror.innerMode(mode, state); + if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); + } + + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; + var style = mode.token(stream, state); + if (stream.pos > stream.start) return style; + } + throw new Error("Mode " + mode.name + " failed to advance stream."); + } + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + function getObj(copy) { + return {start: stream.start, end: stream.pos, + string: stream.current(), + type: style || null, + state: copy ? copyState(doc.mode, state) : state}; + } + + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize), tokens; + if (asArray) tokens = []; + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, state); + if (asArray) tokens.push(getObj(true)); + } + return asArray ? tokens : getObj(); + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) processLine(cm, text, state, stream.pos); + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) style = "m-" + (style ? mName + " " + style : mName); + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 50000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 characters + var pos = Math.min(stream.pos, curStart + 50000); + f(pos, curStyle); + curStart = pos; + } + } + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(end, style) { + st.push(end, style); + }, lineClasses, forceToEnd); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1, at = 0; + runMode(cm, line.text, overlay.mode, true, function(end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + st.splice(i, 1, end, st[i+1], i_end); + i += 2; + at = Math.min(end, i_end); + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, end, "cm-overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; + } + } + }, lineClasses); + } + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; + } + + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var state = getStateBefore(cm, lineNo(line)); + var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state); + line.stateAfter = state; + line.styles = result.styles; + if (result.classes) line.styleClasses = result.classes; + else if (line.styleClasses) line.styleClasses = null; + if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; + } + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize); + stream.start = stream.pos = startAt || 0; + if (text == "") callBlankLine(mode, state); + while (!stream.eol()) { + readToken(mode, stream, state); + stream.start = stream.pos; + } + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) return null; + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) + builder.addToken = buildTokenBadBidi(builder.addToken, order); + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); + if (line.styleClasses.textClass) + builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) + builder.content.className = "cm-tab-wrap-hack"; + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); + + return builder; + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) return; + var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + if (!special.test(text)) { + builder.col += text.length; + var content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) mustWrap = true; + builder.pos += text.length; + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt.setAttribute("role", "presentation"); + txt.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + var txt = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + var txt = builder.cm.options.specialCharPlaceholder(m[0]); + txt.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt); + builder.pos++; + } + } + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + var token = elt("span", [content], fullStyle, css); + if (title) token.title = title; + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + function splitSpaces(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function(builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + for (var i = 0; i < order.length; i++) { + var part = order[i]; + if (part.to > start && part.from <= start) break; + } + if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) builder.map.push(builder.pos, builder.pos + size, widget); + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + widget = builder.content.appendChild(document.createElement("span")); + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); + return; + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = ""; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) spanStyle += " " + m.className; + if (m.css) css = (css ? css + ";" : "") + m.css; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to) + if (m.title && !title) title = m.title; + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) for (var j = 0; j < endStyles.length; j += 2) + if (endStyles[j + 1] == nextChange) spanEndStyle += " " + endStyles[j] + + if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j) + buildCollapsedSpan(builder, 0, foundBookmarks[j]); + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) return; + if (collapsed.to == pos) collapsed = false; + } + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + for (var i = start, result = []; i < end; ++i) + result.push(new Line(text[i], spansFor(i), estimateHeight)); + return result; + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added = linesFor(1, text.length - 1); + added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added = linesFor(1, text.length - 1); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, height = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) lines[i].parent = this; + }, + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.extend = false; + + if (typeof text == "string") text = this.splitLines(text); + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || this.lineSeparator()); + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + setSelection(this, simpleSelection(top)); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || this.lineSeparator()); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") line = getLine(this, line); + return visualLine(line); + }, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") pos = range.head; + else if (start == "anchor") pos = range.anchor; + else if (start == "end" || start == "to" || start === false) pos = range.to(); + else pos = range.from(); + return pos; + }, + listSelections: function() { return this.sel.ranges; }, + somethingSelected: function() {return this.sel.somethingSelected();}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) return; + for (var i = 0, out = []; i < ranges.length; i++) + out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head)); + if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); + setSelection(this, normalizeSelection(out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) return lines; + else return lines.join(lineSep || this.lineSeparator()); + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator()); + parts[i] = sel; + } + return parts; + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + dup[i] = code; + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i = changes.length - 1; i >= 0; i--) + makeChange(this, changes[i]); + if (newSel) setSelectionReplaceHistory(this, newSel); + else if (this.cm) ensureCursorVisible(this.cm); + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend;}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; + for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; + return {undo: done, redo: undone}; + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (classTest(cls).test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var found = cur.match(classTest(cls)); + if (!found) return false; + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function(line) { + var spans = line.markedSpans; + if (spans) for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(lineNo == from.line && from.ch > span.to || + span.from == null && lineNo != from.line|| + lineNo == to.line && span.from > to.ch) && + (!filter || filter(span.marker))) + found.push(span.marker.parent || span.marker); + } + ++lineNo; + }); + return found; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first; + this.iter(function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;}, + + splitLines: function(str) { + if (this.lineSep) return str.split(this.lineSep); + return splitLinesAuto(str); + }, + lineSeparator: function() { return this.lineSep || "\n"; } + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + eventMixin(Doc); + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) findMaxLine(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); + for (var chunk = doc; !chunk.lines;) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) for (var n = line; n; n = n.parent) n.height += diff; + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0; i < chunk.children.length; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) array.pop(); + else break; + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, ore are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + pushSelectionToHistory(doc.sel, hist.done); + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) hist.done.shift(); + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) signal(doc, "historyAdded"); + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + hist.done[hist.done.length - 1] = sel; + else + pushSelectionToHistory(sel, hist.done); + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + clearSelectionEvents(hist.undone); + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + dest.push(sel); + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT UTILITIES + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + var e_preventDefault = CodeMirror.e_preventDefault = function(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + }; + var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + }; + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var on = CodeMirror.on = function(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + }; + + var noHandlers = [] + function getHandlers(emitter, type, copy) { + var arr = emitter._handlers && emitter._handlers[type] + if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers + else return arr || noHandlers + } + + var off = CodeMirror.off = function(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var handlers = getHandlers(emitter, type, false) + for (var i = 0; i < handlers.length; ++i) + if (handlers[i] == f) { handlers.splice(i, 1); break; } + } + }; + + var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type, true) + if (!handlers.length) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args); + }; + + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type, false) + if (!arr.length) return; + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + list.push(bnd(arr[i])); + } + + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) return; + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) + set.push(arr[i]); + } + + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + function Delayed() {this.id = null;} + Delayed.prototype.set = function(ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); + }; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + return n + (end - i); + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) nextTab = string.length; + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + return pos + Math.min(skipped, goal - col); + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) return pos; + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; + else if (ie) // Suppress mysterious IE10 errors + selectInput = function(node) { try { node.select(); } catch(_e) {} }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + if (array[i] == elt) return i; + return -1; + } + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); + return out; + } + + function nothing() {} + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) copyObj(props, inst); + return inst; + }; + + function copyObj(obj, target, overwrite) { + if (!target) target = {}; + for (var prop in obj) + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + target[prop] = obj[prop]; + return target; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + var isWordCharBasic = CodeMirror.isWordChar = function(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + }; + function isWordChar(ch, helper) { + if (!helper) return isWordCharBasic(ch); + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; + return helper.test(ch); + } + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + var range; + if (document.createRange) range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r; + }; + else range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r; } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + var contains = CodeMirror.contains = function(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + child = child.parentNode; + if (parent.contains) + return parent.contains(child); + do { + if (child.nodeType == 11) child = child.host; + if (child == parent) return true; + } while (child = child.parentNode); + }; + + function activeElt() { + var activeElement = document.activeElement; + while (activeElement && activeElement.root && activeElement.root.activeElement) + activeElement = activeElement.root.activeElement; + return activeElement; + } + // Older versions of IE throws unspecified error when touching + // document.activeElement in some cases (during loading, in iframe) + if (ie && ie_version < 11) activeElt = function() { + try { return document.activeElement; } + catch(e) { return document.body; } + }; + + function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } + var rmClass = CodeMirror.rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + var addClass = CodeMirror.addClass = function(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; + }; + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; + return b; + } + + // WINDOW-WIDE EVENTS + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.body.getElementsByClassName) return; + var byClass = document.body.getElementsByClassName("CodeMirror"); + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) f(cm); + } + } + + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) return; + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function() { + if (resizeTimer == null) resizeTimer = setTimeout(function() { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function() { + forEachCodeMirror(onBlur); + }); + } + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node; + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) return badBidiRects; + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) + var r1 = range(txt, 1, 2).getBoundingClientRect(); + return badBidiRects = (r1.right - r0.right < 3); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + })(); + + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) return badZoomedRects; + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; + } + + // KEY NAMES + + var keyNames = CodeMirror.keyNames = { + 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" + }; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + found = true; + } + } + if (!found) f(from, to, "ltr"); + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line = getLine(cm.doc, lineN); + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + lineN = null; + } + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN == null ? lineNo(line) : lineN, ch); + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS); + } + return start; + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + bidiOther = null; + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) return i; + if ((cur.from == pos || cur.to == pos)) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + if (cur.from != cur.to) bidiOther = found; + return i; + } else { + if (cur.from != cur.to) bidiOther = i; + return found; + } + } + } + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar(line.text.charAt(pos))); + return pos; + } + + // This is needed in order to move 'visually' through bi-directional + // text -- i.e., pressing left should make the cursor go left, even + // when in RTL text. The tricky part is the 'jumps', where RTL and + // LTR text touch each other. This often requires the cursor offset + // to move more than one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; + function charType(code) { + if (code <= 0xf7) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); + else if (0x6ee <= code && code <= 0x8ac) return "r"; + else if (0x2000 <= code && code <= 0x200b) return "w"; + else if (code == 0x200c) return "b"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push(new BidiSpan(0, start, i)); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, new BidiSpan(2, nstart, j)); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + if (order[0].level == 2) + order.unshift(new BidiSpan(1, order[0].to, order[0].to)); + if (order[0].level != lst(order).level) + order.push(new BidiSpan(order[0].level, len, len)); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "5.11.1"; + + return CodeMirror; +}); diff --git a/libraries/codemirror/mode/apl/apl.js b/libraries/codemirror/mode/apl/apl.js new file mode 100644 index 0000000..caafe4e --- /dev/null +++ b/libraries/codemirror/mode/apl/apl.js @@ -0,0 +1,174 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("apl", function() { + var builtInOps = { + ".": "innerProduct", + "\\": "scan", + "/": "reduce", + "⌿": "reduce1Axis", + "⍀": "scan1Axis", + "¨": "each", + "⍣": "power" + }; + var builtInFuncs = { + "+": ["conjugate", "add"], + "−": ["negate", "subtract"], + "×": ["signOf", "multiply"], + "÷": ["reciprocal", "divide"], + "⌈": ["ceiling", "greaterOf"], + "⌊": ["floor", "lesserOf"], + "∣": ["absolute", "residue"], + "⍳": ["indexGenerate", "indexOf"], + "?": ["roll", "deal"], + "⋆": ["exponentiate", "toThePowerOf"], + "⍟": ["naturalLog", "logToTheBase"], + "○": ["piTimes", "circularFuncs"], + "!": ["factorial", "binomial"], + "⌹": ["matrixInverse", "matrixDivide"], + "<": [null, "lessThan"], + "≤": [null, "lessThanOrEqual"], + "=": [null, "equals"], + ">": [null, "greaterThan"], + "≥": [null, "greaterThanOrEqual"], + "≠": [null, "notEqual"], + "≡": ["depth", "match"], + "≢": [null, "notMatch"], + "∈": ["enlist", "membership"], + "⍷": [null, "find"], + "∪": ["unique", "union"], + "∩": [null, "intersection"], + "∼": ["not", "without"], + "∨": [null, "or"], + "∧": [null, "and"], + "⍱": [null, "nor"], + "⍲": [null, "nand"], + "⍴": ["shapeOf", "reshape"], + ",": ["ravel", "catenate"], + "⍪": [null, "firstAxisCatenate"], + "⌽": ["reverse", "rotate"], + "⊖": ["axis1Reverse", "axis1Rotate"], + "⍉": ["transpose", null], + "↑": ["first", "take"], + "↓": [null, "drop"], + "⊂": ["enclose", "partitionWithAxis"], + "⊃": ["diclose", "pick"], + "⌷": [null, "index"], + "⍋": ["gradeUp", null], + "⍒": ["gradeDown", null], + "⊤": ["encode", null], + "⊥": ["decode", null], + "⍕": ["format", "formatByExample"], + "⍎": ["execute", null], + "⊣": ["stop", "left"], + "⊢": ["pass", "right"] + }; + + var isOperator = /[\.\/⌿⍀¨⍣]/; + var isNiladic = /⍬/; + var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; + var isArrow = /←/; + var isComment = /[⍝#].*$/; + + var stringEater = function(type) { + var prev; + prev = false; + return function(c) { + prev = c; + if (c === type) { + return prev === "\\"; + } + return true; + }; + }; + return { + startState: function() { + return { + prev: false, + func: false, + op: false, + string: false, + escape: false + }; + }, + token: function(stream, state) { + var ch, funcName; + if (stream.eatSpace()) { + return null; + } + ch = stream.next(); + if (ch === '"' || ch === "'") { + stream.eatWhile(stringEater(ch)); + stream.next(); + state.prev = true; + return "string"; + } + if (/[\[{\(]/.test(ch)) { + state.prev = false; + return null; + } + if (/[\]}\)]/.test(ch)) { + state.prev = true; + return null; + } + if (isNiladic.test(ch)) { + state.prev = false; + return "niladic"; + } + if (/[¯\d]/.test(ch)) { + if (state.func) { + state.func = false; + state.prev = false; + } else { + state.prev = true; + } + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperator.test(ch)) { + return "operator apl-" + builtInOps[ch]; + } + if (isArrow.test(ch)) { + return "apl-arrow"; + } + if (isFunction.test(ch)) { + funcName = "apl-"; + if (builtInFuncs[ch] != null) { + if (state.prev) { + funcName += builtInFuncs[ch][1]; + } else { + funcName += builtInFuncs[ch][0]; + } + } + state.func = true; + state.prev = false; + return "function " + funcName; + } + if (isComment.test(ch)) { + stream.skipToEnd(); + return "comment"; + } + if (ch === "∘" && stream.peek() === ".") { + stream.next(); + return "function jot-dot"; + } + stream.eatWhile(/[\w\$_]/); + state.prev = true; + return "keyword"; + } + }; +}); + +CodeMirror.defineMIME("text/apl", "apl"); + +}); diff --git a/libraries/codemirror/mode/apl/index.html b/libraries/codemirror/mode/apl/index.html new file mode 100644 index 0000000..53dda6b --- /dev/null +++ b/libraries/codemirror/mode/apl/index.html @@ -0,0 +1,72 @@ + + +CodeMirror: APL mode + + + + + + + + + + +
          +

          APL mode

          +
          + + + +

          Simple mode that tries to handle APL as well as it can.

          +

          It attempts to label functions/operators based upon + monadic/dyadic usage (but this is far from fully fleshed out). + This means there are meaningful classnames so hover states can + have popups etc.

          + +

          MIME types defined: text/apl (APL code)

          +
          diff --git a/libraries/codemirror/mode/asciiarmor/asciiarmor.js b/libraries/codemirror/mode/asciiarmor/asciiarmor.js new file mode 100644 index 0000000..d830903 --- /dev/null +++ b/libraries/codemirror/mode/asciiarmor/asciiarmor.js @@ -0,0 +1,73 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function errorIfNotEmpty(stream) { + var nonWS = stream.match(/^\s*\S/); + stream.skipToEnd(); + return nonWS ? "error" : null; + } + + CodeMirror.defineMode("asciiarmor", function() { + return { + token: function(stream, state) { + var m; + if (state.state == "top") { + if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) { + state.state = "headers"; + state.type = m[1]; + return "tag"; + } + return errorIfNotEmpty(stream); + } else if (state.state == "headers") { + if (stream.sol() && stream.match(/^\w+:/)) { + state.state = "header"; + return "atom"; + } else { + var result = errorIfNotEmpty(stream); + if (result) state.state = "body"; + return result; + } + } else if (state.state == "header") { + stream.skipToEnd(); + state.state = "headers"; + return "string"; + } else if (state.state == "body") { + if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) { + if (m[1] != state.type) return "error"; + state.state = "end"; + return "tag"; + } else { + if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) { + return null; + } else { + stream.next(); + return "error"; + } + } + } else if (state.state == "end") { + return errorIfNotEmpty(stream); + } + }, + blankLine: function(state) { + if (state.state == "headers") state.state = "body"; + }, + startState: function() { + return {state: "top", type: null}; + } + }; + }); + + CodeMirror.defineMIME("application/pgp", "asciiarmor"); + CodeMirror.defineMIME("application/pgp-keys", "asciiarmor"); + CodeMirror.defineMIME("application/pgp-signature", "asciiarmor"); +}); diff --git a/libraries/codemirror/mode/asciiarmor/index.html b/libraries/codemirror/mode/asciiarmor/index.html new file mode 100644 index 0000000..8ba1b5c --- /dev/null +++ b/libraries/codemirror/mode/asciiarmor/index.html @@ -0,0 +1,46 @@ + + +CodeMirror: ASCII Armor (PGP) mode + + + + + + + + + +
          +

          ASCII Armor (PGP) mode

          +
          + + + +

          MIME types +defined: application/pgp, application/pgp-keys, application/pgp-signature

          + +
          diff --git a/libraries/codemirror/mode/asn.1/asn.1.js b/libraries/codemirror/mode/asn.1/asn.1.js new file mode 100644 index 0000000..9600247 --- /dev/null +++ b/libraries/codemirror/mode/asn.1/asn.1.js @@ -0,0 +1,204 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("asn.1", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + cmipVerbs = parserConfig.cmipVerbs || {}, + compareTypes = parserConfig.compareTypes || {}, + status = parserConfig.status || {}, + tags = parserConfig.tags || {}, + storage = parserConfig.storage || {}, + modifier = parserConfig.modifier || {}, + accessTypes = parserConfig.accessTypes|| {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[\|\^]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]\(\){}:=,;]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "-"){ + if (stream.eat("-")) { + stream.skipToEnd(); + return "comment"; + } + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + + stream.eatWhile(/[\w\-]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (cmipVerbs.propertyIsEnumerable(cur)) return "variable cmipVerbs"; + if (compareTypes.propertyIsEnumerable(cur)) return "atom compareTypes"; + if (status.propertyIsEnumerable(cur)) return "comment status"; + if (tags.propertyIsEnumerable(cur)) return "variable-3 tags"; + if (storage.propertyIsEnumerable(cur)) return "builtin storage"; + if (modifier.propertyIsEnumerable(cur)) return "string-2 modifier"; + if (accessTypes.propertyIsEnumerable(cur)) return "atom accessTypes"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterNext = stream.peek(); + //look if the character if the quote is like the B in '10100010'B + if (afterNext){ + afterNext = afterNext.toLowerCase(); + if(afterNext == "b" || afterNext == "h" || afterNext == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") + && curPunc != ';') || (ctx.type == "statement" + && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + + state.startOfLine = false; + return style; + }, + + electricChars: "{}", + lineComment: "--", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + CodeMirror.defineMIME("text/x-ttcn-asn", { + name: "asn.1", + keywords: words("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION" + + " REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED" + + " WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN" + + " IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS" + + " MINACCESS MAXACCESS REVISION STATUS DESCRIPTION" + + " SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName" + + " ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY" + + " IMPLIED EXPORTS"), + cmipVerbs: words("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"), + compareTypes: words("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY" + + " MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY" + + " OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL" + + " SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL" + + " TEXTUAL-CONVENTION"), + status: words("current deprecated mandatory obsolete"), + tags: words("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS" + + " UNIVERSAL"), + storage: words("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING" + + " UTCTime InterfaceIndex IANAifType CMIP-Attribute" + + " REAL PACKAGE PACKAGES IpAddress PhysAddress" + + " NetworkAddress BITS BMPString TimeStamp TimeTicks" + + " TruthValue RowStatus DisplayString GeneralString" + + " GraphicString IA5String NumericString" + + " PrintableString SnmpAdminAtring TeletexString" + + " UTF8String VideotexString VisibleString StringStore" + + " ISO646String T61String UniversalString Unsigned32" + + " Integer32 Gauge Gauge32 Counter Counter32 Counter64"), + modifier: words("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS" + + " GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS" + + " DEFINED"), + accessTypes: words("not-accessible accessible-for-notify read-only" + + " read-create read-write"), + multiLineStrings: true + }); +}); diff --git a/libraries/codemirror/mode/asn.1/index.html b/libraries/codemirror/mode/asn.1/index.html new file mode 100644 index 0000000..699fd44 --- /dev/null +++ b/libraries/codemirror/mode/asn.1/index.html @@ -0,0 +1,77 @@ + + +CodeMirror: ASN.1 mode + + + + + + + + +
          +

          ASN.1 example

          +
          + +
          + + +
          +

          Language: Abstract Syntax Notation One + (ASN.1) +

          +

          MIME types defined: text/x-ttcn-asn

          + +
          +

          The development of this mode has been sponsored by Ericsson + .

          +

          Coded by Asmelash Tsegay Gebretsadkan

          +
          + diff --git a/libraries/codemirror/mode/asterisk/asterisk.js b/libraries/codemirror/mode/asterisk/asterisk.js new file mode 100644 index 0000000..b7ebfc5 --- /dev/null +++ b/libraries/codemirror/mode/asterisk/asterisk.js @@ -0,0 +1,196 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* + * ===================================================================================== + * + * Filename: mode/asterisk/asterisk.js + * + * Description: CodeMirror mode for Asterisk dialplan + * + * Created: 05/17/2012 09:20:25 PM + * Revision: none + * + * Author: Stas Kobzar (stas@modulis.ca), + * Company: Modulis.ca Inc. + * + * ===================================================================================== + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("asterisk", function() { + var atoms = ["exten", "same", "include","ignorepat","switch"], + dpcmd = ["#include","#exec"], + apps = [ + "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", + "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", + "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", + "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", + "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", + "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", + "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", + "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", + "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", + "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", + "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", + "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", + "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", + "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", + "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", + "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", + "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", + "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", + "readfile","receivefax","receivefax","receivefax","record","removequeuemember", + "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", + "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", + "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", + "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", + "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", + "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", + "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", + "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", + "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", + "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", + "waitforsilence","waitmusiconhold","waituntil","while","zapateller" + ]; + + function basicToken(stream,state){ + var cur = ''; + var ch = stream.next(); + // comment + if(ch == ";") { + stream.skipToEnd(); + return "comment"; + } + // context + if(ch == '[') { + stream.skipTo(']'); + stream.eat(']'); + return "header"; + } + // string + if(ch == '"') { + stream.skipTo('"'); + return "string"; + } + if(ch == "'") { + stream.skipTo("'"); + return "string-2"; + } + // dialplan commands + if(ch == '#') { + stream.eatWhile(/\w/); + cur = stream.current(); + if(dpcmd.indexOf(cur) !== -1) { + stream.skipToEnd(); + return "strong"; + } + } + // application args + if(ch == '$'){ + var ch1 = stream.peek(); + if(ch1 == '{'){ + stream.skipTo('}'); + stream.eat('}'); + return "variable-3"; + } + } + // extension + stream.eatWhile(/\w/); + cur = stream.current(); + if(atoms.indexOf(cur) !== -1) { + state.extenStart = true; + switch(cur) { + case 'same': state.extenSame = true; break; + case 'include': + case 'switch': + case 'ignorepat': + state.extenInclude = true;break; + default:break; + } + return "atom"; + } + } + + return { + startState: function() { + return { + extenStart: false, + extenSame: false, + extenInclude: false, + extenExten: false, + extenPriority: false, + extenApplication: false + }; + }, + token: function(stream, state) { + + var cur = ''; + if(stream.eatSpace()) return null; + // extension started + if(state.extenStart){ + stream.eatWhile(/[^\s]/); + cur = stream.current(); + if(/^=>?$/.test(cur)){ + state.extenExten = true; + state.extenStart = false; + return "strong"; + } else { + state.extenStart = false; + stream.skipToEnd(); + return "error"; + } + } else if(state.extenExten) { + // set exten and priority + state.extenExten = false; + state.extenPriority = true; + stream.eatWhile(/[^,]/); + if(state.extenInclude) { + stream.skipToEnd(); + state.extenPriority = false; + state.extenInclude = false; + } + if(state.extenSame) { + state.extenPriority = false; + state.extenSame = false; + state.extenApplication = true; + } + return "tag"; + } else if(state.extenPriority) { + state.extenPriority = false; + state.extenApplication = true; + stream.next(); // get comma + if(state.extenSame) return null; + stream.eatWhile(/[^,]/); + return "number"; + } else if(state.extenApplication) { + stream.eatWhile(/,/); + cur = stream.current(); + if(cur === ',') return null; + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + state.extenApplication = false; + if(apps.indexOf(cur) !== -1){ + return "def strong"; + } + } else{ + return basicToken(stream,state); + } + + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-asterisk", "asterisk"); + +}); diff --git a/libraries/codemirror/mode/asterisk/index.html b/libraries/codemirror/mode/asterisk/index.html new file mode 100644 index 0000000..257bd39 --- /dev/null +++ b/libraries/codemirror/mode/asterisk/index.html @@ -0,0 +1,154 @@ + + +CodeMirror: Asterisk dialplan mode + + + + + + + + + +
          +

          Asterisk dialplan mode

          +
          + + +

          MIME types defined: text/x-asterisk.

          + +
          diff --git a/libraries/codemirror/mode/brainfuck/brainfuck.js b/libraries/codemirror/mode/brainfuck/brainfuck.js new file mode 100644 index 0000000..3becf2a --- /dev/null +++ b/libraries/codemirror/mode/brainfuck/brainfuck.js @@ -0,0 +1,85 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod) + else + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + var reserve = "><+-.,[]".split(""); + /* + comments can be either: + placed behind lines + + +++ this is a comment + + where reserved characters cannot be used + or in a loop + [ + this is ok to use [ ] and stuff + ] + or preceded by # + */ + CodeMirror.defineMode("brainfuck", function() { + return { + startState: function() { + return { + commentLine: false, + left: 0, + right: 0, + commentLoop: false + } + }, + token: function(stream, state) { + if (stream.eatSpace()) return null + if(stream.sol()){ + state.commentLine = false; + } + var ch = stream.next().toString(); + if(reserve.indexOf(ch) !== -1){ + if(state.commentLine === true){ + if(stream.eol()){ + state.commentLine = false; + } + return "comment"; + } + if(ch === "]" || ch === "["){ + if(ch === "["){ + state.left++; + } + else{ + state.right++; + } + return "bracket"; + } + else if(ch === "+" || ch === "-"){ + return "keyword"; + } + else if(ch === "<" || ch === ">"){ + return "atom"; + } + else if(ch === "." || ch === ","){ + return "def"; + } + } + else{ + state.commentLine = true; + if(stream.eol()){ + state.commentLine = false; + } + return "comment"; + } + if(stream.eol()){ + state.commentLine = false; + } + } + }; + }); +CodeMirror.defineMIME("text/x-brainfuck","brainfuck") +}); diff --git a/libraries/codemirror/mode/brainfuck/index.html b/libraries/codemirror/mode/brainfuck/index.html new file mode 100644 index 0000000..6048fc2 --- /dev/null +++ b/libraries/codemirror/mode/brainfuck/index.html @@ -0,0 +1,85 @@ + + +CodeMirror: Brainfuck mode + + + + + + + + + + +
          +

          Brainfuck mode

          +
          + + + +

          A mode for Brainfuck

          + +

          MIME types defined: text/x-brainfuck

          +
          diff --git a/libraries/codemirror/mode/clike/clike.js b/libraries/codemirror/mode/clike/clike.js new file mode 100644 index 0000000..db7f893 --- /dev/null +++ b/libraries/codemirror/mode/clike/clike.js @@ -0,0 +1,781 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; +} +function isStatement(type) { + return type == "statement" || type == "switchstatement" || type == "namespace"; +} +function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && isStatement(state.context.type) && !isStatement(type)) + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); +} +function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; +} + +function typeBefore(stream, state) { + if (state.prevToken == "variable" || state.prevToken == "variable-3") return true; + if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, stream.start))) return true; +} + +function isTopScope(context) { + for (;;) { + if (!context || context.type == "top") return true; + if (context.type == "}" && context.prev.type != "namespace") return false; + context = context.prev; + } +} + +CodeMirror.defineMode("clike", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + keywords = parserConfig.keywords || {}, + types = parserConfig.types || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + defKeywords = parserConfig.defKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false, + indentSwitch = parserConfig.indentSwitch !== false, + namespaceSeparator = parserConfig.namespaceSeparator, + isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, + numberStart = parserConfig.numberStart || /[\d\.]/, + number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, + isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, + endStatement = parserConfig.endStatement || /^[;:,]$/; + + var curPunc, isDefKeyword; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (isPunctuationChar.test(ch)) { + curPunc = ch; + return null; + } + if (numberStart.test(ch)) { + stream.backUp(1) + if (stream.match(number)) return "number" + stream.next() + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + if (namespaceSeparator) while (stream.match(namespaceSeparator)) + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + + var cur = stream.current(); + if (contains(keywords, cur)) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + if (contains(defKeywords, cur)) isDefKeyword = true; + return "keyword"; + } + if (contains(types, cur)) return "variable-3"; + if (contains(builtin, cur)) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + return "builtin"; + } + if (contains(atoms, cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true, + prevToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = isDefKeyword = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if (endStatement.test(curPunc)) while (isStatement(state.context.type)) popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (isStatement(ctx.type)) ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (isStatement(ctx.type)) ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && + (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || + (isStatement(ctx.type) && curPunc == "newstatement"))) { + var type = "statement"; + if (curPunc == "newstatement" && indentSwitch && stream.current() == "switch") + type = "switchstatement"; + else if (style == "keyword" && stream.current() == "namespace") + type = "namespace"; + pushContext(state, stream.column(), type); + } + + if (style == "variable" && + ((state.prevToken == "def" || + (parserConfig.typeFirstDefinitions && typeBefore(stream, state) && + isTopScope(state.context) && stream.match(/^\s*\(/, false))))) + style = "def"; + + if (hooks.token) { + var result = hooks.token(stream, state, style); + if (result !== undefined) style = result; + } + + if (style == "def" && parserConfig.styleDefs === false) style = "variable"; + + state.startOfLine = false; + state.prevToken = isDefKeyword ? "def" : style || curPunc; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (isStatement(ctx.type) && firstChar == "}") ctx = ctx.prev; + if (hooks.indent) { + var hook = hooks.indent(state, ctx, textAfter); + if (typeof hook == "number") return hook + } + var closing = firstChar == ctx.type; + var switchBlock = ctx.prev && ctx.prev.type == "switchstatement"; + if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { + while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev + return ctx.indented + } + if (isStatement(ctx.type)) + return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + if (ctx.align && (!dontAlignCalls || ctx.type != ")")) + return ctx.column + (closing ? 0 : 1); + if (ctx.type == ")" && !closing) + return ctx.indented + statementIndentUnit; + + return ctx.indented + (closing ? 0 : indentUnit) + + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); + }, + + electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; +}); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + function contains(words, word) { + if (typeof words === "function") { + return words(word); + } else { + return words.propertyIsEnumerable(word); + } + } + var cKeywords = "auto if break case register continue return default do sizeof " + + "static else struct switch extern typedef union for goto while enum const volatile"; + var cTypes = "int long char short double float unsigned signed void size_t ptrdiff_t"; + + function cppHook(stream, state) { + if (!state.startOfLine) return false + for (var ch, next = null; ch = stream.peek();) { + if (ch == "\\" && stream.match(/^.$/)) { + next = cppHook + break + } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { + break + } + stream.next() + } + state.tokenize = next + return "meta" + } + + function pointerHook(_stream, state) { + if (state.prevToken == "variable-3") return "variable-3"; + return false; + } + + function cpp14Literal(stream) { + stream.eatWhile(/[\w\.']/); + return "number"; + } + + function cpp11StringHook(stream, state) { + stream.backUp(1); + // Raw strings. + if (stream.match(/(R|u8R|uR|UR|LR)/)) { + var match = stream.match(/"([^\s\\()]{0,16})\(/); + if (!match) { + return false; + } + state.cpp11RawStringDelim = match[1]; + state.tokenize = tokenRawString; + return tokenRawString(stream, state); + } + // Unicode strings/chars. + if (stream.match(/(u8|u|U|L)/)) { + if (stream.match(/["']/, /* eat */ false)) { + return "string"; + } + return false; + } + // Ignore this hook. + stream.next(); + return false; + } + + function cppLooksLikeConstructor(word) { + var lastTwo = /(\w+)::(\w+)$/.exec(word); + return lastTwo && lastTwo[1] == lastTwo[2]; + } + + // C#-style strings where "" escapes a quote. + function tokenAtString(stream, state) { + var next; + while ((next = stream.next()) != null) { + if (next == '"' && !stream.eat('"')) { + state.tokenize = null; + break; + } + } + return "string"; + } + + // C++11 raw string literal is "( anything )", where + // can be a string up to 16 characters long. + function tokenRawString(stream, state) { + // Escape characters that have special regex meanings. + var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); + var match = stream.match(new RegExp(".*?\\)" + delim + '"')); + if (match) + state.tokenize = null; + else + stream.skipToEnd(); + return "string"; + } + + function def(mimes, mode) { + if (typeof mimes == "string") mimes = [mimes]; + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + add(mode.keywords); + add(mode.types); + add(mode.builtin); + add(mode.atoms); + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-csrc", "text/x-c", "text/x-chdr"], { + name: "clike", + keywords: words(cKeywords), + types: words(cTypes + " bool _Complex _Bool float_t double_t intptr_t intmax_t " + + "int8_t int16_t int32_t int64_t uintptr_t uintmax_t uint8_t uint16_t " + + "uint32_t uint64_t"), + blockKeywords: words("case do else for if switch while struct"), + defKeywords: words("struct"), + typeFirstDefinitions: true, + atoms: words("null true false"), + hooks: {"#": cppHook, "*": pointerHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def(["text/x-c++src", "text/x-c++hdr"], { + name: "clike", + keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try explicit new " + + "static_cast typeid catch operator template typename class friend private " + + "this using const_cast inline public throw virtual delete mutable protected " + + "alignas alignof constexpr decltype nullptr noexcept thread_local final " + + "static_assert override"), + types: words(cTypes + " bool wchar_t"), + blockKeywords: words("catch class do else finally for if struct switch try while"), + defKeywords: words("class namespace struct enum union"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: { + "#": cppHook, + "*": pointerHook, + "u": cpp11StringHook, + "U": cpp11StringHook, + "L": cpp11StringHook, + "R": cpp11StringHook, + "0": cpp14Literal, + "1": cpp14Literal, + "2": cpp14Literal, + "3": cpp14Literal, + "4": cpp14Literal, + "5": cpp14Literal, + "6": cpp14Literal, + "7": cpp14Literal, + "8": cpp14Literal, + "9": cpp14Literal, + token: function(stream, state, style) { + if (style == "variable" && stream.peek() == "(" && + (state.prevToken == ";" || state.prevToken == null || + state.prevToken == "}") && + cppLooksLikeConstructor(stream.current())) + return "def"; + } + }, + namespaceSeparator: "::", + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-java", { + name: "clike", + keywords: words("abstract assert break case catch class const continue default " + + "do else enum extends final finally float for goto if implements import " + + "instanceof interface native new package private protected public " + + "return static strictfp super switch synchronized this throw throws transient " + + "try volatile while"), + types: words("byte short int long float double boolean char void Boolean Byte Character Double Float " + + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), + blockKeywords: words("catch class do else finally for if switch try while"), + defKeywords: words("class interface package enum"), + typeFirstDefinitions: true, + atoms: words("true false null"), + endStatement: /^[;:]$/, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + }, + modeProps: {fold: ["brace", "import"]} + }); + + def("text/x-csharp", { + name: "clike", + keywords: words("abstract as async await base break case catch checked class const continue" + + " default delegate do else enum event explicit extern finally fixed for" + + " foreach goto if implicit in interface internal is lock namespace new" + + " operator out override params private protected public readonly ref return sealed" + + " sizeof stackalloc static struct switch this throw try typeof unchecked" + + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + + " global group into join let orderby partial remove select set value var yield"), + types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + + " UInt64 bool byte char decimal double short int long object" + + " sbyte float string ushort uint ulong"), + blockKeywords: words("catch class do else finally for foreach if struct switch try while"), + defKeywords: words("class interface namespace struct var"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: { + "@": function(stream, state) { + if (stream.eat('"')) { + state.tokenize = tokenAtString; + return tokenAtString(stream, state); + } + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + + function tokenTripleString(stream, state) { + var escaped = false; + while (!stream.eol()) { + if (!escaped && stream.match('"""')) { + state.tokenize = null; + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + def("text/x-scala", { + name: "clike", + keywords: words( + + /* scala */ + "abstract case catch class def do else extends final finally for forSome if " + + "implicit import lazy match new null object override package private protected return " + + "sealed super this throw trait try type val var while with yield _ : = => <- <: " + + "<% >: # @ " + + + /* package scala */ + "assert assume require print println printf readLine readBoolean readByte readShort " + + "readChar readInt readLong readFloat readDouble " + + + ":: #:: " + ), + types: words( + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + + + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + ), + multiLineStrings: true, + blockKeywords: words("catch class do else finally for forSome if match switch try while"), + defKeywords: words("class def object package trait type val var"), + atoms: words("true false null"), + indentStatements: false, + indentSwitch: false, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + if (!stream.match('""')) return false; + state.tokenize = tokenTripleString; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + "=": function(stream, state) { + var cx = state.context + if (cx.type == "}" && cx.align && stream.eat(">")) { + state.context = new Context(cx.indented, cx.column, cx.type, null, cx.prev) + return "operator" + } else { + return false + } + } + }, + modeProps: {closeBrackets: {triples: '"'}} + }); + + function tokenKotlinString(tripleString){ + return function (stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} + if (tripleString && stream.match('"""')) {end = true; break;} + next = stream.next(); + if(!escaped && next == "$" && stream.match('{')) + stream.skipTo("}"); + escaped = !escaped && next == "\\" && !tripleString; + } + if (end || !tripleString) + state.tokenize = null; + return "string"; + } + } + + def("text/x-kotlin", { + name: "clike", + keywords: words( + /*keywords*/ + "package as typealias class interface this super val " + + "var fun for is in This throw return " + + "break continue object if else while do try when !in !is as? " + + + /*soft keywords*/ + "file import where by get set abstract enum open inner override private public internal " + + "protected catch finally out final vararg reified dynamic companion constructor init " + + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + + "external annotation crossinline const operator infix" + ), + types: words( + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + ), + intendSwitch: false, + indentStatements: false, + multiLineStrings: true, + blockKeywords: words("catch class do else finally for if where try while enum"), + defKeywords: words("class val var object package interface fun"), + atoms: words("true false null this"), + hooks: { + '"': function(stream, state) { + state.tokenize = tokenKotlinString(stream.match('""')); + return state.tokenize(stream, state); + } + }, + modeProps: {closeBrackets: {triples: '"'}} + }); + + def(["x-shader/x-vertex", "x-shader/x-fragment"], { + name: "clike", + keywords: words("sampler1D sampler2D sampler3D samplerCube " + + "sampler1DShadow sampler2DShadow " + + "const attribute uniform varying " + + "break continue discard return " + + "for while do if else struct " + + "in out inout"), + types: words("float int bool void " + + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + + "mat2 mat3 mat4"), + blockKeywords: words("for while do if else struct"), + builtin: words("radians degrees sin cos tan asin acos atan " + + "pow exp log exp2 sqrt inversesqrt " + + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + + "length distance dot cross normalize ftransform faceforward " + + "reflect refract matrixCompMult " + + "lessThan lessThanEqual greaterThan greaterThanEqual " + + "equal notEqual any all not " + + "texture1D texture1DProj texture1DLod texture1DProjLod " + + "texture2D texture2DProj texture2DLod texture2DProjLod " + + "texture3D texture3DProj texture3DLod texture3DProjLod " + + "textureCube textureCubeLod " + + "shadow1D shadow2D shadow1DProj shadow2DProj " + + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + + "dFdx dFdy fwidth " + + "noise1 noise2 noise3 noise4"), + atoms: words("true false " + + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + + "gl_FogCoord gl_PointCoord " + + "gl_Position gl_PointSize gl_ClipVertex " + + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + + "gl_TexCoord gl_FogFragCoord " + + "gl_FragCoord gl_FrontFacing " + + "gl_FragData gl_FragDepth " + + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + + "gl_ProjectionMatrixInverseTranspose " + + "gl_ModelViewProjectionMatrixInverseTranspose " + + "gl_TextureMatrixInverseTranspose " + + "gl_NormalScale gl_DepthRange gl_ClipPlane " + + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + + "gl_FrontLightModelProduct gl_BackLightModelProduct " + + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + + "gl_FogParameters " + + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + + "gl_MaxDrawBuffers"), + indentSwitch: false, + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-nesc", { + name: "clike", + keywords: words(cKeywords + "as atomic async call command component components configuration event generic " + + "implementation includes interface module new norace nx_struct nx_union post provides " + + "signal task uses abstract extends"), + types: words(cTypes), + blockKeywords: words("case do else for if switch while struct"), + atoms: words("null true false"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-objectivec", { + name: "clike", + keywords: words(cKeywords + "inline restrict _Bool _Complex _Imaginery BOOL Class bycopy byref id IMP in " + + "inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"), + types: words(cTypes), + atoms: words("YES NO NULL NILL ON OFF true false"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$]/); + return "keyword"; + }, + "#": cppHook, + indent: function(_state, ctx, textAfter) { + if (ctx.type == "statement" && /^@\w/.test(textAfter)) return ctx.indented + } + }, + modeProps: {fold: "brace"} + }); + + def("text/x-squirrel", { + name: "clike", + keywords: words("base break clone continue const default delete enum extends function in class" + + " foreach local resume return this throw typeof yield constructor instanceof static"), + types: words(cTypes), + blockKeywords: words("case catch class else for foreach if switch try while"), + defKeywords: words("function local class"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + // Ceylon Strings need to deal with interpolation + var stringTokenizer = null; + function tokenCeylonString(type) { + return function(stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!escaped && stream.match('"') && + (type == "single" || stream.match('""'))) { + end = true; + break; + } + if (!escaped && stream.match('``')) { + stringTokenizer = tokenCeylonString(type); + end = true; + break; + } + next = stream.next(); + escaped = type == "single" && !escaped && next == "\\"; + } + if (end) + state.tokenize = null; + return "string"; + } + } + + def("text/x-ceylon", { + name: "clike", + keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + + " exists extends finally for function given if import in interface is let module new" + + " nonempty object of out outer package return satisfies super switch then this throw" + + " try value void while"), + types: function(word) { + // In Ceylon all identifiers that start with an uppercase are types + var first = word.charAt(0); + return (first === first.toUpperCase() && first !== first.toLowerCase()); + }, + blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), + defKeywords: words("class dynamic function interface module object package value"), + builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), + isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, + isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, + numberStart: /[\d#$]/, + number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, + multiLineStrings: true, + typeFirstDefinitions: true, + atoms: words("true false null larger smaller equal empty finished"), + indentSwitch: false, + styleDefs: false, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); + return state.tokenize(stream, state); + }, + '`': function(stream, state) { + if (!stringTokenizer || !stream.match('`')) return false; + state.tokenize = stringTokenizer; + stringTokenizer = null; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + token: function(_stream, state, style) { + if ((style == "variable" || style == "variable-3") && + state.prevToken == ".") { + return "variable-2"; + } + } + }, + modeProps: { + fold: ["brace", "import"], + closeBrackets: {triples: '"'} + } + }); + +}); diff --git a/libraries/codemirror/mode/clike/index.html b/libraries/codemirror/mode/clike/index.html new file mode 100644 index 0000000..45c670a --- /dev/null +++ b/libraries/codemirror/mode/clike/index.html @@ -0,0 +1,360 @@ + + +CodeMirror: C-like mode + + + + + + + + + + + + +
          +

          C-like mode

          + +
          + +

          C++ example

          + +
          + +

          Objective-C example

          + +
          + +

          Java example

          + +
          + +

          Scala example

          + +
          + +

          Kotlin mode

          + +
          + +

          Ceylon mode

          + +
          + + + +

          Simple mode that tries to handle C-like languages as well as it + can. Takes two configuration parameters: keywords, an + object whose property names are the keywords in the language, + and useCPP, which determines whether C preprocessor + directives are recognized.

          + +

          MIME types defined: text/x-csrc + (C), text/x-c++src (C++), text/x-java + (Java), text/x-csharp (C#), + text/x-objectivec (Objective-C), + text/x-scala (Scala), text/x-vertex + x-shader/x-fragment (shader programs), + text/x-squirrel (Squirrel) and + text/x-ceylon (Ceylon)

          +
          diff --git a/libraries/codemirror/mode/clike/scala.html b/libraries/codemirror/mode/clike/scala.html new file mode 100644 index 0000000..aa04cf0 --- /dev/null +++ b/libraries/codemirror/mode/clike/scala.html @@ -0,0 +1,767 @@ + + +CodeMirror: Scala mode + + + + + + + + + + +
          +

          Scala mode

          +
          + +
          + + +
          diff --git a/libraries/codemirror/mode/clike/test.js b/libraries/codemirror/mode/clike/test.js new file mode 100644 index 0000000..c260032 --- /dev/null +++ b/libraries/codemirror/mode/clike/test.js @@ -0,0 +1,51 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-c"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("indent", + "[variable-3 void] [def foo]([variable-3 void*] [variable a], [variable-3 int] [variable b]) {", + " [variable-3 int] [variable c] [operator =] [variable b] [operator +]", + " [number 1];", + " [keyword return] [operator *][variable a];", + "}"); + + MT("indent_switch", + "[keyword switch] ([variable x]) {", + " [keyword case] [number 10]:", + " [keyword return] [number 20];", + " [keyword default]:", + " [variable printf]([string \"foo %c\"], [variable x]);", + "}"); + + MT("def", + "[variable-3 void] [def foo]() {}", + "[keyword struct] [def bar]{}", + "[variable-3 int] [variable-3 *][def baz]() {}"); + + MT("double_block", + "[keyword for] (;;)", + " [keyword for] (;;)", + " [variable x][operator ++];", + "[keyword return];"); + + MT("preprocessor", + "[meta #define FOO 3]", + "[variable-3 int] [variable foo];", + "[meta #define BAR\\]", + "[meta 4]", + "[variable-3 unsigned] [variable-3 int] [variable bar] [operator =] [number 8];", + "[meta #include ][comment // comment]") + + + var mode_cpp = CodeMirror.getMode({indentUnit: 2}, "text/x-c++src"); + function MTCPP(name) { test.mode(name, mode_cpp, Array.prototype.slice.call(arguments, 1)); } + + MTCPP("cpp14_literal", + "[number 10'000];", + "[number 0b10'000];", + "[number 0x10'000];", + "[string '100000'];"); +})(); diff --git a/libraries/codemirror/mode/clojure/clojure.js b/libraries/codemirror/mode/clojure/clojure.js new file mode 100644 index 0000000..fd5e66f --- /dev/null +++ b/libraries/codemirror/mode/clojure/clojure.js @@ -0,0 +1,249 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Author: Hans Engel + * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun) + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("clojure", function (options) { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", CHARACTER = "string-2", + ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword", VAR = "variable"; + var INDENT_WORD_SKIP = options.indentUnit || 2; + var NORMAL_INDENT_UNIT = options.indentUnit || 2; + + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var atoms = makeKeywords("true false nil"); + + var keywords = makeKeywords( + "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle"); + + var builtins = makeKeywords( + "* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> ->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? declare default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap *default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! set-agent-send-off-executor! some-> some->>"); + + var indentKeys = makeKeywords( + // Built-ins + "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch " + + + // Binding forms + "let letfn binding loop for doseq dotimes when-let if-let " + + + // Data structures + "defstruct struct-map assoc " + + + // clojure.test + "testing deftest " + + + // contrib + "handler-case handle dotrace deftrace"); + + var tests = { + digit: /\d/, + digit_or_colon: /[\d:]/, + hex: /[0-9a-f]/i, + sign: /[+-]/, + exponent: /e/i, + keyword_char: /[^\s\(\[\;\)\]]/, + symbol: /[\w*+!\-\._?:<>\/\xa1-\uffff]/, + block_indent: /^(?:def|with)[^\/]+$|\/(?:def|with)/ + }; + + function stateStack(indent, type, prev) { // represents a state stack object + this.indent = indent; + this.type = type; + this.prev = prev; + } + + function pushStack(state, indent, type) { + state.indentStack = new stateStack(indent, type, state.indentStack); + } + + function popStack(state) { + state.indentStack = state.indentStack.prev; + } + + function isNumber(ch, stream){ + // hex + if ( ch === '0' && stream.eat(/x/i) ) { + stream.eatWhile(tests.hex); + return true; + } + + // leading sign + if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { + stream.eat(tests.sign); + ch = stream.next(); + } + + if ( tests.digit.test(ch) ) { + stream.eat(ch); + stream.eatWhile(tests.digit); + + if ( '.' == stream.peek() ) { + stream.eat('.'); + stream.eatWhile(tests.digit); + } else if ('/' == stream.peek() ) { + stream.eat('/'); + stream.eatWhile(tests.digit); + } + + if ( stream.eat(tests.exponent) ) { + stream.eat(tests.sign); + stream.eatWhile(tests.digit); + } + + return true; + } + + return false; + } + + // Eat character that starts after backslash \ + function eatCharacter(stream) { + var first = stream.next(); + // Read special literals: backspace, newline, space, return. + // Just read all lowercase letters. + if (first && first.match(/[a-z]/) && stream.match(/[a-z]+/, true)) { + return; + } + // Read unicode character: \u1000 \uA0a1 + if (first === "u") { + stream.match(/[0-9a-z]{4}/i, true); + } + } + + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false + }; + }, + + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = stream.indentation(); + } + + // skip spaces + if (state.mode != "string" && stream.eatSpace()) { + return null; + } + var returnType = null; + + switch(state.mode){ + case "string": // multi-line string parsing mode + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next == "\"" && !escaped) { + + state.mode = false; + break; + } + escaped = !escaped && next == "\\"; + } + returnType = STRING; // continue on in string mode + break; + default: // default parsing mode + var ch = stream.next(); + + if (ch == "\"") { + state.mode = "string"; + returnType = STRING; + } else if (ch == "\\") { + eatCharacter(stream); + returnType = CHARACTER; + } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { + returnType = ATOM; + } else if (ch == ";") { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (isNumber(ch,stream)){ + returnType = NUMBER; + } else if (ch == "(" || ch == "[" || ch == "{" ) { + var keyWord = '', indentTemp = stream.column(), letter; + /** + Either + (indent-word .. + (non-indent-word .. + (;something else, bracket, etc. + */ + + if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) { + keyWord += letter; + } + + if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) || + tests.block_indent.test(keyWord))) { // indent-word + pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); + } else { // non-indent word + // we continue eating the spaces + stream.eatSpace(); + if (stream.eol() || stream.peek() == ";") { + // nothing significant after + // we restart indentation the user defined spaces after + pushStack(state, indentTemp + NORMAL_INDENT_UNIT, ch); + } else { + pushStack(state, indentTemp + stream.current().length, ch); // else we match + } + } + stream.backUp(stream.current().length - 1); // undo all the eating + + returnType = BRACKET; + } else if (ch == ")" || ch == "]" || ch == "}") { + returnType = BRACKET; + if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : (ch == "]" ? "[" :"{"))) { + popStack(state); + } + } else if ( ch == ":" ) { + stream.eatWhile(tests.symbol); + return ATOM; + } else { + stream.eatWhile(tests.symbol); + + if (keywords && keywords.propertyIsEnumerable(stream.current())) { + returnType = KEYWORD; + } else if (builtins && builtins.propertyIsEnumerable(stream.current())) { + returnType = BUILTIN; + } else if (atoms && atoms.propertyIsEnumerable(stream.current())) { + returnType = ATOM; + } else { + returnType = VAR; + } + } + } + + return returnType; + }, + + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + }, + + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-clojure", "clojure"); +CodeMirror.defineMIME("text/x-clojurescript", "clojure"); + +}); diff --git a/libraries/codemirror/mode/clojure/index.html b/libraries/codemirror/mode/clojure/index.html new file mode 100644 index 0000000..81294bc --- /dev/null +++ b/libraries/codemirror/mode/clojure/index.html @@ -0,0 +1,91 @@ + + +CodeMirror: Clojure mode + + + + + + + + + +
          +

          Clojure mode

          +
          + + +

          MIME types defined: text/x-clojure.

          + +
          diff --git a/libraries/codemirror/mode/cmake/cmake.js b/libraries/codemirror/mode/cmake/cmake.js new file mode 100644 index 0000000..9f9eda5 --- /dev/null +++ b/libraries/codemirror/mode/cmake/cmake.js @@ -0,0 +1,97 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod); + else + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("cmake", function () { + var variable_regex = /({)?[a-zA-Z0-9_]+(})?/; + + function tokenString(stream, state) { + var current, prev, found_var = false; + while (!stream.eol() && (current = stream.next()) != state.pending) { + if (current === '$' && prev != '\\' && state.pending == '"') { + found_var = true; + break; + } + prev = current; + } + if (found_var) { + stream.backUp(1); + } + if (current == state.pending) { + state.continueString = false; + } else { + state.continueString = true; + } + return "string"; + } + + function tokenize(stream, state) { + var ch = stream.next(); + + // Have we found a variable? + if (ch === '$') { + if (stream.match(variable_regex)) { + return 'variable-2'; + } + return 'variable'; + } + // Should we still be looking for the end of a string? + if (state.continueString) { + // If so, go through the loop again + stream.backUp(1); + return tokenString(stream, state); + } + // Do we just have a function on our hands? + // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched + if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) { + stream.backUp(1); + return 'def'; + } + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + // Have we found a string? + if (ch == "'" || ch == '"') { + // Store the type (single or double) + state.pending = ch; + // Perform the looping function to find the end + return tokenString(stream, state); + } + if (ch == '(' || ch == ')') { + return 'bracket'; + } + if (ch.match(/[0-9]/)) { + return 'number'; + } + stream.eatWhile(/[\w-]/); + return null; + } + return { + startState: function () { + var state = {}; + state.inDefinition = false; + state.inInclude = false; + state.continueString = false; + state.pending = false; + return state; + }, + token: function (stream, state) { + if (stream.eatSpace()) return null; + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-cmake", "cmake"); + +}); diff --git a/libraries/codemirror/mode/cmake/index.html b/libraries/codemirror/mode/cmake/index.html new file mode 100644 index 0000000..ed114fe --- /dev/null +++ b/libraries/codemirror/mode/cmake/index.html @@ -0,0 +1,129 @@ + + +CodeMirror: CMake mode + + + + + + + + + + +
          +

          CMake mode

          +
          + + +

          MIME types defined: text/x-cmake.

          + +
          diff --git a/libraries/codemirror/mode/cobol/cobol.js b/libraries/codemirror/mode/cobol/cobol.js new file mode 100644 index 0000000..897022b --- /dev/null +++ b/libraries/codemirror/mode/cobol/cobol.js @@ -0,0 +1,255 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Author: Gautam Mehta + * Branched from CodeMirror's Scheme mode + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("cobol", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", + COBOLLINENUM = "def", PERIOD = "link"; + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); + var keywords = makeKeywords( + "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + + "ADVANCING AFTER ALIAS ALL ALPHABET " + + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + + "ALSO ALTER ALTERNATE AND ANY " + + "ARE AREA AREAS ARITHMETIC ASCENDING " + + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + + "BEFORE BELL BINARY BIT BITS " + + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + + "BY CALL CANCEL CD CF " + + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + + "CLOSE COBOL CODE CODE-SET COL " + + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + + "CONVERTING COPY CORR CORRESPONDING COUNT " + + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + + "EBCDIC EGI EJECT ELSE EMI " + + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + + "ERROR ESI EVALUATE EVERY EXCEEDS " + + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + + "FILE-STREAM FILES FILLER FINAL FIND " + + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + + "FUNCTION GENERATE GET GIVING GLOBAL " + + "GO GOBACK GREATER GROUP HEADING " + + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + + "ID IDENTIFICATION IF IN INDEX " + + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + + "INSTALLATION INTO INVALID INVOKE IS " + + "JUST JUSTIFIED KANJI KEEP KEY " + + "LABEL LAST LD LEADING LEFT " + + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + + "LOCALE LOCALLY LOCK " + + "MEMBER MEMORY MERGE MESSAGE METACLASS " + + "MODE MODIFIED MODIFY MODULES MOVE " + + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + + "NEXT NO NO-ECHO NONE NOT " + + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + + "OF OFF OMITTED ON ONLY " + + "OPEN OPTIONAL OR ORDER ORGANIZATION " + + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + + "PF PH PIC PICTURE PLUS " + + "POINTER POSITION POSITIVE PREFIX PRESENT " + + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + + "PROMPT PROTECTED PURGE QUEUE QUOTE " + + "QUOTES RANDOM RD READ READY " + + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + + "REQUIRED RERUN RESERVE RESET RETAINING " + + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + + "REVERSED REWIND REWRITE RF RH " + + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + + "RUN SAME SCREEN SD SEARCH " + + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + + "SEQUENTIAL SET SHARED SIGN SIZE " + + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + + "START STARTING STATUS STOP STORE " + + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + + "TABLE TALLYING TAPE TENANT TERMINAL " + + "TERMINATE TEST TEXT THAN THEN " + + "THROUGH THRU TIME TIMES TITLE " + + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + + "UNSTRING UNTIL UP UPDATE UPON " + + "USAGE USAGE-MODE USE USING VALID " + + "VALIDATE VALUE VALUES VARYING VLR " + + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); + + var builtins = makeKeywords("- * ** / + < <= = > >= "); + var tests = { + digit: /\d/, + digit_or_colon: /[\d:]/, + hex: /[0-9a-f]/i, + sign: /[+-]/, + exponent: /e/i, + keyword_char: /[^\s\(\[\;\)\]]/, + symbol: /[\w*+\-]/ + }; + function isNumber(ch, stream){ + // hex + if ( ch === '0' && stream.eat(/x/i) ) { + stream.eatWhile(tests.hex); + return true; + } + // leading sign + if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { + stream.eat(tests.sign); + ch = stream.next(); + } + if ( tests.digit.test(ch) ) { + stream.eat(ch); + stream.eatWhile(tests.digit); + if ( '.' == stream.peek()) { + stream.eat('.'); + stream.eatWhile(tests.digit); + } + if ( stream.eat(tests.exponent) ) { + stream.eat(tests.sign); + stream.eatWhile(tests.digit); + } + return true; + } + return false; + } + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false + }; + }, + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = 6 ; //stream.indentation(); + } + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + switch(state.mode){ + case "string": // multi-line string parsing mode + var next = false; + while ((next = stream.next()) != null) { + if (next == "\"" || next == "\'") { + state.mode = false; + break; + } + } + returnType = STRING; // continue on in string mode + break; + default: // default parsing mode + var ch = stream.next(); + var col = stream.column(); + if (col >= 0 && col <= 5) { + returnType = COBOLLINENUM; + } else if (col >= 72 && col <= 79) { + stream.skipToEnd(); + returnType = MODTAG; + } else if (ch == "*" && col == 6) { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "\"" || ch == "\'") { + state.mode = "string"; + returnType = STRING; + } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { + returnType = ATOM; + } else if (ch == ".") { + returnType = PERIOD; + } else if (isNumber(ch,stream)){ + returnType = NUMBER; + } else { + if (stream.current().match(tests.symbol)) { + while (col < 71) { + if (stream.eat(tests.symbol) === undefined) { + break; + } else { + col++; + } + } + } + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = KEYWORD; + } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = BUILTIN; + } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = ATOM; + } else returnType = null; + } + } + return returnType; + }, + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + } + }; +}); + +CodeMirror.defineMIME("text/x-cobol", "cobol"); + +}); diff --git a/libraries/codemirror/mode/cobol/index.html b/libraries/codemirror/mode/cobol/index.html new file mode 100644 index 0000000..4352419 --- /dev/null +++ b/libraries/codemirror/mode/cobol/index.html @@ -0,0 +1,210 @@ + + +CodeMirror: COBOL mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +

          COBOL mode

          + +

          Select Theme Select Font Size + + + + +

          + + +
          diff --git a/libraries/codemirror/mode/coffeescript/coffeescript.js b/libraries/codemirror/mode/coffeescript/coffeescript.js new file mode 100644 index 0000000..adf2184 --- /dev/null +++ b/libraries/codemirror/mode/coffeescript/coffeescript.js @@ -0,0 +1,355 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Link to the project's GitHub page: + * https://github.com/pickhardt/coffeescript-codemirror-mode + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("coffeescript", function(conf, parserConf) { + var ERRORCLASS = "error"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; + var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; + var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; + var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; + + var wordOperators = wordRegexp(["and", "or", "not", + "is", "isnt", "in", + "instanceof", "typeof"]); + var indentKeywords = ["for", "while", "loop", "if", "unless", "else", + "switch", "try", "catch", "finally", "class"]; + var commonKeywords = ["break", "by", "continue", "debugger", "delete", + "do", "in", "of", "new", "return", "then", + "this", "@", "throw", "when", "until", "extends"]; + + var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); + + indentKeywords = wordRegexp(indentKeywords); + + + var stringPrefixes = /^('{3}|\"{3}|['\"])/; + var regexPrefixes = /^(\/{3}|\/)/; + var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; + var constants = wordRegexp(commonConstants); + + // Tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + if (state.scope.align === null) state.scope.align = false; + var scopeOffset = state.scope.offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset && state.scope.type == "coffee") { + return "indent"; + } else if (lineOffset < scopeOffset) { + return "dedent"; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle docco title comment (single line) + if (stream.match("####")) { + stream.skipToEnd(); + return "comment"; + } + + // Handle multi line comments + if (stream.match("###")) { + state.tokenize = longComment; + return state.tokenize(stream, state); + } + + // Single line comment + if (ch === "#") { + stream.skipToEnd(); + return "comment"; + } + + // Handle number literals + if (stream.match(/^-?[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { + floatLiteral = true; + } + if (stream.match(/^-?\d+\.\d*/)) { + floatLiteral = true; + } + if (stream.match(/^-?\.\d+/)) { + floatLiteral = true; + } + + if (floatLiteral) { + // prevent from getting extra . on 1.. + if (stream.peek() == "."){ + stream.backUp(1); + } + return "number"; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^-?0x[0-9a-f]+/i)) { + intLiteral = true; + } + // Decimal + if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^-?0(?![\dx])/i)) { + intLiteral = true; + } + if (intLiteral) { + return "number"; + } + } + + // Handle strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenFactory(stream.current(), false, "string"); + return state.tokenize(stream, state); + } + // Handle regex literals + if (stream.match(regexPrefixes)) { + if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division + state.tokenize = tokenFactory(stream.current(), true, "string-2"); + return state.tokenize(stream, state); + } else { + stream.backUp(1); + } + } + + + + // Handle operators and delimiters + if (stream.match(operators) || stream.match(wordOperators)) { + return "operator"; + } + if (stream.match(delimiters)) { + return "punctuation"; + } + + if (stream.match(constants)) { + return "atom"; + } + + if (stream.match(atProp) || state.prop && stream.match(identifiers)) { + return "property"; + } + + if (stream.match(keywords)) { + return "keyword"; + } + + if (stream.match(identifiers)) { + return "variable"; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenFactory(delimiter, singleline, outclass) { + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\/\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) { + return outclass; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return outclass; + } else { + stream.eat(/['"\/]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + outclass = ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return outclass; + }; + } + + function longComment(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^#]/); + if (stream.match("###")) { + state.tokenize = tokenBase; + break; + } + stream.eatWhile("#"); + } + return "comment"; + } + + function indent(stream, state, type) { + type = type || "coffee"; + var offset = 0, align = false, alignOffset = null; + for (var scope = state.scope; scope; scope = scope.prev) { + if (scope.type === "coffee" || scope.type == "}") { + offset = scope.offset + conf.indentUnit; + break; + } + } + if (type !== "coffee") { + align = null; + alignOffset = stream.column() + stream.current().length; + } else if (state.scope.align) { + state.scope.align = false; + } + state.scope = { + offset: offset, + type: type, + prev: state.scope, + align: align, + alignOffset: alignOffset + }; + } + + function dedent(stream, state) { + if (!state.scope.prev) return; + if (state.scope.type === "coffee") { + var _indent = stream.indentation(); + var matched = false; + for (var scope = state.scope; scope; scope = scope.prev) { + if (_indent === scope.offset) { + matched = true; + break; + } + } + if (!matched) { + return true; + } + while (state.scope.prev && state.scope.offset !== _indent) { + state.scope = state.scope.prev; + } + return false; + } else { + state.scope = state.scope.prev; + return false; + } + } + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle scope changes. + if (current === "return") { + state.dedent = true; + } + if (((current === "->" || current === "=>") && stream.eol()) + || style === "indent") { + indent(stream, state); + } + var delimiter_index = "[({".indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); + } + if (indentKeywords.exec(current)){ + indent(stream, state); + } + if (current == "then"){ + dedent(stream, state); + } + + + if (style === "dedent") { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = "])}".indexOf(current); + if (delimiter_index !== -1) { + while (state.scope.type == "coffee" && state.scope.prev) + state.scope = state.scope.prev; + if (state.scope.type == current) + state.scope = state.scope.prev; + } + if (state.dedent && stream.eol()) { + if (state.scope.type == "coffee" && state.scope.prev) + state.scope = state.scope.prev; + state.dedent = false; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, + prop: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var fillAlign = state.scope.align === null && state.scope; + if (fillAlign && stream.sol()) fillAlign.align = false; + + var style = tokenLexer(stream, state); + if (style && style != "comment") { + if (fillAlign) fillAlign.align = true; + state.prop = style == "punctuation" && stream.current() == "." + } + + return style; + }, + + indent: function(state, text) { + if (state.tokenize != tokenBase) return 0; + var scope = state.scope; + var closer = text && "])}".indexOf(text.charAt(0)) > -1; + if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; + var closes = closer && scope.type === text.charAt(0); + if (scope.align) + return scope.alignOffset - (closes ? 1 : 0); + else + return (closes ? scope.prev : scope).offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); +CodeMirror.defineMIME("text/coffeescript", "coffeescript"); + +}); diff --git a/libraries/codemirror/mode/coffeescript/index.html b/libraries/codemirror/mode/coffeescript/index.html new file mode 100644 index 0000000..93a5f4f --- /dev/null +++ b/libraries/codemirror/mode/coffeescript/index.html @@ -0,0 +1,740 @@ + + +CodeMirror: CoffeeScript mode + + + + + + + + + +
          +

          CoffeeScript mode

          +
          + + +

          MIME types defined: text/x-coffeescript.

          + +

          The CoffeeScript mode was written by Jeff Pickhardt.

          + +
          diff --git a/libraries/codemirror/mode/commonlisp/commonlisp.js b/libraries/codemirror/mode/commonlisp/commonlisp.js new file mode 100644 index 0000000..fb1f99c --- /dev/null +++ b/libraries/codemirror/mode/commonlisp/commonlisp.js @@ -0,0 +1,123 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("commonlisp", function (config) { + var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; + var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; + var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; + var symbol = /[^\s'`,@()\[\]";]/; + var type; + + function readSym(stream) { + var ch; + while (ch = stream.next()) { + if (ch == "\\") stream.next(); + else if (!symbol.test(ch)) { stream.backUp(1); break; } + } + return stream.current(); + } + + function base(stream, state) { + if (stream.eatSpace()) {type = "ws"; return null;} + if (stream.match(numLiteral)) return "number"; + var ch = stream.next(); + if (ch == "\\") ch = stream.next(); + + if (ch == '"') return (state.tokenize = inString)(stream, state); + else if (ch == "(") { type = "open"; return "bracket"; } + else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } + else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } + else if (/['`,@]/.test(ch)) return null; + else if (ch == "|") { + if (stream.skipTo("|")) { stream.next(); return "symbol"; } + else { stream.skipToEnd(); return "error"; } + } else if (ch == "#") { + var ch = stream.next(); + if (ch == "[") { type = "open"; return "bracket"; } + else if (/[+\-=\.']/.test(ch)) return null; + else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; + else if (ch == "|") return (state.tokenize = inComment)(stream, state); + else if (ch == ":") { readSym(stream); return "meta"; } + else return "error"; + } else { + var name = readSym(stream); + if (name == ".") return null; + type = "symbol"; + if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; + if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; + if (name.charAt(0) == "&") return "variable-2"; + return "variable"; + } + } + + function inString(stream, state) { + var escaped = false, next; + while (next = stream.next()) { + if (next == '"' && !escaped) { state.tokenize = base; break; } + escaped = !escaped && next == "\\"; + } + return "string"; + } + + function inComment(stream, state) { + var next, last; + while (next = stream.next()) { + if (next == "#" && last == "|") { state.tokenize = base; break; } + last = next; + } + type = "ws"; + return "comment"; + } + + return { + startState: function () { + return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; + }, + + token: function (stream, state) { + if (stream.sol() && typeof state.ctx.indentTo != "number") + state.ctx.indentTo = state.ctx.start + 1; + + type = null; + var style = state.tokenize(stream, state); + if (type != "ws") { + if (state.ctx.indentTo == null) { + if (type == "symbol" && assumeBody.test(stream.current())) + state.ctx.indentTo = state.ctx.start + config.indentUnit; + else + state.ctx.indentTo = "next"; + } else if (state.ctx.indentTo == "next") { + state.ctx.indentTo = stream.column(); + } + state.lastType = type; + } + if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; + else if (type == "close") state.ctx = state.ctx.prev || state.ctx; + return style; + }, + + indent: function (state, _textAfter) { + var i = state.ctx.indentTo; + return typeof i == "number" ? i : state.ctx.start + 1; + }, + + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;", + blockCommentStart: "#|", + blockCommentEnd: "|#" + }; +}); + +CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); + +}); diff --git a/libraries/codemirror/mode/commonlisp/index.html b/libraries/codemirror/mode/commonlisp/index.html new file mode 100644 index 0000000..f2bf452 --- /dev/null +++ b/libraries/codemirror/mode/commonlisp/index.html @@ -0,0 +1,177 @@ + + +CodeMirror: Common Lisp mode + + + + + + + + + +
          +

          Common Lisp mode

          +
          + + +

          MIME types defined: text/x-common-lisp.

          + +
          diff --git a/libraries/codemirror/mode/crystal/crystal.js b/libraries/codemirror/mode/crystal/crystal.js new file mode 100644 index 0000000..2e74bee --- /dev/null +++ b/libraries/codemirror/mode/crystal/crystal.js @@ -0,0 +1,391 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("crystal", function(config) { + function wordRegExp(words, end) { + return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b")); + } + + function chain(tokenize, stream, state) { + state.tokenize.push(tokenize); + return tokenize(stream, state); + } + + var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/; + var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/; + var indexingOperators = /^(?:\[\][?=]?)/; + var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/; + var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; + var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; + var keywords = wordRegExp([ + "abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", + "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", "ifdef", + "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", + "private", "protected", "rescue", "return", "require", "sizeof", "struct", + "super", "then", "type", "typeof", "union", "unless", "until", "when", "while", "with", + "yield", "__DIR__", "__FILE__", "__LINE__" + ]); + var atomWords = wordRegExp(["true", "false", "nil", "self"]); + var indentKeywordsArray = [ + "def", "fun", "macro", + "class", "module", "struct", "lib", "enum", "union", + "if", "unless", "case", "while", "until", "begin", "then", + "do", + "for", "ifdef" + ]; + var indentKeywords = wordRegExp(indentKeywordsArray); + var dedentKeywordsArray = [ + "end", + "else", "elsif", + "rescue", "ensure" + ]; + var dedentKeywords = wordRegExp(dedentKeywordsArray); + var dedentPunctualsArray = ["\\)", "\\}", "\\]"]; + var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$"); + var nextTokenizer = { + "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef, + "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType, + "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType + }; + var matching = {"[": "]", "{": "}", "(": ")", "<": ">"}; + + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + // Macros + if (state.lastToken != "\\" && stream.match("{%", false)) { + return chain(tokenMacro("%", "%"), stream, state); + } + + if (state.lastToken != "\\" && stream.match("{{", false)) { + return chain(tokenMacro("{", "}"), stream, state); + } + + // Comments + if (stream.peek() == "#") { + stream.skipToEnd(); + return "comment"; + } + + // Variables and keywords + var matched; + if (stream.match(idents)) { + stream.eat(/[?!]/); + + matched = stream.current(); + if (stream.eat(":")) { + return "atom"; + } else if (state.lastToken == ".") { + return "property"; + } else if (keywords.test(matched)) { + if (state.lastToken != "abstract" && indentKeywords.test(matched)) { + if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0)) { + state.blocks.push(matched); + state.currentIndent += 1; + } + } else if (dedentKeywords.test(matched)) { + state.blocks.pop(); + state.currentIndent -= 1; + } + + if (nextTokenizer.hasOwnProperty(matched)) { + state.tokenize.push(nextTokenizer[matched]); + } + + return "keyword"; + } else if (atomWords.test(matched)) { + return "atom"; + } + + return "variable"; + } + + // Class variables and instance variables + // or attributes + if (stream.eat("@")) { + if (stream.peek() == "[") { + return chain(tokenNest("[", "]", "meta"), stream, state); + } + + stream.eat("@"); + stream.match(idents) || stream.match(types); + return "variable-2"; + } + + // Global variables + if (stream.eat("$")) { + stream.eat(/[0-9]+|\?/) || stream.match(idents) || stream.match(types); + return "variable-3"; + } + + // Constants and types + if (stream.match(types)) { + return "tag"; + } + + // Symbols or ':' operator + if (stream.eat(":")) { + if (stream.eat("\"")) { + return chain(tokenQuote("\"", "atom", false), stream, state); + } else if (stream.match(idents) || stream.match(types) || + stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) { + return "atom"; + } + stream.eat(":"); + return "operator"; + } + + // Strings + if (stream.eat("\"")) { + return chain(tokenQuote("\"", "string", true), stream, state); + } + + // Strings or regexps or macro variables or '%' operator + if (stream.peek() == "%") { + var style = "string"; + var embed = true; + var delim; + + if (stream.match("%r")) { + // Regexps + style = "string-2"; + delim = stream.next(); + } else if (stream.match("%w")) { + embed = false; + delim = stream.next(); + } else { + if(delim = stream.match(/^%([^\w\s=])/)) { + delim = delim[1]; + } else if (stream.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)) { + // Macro variables + return "meta"; + } else { + // '%' operator + return "operator"; + } + } + + if (matching.hasOwnProperty(delim)) { + delim = matching[delim]; + } + return chain(tokenQuote(delim, style, embed), stream, state); + } + + // Characters + if (stream.eat("'")) { + stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/); + stream.eat("'"); + return "atom"; + } + + // Numbers + if (stream.eat("0")) { + if (stream.eat("x")) { + stream.match(/^[0-9a-fA-F]+/); + } else if (stream.eat("o")) { + stream.match(/^[0-7]+/); + } else if (stream.eat("b")) { + stream.match(/^[01]+/); + } + return "number"; + } + + if (stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/); + return "number"; + } + + // Operators + if (stream.match(operators)) { + stream.eat("="); // Operators can follow assigin symbol. + return "operator"; + } + + if (stream.match(conditionalOperators) || stream.match(anotherOperators)) { + return "operator"; + } + + // Parens and braces + if (matched = stream.match(/[({[]/, false)) { + matched = matched[0]; + return chain(tokenNest(matched, matching[matched], null), stream, state); + } + + // Escapes + if (stream.eat("\\")) { + stream.next(); + return "meta"; + } + + stream.next(); + return null; + } + + function tokenNest(begin, end, style, started) { + return function (stream, state) { + if (!started && stream.match(begin)) { + state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true); + state.currentIndent += 1; + return style; + } + + var nextStyle = tokenBase(stream, state); + if (stream.current() === end) { + state.tokenize.pop(); + state.currentIndent -= 1; + nextStyle = style; + } + + return nextStyle; + }; + } + + function tokenMacro(begin, end, started) { + return function (stream, state) { + if (!started && stream.match("{" + begin)) { + state.currentIndent += 1; + state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true); + return "meta"; + } + + if (stream.match(end + "}")) { + state.currentIndent -= 1; + state.tokenize.pop(); + return "meta"; + } + + return tokenBase(stream, state); + }; + } + + function tokenMacroDef(stream, state) { + if (stream.eatSpace()) { + return null; + } + + var matched; + if (matched = stream.match(idents)) { + if (matched == "def") { + return "keyword"; + } + stream.eat(/[?!]/); + } + + state.tokenize.pop(); + return "def"; + } + + function tokenFollowIdent(stream, state) { + if (stream.eatSpace()) { + return null; + } + + if (stream.match(idents)) { + stream.eat(/[!?]/); + } else { + stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators); + } + state.tokenize.pop(); + return "def"; + } + + function tokenFollowType(stream, state) { + if (stream.eatSpace()) { + return null; + } + + stream.match(types); + state.tokenize.pop(); + return "def"; + } + + function tokenQuote(end, style, embed) { + return function (stream, state) { + var escaped = false; + + while (stream.peek()) { + if (!escaped) { + if (stream.match("{%", false)) { + state.tokenize.push(tokenMacro("%", "%")); + return style; + } + + if (stream.match("{{", false)) { + state.tokenize.push(tokenMacro("{", "}")); + return style; + } + + if (embed && stream.match("#{", false)) { + state.tokenize.push(tokenNest("#{", "}", "meta")); + return style; + } + + var ch = stream.next(); + + if (ch == end) { + state.tokenize.pop(); + return style; + } + + escaped = ch == "\\"; + } else { + stream.next(); + escaped = false; + } + } + + return style; + }; + } + + return { + startState: function () { + return { + tokenize: [tokenBase], + currentIndent: 0, + lastToken: null, + blocks: [] + }; + }, + + token: function (stream, state) { + var style = state.tokenize[state.tokenize.length - 1](stream, state); + var token = stream.current(); + + if (style && style != "comment") { + state.lastToken = token; + } + + return style; + }, + + indent: function (state, textAfter) { + textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""); + + if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) { + return config.indentUnit * (state.currentIndent - 1); + } + + return config.indentUnit * state.currentIndent; + }, + + fold: "indent", + electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true), + lineComment: '#' + }; + }); + + CodeMirror.defineMIME("text/x-crystal", "crystal"); +}); diff --git a/libraries/codemirror/mode/crystal/index.html b/libraries/codemirror/mode/crystal/index.html new file mode 100644 index 0000000..ec03e25 --- /dev/null +++ b/libraries/codemirror/mode/crystal/index.html @@ -0,0 +1,119 @@ + + +CodeMirror: Crystal mode + + + + + + + + + + + +
          +

          Crystal mode

          +
          + + +

          MIME types defined: text/x-crystal.

          +
          diff --git a/libraries/codemirror/mode/css/css.js b/libraries/codemirror/mode/css/css.js new file mode 100644 index 0000000..e9656e3 --- /dev/null +++ b/libraries/codemirror/mode/css/css.js @@ -0,0 +1,825 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + supportsAtComponent = parserConfig.supportsAtComponent === true; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]+/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || + (ch == "d" && stream.match("omain(")) || + (ch == "r" && stream.match("egexp("))) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "word"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = "string-2"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + cx = cx.prev; + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backface-visibility", + "background", "background-attachment", "background-blend-mode", "background-clip", + "background-color", "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", + "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", + "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", + "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", + "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marker-offset", "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "object-fit", "object-position", + "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "region-break-after", + "region-break-before", "region-break-inside", "region-fragment", + "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", + "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", + "shape-outside", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "word-break", + "word-spacing", "word-wrap", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode" + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", + "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", + "searchfield-results-decoration", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", + "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", + "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "contain", "content", + "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", + "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", + "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/\s*\{/)) + return [null, "{"]; + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); diff --git a/libraries/codemirror/mode/css/gss.html b/libraries/codemirror/mode/css/gss.html new file mode 100644 index 0000000..232fe8c --- /dev/null +++ b/libraries/codemirror/mode/css/gss.html @@ -0,0 +1,103 @@ + + +CodeMirror: Closure Stylesheets (GSS) mode + + + + + + + + + + + + +
          +

          Closure Stylesheets (GSS) mode

          +
          + + +

          A mode for Closure Stylesheets (GSS).

          +

          MIME type defined: text/x-gss.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/css/gss_test.js b/libraries/codemirror/mode/css/gss_test.js new file mode 100644 index 0000000..d56e592 --- /dev/null +++ b/libraries/codemirror/mode/css/gss_test.js @@ -0,0 +1,17 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + "use strict"; + + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } + + MT("atComponent", + "[def @component] {", + "[tag foo] {", + " [property color]: [keyword black];", + "}", + "}"); + +})(); diff --git a/libraries/codemirror/mode/css/index.html b/libraries/codemirror/mode/css/index.html new file mode 100644 index 0000000..2d2b9b0 --- /dev/null +++ b/libraries/codemirror/mode/css/index.html @@ -0,0 +1,75 @@ + + +CodeMirror: CSS mode + + + + + + + + + + + + +
          +

          CSS mode

          +
          + + +

          MIME types defined: text/css, text/x-scss (demo), text/x-less (demo).

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/css/less.html b/libraries/codemirror/mode/css/less.html new file mode 100644 index 0000000..adf7427 --- /dev/null +++ b/libraries/codemirror/mode/css/less.html @@ -0,0 +1,152 @@ + + +CodeMirror: LESS mode + + + + + + + + + + +
          +

          LESS mode

          +
          + + +

          The LESS mode is a sub-mode of the CSS mode (defined in css.js).

          + +

          Parsing/Highlighting Tests: normal, verbose.

          +
          diff --git a/libraries/codemirror/mode/css/less_test.js b/libraries/codemirror/mode/css/less_test.js new file mode 100644 index 0000000..dd82155 --- /dev/null +++ b/libraries/codemirror/mode/css/less_test.js @@ -0,0 +1,54 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + "use strict"; + + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } + + MT("variable", + "[variable-2 @base]: [atom #f04615];", + "[qualifier .class] {", + " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", + " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", + "}"); + + MT("amp", + "[qualifier .child], [qualifier .sibling] {", + " [qualifier .parent] [atom &] {", + " [property color]: [keyword black];", + " }", + " [atom &] + [atom &] {", + " [property color]: [keyword red];", + " }", + "}"); + + MT("mixin", + "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", + " [property color]: [atom darken]([variable-2 @color], [number 10%]);", + "}", + "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", + " [property color]: [atom lighten]([variable-2 @color], [number 10%]);", + "}", + "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", + " [property display]: [atom block];", + "}", + "[variable-2 @switch]: [variable light];", + "[qualifier .class] {", + " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", + "}"); + + MT("nest", + "[qualifier .one] {", + " [def @media] ([property width]: [number 400px]) {", + " [property font-size]: [number 1.2em];", + " [def @media] [attribute print] [keyword and] [property color] {", + " [property color]: [keyword blue];", + " }", + " }", + "}"); + + + MT("interpolation", ".@{[variable foo]} { [property font-weight]: [atom bold]; }"); +})(); diff --git a/libraries/codemirror/mode/css/scss.html b/libraries/codemirror/mode/css/scss.html new file mode 100644 index 0000000..f8e4d37 --- /dev/null +++ b/libraries/codemirror/mode/css/scss.html @@ -0,0 +1,157 @@ + + +CodeMirror: SCSS mode + + + + + + + + + +
          +

          SCSS mode

          +
          + + +

          The SCSS mode is a sub-mode of the CSS mode (defined in css.js).

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/css/scss_test.js b/libraries/codemirror/mode/css/scss_test.js new file mode 100644 index 0000000..785921b --- /dev/null +++ b/libraries/codemirror/mode/css/scss_test.js @@ -0,0 +1,110 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } + + MT('url_with_quotation', + "[tag foo] { [property background]:[atom url]([string test.jpg]) }"); + + MT('url_with_double_quotes', + "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }"); + + MT('url_with_single_quotes', + "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }"); + + MT('string', + "[def @import] [string \"compass/css3\"]"); + + MT('important_keyword', + "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }"); + + MT('variable', + "[variable-2 $blue]:[atom #333]"); + + MT('variable_as_attribute', + "[tag foo] { [property color]:[variable-2 $blue] }"); + + MT('numbers', + "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }"); + + MT('number_percentage', + "[tag foo] { [property width]:[number 80%] }"); + + MT('selector', + "[builtin #hello][qualifier .world]{}"); + + MT('singleline_comment', + "[comment // this is a comment]"); + + MT('multiline_comment', + "[comment /*foobar*/]"); + + MT('attribute_with_hyphen', + "[tag foo] { [property font-size]:[number 10px] }"); + + MT('string_after_attribute', + "[tag foo] { [property content]:[string \"::\"] }"); + + MT('directives', + "[def @include] [qualifier .mixin]"); + + MT('basic_structure', + "[tag p] { [property background]:[keyword red]; }"); + + MT('nested_structure', + "[tag p] { [tag a] { [property color]:[keyword red]; } }"); + + MT('mixin', + "[def @mixin] [tag table-base] {}"); + + MT('number_without_semicolon', + "[tag p] {[property width]:[number 12]}", + "[tag a] {[property color]:[keyword red];}"); + + MT('atom_in_nested_block', + "[tag p] { [tag a] { [property color]:[atom #000]; } }"); + + MT('interpolation_in_property', + "[tag foo] { #{[variable-2 $hello]}:[number 2]; }"); + + MT('interpolation_in_selector', + "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }"); + + MT('interpolation_error', + "[tag foo]#{[variable foo]} { [property color]:[atom #000]; }"); + + MT("divide_operator", + "[tag foo] { [property width]:[number 4] [operator /] [number 2] }"); + + MT('nested_structure_with_id_selector', + "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }"); + + MT('indent_mixin', + "[def @mixin] [tag container] (", + " [variable-2 $a]: [number 10],", + " [variable-2 $b]: [number 10])", + "{}"); + + MT('indent_nested', + "[tag foo] {", + " [tag bar] {", + " }", + "}"); + + MT('indent_parentheses', + "[tag foo] {", + " [property color]: [atom darken]([variable-2 $blue],", + " [number 9%]);", + "}"); + + MT('indent_vardef', + "[variable-2 $name]:", + " [string 'val'];", + "[tag tag] {", + " [tag inner] {", + " [property margin]: [number 3px];", + " }", + "}"); +})(); diff --git a/libraries/codemirror/mode/css/test.js b/libraries/codemirror/mode/css/test.js new file mode 100644 index 0000000..7a496fb --- /dev/null +++ b/libraries/codemirror/mode/css/test.js @@ -0,0 +1,200 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "css"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + // Error, because "foobarhello" is neither a known type or property, but + // property was expected (after "and"), and it should be in parentheses. + MT("atMediaUnknownType", + "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); + + // Soft error, because "foobarhello" is not a known property or type. + MT("atMediaUnknownProperty", + "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); + + // Make sure nesting works with media queries + MT("atMediaMaxWidthNested", + "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); + + MT("atMediaFeatureValueKeyword", + "[def @media] ([property orientation]: [keyword landscape]) { }"); + + MT("atMediaUnknownFeatureValueKeyword", + "[def @media] ([property orientation]: [error upsidedown]) { }"); + + MT("tagSelector", + "[tag foo] { }"); + + MT("classSelector", + "[qualifier .foo-bar_hello] { }"); + + MT("idSelector", + "[builtin #foo] { [error #foo] }"); + + MT("tagSelectorUnclosed", + "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); + + MT("tagStringNoQuotes", + "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); + + MT("tagStringDouble", + "[tag foo] { [property font-family]: [string \"hello world\"]; }"); + + MT("tagStringSingle", + "[tag foo] { [property font-family]: [string 'hello world']; }"); + + MT("tagColorKeyword", + "[tag foo] {", + " [property color]: [keyword black];", + " [property color]: [keyword navy];", + " [property color]: [keyword yellow];", + "}"); + + MT("tagColorHex3", + "[tag foo] { [property background]: [atom #fff]; }"); + + MT("tagColorHex4", + "[tag foo] { [property background]: [atom #ffff]; }"); + + MT("tagColorHex6", + "[tag foo] { [property background]: [atom #ffffff]; }"); + + MT("tagColorHex8", + "[tag foo] { [property background]: [atom #ffffffff]; }"); + + MT("tagColorHex5Invalid", + "[tag foo] { [property background]: [atom&error #fffff]; }"); + + MT("tagColorHexInvalid", + "[tag foo] { [property background]: [atom&error #ffg]; }"); + + MT("tagNegativeNumber", + "[tag foo] { [property margin]: [number -5px]; }"); + + MT("tagPositiveNumber", + "[tag foo] { [property padding]: [number 5px]; }"); + + MT("tagVendor", + "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); + + MT("tagBogusProperty", + "[tag foo] { [property&error barhelloworld]: [number 0]; }"); + + MT("tagTwoProperties", + "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); + + MT("tagTwoPropertiesURL", + "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); + + MT("indent_tagSelector", + "[tag strong], [tag em] {", + " [property background]: [atom rgba](", + " [number 255], [number 255], [number 0], [number .2]", + " );", + "}"); + + MT("indent_atMedia", + "[def @media] {", + " [tag foo] {", + " [property color]:", + " [keyword yellow];", + " }", + "}"); + + MT("indent_comma", + "[tag foo] {", + " [property font-family]: [variable verdana],", + " [atom sans-serif];", + "}"); + + MT("indent_parentheses", + "[tag foo]:[variable-3 before] {", + " [property background]: [atom url](", + "[string blahblah]", + "[string etc]", + "[string ]) [keyword !important];", + "}"); + + MT("font_face", + "[def @font-face] {", + " [property font-family]: [string 'myfont'];", + " [error nonsense]: [string 'abc'];", + " [property src]: [atom url]([string http://blah]),", + " [atom url]([string http://foo]);", + "}"); + + MT("empty_url", + "[def @import] [atom url]() [attribute screen];"); + + MT("parens", + "[qualifier .foo] {", + " [property background-image]: [variable fade]([atom #000], [number 20%]);", + " [property border-image]: [atom linear-gradient](", + " [atom to] [atom bottom],", + " [variable fade]([atom #000], [number 20%]) [number 0%],", + " [variable fade]([atom #000], [number 20%]) [number 100%]", + " );", + "}"); + + MT("css_variable", + ":[variable-3 root] {", + " [variable-2 --main-color]: [atom #06c];", + "}", + "[tag h1][builtin #foo] {", + " [property color]: [atom var]([variable-2 --main-color]);", + "}"); + + MT("supports", + "[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {", + " [property text-align-last]: [atom justify];", + "}"); + + MT("document", + "[def @document] [tag url]([string http://blah]),", + " [tag url-prefix]([string https://]),", + " [tag domain]([string blah.com]),", + " [tag regexp]([string \".*blah.+\"]) {", + " [builtin #id] {", + " [property background-color]: [keyword white];", + " }", + " [tag foo] {", + " [property font-family]: [variable Verdana], [atom sans-serif];", + " }", + "}"); + + MT("document_url", + "[def @document] [tag url]([string http://blah]) { [qualifier .class] { } }"); + + MT("document_urlPrefix", + "[def @document] [tag url-prefix]([string https://]) { [builtin #id] { } }"); + + MT("document_domain", + "[def @document] [tag domain]([string blah.com]) { [tag foo] { } }"); + + MT("document_regexp", + "[def @document] [tag regexp]([string \".*blah.+\"]) { [builtin #id] { } }"); + + MT("counter-style", + "[def @counter-style] [variable binary] {", + " [property system]: [atom numeric];", + " [property symbols]: [number 0] [number 1];", + " [property suffix]: [string \".\"];", + " [property range]: [atom infinite];", + " [property speak-as]: [atom numeric];", + "}"); + + MT("counter-style-additive-symbols", + "[def @counter-style] [variable simple-roman] {", + " [property system]: [atom additive];", + " [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];", + " [property range]: [number 1] [number 49];", + "}"); + + MT("counter-style-use", + "[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }"); + + MT("counter-style-symbols", + "[tag ol] { [property list-style]: [atom symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }"); +})(); diff --git a/libraries/codemirror/mode/cypher/cypher.js b/libraries/codemirror/mode/cypher/cypher.js new file mode 100644 index 0000000..107e4f6 --- /dev/null +++ b/libraries/codemirror/mode/cypher/cypher.js @@ -0,0 +1,146 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// By the Neo4j Team and contributors. +// https://github.com/neo4j-contrib/CodeMirror + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var wordRegexp = function(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + }; + + CodeMirror.defineMode("cypher", function(config) { + var tokenBase = function(stream/*, state*/) { + var ch = stream.next(); + if (ch === "\"" || ch === "'") { + stream.match(/.+?["']/); + return "string"; + } + if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return "node"; + } else if (ch === "/" && stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } else { + stream.eatWhile(/[_\w\d]/); + if (stream.eat(":")) { + stream.eatWhile(/[\w\d_\-]/); + return "atom"; + } + var word = stream.current(); + if (funcs.test(word)) return "builtin"; + if (preds.test(word)) return "def"; + if (keywords.test(word)) return "keyword"; + return "variable"; + } + }; + var pushContext = function(state, type, col) { + return state.context = { + prev: state.context, + indent: state.indent, + col: col, + type: type + }; + }; + var popContext = function(state) { + state.indent = state.context.indent; + return state.context = state.context.prev; + }; + var indentUnit = config.indentUnit; + var curPunc; + var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]); + var preds = wordRegexp(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]); + var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with"]); + var operatorChars = /[*+\-<>=&|~%^]/; + + return { + startState: function(/*base*/) { + return { + tokenize: tokenBase, + context: null, + indent: 0, + col: 0 + }; + }, + token: function(stream, state) { + if (stream.sol()) { + if (state.context && (state.context.align == null)) { + state.context.align = false; + } + state.indent = stream.indentation(); + } + if (stream.eatSpace()) { + return null; + } + var style = state.tokenize(stream, state); + if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { + state.context.align = true; + } + if (curPunc === "(") { + pushContext(state, ")", stream.column()); + } else if (curPunc === "[") { + pushContext(state, "]", stream.column()); + } else if (curPunc === "{") { + pushContext(state, "}", stream.column()); + } else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type === "pattern") { + popContext(state); + } + if (state.context && curPunc === state.context.type) { + popContext(state); + } + } else if (curPunc === "." && state.context && state.context.type === "pattern") { + popContext(state); + } else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) { + pushContext(state, "pattern", stream.column()); + } else if (state.context.type === "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + return style; + }, + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) { + while (context && context.type === "pattern") { + context = context.prev; + } + } + var closing = context && firstChar === context.type; + if (!context) return 0; + if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; + if (context.align) return context.col + (closing ? 0 : 1); + return context.indent + (closing ? 0 : indentUnit); + } + }; + }); + + CodeMirror.modeExtensions["cypher"] = { + autoFormatLineBreaks: function(text) { + var i, lines, reProcessedPortion; + var lines = text.split("\n"); + var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); + return lines.join("\n"); + } + }; + + CodeMirror.defineMIME("application/x-cypher-query", "cypher"); + +}); diff --git a/libraries/codemirror/mode/cypher/index.html b/libraries/codemirror/mode/cypher/index.html new file mode 100644 index 0000000..b8bd75c --- /dev/null +++ b/libraries/codemirror/mode/cypher/index.html @@ -0,0 +1,63 @@ + + +CodeMirror: Cypher Mode for CodeMirror + + + + + + + + + + +
          +

          Cypher Mode for CodeMirror

          +
          + +
          +

          MIME types defined: + application/x-cypher-query +

          + + +
          diff --git a/libraries/codemirror/mode/d/d.js b/libraries/codemirror/mode/d/d.js new file mode 100644 index 0000000..c927a7e --- /dev/null +++ b/libraries/codemirror/mode/d/d.js @@ -0,0 +1,218 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("d", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("+")) { + state.tokenize = tokenComment; + return tokenNestedComment(stream, state); + } + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenNestedComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "+"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + + "out scope struct switch try union unittest version while with"; + + CodeMirror.defineMIME("text/x-d", { + name: "d", + keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + + "debug default delegate delete deprecated export extern final finally function goto immutable " + + "import inout invariant is lazy macro module new nothrow override package pragma private " + + "protected public pure ref return shared short static super synchronized template this " + + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + + blockKeywords), + blockKeywords: words(blockKeywords), + builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), + atoms: words("exit failure success true false null"), + hooks: { + "@": function(stream, _state) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + +}); diff --git a/libraries/codemirror/mode/d/index.html b/libraries/codemirror/mode/d/index.html new file mode 100644 index 0000000..08cabd8 --- /dev/null +++ b/libraries/codemirror/mode/d/index.html @@ -0,0 +1,273 @@ + + +CodeMirror: D mode + + + + + + + + + + +
          +

          D mode

          +
          + + + +

          Simple mode that handle D-Syntax (DLang Homepage).

          + +

          MIME types defined: text/x-d + .

          +
          diff --git a/libraries/codemirror/mode/dart/dart.js b/libraries/codemirror/mode/dart/dart.js new file mode 100644 index 0000000..d92eb51 --- /dev/null +++ b/libraries/codemirror/mode/dart/dart.js @@ -0,0 +1,130 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var keywords = ("this super static final const abstract class extends external factory " + + "implements get native operator set typedef with enum throw rethrow " + + "assert break case continue default in return new deferred async await " + + "try catch finally do else for if switch while import library export " + + "part of show hide is as").split(" "); + var blockKeywords = "try catch finally do else for if switch while".split(" "); + var atoms = "true false null".split(" "); + var builtins = "void bool num int double dynamic var String".split(" "); + + function set(words) { + var obj = {}; + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function pushInterpolationStack(state) { + (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize); + } + + function popInterpolationStack(state) { + return (state.interpolationStack || (state.interpolationStack = [])).pop(); + } + + function sizeInterpolationStack(state) { + return state.interpolationStack ? state.interpolationStack.length : 0; + } + + CodeMirror.defineMIME("application/dart", { + name: "clike", + keywords: set(keywords), + blockKeywords: set(blockKeywords), + builtin: set(builtins), + atoms: set(atoms), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_\.]/); + return "meta"; + }, + + // custom string handling to deal with triple-quoted strings and string interpolation + "'": function(stream, state) { + return tokenString("'", stream, state, false); + }, + "\"": function(stream, state) { + return tokenString("\"", stream, state, false); + }, + "r": function(stream, state) { + var peek = stream.peek(); + if (peek == "'" || peek == "\"") { + return tokenString(stream.next(), stream, state, true); + } + return false; + }, + + "}": function(_stream, state) { + // "}" is end of interpolation, if interpolation stack is non-empty + if (sizeInterpolationStack(state) > 0) { + state.tokenize = popInterpolationStack(state); + return null; + } + return false; + } + } + }); + + function tokenString(quote, stream, state, raw) { + var tripleQuoted = false; + if (stream.eat(quote)) { + if (stream.eat(quote)) tripleQuoted = true; + else return "string"; //empty string + } + function tokenStringHelper(stream, state) { + var escaped = false; + while (!stream.eol()) { + if (!raw && !escaped && stream.peek() == "$") { + pushInterpolationStack(state); + state.tokenize = tokenInterpolation; + return "string"; + } + var next = stream.next(); + if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) { + state.tokenize = null; + break; + } + escaped = !raw && !escaped && next == "\\"; + } + return "string"; + } + state.tokenize = tokenStringHelper; + return tokenStringHelper(stream, state); + } + + function tokenInterpolation(stream, state) { + stream.eat("$"); + if (stream.eat("{")) { + // let clike handle the content of ${...}, + // we take over again when "}" appears (see hooks). + state.tokenize = null; + } else { + state.tokenize = tokenInterpolationIdentifier; + } + return null; + } + + function tokenInterpolationIdentifier(stream, state) { + stream.eatWhile(/[\w_]/); + state.tokenize = popInterpolationStack(state); + return "variable"; + } + + CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); + + // This is needed to make loading through meta.js work. + CodeMirror.defineMode("dart", function(conf) { + return CodeMirror.getMode(conf, "application/dart"); + }, "clike"); +}); diff --git a/libraries/codemirror/mode/dart/index.html b/libraries/codemirror/mode/dart/index.html new file mode 100644 index 0000000..e79da5a --- /dev/null +++ b/libraries/codemirror/mode/dart/index.html @@ -0,0 +1,71 @@ + + +CodeMirror: Dart mode + + + + + + + + + +
          +

          Dart mode

          +
          + +
          + + + +
          diff --git a/libraries/codemirror/mode/diff/diff.js b/libraries/codemirror/mode/diff/diff.js new file mode 100644 index 0000000..fe0305e --- /dev/null +++ b/libraries/codemirror/mode/diff/diff.js @@ -0,0 +1,47 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("diff", function() { + + var TOKEN_NAMES = { + '+': 'positive', + '-': 'negative', + '@': 'meta' + }; + + return { + token: function(stream) { + var tw_pos = stream.string.search(/[\t ]+?$/); + + if (!stream.sol() || tw_pos === 0) { + stream.skipToEnd(); + return ("error " + ( + TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); + } + + var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); + + if (tw_pos === -1) { + stream.skipToEnd(); + } else { + stream.pos = tw_pos; + } + + return token_name; + } + }; +}); + +CodeMirror.defineMIME("text/x-diff", "diff"); + +}); diff --git a/libraries/codemirror/mode/diff/index.html b/libraries/codemirror/mode/diff/index.html new file mode 100644 index 0000000..0af611f --- /dev/null +++ b/libraries/codemirror/mode/diff/index.html @@ -0,0 +1,117 @@ + + +CodeMirror: Diff mode + + + + + + + + + +
          +

          Diff mode

          +
          + + +

          MIME types defined: text/x-diff.

          + +
          diff --git a/libraries/codemirror/mode/django/django.js b/libraries/codemirror/mode/django/django.js new file mode 100644 index 0000000..a8a7d83 --- /dev/null +++ b/libraries/codemirror/mode/django/django.js @@ -0,0 +1,356 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("django:inner", function() { + var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter", + "loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import", + "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", + "endifnotequal", "extends", "include", "load", "comment", "endcomment", + "empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now", + "regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle", + "csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless", + "ssi", "templatetag", "verbatim", "endverbatim", "widthratio"], + filters = ["add", "addslashes", "capfirst", "center", "cut", "date", + "default", "default_if_none", "dictsort", + "dictsortreversed", "divisibleby", "escape", "escapejs", + "filesizeformat", "first", "floatformat", "force_escape", + "get_digit", "iriencode", "join", "last", "length", + "length_is", "linebreaks", "linebreaksbr", "linenumbers", + "ljust", "lower", "make_list", "phone2numeric", "pluralize", + "pprint", "random", "removetags", "rjust", "safe", + "safeseq", "slice", "slugify", "stringformat", "striptags", + "time", "timesince", "timeuntil", "title", "truncatechars", + "truncatechars_html", "truncatewords", "truncatewords_html", + "unordered_list", "upper", "urlencode", "urlize", + "urlizetrunc", "wordcount", "wordwrap", "yesno"], + operators = ["==", "!=", "<", ">", "<=", ">="], + wordOperators = ["in", "not", "or", "and"]; + + keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b"); + filters = new RegExp("^\\b(" + filters.join("|") + ")\\b"); + operators = new RegExp("^\\b(" + operators.join("|") + ")\\b"); + wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b"); + + // We have to return "null" instead of null, in order to avoid string + // styling as the default, when using Django templates inside HTML + // element attributes + function tokenBase (stream, state) { + // Attempt to identify a variable, template or comment tag respectively + if (stream.match("{{")) { + state.tokenize = inVariable; + return "tag"; + } else if (stream.match("{%")) { + state.tokenize = inTag; + return "tag"; + } else if (stream.match("{#")) { + state.tokenize = inComment; + return "comment"; + } + + // Ignore completely any stream series that do not match the + // Django template opening tags. + while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {} + return null; + } + + // A string can be included in either single or double quotes (this is + // the delimeter). Mark everything as a string until the start delimeter + // occurs again. + function inString (delimeter, previousTokenizer) { + return function (stream, state) { + if (!state.escapeNext && stream.eat(delimeter)) { + state.tokenize = previousTokenizer; + } else { + if (state.escapeNext) { + state.escapeNext = false; + } + + var ch = stream.next(); + + // Take into account the backslash for escaping characters, such as + // the string delimeter. + if (ch == "\\") { + state.escapeNext = true; + } + } + + return "string"; + }; + } + + // Apply Django template variable syntax highlighting + function inVariable (stream, state) { + // Attempt to match a dot that precedes a property + if (state.waitDot) { + state.waitDot = false; + + if (stream.peek() != ".") { + return "null"; + } + + // Dot folowed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat(".")) { + state.waitProperty = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for property."); + } + } + + // Attempt to match a pipe that precedes a filter + if (state.waitPipe) { + state.waitPipe = false; + + if (stream.peek() != "|") { + return "null"; + } + + // Pipe folowed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat("|")) { + state.waitFilter = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for filter."); + } + } + + // Highlight properties + if (state.waitProperty) { + state.waitProperty = false; + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; // A property can be followed by another property + state.waitPipe = true; // A property can be followed by a filter + return "property"; + } + } + + // Highlight filters + if (state.waitFilter) { + state.waitFilter = false; + if (stream.match(filters)) { + return "variable-2"; + } + } + + // Ignore all white spaces + if (stream.eatSpace()) { + state.waitProperty = false; + return "null"; + } + + // Identify numbers + if (stream.match(/\b\d+(\.\d+)?\b/)) { + return "number"; + } + + // Identify strings + if (stream.match("'")) { + state.tokenize = inString("'", state.tokenize); + return "string"; + } else if (stream.match('"')) { + state.tokenize = inString('"', state.tokenize); + return "string"; + } + + // Attempt to find the variable + if (stream.match(/\b(\w+)\b/) && !state.foundVariable) { + state.waitDot = true; + state.waitPipe = true; // A property can be followed by a filter + return "variable"; + } + + // If found closing tag reset + if (stream.match("}}")) { + state.waitProperty = null; + state.waitFilter = null; + state.waitDot = null; + state.waitPipe = null; + state.tokenize = tokenBase; + return "tag"; + } + + // If nothing was found, advance to the next character + stream.next(); + return "null"; + } + + function inTag (stream, state) { + // Attempt to match a dot that precedes a property + if (state.waitDot) { + state.waitDot = false; + + if (stream.peek() != ".") { + return "null"; + } + + // Dot folowed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat(".")) { + state.waitProperty = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for property."); + } + } + + // Attempt to match a pipe that precedes a filter + if (state.waitPipe) { + state.waitPipe = false; + + if (stream.peek() != "|") { + return "null"; + } + + // Pipe folowed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat("|")) { + state.waitFilter = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for filter."); + } + } + + // Highlight properties + if (state.waitProperty) { + state.waitProperty = false; + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; // A property can be followed by another property + state.waitPipe = true; // A property can be followed by a filter + return "property"; + } + } + + // Highlight filters + if (state.waitFilter) { + state.waitFilter = false; + if (stream.match(filters)) { + return "variable-2"; + } + } + + // Ignore all white spaces + if (stream.eatSpace()) { + state.waitProperty = false; + return "null"; + } + + // Identify numbers + if (stream.match(/\b\d+(\.\d+)?\b/)) { + return "number"; + } + + // Identify strings + if (stream.match("'")) { + state.tokenize = inString("'", state.tokenize); + return "string"; + } else if (stream.match('"')) { + state.tokenize = inString('"', state.tokenize); + return "string"; + } + + // Attempt to match an operator + if (stream.match(operators)) { + return "operator"; + } + + // Attempt to match a word operator + if (stream.match(wordOperators)) { + return "keyword"; + } + + // Attempt to match a keyword + var keywordMatch = stream.match(keywords); + if (keywordMatch) { + if (keywordMatch[0] == "comment") { + state.blockCommentTag = true; + } + return "keyword"; + } + + // Attempt to match a variable + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; + state.waitPipe = true; // A property can be followed by a filter + return "variable"; + } + + // If found closing tag reset + if (stream.match("%}")) { + state.waitProperty = null; + state.waitFilter = null; + state.waitDot = null; + state.waitPipe = null; + // If the tag that closes is a block comment tag, we want to mark the + // following code as comment, until the tag closes. + if (state.blockCommentTag) { + state.blockCommentTag = false; // Release the "lock" + state.tokenize = inBlockComment; + } else { + state.tokenize = tokenBase; + } + return "tag"; + } + + // If nothing was found, advance to the next character + stream.next(); + return "null"; + } + + // Mark everything as comment inside the tag and the tag itself. + function inComment (stream, state) { + if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase + else stream.skipToEnd() + return "comment"; + } + + // Mark everything as a comment until the `blockcomment` tag closes. + function inBlockComment (stream, state) { + if (stream.match(/\{%\s*endcomment\s*%\}/, false)) { + state.tokenize = inTag; + stream.match("{%"); + return "tag"; + } else { + stream.next(); + return "comment"; + } + } + + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + }, + blockCommentStart: "{% comment %}", + blockCommentEnd: "{% endcomment %}" + }; + }); + + CodeMirror.defineMode("django", function(config) { + var htmlBase = CodeMirror.getMode(config, "text/html"); + var djangoInner = CodeMirror.getMode(config, "django:inner"); + return CodeMirror.overlayMode(htmlBase, djangoInner); + }); + + CodeMirror.defineMIME("text/x-django", "django"); +}); diff --git a/libraries/codemirror/mode/django/index.html b/libraries/codemirror/mode/django/index.html new file mode 100644 index 0000000..41ea07c --- /dev/null +++ b/libraries/codemirror/mode/django/index.html @@ -0,0 +1,73 @@ + + +CodeMirror: Django template mode + + + + + + + + + + + + + +
          +

          Django template mode

          +
          + + + +

          Mode for HTML with embedded Django template markup.

          + +

          MIME types defined: text/x-django

          +
          diff --git a/libraries/codemirror/mode/dockerfile/dockerfile.js b/libraries/codemirror/mode/dockerfile/dockerfile.js new file mode 100644 index 0000000..4419009 --- /dev/null +++ b/libraries/codemirror/mode/dockerfile/dockerfile.js @@ -0,0 +1,79 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + // Collect all Dockerfile directives + var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", + "add", "copy", "entrypoint", "volume", "user", + "workdir", "onbuild"], + instructionRegex = "(" + instructions.join('|') + ")", + instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), + instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); + + CodeMirror.defineSimpleMode("dockerfile", { + start: [ + // Block comment: This is a line starting with a comment + { + regex: /#.*$/, + token: "comment" + }, + // Highlight an instruction without any arguments (for convenience) + { + regex: instructionOnlyLine, + token: "variable-2" + }, + // Highlight an instruction followed by arguments + { + regex: instructionWithArguments, + token: ["variable-2", null], + next: "arguments" + }, + { + regex: /./, + token: null + } + ], + arguments: [ + { + // Line comment without instruction arguments is an error + regex: /#.*$/, + token: "error", + next: "start" + }, + { + regex: /[^#]+\\$/, + token: null + }, + { + // Match everything except for the inline comment + regex: /[^#]+/, + token: null, + next: "start" + }, + { + regex: /$/, + token: null, + next: "start" + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ], + meta: { + lineComment: "#" + } + }); + + CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); +}); diff --git a/libraries/codemirror/mode/dockerfile/index.html b/libraries/codemirror/mode/dockerfile/index.html new file mode 100644 index 0000000..a31759b --- /dev/null +++ b/libraries/codemirror/mode/dockerfile/index.html @@ -0,0 +1,73 @@ + + +CodeMirror: Dockerfile mode + + + + + + + + + + +
          +

          Dockerfile mode

          +
          + + + +

          Dockerfile syntax highlighting for CodeMirror. Depends on + the simplemode addon.

          + +

          MIME types defined: text/x-dockerfile

          +
          diff --git a/libraries/codemirror/mode/dtd/dtd.js b/libraries/codemirror/mode/dtd/dtd.js new file mode 100644 index 0000000..f37029a --- /dev/null +++ b/libraries/codemirror/mode/dtd/dtd.js @@ -0,0 +1,142 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* + DTD mode + Ported to CodeMirror by Peter Kroon + Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues + GitHub: @peterkroon +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("dtd", function(config) { + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch == "<" && stream.eat("!") ) { + if (stream.eatWhile(/[\-]/)) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); + } else if (ch == "<" && stream.eat("?")) { //xml declaration + state.tokenize = inBlock("meta", "?>"); + return ret("meta", ch); + } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); + else if (ch == "|") return ret("keyword", "seperator"); + else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else + else if (ch.match(/[\[\]]/)) return ret("rule", ch); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { + var sc = stream.current(); + if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); + return ret("tag", "tag"); + } else if (ch == "%" || ch == "*" ) return ret("number", "number"); + else { + stream.eatWhile(/[\w\\\-_%.{,]/); + return ret(null, null); + } + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return ret("string", "tag"); + }; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = tokenBase; + break; + } + stream.next(); + } + return style; + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); + else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; + else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); + else if (type == "[") state.stack.push("["); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + + if( textAfter.match(/\]\s+|\]/) )n=n-1; + else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ + if(textAfter.substr(0,1) === "<")n; + else if( type == "doindent" && textAfter.length > 1 )n; + else if( type == "doindent")n--; + else if( type == ">" && textAfter.length > 1)n; + else if( type == "tag" && textAfter !== ">")n; + else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; + else if( type == "tag")n++; + else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; + else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule")n; + else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; + else if( textAfter === ">")n; + else n=n-1; + //over rule them all + if(type == null || type == "]")n--; + } + + return state.baseIndent + n * indentUnit; + }, + + electricChars: "]>" + }; +}); + +CodeMirror.defineMIME("application/xml-dtd", "dtd"); + +}); diff --git a/libraries/codemirror/mode/dtd/index.html b/libraries/codemirror/mode/dtd/index.html new file mode 100644 index 0000000..e6798a7 --- /dev/null +++ b/libraries/codemirror/mode/dtd/index.html @@ -0,0 +1,89 @@ + + +CodeMirror: DTD mode + + + + + + + + + +
          +

          DTD mode

          +
          + + +

          MIME types defined: application/xml-dtd.

          +
          diff --git a/libraries/codemirror/mode/dylan/dylan.js b/libraries/codemirror/mode/dylan/dylan.js new file mode 100644 index 0000000..85f0166 --- /dev/null +++ b/libraries/codemirror/mode/dylan/dylan.js @@ -0,0 +1,291 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("dylan", function(_config) { + // Words + var words = { + // Words that introduce unnamed definitions like "define interface" + unnamedDefinition: ["interface"], + + // Words that introduce simple named definitions like "define library" + namedDefinition: ["module", "library", "macro", + "C-struct", "C-union", + "C-function", "C-callable-wrapper" + ], + + // Words that introduce type definitions like "define class". + // These are also parameterized like "define method" and are + // appended to otherParameterizedDefinitionWords + typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], + + // Words that introduce trickier definitions like "define method". + // These require special definitions to be added to startExpressions + otherParameterizedDefinition: ["method", "function", + "C-variable", "C-address" + ], + + // Words that introduce module constant definitions. + // These must also be simple definitions and are + // appended to otherSimpleDefinitionWords + constantSimpleDefinition: ["constant"], + + // Words that introduce module variable definitions. + // These must also be simple definitions and are + // appended to otherSimpleDefinitionWords + variableSimpleDefinition: ["variable"], + + // Other words that introduce simple definitions + // (without implicit bodies). + otherSimpleDefinition: ["generic", "domain", + "C-pointer-type", + "table" + ], + + // Words that begin statements with implicit bodies. + statement: ["if", "block", "begin", "method", "case", + "for", "select", "when", "unless", "until", + "while", "iterate", "profiling", "dynamic-bind" + ], + + // Patterns that act as separators in compound statements. + // This may include any general pattern that must be indented + // specially. + separator: ["finally", "exception", "cleanup", "else", + "elseif", "afterwards" + ], + + // Keywords that do not require special indentation handling, + // but which should be highlighted + other: ["above", "below", "by", "from", "handler", "in", + "instance", "let", "local", "otherwise", "slot", + "subclass", "then", "to", "keyed-by", "virtual" + ], + + // Condition signaling function calls + signalingCalls: ["signal", "error", "cerror", + "break", "check-type", "abort" + ] + }; + + words["otherDefinition"] = + words["unnamedDefinition"] + .concat(words["namedDefinition"]) + .concat(words["otherParameterizedDefinition"]); + + words["definition"] = + words["typeParameterizedDefinition"] + .concat(words["otherDefinition"]); + + words["parameterizedDefinition"] = + words["typeParameterizedDefinition"] + .concat(words["otherParameterizedDefinition"]); + + words["simpleDefinition"] = + words["constantSimpleDefinition"] + .concat(words["variableSimpleDefinition"]) + .concat(words["otherSimpleDefinition"]); + + words["keyword"] = + words["statement"] + .concat(words["separator"]) + .concat(words["other"]); + + // Patterns + var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; + var symbol = new RegExp("^" + symbolPattern); + var patterns = { + // Symbols with special syntax + symbolKeyword: symbolPattern + ":", + symbolClass: "<" + symbolPattern + ">", + symbolGlobal: "\\*" + symbolPattern + "\\*", + symbolConstant: "\\$" + symbolPattern + }; + var patternStyles = { + symbolKeyword: "atom", + symbolClass: "tag", + symbolGlobal: "variable-2", + symbolConstant: "variable-3" + }; + + // Compile all patterns to regular expressions + for (var patternName in patterns) + if (patterns.hasOwnProperty(patternName)) + patterns[patternName] = new RegExp("^" + patterns[patternName]); + + // Names beginning "with-" and "without-" are commonly + // used as statement macro + patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; + + var styles = {}; + styles["keyword"] = "keyword"; + styles["definition"] = "def"; + styles["simpleDefinition"] = "def"; + styles["signalingCalls"] = "builtin"; + + // protected words lookup table + var wordLookup = {}; + var styleLookup = {}; + + [ + "keyword", + "definition", + "simpleDefinition", + "signalingCalls" + ].forEach(function(type) { + words[type].forEach(function(word) { + wordLookup[word] = type; + styleLookup[word] = styles[type]; + }); + }); + + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenBase(stream, state) { + // String + var ch = stream.peek(); + if (ch == "'" || ch == '"') { + stream.next(); + return chain(stream, state, tokenString(ch, "string")); + } + // Comment + else if (ch == "/") { + stream.next(); + if (stream.eat("*")) { + return chain(stream, state, tokenComment); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } else { + stream.skipTo(" "); + return "operator"; + } + } + // Decimal + else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:e[+\-]?\d+)?/); + return "number"; + } + // Hash + else if (ch == "#") { + stream.next(); + // Symbol with string syntax + ch = stream.peek(); + if (ch == '"') { + stream.next(); + return chain(stream, state, tokenString('"', "string-2")); + } + // Binary number + else if (ch == "b") { + stream.next(); + stream.eatWhile(/[01]/); + return "number"; + } + // Hex number + else if (ch == "x") { + stream.next(); + stream.eatWhile(/[\da-f]/i); + return "number"; + } + // Octal number + else if (ch == "o") { + stream.next(); + stream.eatWhile(/[0-7]/); + return "number"; + } + // Hash symbol + else { + stream.eatWhile(/[-a-zA-Z]/); + return "keyword"; + } + } else if (stream.match("end")) { + return "keyword"; + } + for (var name in patterns) { + if (patterns.hasOwnProperty(name)) { + var pattern = patterns[name]; + if ((pattern instanceof Array && pattern.some(function(p) { + return stream.match(p); + })) || stream.match(pattern)) + return patternStyles[name]; + } + } + if (stream.match("define")) { + return "def"; + } else { + stream.eatWhile(/[\w\-]/); + // Keyword + if (wordLookup[stream.current()]) { + return styleLookup[stream.current()]; + } else if (stream.current().match(symbol)) { + return "variable"; + } else { + stream.next(); + return "variable-2"; + } + } + } + + function tokenComment(stream, state) { + var maybeEnd = false, + ch; + while ((ch = stream.next())) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote, style) { + return function(stream, state) { + var next, end = false; + while ((next = stream.next()) != null) { + if (next == quote) { + end = true; + break; + } + } + if (end) + state.tokenize = tokenBase; + return style; + }; + } + + // Interface + return { + startState: function() { + return { + tokenize: tokenBase, + currentIndent: 0 + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) + return null; + var style = state.tokenize(stream, state); + return style; + }, + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +CodeMirror.defineMIME("text/x-dylan", "dylan"); + +}); diff --git a/libraries/codemirror/mode/dylan/index.html b/libraries/codemirror/mode/dylan/index.html new file mode 100644 index 0000000..ddf5ad0 --- /dev/null +++ b/libraries/codemirror/mode/dylan/index.html @@ -0,0 +1,407 @@ + + +CodeMirror: Dylan mode + + + + + + + + + + + + +
          +

          Dylan mode

          + + +
          + + + +

          MIME types defined: text/x-dylan.

          +
          diff --git a/libraries/codemirror/mode/ebnf/ebnf.js b/libraries/codemirror/mode/ebnf/ebnf.js new file mode 100644 index 0000000..6b51aba --- /dev/null +++ b/libraries/codemirror/mode/ebnf/ebnf.js @@ -0,0 +1,195 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ebnf", function (config) { + var commentType = {slash: 0, parenthesis: 1}; + var stateType = {comment: 0, _string: 1, characterClass: 2}; + var bracesMode = null; + + if (config.bracesMode) + bracesMode = CodeMirror.getMode(config, config.bracesMode); + + return { + startState: function () { + return { + stringType: null, + commentType: null, + braced: 0, + lhs: true, + localState: null, + stack: [], + inDefinition: false + }; + }, + token: function (stream, state) { + if (!stream) return; + + //check for state changes + if (state.stack.length === 0) { + //strings + if ((stream.peek() == '"') || (stream.peek() == "'")) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.stack.unshift(stateType._string); + } else if (stream.match(/^\/\*/)) { //comments starting with /* + state.stack.unshift(stateType.comment); + state.commentType = commentType.slash; + } else if (stream.match(/^\(\*/)) { //comments starting with (* + state.stack.unshift(stateType.comment); + state.commentType = commentType.parenthesis; + } + } + + //return state + //stack has + switch (state.stack[0]) { + case stateType._string: + while (state.stack[0] === stateType._string && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.stack.shift(); // Clear flag + } else if (stream.peek() === "\\") { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + + case stateType.comment: + while (state.stack[0] === stateType.comment && !stream.eol()) { + if (state.commentType === commentType.slash && stream.match(/\*\//)) { + state.stack.shift(); // Clear flag + state.commentType = null; + } else if (state.commentType === commentType.parenthesis && stream.match(/\*\)/)) { + state.stack.shift(); // Clear flag + state.commentType = null; + } else { + stream.match(/^.[^\*]*/); + } + } + return "comment"; + + case stateType.characterClass: + while (state.stack[0] === stateType.characterClass && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { + state.stack.shift(); + } + } + return "operator"; + } + + var peek = stream.peek(); + + if (bracesMode !== null && (state.braced || peek === "{")) { + if (state.localState === null) + state.localState = bracesMode.startState(); + + var token = bracesMode.token(stream, state.localState), + text = stream.current(); + + if (!token) { + for (var i = 0; i < text.length; i++) { + if (text[i] === "{") { + if (state.braced === 0) { + token = "matchingbracket"; + } + state.braced++; + } else if (text[i] === "}") { + state.braced--; + if (state.braced === 0) { + token = "matchingbracket"; + } + } + } + } + return token; + } + + //no stack + switch (peek) { + case "[": + stream.next(); + state.stack.unshift(stateType.characterClass); + return "bracket"; + case ":": + case "|": + case ";": + stream.next(); + return "operator"; + case "%": + if (stream.match("%%")) { + return "header"; + } else if (stream.match(/[%][A-Za-z]+/)) { + return "keyword"; + } else if (stream.match(/[%][}]/)) { + return "matchingbracket"; + } + break; + case "/": + if (stream.match(/[\/][A-Za-z]+/)) { + return "keyword"; + } + case "\\": + if (stream.match(/[\][a-z]+/)) { + return "string-2"; + } + case ".": + if (stream.match(".")) { + return "atom"; + } + case "*": + case "-": + case "+": + case "^": + if (stream.match(peek)) { + return "atom"; + } + case "$": + if (stream.match("$$")) { + return "builtin"; + } else if (stream.match(/[$][0-9]+/)) { + return "variable-3"; + } + case "<": + if (stream.match(/<<[a-zA-Z_]+>>/)) { + return "builtin"; + } + } + + if (stream.match(/^\/\//)) { + stream.skipToEnd(); + return "comment"; + } else if (stream.match(/return/)) { + return "operator"; + } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { + if (stream.match(/(?=[\(.])/)) { + return "variable"; + } else if (stream.match(/(?=[\s\n]*[:=])/)) { + return "def"; + } + return "variable-2"; + } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { + stream.next(); + return "bracket"; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; + }); + + CodeMirror.defineMIME("text/x-ebnf", "ebnf"); +}); diff --git a/libraries/codemirror/mode/ebnf/index.html b/libraries/codemirror/mode/ebnf/index.html new file mode 100644 index 0000000..1384562 --- /dev/null +++ b/libraries/codemirror/mode/ebnf/index.html @@ -0,0 +1,102 @@ + + + + CodeMirror: EBNF Mode + + + + + + + + + + + + +
          +

          EBNF Mode (bracesMode setting = "javascript")

          +
          + +

          The EBNF Mode

          +

          Created by Robert Plummer

          +
          + + diff --git a/libraries/codemirror/mode/ecl/ecl.js b/libraries/codemirror/mode/ecl/ecl.js new file mode 100644 index 0000000..8df7ebe --- /dev/null +++ b/libraries/codemirror/mode/ecl/ecl.js @@ -0,0 +1,206 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ecl", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function metaHook(stream, state) { + if (!state.startOfLine) return false; + stream.skipToEnd(); + return "meta"; + } + + var indentUnit = config.indentUnit; + var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); + var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); + var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); + var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); + var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); + var blockKeywords = words("catch class do else finally for if switch try while"); + var atoms = words("true false null"); + var hooks = {"#": metaHook}; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current().toLowerCase(); + if (keyword.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } else if (variable.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable"; + } else if (variable_2.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-2"; + } else if (variable_3.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-3"; + } else if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } else { //Data types are of from KEYWORD## + var i = cur.length - 1; + while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) + --i; + + if (i > 0) { + var cur2 = cur.substr(0, i + 1); + if (variable_3.propertyIsEnumerable(cur2)) { + if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; + return "variable-3"; + } + } + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return null; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-ecl", "ecl"); + +}); diff --git a/libraries/codemirror/mode/ecl/index.html b/libraries/codemirror/mode/ecl/index.html new file mode 100644 index 0000000..2306860 --- /dev/null +++ b/libraries/codemirror/mode/ecl/index.html @@ -0,0 +1,52 @@ + + +CodeMirror: ECL mode + + + + + + + + + +
          +

          ECL mode

          +
          + + +

          Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

          +

          MIME types defined: text/x-ecl.

          + +
          diff --git a/libraries/codemirror/mode/eiffel/eiffel.js b/libraries/codemirror/mode/eiffel/eiffel.js new file mode 100644 index 0000000..b8b70e3 --- /dev/null +++ b/libraries/codemirror/mode/eiffel/eiffel.js @@ -0,0 +1,160 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("eiffel", function() { + function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; + } + var keywords = wordObj([ + 'note', + 'across', + 'when', + 'variant', + 'until', + 'unique', + 'undefine', + 'then', + 'strip', + 'select', + 'retry', + 'rescue', + 'require', + 'rename', + 'reference', + 'redefine', + 'prefix', + 'once', + 'old', + 'obsolete', + 'loop', + 'local', + 'like', + 'is', + 'inspect', + 'infix', + 'include', + 'if', + 'frozen', + 'from', + 'external', + 'export', + 'ensure', + 'end', + 'elseif', + 'else', + 'do', + 'creation', + 'create', + 'check', + 'alias', + 'agent', + 'separate', + 'invariant', + 'inherit', + 'indexing', + 'feature', + 'expanded', + 'deferred', + 'class', + 'Void', + 'True', + 'Result', + 'Precursor', + 'False', + 'Current', + 'create', + 'attached', + 'detachable', + 'as', + 'and', + 'implies', + 'not', + 'or' + ]); + var operators = wordObj([":=", "and then","and", "or","<<",">>"]); + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + if (stream.eatSpace()) return null; + var ch = stream.next(); + if (ch == '"'||ch == "'") { + return chain(readQuoted(ch, "string"), stream, state); + } else if (ch == "-"&&stream.eat("-")) { + stream.skipToEnd(); + return "comment"; + } else if (ch == ":"&&stream.eat("=")) { + return "operator"; + } else if (/[0-9]/.test(ch)) { + stream.eatWhile(/[xXbBCc0-9\.]/); + stream.eat(/[\?\!]/); + return "ident"; + } else if (/[a-zA-Z_0-9]/.test(ch)) { + stream.eatWhile(/[a-zA-Z_0-9]/); + stream.eat(/[\?\!]/); + return "ident"; + } else if (/[=+\-\/*^%<>~]/.test(ch)) { + stream.eatWhile(/[=+\-\/*^%<>~]/); + return "operator"; + } else { + return null; + } + } + + function readQuoted(quote, style, unescaped) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + escaped = !escaped && ch == "%"; + } + return style; + }; + } + + return { + startState: function() { + return {tokenize: [tokenBase]}; + }, + + token: function(stream, state) { + var style = state.tokenize[state.tokenize.length-1](stream, state); + if (style == "ident") { + var word = stream.current(); + style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : operators.propertyIsEnumerable(stream.current()) ? "operator" + : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" + : /^0[bB][0-1]+$/g.test(word) ? "number" + : /^0[cC][0-7]+$/g.test(word) ? "number" + : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" + : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" + : /^[0-9]+$/g.test(word) ? "number" + : "variable"; + } + return style; + }, + lineComment: "--" + }; +}); + +CodeMirror.defineMIME("text/x-eiffel", "eiffel"); + +}); diff --git a/libraries/codemirror/mode/eiffel/index.html b/libraries/codemirror/mode/eiffel/index.html new file mode 100644 index 0000000..108a71b --- /dev/null +++ b/libraries/codemirror/mode/eiffel/index.html @@ -0,0 +1,429 @@ + + +CodeMirror: Eiffel mode + + + + + + + + + + +
          +

          Eiffel mode

          +
          + + +

          MIME types defined: text/x-eiffel.

          + +

          Created by YNH.

          +
          diff --git a/libraries/codemirror/mode/elm/elm.js b/libraries/codemirror/mode/elm/elm.js new file mode 100644 index 0000000..b31e663 --- /dev/null +++ b/libraries/codemirror/mode/elm/elm.js @@ -0,0 +1,205 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("elm", function() { + + function switchState(source, setState, f) { + setState(f); + return f(source, setState); + } + + // These should all be Unicode extended, as per the Haskell 2010 report + var smallRE = /[a-z_]/; + var largeRE = /[A-Z]/; + var digitRE = /[0-9]/; + var hexitRE = /[0-9A-Fa-f]/; + var octitRE = /[0-7]/; + var idRE = /[a-z_A-Z0-9\']/; + var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]/; + var specialRE = /[(),;[\]`{}]/; + var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer + + function normal() { + return function (source, setState) { + if (source.eatWhile(whiteCharRE)) { + return null; + } + + var ch = source.next(); + if (specialRE.test(ch)) { + if (ch == '{' && source.eat('-')) { + var t = "comment"; + if (source.eat('#')) t = "meta"; + return switchState(source, setState, ncomment(t, 1)); + } + return null; + } + + if (ch == '\'') { + if (source.eat('\\')) + source.next(); // should handle other escapes here + else + source.next(); + + if (source.eat('\'')) + return "string"; + return "error"; + } + + if (ch == '"') { + return switchState(source, setState, stringLiteral); + } + + if (largeRE.test(ch)) { + source.eatWhile(idRE); + if (source.eat('.')) + return "qualifier"; + return "variable-2"; + } + + if (smallRE.test(ch)) { + var isDef = source.pos === 1; + source.eatWhile(idRE); + return isDef ? "variable-3" : "variable"; + } + + if (digitRE.test(ch)) { + if (ch == '0') { + if (source.eat(/[xX]/)) { + source.eatWhile(hexitRE); // should require at least 1 + return "integer"; + } + if (source.eat(/[oO]/)) { + source.eatWhile(octitRE); // should require at least 1 + return "number"; + } + } + source.eatWhile(digitRE); + var t = "number"; + if (source.eat('.')) { + t = "number"; + source.eatWhile(digitRE); // should require at least 1 + } + if (source.eat(/[eE]/)) { + t = "number"; + source.eat(/[-+]/); + source.eatWhile(digitRE); // should require at least 1 + } + return t; + } + + if (symbolRE.test(ch)) { + if (ch == '-' && source.eat(/-/)) { + source.eatWhile(/-/); + if (!source.eat(symbolRE)) { + source.skipToEnd(); + return "comment"; + } + } + source.eatWhile(symbolRE); + return "builtin"; + } + + return "error"; + } + } + + function ncomment(type, nest) { + if (nest == 0) { + return normal(); + } + return function(source, setState) { + var currNest = nest; + while (!source.eol()) { + var ch = source.next(); + if (ch == '{' && source.eat('-')) { + ++currNest; + } else if (ch == '-' && source.eat('}')) { + --currNest; + if (currNest == 0) { + setState(normal()); + return type; + } + } + } + setState(ncomment(type, currNest)); + return type; + } + } + + function stringLiteral(source, setState) { + while (!source.eol()) { + var ch = source.next(); + if (ch == '"') { + setState(normal()); + return "string"; + } + if (ch == '\\') { + if (source.eol() || source.eat(whiteCharRE)) { + setState(stringGap); + return "string"; + } + if (!source.eat('&')) source.next(); // should handle other escapes here + } + } + setState(normal()); + return "error"; + } + + function stringGap(source, setState) { + if (source.eat('\\')) { + return switchState(source, setState, stringLiteral); + } + source.next(); + setState(normal()); + return "error"; + } + + + var wellKnownWords = (function() { + var wkw = {}; + + var keywords = [ + "case", "of", "as", + "if", "then", "else", + "let", "in", + "infix", "infixl", "infixr", + "type", "alias", + "input", "output", "foreign", "loopback", + "module", "where", "import", "exposing", + "_", "..", "|", ":", "=", "\\", "\"", "->", "<-" + ]; + + for (var i = keywords.length; i--;) + wkw[keywords[i]] = "keyword"; + + return wkw; + })(); + + + + return { + startState: function () { return { f: normal() }; }, + copyState: function (s) { return { f: s.f }; }, + + token: function(stream, state) { + var t = state.f(stream, function(s) { state.f = s; }); + var w = stream.current(); + return (wellKnownWords.hasOwnProperty(w)) ? wellKnownWords[w] : t; + } + }; + + }); + + CodeMirror.defineMIME("text/x-elm", "elm"); +}); diff --git a/libraries/codemirror/mode/elm/index.html b/libraries/codemirror/mode/elm/index.html new file mode 100644 index 0000000..d5cb16a --- /dev/null +++ b/libraries/codemirror/mode/elm/index.html @@ -0,0 +1,61 @@ + + +CodeMirror: Elm mode + + + + + + + + + +
          +

          Elm mode

          + +
          + + + +

          MIME types defined: text/x-elm.

          +
          diff --git a/libraries/codemirror/mode/erlang/erlang.js b/libraries/codemirror/mode/erlang/erlang.js new file mode 100644 index 0000000..5aed76a --- /dev/null +++ b/libraries/codemirror/mode/erlang/erlang.js @@ -0,0 +1,618 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/*jshint unused:true, eqnull:true, curly:true, bitwise:true */ +/*jshint undef:true, latedef:true, trailing:true */ +/*global CodeMirror:true */ + +// erlang mode. +// tokenizer -> token types -> CodeMirror styles +// tokenizer maintains a parse stack +// indenter uses the parse stack + +// TODO indenter: +// bit syntax +// old guard/bif/conversion clashes (e.g. "float/1") +// type/spec/opaque + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMIME("text/x-erlang", "erlang"); + +CodeMirror.defineMode("erlang", function(cmCfg) { + "use strict"; + +///////////////////////////////////////////////////////////////////////////// +// constants + + var typeWords = [ + "-type", "-spec", "-export_type", "-opaque"]; + + var keywordWords = [ + "after","begin","catch","case","cond","end","fun","if", + "let","of","query","receive","try","when"]; + + var separatorRE = /[\->,;]/; + var separatorWords = [ + "->",";",","]; + + var operatorAtomWords = [ + "and","andalso","band","bnot","bor","bsl","bsr","bxor", + "div","not","or","orelse","rem","xor"]; + + var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; + var operatorSymbolWords = [ + "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; + + var openParenRE = /[<\(\[\{]/; + var openParenWords = [ + "<<","(","[","{"]; + + var closeParenRE = /[>\)\]\}]/; + var closeParenWords = [ + "}","]",")",">>"]; + + var guardWords = [ + "is_atom","is_binary","is_bitstring","is_boolean","is_float", + "is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_record","is_reference","is_tuple", + "atom","binary","bitstring","boolean","function","integer","list", + "number","pid","port","record","reference","tuple"]; + + var bifWords = [ + "abs","adler32","adler32_combine","alive","apply","atom_to_binary", + "atom_to_list","binary_to_atom","binary_to_existing_atom", + "binary_to_list","binary_to_term","bit_size","bitstring_to_list", + "byte_size","check_process_code","contact_binary","crc32", + "crc32_combine","date","decode_packet","delete_module", + "disconnect_node","element","erase","exit","float","float_to_list", + "garbage_collect","get","get_keys","group_leader","halt","hd", + "integer_to_list","internal_bif","iolist_size","iolist_to_binary", + "is_alive","is_atom","is_binary","is_bitstring","is_boolean", + "is_float","is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_process_alive","is_record","is_reference","is_tuple", + "length","link","list_to_atom","list_to_binary","list_to_bitstring", + "list_to_existing_atom","list_to_float","list_to_integer", + "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", + "monitor_node","node","node_link","node_unlink","nodes","notalive", + "now","open_port","pid_to_list","port_close","port_command", + "port_connect","port_control","pre_loaded","process_flag", + "process_info","processes","purge_module","put","register", + "registered","round","self","setelement","size","spawn","spawn_link", + "spawn_monitor","spawn_opt","split_binary","statistics", + "term_to_binary","time","throw","tl","trunc","tuple_size", + "tuple_to_list","unlink","unregister","whereis"]; + +// upper case: [A-Z] [Ø-Þ] [À-Ö] +// lower case: [a-z] [ß-ö] [ø-ÿ] + var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; + var escapesRE = + /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; + +///////////////////////////////////////////////////////////////////////////// +// tokenizer + + function tokenizer(stream,state) { + // in multi-line string + if (state.in_string) { + state.in_string = (!doubleQuote(stream)); + return rval(state,stream,"string"); + } + + // in multi-line atom + if (state.in_atom) { + state.in_atom = (!singleQuote(stream)); + return rval(state,stream,"atom"); + } + + // whitespace + if (stream.eatSpace()) { + return rval(state,stream,"whitespace"); + } + + // attributes and type specs + if (!peekToken(state) && + stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { + if (is_member(stream.current(),typeWords)) { + return rval(state,stream,"type"); + }else{ + return rval(state,stream,"attribute"); + } + } + + var ch = stream.next(); + + // comment + if (ch == '%') { + stream.skipToEnd(); + return rval(state,stream,"comment"); + } + + // colon + if (ch == ":") { + return rval(state,stream,"colon"); + } + + // macro + if (ch == '?') { + stream.eatSpace(); + stream.eatWhile(anumRE); + return rval(state,stream,"macro"); + } + + // record + if (ch == "#") { + stream.eatSpace(); + stream.eatWhile(anumRE); + return rval(state,stream,"record"); + } + + // dollar escape + if (ch == "$") { + if (stream.next() == "\\" && !stream.match(escapesRE)) { + return rval(state,stream,"error"); + } + return rval(state,stream,"number"); + } + + // dot + if (ch == ".") { + return rval(state,stream,"dot"); + } + + // quoted atom + if (ch == '\'') { + if (!(state.in_atom = (!singleQuote(stream)))) { + if (stream.match(/\s*\/\s*[0-9]/,false)) { + stream.match(/\s*\/\s*[0-9]/,true); + return rval(state,stream,"fun"); // 'f'/0 style fun + } + if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { + return rval(state,stream,"function"); + } + } + return rval(state,stream,"atom"); + } + + // string + if (ch == '"') { + state.in_string = (!doubleQuote(stream)); + return rval(state,stream,"string"); + } + + // variable + if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { + stream.eatWhile(anumRE); + return rval(state,stream,"variable"); + } + + // atom/keyword/BIF/function + if (/[a-z_ß-öø-ÿ]/.test(ch)) { + stream.eatWhile(anumRE); + + if (stream.match(/\s*\/\s*[0-9]/,false)) { + stream.match(/\s*\/\s*[0-9]/,true); + return rval(state,stream,"fun"); // f/0 style fun + } + + var w = stream.current(); + + if (is_member(w,keywordWords)) { + return rval(state,stream,"keyword"); + }else if (is_member(w,operatorAtomWords)) { + return rval(state,stream,"operator"); + }else if (stream.match(/\s*\(/,false)) { + // 'put' and 'erlang:put' are bifs, 'foo:put' is not + if (is_member(w,bifWords) && + ((peekToken(state).token != ":") || + (peekToken(state,2).token == "erlang"))) { + return rval(state,stream,"builtin"); + }else if (is_member(w,guardWords)) { + return rval(state,stream,"guard"); + }else{ + return rval(state,stream,"function"); + } + }else if (lookahead(stream) == ":") { + if (w == "erlang") { + return rval(state,stream,"builtin"); + } else { + return rval(state,stream,"function"); + } + }else if (is_member(w,["true","false"])) { + return rval(state,stream,"boolean"); + }else{ + return rval(state,stream,"atom"); + } + } + + // number + var digitRE = /[0-9]/; + var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int + if (digitRE.test(ch)) { + stream.eatWhile(digitRE); + if (stream.eat('#')) { // 36#aZ style integer + if (!stream.eatWhile(radixRE)) { + stream.backUp(1); //"36#" - syntax error + } + } else if (stream.eat('.')) { // float + if (!stream.eatWhile(digitRE)) { + stream.backUp(1); // "3." - probably end of function + } else { + if (stream.eat(/[eE]/)) { // float with exponent + if (stream.eat(/[-+]/)) { + if (!stream.eatWhile(digitRE)) { + stream.backUp(2); // "2e-" - syntax error + } + } else { + if (!stream.eatWhile(digitRE)) { + stream.backUp(1); // "2e" - syntax error + } + } + } + } + } + return rval(state,stream,"number"); // normal integer + } + + // open parens + if (nongreedy(stream,openParenRE,openParenWords)) { + return rval(state,stream,"open_paren"); + } + + // close parens + if (nongreedy(stream,closeParenRE,closeParenWords)) { + return rval(state,stream,"close_paren"); + } + + // separators + if (greedy(stream,separatorRE,separatorWords)) { + return rval(state,stream,"separator"); + } + + // operators + if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { + return rval(state,stream,"operator"); + } + + return rval(state,stream,null); + } + +///////////////////////////////////////////////////////////////////////////// +// utilities + function nongreedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + stream.backUp(1); + while (re.test(stream.peek())) { + stream.next(); + if (is_member(stream.current(),words)) { + return true; + } + } + stream.backUp(stream.current().length-1); + } + return false; + } + + function greedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + while (re.test(stream.peek())) { + stream.next(); + } + while (0 < stream.current().length) { + if (is_member(stream.current(),words)) { + return true; + }else{ + stream.backUp(1); + } + } + stream.next(); + } + return false; + } + + function doubleQuote(stream) { + return quote(stream, '"', '\\'); + } + + function singleQuote(stream) { + return quote(stream,'\'','\\'); + } + + function quote(stream,quoteChar,escapeChar) { + while (!stream.eol()) { + var ch = stream.next(); + if (ch == quoteChar) { + return true; + }else if (ch == escapeChar) { + stream.next(); + } + } + return false; + } + + function lookahead(stream) { + var m = stream.match(/([\n\s]+|%[^\n]*\n)*(.)/,false); + return m ? m.pop() : ""; + } + + function is_member(element,list) { + return (-1 < list.indexOf(element)); + } + + function rval(state,stream,type) { + + // parse stack + pushToken(state,realToken(type,stream)); + + // map erlang token type to CodeMirror style class + // erlang -> CodeMirror tag + switch (type) { + case "atom": return "atom"; + case "attribute": return "attribute"; + case "boolean": return "atom"; + case "builtin": return "builtin"; + case "close_paren": return null; + case "colon": return null; + case "comment": return "comment"; + case "dot": return null; + case "error": return "error"; + case "fun": return "meta"; + case "function": return "tag"; + case "guard": return "property"; + case "keyword": return "keyword"; + case "macro": return "variable-2"; + case "number": return "number"; + case "open_paren": return null; + case "operator": return "operator"; + case "record": return "bracket"; + case "separator": return null; + case "string": return "string"; + case "type": return "def"; + case "variable": return "variable"; + default: return null; + } + } + + function aToken(tok,col,ind,typ) { + return {token: tok, + column: col, + indent: ind, + type: typ}; + } + + function realToken(type,stream) { + return aToken(stream.current(), + stream.column(), + stream.indentation(), + type); + } + + function fakeToken(type) { + return aToken(type,0,0,type); + } + + function peekToken(state,depth) { + var len = state.tokenStack.length; + var dep = (depth ? depth : 1); + + if (len < dep) { + return false; + }else{ + return state.tokenStack[len-dep]; + } + } + + function pushToken(state,token) { + + if (!(token.type == "comment" || token.type == "whitespace")) { + state.tokenStack = maybe_drop_pre(state.tokenStack,token); + state.tokenStack = maybe_drop_post(state.tokenStack); + } + } + + function maybe_drop_pre(s,token) { + var last = s.length-1; + + if (0 < last && s[last].type === "record" && token.type === "dot") { + s.pop(); + }else if (0 < last && s[last].type === "group") { + s.pop(); + s.push(token); + }else{ + s.push(token); + } + return s; + } + + function maybe_drop_post(s) { + var last = s.length-1; + + if (s[last].type === "dot") { + return []; + } + if (s[last].type === "fun" && s[last-1].token === "fun") { + return s.slice(0,last-1); + } + switch (s[s.length-1].token) { + case "}": return d(s,{g:["{"]}); + case "]": return d(s,{i:["["]}); + case ")": return d(s,{i:["("]}); + case ">>": return d(s,{i:["<<"]}); + case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); + case ",": return d(s,{e:["begin","try","when","->", + ",","(","[","{","<<"]}); + case "->": return d(s,{r:["when"], + m:["try","if","case","receive"]}); + case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); + case "catch":return d(s,{e:["try"]}); + case "of": return d(s,{e:["case"]}); + case "after":return d(s,{e:["receive","try"]}); + default: return s; + } + } + + function d(stack,tt) { + // stack is a stack of Token objects. + // tt is an object; {type:tokens} + // type is a char, tokens is a list of token strings. + // The function returns (possibly truncated) stack. + // It will descend the stack, looking for a Token such that Token.token + // is a member of tokens. If it does not find that, it will normally (but + // see "E" below) return stack. If it does find a match, it will remove + // all the Tokens between the top and the matched Token. + // If type is "m", that is all it does. + // If type is "i", it will also remove the matched Token and the top Token. + // If type is "g", like "i", but add a fake "group" token at the top. + // If type is "r", it will remove the matched Token, but not the top Token. + // If type is "e", it will keep the matched Token but not the top Token. + // If type is "E", it behaves as for type "e", except if there is no match, + // in which case it will return an empty stack. + + for (var type in tt) { + var len = stack.length-1; + var tokens = tt[type]; + for (var i = len-1; -1 < i ; i--) { + if (is_member(stack[i].token,tokens)) { + var ss = stack.slice(0,i); + switch (type) { + case "m": return ss.concat(stack[i]).concat(stack[len]); + case "r": return ss.concat(stack[len]); + case "i": return ss; + case "g": return ss.concat(fakeToken("group")); + case "E": return ss.concat(stack[i]); + case "e": return ss.concat(stack[i]); + } + } + } + } + return (type == "E" ? [] : stack); + } + +///////////////////////////////////////////////////////////////////////////// +// indenter + + function indenter(state,textAfter) { + var t; + var unit = cmCfg.indentUnit; + var wordAfter = wordafter(textAfter); + var currT = peekToken(state,1); + var prevT = peekToken(state,2); + + if (state.in_string || state.in_atom) { + return CodeMirror.Pass; + }else if (!prevT) { + return 0; + }else if (currT.token == "when") { + return currT.column+unit; + }else if (wordAfter === "when" && prevT.type === "function") { + return prevT.indent+unit; + }else if (wordAfter === "(" && currT.token === "fun") { + return currT.column+3; + }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { + return t.column; + }else if (is_member(wordAfter,["end","after","of"])) { + t = getToken(state,["begin","case","fun","if","receive","try"]); + return t ? t.column : CodeMirror.Pass; + }else if (is_member(wordAfter,closeParenWords)) { + t = getToken(state,openParenWords); + return t ? t.column : CodeMirror.Pass; + }else if (is_member(currT.token,[",","|","||"]) || + is_member(wordAfter,[",","|","||"])) { + t = postcommaToken(state); + return t ? t.column+t.token.length : unit; + }else if (currT.token == "->") { + if (is_member(prevT.token, ["receive","case","if","try"])) { + return prevT.column+unit+unit; + }else{ + return prevT.column+unit; + } + }else if (is_member(currT.token,openParenWords)) { + return currT.column+currT.token.length; + }else{ + t = defaultToken(state); + return truthy(t) ? t.column+unit : 0; + } + } + + function wordafter(str) { + var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); + + return truthy(m) && (m.index === 0) ? m[0] : ""; + } + + function postcommaToken(state) { + var objs = state.tokenStack.slice(0,-1); + var i = getTokenIndex(objs,"type",["open_paren"]); + + return truthy(objs[i]) ? objs[i] : false; + } + + function defaultToken(state) { + var objs = state.tokenStack; + var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); + var oper = getTokenIndex(objs,"type",["operator"]); + + if (truthy(stop) && truthy(oper) && stop < oper) { + return objs[stop+1]; + } else if (truthy(stop)) { + return objs[stop]; + } else { + return false; + } + } + + function getToken(state,tokens) { + var objs = state.tokenStack; + var i = getTokenIndex(objs,"token",tokens); + + return truthy(objs[i]) ? objs[i] : false; + } + + function getTokenIndex(objs,propname,propvals) { + + for (var i = objs.length-1; -1 < i ; i--) { + if (is_member(objs[i][propname],propvals)) { + return i; + } + } + return false; + } + + function truthy(x) { + return (x !== false) && (x != null); + } + +///////////////////////////////////////////////////////////////////////////// +// this object defines the mode + + return { + startState: + function() { + return {tokenStack: [], + in_string: false, + in_atom: false}; + }, + + token: + function(stream, state) { + return tokenizer(stream, state); + }, + + indent: + function(state, textAfter) { + return indenter(state,textAfter); + }, + + lineComment: "%" + }; +}); + +}); diff --git a/libraries/codemirror/mode/erlang/index.html b/libraries/codemirror/mode/erlang/index.html new file mode 100644 index 0000000..6d06a89 --- /dev/null +++ b/libraries/codemirror/mode/erlang/index.html @@ -0,0 +1,76 @@ + + +CodeMirror: Erlang mode + + + + + + + + + + + +
          +

          Erlang mode

          +
          + + + +

          MIME types defined: text/x-erlang.

          +
          diff --git a/libraries/codemirror/mode/factor/factor.js b/libraries/codemirror/mode/factor/factor.js new file mode 100644 index 0000000..86d7adf --- /dev/null +++ b/libraries/codemirror/mode/factor/factor.js @@ -0,0 +1,83 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Factor syntax highlight - simple mode +// +// by Dimage Sapelkin (https://github.com/kerabromsmu) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode("factor", { + // The start state contains the rules that are intially used + start: [ + // comments + {regex: /#?!.*/, token: "comment"}, + // strings """, multiline --> state + {regex: /"""/, token: "string", next: "string3"}, + {regex: /"/, token: "string", next: "string"}, + // numbers: dec, hex, unicode, bin, fractional, complex + {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, + //{regex: /[+-]?/} //fractional + // definition: defining word, defined word, etc + {regex: /(\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "keyword"], next: "stack"}, + // vocabulary using --> state + {regex: /USING\:/, token: "keyword", next: "vocabulary"}, + // vocabulary definition/use + {regex: /(USE\:|IN\:)(\s+)(\S+)/, token: ["keyword", null, "variable-2"]}, + // + {regex: /<\S+>/, token: "builtin"}, + // "keywords", incl. ; t f . [ ] { } defining words + {regex: /;|t|f|if|\.|\[|\]|\{|\}|MAIN:/, token: "keyword"}, + // any id (?) + {regex: /\S+/, token: "variable"}, + + { + regex: /./, + token: null + } + ], + vocabulary: [ + {regex: /;/, token: "keyword", next: "start"}, + {regex: /\S+/, token: "variable-2"}, + { + regex: /./, + token: null + } + ], + string: [ + {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + string3: [ + {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + stack: [ + {regex: /\)/, token: "meta", next: "start"}, + {regex: /--/, token: "meta"}, + {regex: /\S+/, token: "variable-3"}, + { + regex: /./, + token: null + } + ], + // The meta property contains global information about the mode. It + // can contain properties like lineComment, which are supported by + // all modes, and also directives like dontIndentStates, which are + // specific to simple modes. + meta: { + dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], + lineComment: [ "!", "#!" ] + } + }); + + CodeMirror.defineMIME("text/x-factor", "factor"); +}); diff --git a/libraries/codemirror/mode/factor/index.html b/libraries/codemirror/mode/factor/index.html new file mode 100644 index 0000000..9f15489 --- /dev/null +++ b/libraries/codemirror/mode/factor/index.html @@ -0,0 +1,77 @@ + + +CodeMirror: Factor mode + + + + + + + + + + + +
          + +

          Factor mode

          + +
          +
          + + +

          +

          Simple mode that handles Factor Syntax (Factor on WikiPedia).

          + +

          MIME types defined: text/x-factor.

          + +
          diff --git a/libraries/codemirror/mode/fcl/fcl.js b/libraries/codemirror/mode/fcl/fcl.js new file mode 100644 index 0000000..5181169 --- /dev/null +++ b/libraries/codemirror/mode/fcl/fcl.js @@ -0,0 +1,173 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("fcl", function(config) { + var indentUnit = config.indentUnit; + + var keywords = { + "term": true, + "method": true, "accu": true, + "rule": true, "then": true, "is": true, "and": true, "or": true, + "if": true, "default": true + }; + + var start_blocks = { + "var_input": true, + "var_output": true, + "fuzzify": true, + "defuzzify": true, + "function_block": true, + "ruleblock": true + }; + + var end_blocks = { + "end_ruleblock": true, + "end_defuzzify": true, + "end_function_block": true, + "end_fuzzify": true, + "end_var": true + }; + + var atoms = { + "true": true, "false": true, "nan": true, + "real": true, "min": true, "max": true, "cog": true, "cogs": true + }; + + var isOperatorChar = /[+\-*&^%:=<>!|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (/[\d\.]/.test(ch)) { + if (ch == ".") { + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + } else if (ch == "0") { + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + } else { + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + } + return "number"; + } + + if (ch == "/" || ch == "(") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + + var cur = stream.current().toLowerCase(); + if (keywords.propertyIsEnumerable(cur) || + start_blocks.propertyIsEnumerable(cur) || + end_blocks.propertyIsEnumerable(cur)) { + return "keyword"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if ((ch == "/" || ch == ")") && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + + function popContext(state) { + if (!state.context.prev) return; + var t = state.context.type; + if (t == "end_block") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + var cur = stream.current().toLowerCase(); + + if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), "end_block"); + else if (end_blocks.propertyIsEnumerable(cur)) popContext(state); + + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context; + + var closing = end_blocks.propertyIsEnumerable(textAfter); + if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "ryk", + fold: "brace", + blockCommentStart: "(*", + blockCommentEnd: "*)", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-fcl", "fcl"); +}); diff --git a/libraries/codemirror/mode/fcl/index.html b/libraries/codemirror/mode/fcl/index.html new file mode 100644 index 0000000..3c18d0b --- /dev/null +++ b/libraries/codemirror/mode/fcl/index.html @@ -0,0 +1,108 @@ + + +CodeMirror: FCL mode + + + + + + + + + + + +
          +

          FCL mode

          +
          + + + +

          MIME type: text/x-fcl

          +
          diff --git a/libraries/codemirror/mode/forth/forth.js b/libraries/codemirror/mode/forth/forth.js new file mode 100644 index 0000000..1f519d8 --- /dev/null +++ b/libraries/codemirror/mode/forth/forth.js @@ -0,0 +1,180 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Author: Aliaksei Chapyzhenka + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function toWordList(words) { + var ret = []; + words.split(' ').forEach(function(e){ + ret.push({name: e}); + }); + return ret; + } + + var coreWordList = toWordList( +'INVERT AND OR XOR\ + 2* 2/ LSHIFT RSHIFT\ + 0= = 0< < > U< MIN MAX\ + 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ + >R R> R@\ + + - 1+ 1- ABS NEGATE\ + S>D * M* UM*\ + FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ + HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ + ALIGN ALIGNED +! ALLOT\ + CHAR [CHAR] [ ] BL\ + FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ + ; DOES> >BODY\ + EVALUATE\ + SOURCE >IN\ + <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ + FILL MOVE\ + . CR EMIT SPACE SPACES TYPE U. .R U.R\ + ACCEPT\ + TRUE FALSE\ + <> U> 0<> 0>\ + NIP TUCK ROLL PICK\ + 2>R 2R@ 2R>\ + WITHIN UNUSED MARKER\ + I J\ + TO\ + COMPILE, [COMPILE]\ + SAVE-INPUT RESTORE-INPUT\ + PAD ERASE\ + 2LITERAL DNEGATE\ + D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ + M+ M*/ D. D.R 2ROT DU<\ + CATCH THROW\ + FREE RESIZE ALLOCATE\ + CS-PICK CS-ROLL\ + GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ + PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ + -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); + + var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); + + CodeMirror.defineMode('forth', function() { + function searchWordList (wordList, word) { + var i; + for (i = wordList.length - 1; i >= 0; i--) { + if (wordList[i].name === word.toUpperCase()) { + return wordList[i]; + } + } + return undefined; + } + return { + startState: function() { + return { + state: '', + base: 10, + coreWordList: coreWordList, + immediateWordList: immediateWordList, + wordList: [] + }; + }, + token: function (stream, stt) { + var mat; + if (stream.eatSpace()) { + return null; + } + if (stt.state === '') { // interpretation + if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { + stt.state = ' compilation'; + return 'builtin compilation'; + } + mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); + if (mat) { + stt.wordList.push({name: mat[2].toUpperCase()}); + stt.state = ' compilation'; + return 'def' + stt.state; + } + mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); + if (mat) { + stt.wordList.push({name: mat[2].toUpperCase()}); + return 'def' + stt.state; + } + mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); + if (mat) { + return 'builtin' + stt.state; + } + } else { // compilation + // ; [ + if (stream.match(/^(\;|\[)(\s)/)) { + stt.state = ''; + stream.backUp(1); + return 'builtin compilation'; + } + if (stream.match(/^(\;|\[)($)/)) { + stt.state = ''; + return 'builtin compilation'; + } + if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { + return 'builtin'; + } + } + + // dynamic wordlist + mat = stream.match(/^(\S+)(\s+|$)/); + if (mat) { + if (searchWordList(stt.wordList, mat[1]) !== undefined) { + return 'variable' + stt.state; + } + + // comments + if (mat[1] === '\\') { + stream.skipToEnd(); + return 'comment' + stt.state; + } + + // core words + if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { + return 'builtin' + stt.state; + } + if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { + return 'keyword' + stt.state; + } + + if (mat[1] === '(') { + stream.eatWhile(function (s) { return s !== ')'; }); + stream.eat(')'); + return 'comment' + stt.state; + } + + // // strings + if (mat[1] === '.(') { + stream.eatWhile(function (s) { return s !== ')'; }); + stream.eat(')'); + return 'string' + stt.state; + } + if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { + stream.eatWhile(function (s) { return s !== '"'; }); + stream.eat('"'); + return 'string' + stt.state; + } + + // numbers + if (mat[1] - 0xfffffffff) { + return 'number' + stt.state; + } + // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { + // return 'number' + stt.state; + // } + + return 'atom' + stt.state; + } + } + }; + }); + CodeMirror.defineMIME("text/x-forth", "forth"); +}); diff --git a/libraries/codemirror/mode/forth/index.html b/libraries/codemirror/mode/forth/index.html new file mode 100644 index 0000000..ae8cd34 --- /dev/null +++ b/libraries/codemirror/mode/forth/index.html @@ -0,0 +1,75 @@ + + +CodeMirror: Forth mode + + + + + + + + + + + +
          + +

          Forth mode

          + +
          +
          + + + +

          Simple mode that handle Forth-Syntax (Forth on WikiPedia).

          + +

          MIME types defined: text/x-forth.

          + +
          diff --git a/libraries/codemirror/mode/fortran/fortran.js b/libraries/codemirror/mode/fortran/fortran.js new file mode 100644 index 0000000..4d88f00 --- /dev/null +++ b/libraries/codemirror/mode/fortran/fortran.js @@ -0,0 +1,188 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("fortran", function() { + function words(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var keywords = words([ + "abstract", "accept", "allocatable", "allocate", + "array", "assign", "asynchronous", "backspace", + "bind", "block", "byte", "call", "case", + "class", "close", "common", "contains", + "continue", "cycle", "data", "deallocate", + "decode", "deferred", "dimension", "do", + "elemental", "else", "encode", "end", + "endif", "entry", "enumerator", "equivalence", + "exit", "external", "extrinsic", "final", + "forall", "format", "function", "generic", + "go", "goto", "if", "implicit", "import", "include", + "inquire", "intent", "interface", "intrinsic", + "module", "namelist", "non_intrinsic", + "non_overridable", "none", "nopass", + "nullify", "open", "optional", "options", + "parameter", "pass", "pause", "pointer", + "print", "private", "program", "protected", + "public", "pure", "read", "recursive", "result", + "return", "rewind", "save", "select", "sequence", + "stop", "subroutine", "target", "then", "to", "type", + "use", "value", "volatile", "where", "while", + "write"]); + var builtins = words(["abort", "abs", "access", "achar", "acos", + "adjustl", "adjustr", "aimag", "aint", "alarm", + "all", "allocated", "alog", "amax", "amin", + "amod", "and", "anint", "any", "asin", + "associated", "atan", "besj", "besjn", "besy", + "besyn", "bit_size", "btest", "cabs", "ccos", + "ceiling", "cexp", "char", "chdir", "chmod", + "clog", "cmplx", "command_argument_count", + "complex", "conjg", "cos", "cosh", "count", + "cpu_time", "cshift", "csin", "csqrt", "ctime", + "c_funloc", "c_loc", "c_associated", "c_null_ptr", + "c_null_funptr", "c_f_pointer", "c_null_char", + "c_alert", "c_backspace", "c_form_feed", + "c_new_line", "c_carriage_return", + "c_horizontal_tab", "c_vertical_tab", "dabs", + "dacos", "dasin", "datan", "date_and_time", + "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", + "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", + "derfc", "dexp", "digits", "dim", "dint", "dlog", + "dlog", "dmax", "dmin", "dmod", "dnint", + "dot_product", "dprod", "dsign", "dsinh", + "dsin", "dsqrt", "dtanh", "dtan", "dtime", + "eoshift", "epsilon", "erf", "erfc", "etime", + "exit", "exp", "exponent", "extends_type_of", + "fdate", "fget", "fgetc", "float", "floor", + "flush", "fnum", "fputc", "fput", "fraction", + "fseek", "fstat", "ftell", "gerror", "getarg", + "get_command", "get_command_argument", + "get_environment_variable", "getcwd", + "getenv", "getgid", "getlog", "getpid", + "getuid", "gmtime", "hostnm", "huge", "iabs", + "iachar", "iand", "iargc", "ibclr", "ibits", + "ibset", "ichar", "idate", "idim", "idint", + "idnint", "ieor", "ierrno", "ifix", "imag", + "imagpart", "index", "int", "ior", "irand", + "isatty", "ishft", "ishftc", "isign", + "iso_c_binding", "is_iostat_end", "is_iostat_eor", + "itime", "kill", "kind", "lbound", "len", "len_trim", + "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", + "log", "logical", "long", "lshift", "lstat", "ltime", + "matmul", "max", "maxexponent", "maxloc", "maxval", + "mclock", "merge", "move_alloc", "min", "minexponent", + "minloc", "minval", "mod", "modulo", "mvbits", + "nearest", "new_line", "nint", "not", "or", "pack", + "perror", "precision", "present", "product", "radix", + "rand", "random_number", "random_seed", "range", + "real", "realpart", "rename", "repeat", "reshape", + "rrspacing", "rshift", "same_type_as", "scale", + "scan", "second", "selected_int_kind", + "selected_real_kind", "set_exponent", "shape", + "short", "sign", "signal", "sinh", "sin", "sleep", + "sngl", "spacing", "spread", "sqrt", "srand", "stat", + "sum", "symlnk", "system", "system_clock", "tan", + "tanh", "time", "tiny", "transfer", "transpose", + "trim", "ttynam", "ubound", "umask", "unlink", + "unpack", "verify", "xor", "zabs", "zcos", "zexp", + "zlog", "zsin", "zsqrt"]); + + var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", + "c_float", "c_float_complex", "c_funptr", "c_int", + "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", + "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", + "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", + "c_int_least64_t", "c_int_least8_t", "c_intmax_t", + "c_intptr_t", "c_long", "c_long_double", + "c_long_double_complex", "c_long_long", "c_ptr", + "c_short", "c_signed_char", "c_size_t", "character", + "complex", "double", "integer", "logical", "real"]); + var isOperatorChar = /[+\-*&=<>\/\:]/; + var litOperator = new RegExp("(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.)", "i"); + + function tokenBase(stream, state) { + + if (stream.match(litOperator)){ + return 'operator'; + } + + var ch = stream.next(); + if (ch == "!") { + stream.skipToEnd(); + return "comment"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]\(\),]/.test(ch)) { + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var word = stream.current().toLowerCase(); + + if (keywords.hasOwnProperty(word)){ + return 'keyword'; + } + if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { + return 'builtin'; + } + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + // Interface + + return { + startState: function() { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-fortran", "fortran"); + +}); diff --git a/libraries/codemirror/mode/fortran/index.html b/libraries/codemirror/mode/fortran/index.html new file mode 100644 index 0000000..102e8f8 --- /dev/null +++ b/libraries/codemirror/mode/fortran/index.html @@ -0,0 +1,81 @@ + + +CodeMirror: Fortran mode + + + + + + + + + +
          +

          Fortran mode

          + + +
          + + + +

          MIME types defined: text/x-Fortran.

          +
          diff --git a/libraries/codemirror/mode/gas/gas.js b/libraries/codemirror/mode/gas/gas.js new file mode 100644 index 0000000..0c74bed --- /dev/null +++ b/libraries/codemirror/mode/gas/gas.js @@ -0,0 +1,345 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("gas", function(_config, parserConfig) { + 'use strict'; + + // If an architecture is specified, its initialization function may + // populate this array with custom parsing functions which will be + // tried in the event that the standard functions do not find a match. + var custom = []; + + // The symbol used to start a line comment changes based on the target + // architecture. + // If no architecture is pased in "parserConfig" then only multiline + // comments will have syntax support. + var lineCommentStartSymbol = ""; + + // These directives are architecture independent. + // Machine specific directives should go in their respective + // architecture initialization function. + // Reference: + // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops + var directives = { + ".abort" : "builtin", + ".align" : "builtin", + ".altmacro" : "builtin", + ".ascii" : "builtin", + ".asciz" : "builtin", + ".balign" : "builtin", + ".balignw" : "builtin", + ".balignl" : "builtin", + ".bundle_align_mode" : "builtin", + ".bundle_lock" : "builtin", + ".bundle_unlock" : "builtin", + ".byte" : "builtin", + ".cfi_startproc" : "builtin", + ".comm" : "builtin", + ".data" : "builtin", + ".def" : "builtin", + ".desc" : "builtin", + ".dim" : "builtin", + ".double" : "builtin", + ".eject" : "builtin", + ".else" : "builtin", + ".elseif" : "builtin", + ".end" : "builtin", + ".endef" : "builtin", + ".endfunc" : "builtin", + ".endif" : "builtin", + ".equ" : "builtin", + ".equiv" : "builtin", + ".eqv" : "builtin", + ".err" : "builtin", + ".error" : "builtin", + ".exitm" : "builtin", + ".extern" : "builtin", + ".fail" : "builtin", + ".file" : "builtin", + ".fill" : "builtin", + ".float" : "builtin", + ".func" : "builtin", + ".global" : "builtin", + ".gnu_attribute" : "builtin", + ".hidden" : "builtin", + ".hword" : "builtin", + ".ident" : "builtin", + ".if" : "builtin", + ".incbin" : "builtin", + ".include" : "builtin", + ".int" : "builtin", + ".internal" : "builtin", + ".irp" : "builtin", + ".irpc" : "builtin", + ".lcomm" : "builtin", + ".lflags" : "builtin", + ".line" : "builtin", + ".linkonce" : "builtin", + ".list" : "builtin", + ".ln" : "builtin", + ".loc" : "builtin", + ".loc_mark_labels" : "builtin", + ".local" : "builtin", + ".long" : "builtin", + ".macro" : "builtin", + ".mri" : "builtin", + ".noaltmacro" : "builtin", + ".nolist" : "builtin", + ".octa" : "builtin", + ".offset" : "builtin", + ".org" : "builtin", + ".p2align" : "builtin", + ".popsection" : "builtin", + ".previous" : "builtin", + ".print" : "builtin", + ".protected" : "builtin", + ".psize" : "builtin", + ".purgem" : "builtin", + ".pushsection" : "builtin", + ".quad" : "builtin", + ".reloc" : "builtin", + ".rept" : "builtin", + ".sbttl" : "builtin", + ".scl" : "builtin", + ".section" : "builtin", + ".set" : "builtin", + ".short" : "builtin", + ".single" : "builtin", + ".size" : "builtin", + ".skip" : "builtin", + ".sleb128" : "builtin", + ".space" : "builtin", + ".stab" : "builtin", + ".string" : "builtin", + ".struct" : "builtin", + ".subsection" : "builtin", + ".symver" : "builtin", + ".tag" : "builtin", + ".text" : "builtin", + ".title" : "builtin", + ".type" : "builtin", + ".uleb128" : "builtin", + ".val" : "builtin", + ".version" : "builtin", + ".vtable_entry" : "builtin", + ".vtable_inherit" : "builtin", + ".warning" : "builtin", + ".weak" : "builtin", + ".weakref" : "builtin", + ".word" : "builtin" + }; + + var registers = {}; + + function x86(_parserConfig) { + lineCommentStartSymbol = "#"; + + registers.ax = "variable"; + registers.eax = "variable-2"; + registers.rax = "variable-3"; + + registers.bx = "variable"; + registers.ebx = "variable-2"; + registers.rbx = "variable-3"; + + registers.cx = "variable"; + registers.ecx = "variable-2"; + registers.rcx = "variable-3"; + + registers.dx = "variable"; + registers.edx = "variable-2"; + registers.rdx = "variable-3"; + + registers.si = "variable"; + registers.esi = "variable-2"; + registers.rsi = "variable-3"; + + registers.di = "variable"; + registers.edi = "variable-2"; + registers.rdi = "variable-3"; + + registers.sp = "variable"; + registers.esp = "variable-2"; + registers.rsp = "variable-3"; + + registers.bp = "variable"; + registers.ebp = "variable-2"; + registers.rbp = "variable-3"; + + registers.ip = "variable"; + registers.eip = "variable-2"; + registers.rip = "variable-3"; + + registers.cs = "keyword"; + registers.ds = "keyword"; + registers.ss = "keyword"; + registers.es = "keyword"; + registers.fs = "keyword"; + registers.gs = "keyword"; + } + + function armv6(_parserConfig) { + // Reference: + // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf + // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf + lineCommentStartSymbol = "@"; + directives.syntax = "builtin"; + + registers.r0 = "variable"; + registers.r1 = "variable"; + registers.r2 = "variable"; + registers.r3 = "variable"; + registers.r4 = "variable"; + registers.r5 = "variable"; + registers.r6 = "variable"; + registers.r7 = "variable"; + registers.r8 = "variable"; + registers.r9 = "variable"; + registers.r10 = "variable"; + registers.r11 = "variable"; + registers.r12 = "variable"; + + registers.sp = "variable-2"; + registers.lr = "variable-2"; + registers.pc = "variable-2"; + registers.r13 = registers.sp; + registers.r14 = registers.lr; + registers.r15 = registers.pc; + + custom.push(function(ch, stream) { + if (ch === '#') { + stream.eatWhile(/\w/); + return "number"; + } + }); + } + + var arch = (parserConfig.architecture || "x86").toLowerCase(); + if (arch === "x86") { + x86(parserConfig); + } else if (arch === "arm" || arch === "armv6") { + armv6(parserConfig); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next === end && !escaped) { + return false; + } + escaped = !escaped && next === "\\"; + } + return escaped; + } + + function clikeComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (ch === "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch === "*"); + } + return "comment"; + } + + return { + startState: function() { + return { + tokenize: null + }; + }, + + token: function(stream, state) { + if (state.tokenize) { + return state.tokenize(stream, state); + } + + if (stream.eatSpace()) { + return null; + } + + var style, cur, ch = stream.next(); + + if (ch === "/") { + if (stream.eat("*")) { + state.tokenize = clikeComment; + return clikeComment(stream, state); + } + } + + if (ch === lineCommentStartSymbol) { + stream.skipToEnd(); + return "comment"; + } + + if (ch === '"') { + nextUntilUnescaped(stream, '"'); + return "string"; + } + + if (ch === '.') { + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + style = directives[cur]; + return style || null; + } + + if (ch === '=') { + stream.eatWhile(/\w/); + return "tag"; + } + + if (ch === '{') { + return "braket"; + } + + if (ch === '}') { + return "braket"; + } + + if (/\d/.test(ch)) { + if (ch === "0" && stream.eat("x")) { + stream.eatWhile(/[0-9a-fA-F]/); + return "number"; + } + stream.eatWhile(/\d/); + return "number"; + } + + if (/\w/.test(ch)) { + stream.eatWhile(/\w/); + if (stream.eat(":")) { + return 'tag'; + } + cur = stream.current().toLowerCase(); + style = registers[cur]; + return style || null; + } + + for (var i = 0; i < custom.length; i++) { + style = custom[i](ch, stream, state); + if (style) { + return style; + } + } + }, + + lineComment: lineCommentStartSymbol, + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +}); diff --git a/libraries/codemirror/mode/gas/index.html b/libraries/codemirror/mode/gas/index.html new file mode 100644 index 0000000..df75ca2 --- /dev/null +++ b/libraries/codemirror/mode/gas/index.html @@ -0,0 +1,68 @@ + + +CodeMirror: Gas mode + + + + + + + + + +
          +

          Gas mode

          +
          + +
          + + + +

          Handles AT&T assembler syntax (more specifically this handles + the GNU Assembler (gas) syntax.) + It takes a single optional configuration parameter: + architecture, which can be one of "ARM", + "ARMv6" or "x86". + Including the parameter adds syntax for the registers and special + directives for the supplied architecture. + +

          MIME types defined: text/x-gas

          +
          diff --git a/libraries/codemirror/mode/gfm/gfm.js b/libraries/codemirror/mode/gfm/gfm.js new file mode 100644 index 0000000..6e74ad4 --- /dev/null +++ b/libraries/codemirror/mode/gfm/gfm.js @@ -0,0 +1,130 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../markdown/markdown"), require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../markdown/markdown", "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i + +CodeMirror.defineMode("gfm", function(config, modeConfig) { + var codeDepth = 0; + function blankLine(state) { + state.code = false; + return null; + } + var gfmOverlay = { + startState: function() { + return { + code: false, + codeBlock: false, + ateSpace: false + }; + }, + copyState: function(s) { + return { + code: s.code, + codeBlock: s.codeBlock, + ateSpace: s.ateSpace + }; + }, + token: function(stream, state) { + state.combineTokens = null; + + // Hack to prevent formatting override inside code blocks (block and inline) + if (state.codeBlock) { + if (stream.match(/^```+/)) { + state.codeBlock = false; + return null; + } + stream.skipToEnd(); + return null; + } + if (stream.sol()) { + state.code = false; + } + if (stream.sol() && stream.match(/^```+/)) { + stream.skipToEnd(); + state.codeBlock = true; + return null; + } + // If this block is changed, it may need to be updated in Markdown mode + if (stream.peek() === '`') { + stream.next(); + var before = stream.pos; + stream.eatWhile('`'); + var difference = 1 + stream.pos - before; + if (!state.code) { + codeDepth = difference; + state.code = true; + } else { + if (difference === codeDepth) { // Must be exact + state.code = false; + } + } + return null; + } else if (state.code) { + stream.next(); + return null; + } + // Check if space. If so, links can be formatted later on + if (stream.eatSpace()) { + state.ateSpace = true; + return null; + } + if (stream.sol() || state.ateSpace) { + state.ateSpace = false; + if (modeConfig.gitHubSpice !== false) { + if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { + // User/Project@SHA + // User@SHA + // SHA + state.combineTokens = true; + return "link"; + } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { + // User/Project#Num + // User#Num + // #Num + state.combineTokens = true; + return "link"; + } + } + } + if (stream.match(urlRE) && + stream.string.slice(stream.start - 2, stream.start) != "](" && + (stream.start == 0 || /\W/.test(stream.string.charAt(stream.start - 1)))) { + // URLs + // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls + // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine + // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL + state.combineTokens = true; + return "link"; + } + stream.next(); + return null; + }, + blankLine: blankLine + }; + + var markdownConfig = { + underscoresBreakWords: false, + taskLists: true, + fencedCodeBlocks: '```', + strikethrough: true + }; + for (var attr in modeConfig) { + markdownConfig[attr] = modeConfig[attr]; + } + markdownConfig.name = "markdown"; + return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay); + +}, "markdown"); + + CodeMirror.defineMIME("text/x-gfm", "gfm"); +}); diff --git a/libraries/codemirror/mode/gfm/index.html b/libraries/codemirror/mode/gfm/index.html new file mode 100644 index 0000000..7e38c52 --- /dev/null +++ b/libraries/codemirror/mode/gfm/index.html @@ -0,0 +1,93 @@ + + +CodeMirror: GFM mode + + + + + + + + + + + + + + + + + +
          +

          GFM mode

          +
          + + + +

          Optionally depends on other modes for properly highlighted code blocks.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/gfm/test.js b/libraries/codemirror/mode/gfm/test.js new file mode 100644 index 0000000..0dcd361 --- /dev/null +++ b/libraries/codemirror/mode/gfm/test.js @@ -0,0 +1,230 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "gfm"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "gfm", highlightFormatting: true}); + function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } + + FT("codeBackticks", + "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); + + FT("doubleBackticks", + "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); + + FT("codeBlock", + "[comment&formatting&formatting-code-block ```css]", + "[tag foo]", + "[comment&formatting&formatting-code-block ```]"); + + FT("taskList", + "[variable-2&formatting&formatting-list&formatting-list-ul - ][meta&formatting&formatting-task [ ]]][variable-2 foo]", + "[variable-2&formatting&formatting-list&formatting-list-ul - ][property&formatting&formatting-task [x]]][variable-2 foo]"); + + FT("formatting_strikethrough", + "[strikethrough&formatting&formatting-strikethrough ~~][strikethrough foo][strikethrough&formatting&formatting-strikethrough ~~]"); + + FT("formatting_strikethrough", + "foo [strikethrough&formatting&formatting-strikethrough ~~][strikethrough bar][strikethrough&formatting&formatting-strikethrough ~~]"); + + MT("emInWordAsterisk", + "foo[em *bar*]hello"); + + MT("emInWordUnderscore", + "foo_bar_hello"); + + MT("emStrongUnderscore", + "[strong __][em&strong _foo__][em _] bar"); + + MT("fencedCodeBlocks", + "[comment ```]", + "[comment foo]", + "", + "[comment ```]", + "bar"); + + MT("fencedCodeBlockModeSwitching", + "[comment ```javascript]", + "[variable foo]", + "", + "[comment ```]", + "bar"); + + MT("fencedCodeBlocksNoTildes", + "~~~", + "foo", + "~~~"); + + MT("taskListAsterisk", + "[variable-2 * []] foo]", // Invalid; must have space or x between [] + "[variable-2 * [ ]]bar]", // Invalid; must have space after ] + "[variable-2 * [x]]hello]", // Invalid; must have space after ] + "[variable-2 * ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 * ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListPlus", + "[variable-2 + []] foo]", // Invalid; must have space or x between [] + "[variable-2 + [ ]]bar]", // Invalid; must have space after ] + "[variable-2 + [x]]hello]", // Invalid; must have space after ] + "[variable-2 + ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 + ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListDash", + "[variable-2 - []] foo]", // Invalid; must have space or x between [] + "[variable-2 - [ ]]bar]", // Invalid; must have space after ] + "[variable-2 - [x]]hello]", // Invalid; must have space after ] + "[variable-2 - ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 - ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("taskListNumber", + "[variable-2 1. []] foo]", // Invalid; must have space or x between [] + "[variable-2 2. [ ]]bar]", // Invalid; must have space after ] + "[variable-2 3. [x]]hello]", // Invalid; must have space after ] + "[variable-2 4. ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links + " [variable-3 1. ][property [x]]][variable-3 foo]"); // Valid; can be nested + + MT("SHA", + "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar"); + + MT("SHAEmphasis", + "[em *foo ][em&link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); + + MT("shortSHA", + "foo [link be6a8cc] bar"); + + MT("tooShortSHA", + "foo be6a8c bar"); + + MT("longSHA", + "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar"); + + MT("badSHA", + "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar"); + + MT("userSHA", + "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello"); + + MT("userSHAEmphasis", + "[em *foo ][em&link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); + + MT("userProjectSHA", + "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world"); + + MT("userProjectSHAEmphasis", + "[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); + + MT("num", + "foo [link #1] bar"); + + MT("numEmphasis", + "[em *foo ][em&link #1][em *]"); + + MT("badNum", + "foo #1bar hello"); + + MT("userNum", + "foo [link bar#1] hello"); + + MT("userNumEmphasis", + "[em *foo ][em&link bar#1][em *]"); + + MT("userProjectNum", + "foo [link bar/hello#1] world"); + + MT("userProjectNumEmphasis", + "[em *foo ][em&link bar/hello#1][em *]"); + + MT("vanillaLink", + "foo [link http://www.example.com/] bar"); + + MT("vanillaLinkNoScheme", + "foo [link www.example.com] bar"); + + MT("vanillaLinkHttps", + "foo [link https://www.example.com/] bar"); + + MT("vanillaLinkDataSchema", + "foo [link data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==] bar"); + + MT("vanillaLinkPunctuation", + "foo [link http://www.example.com/]. bar"); + + MT("vanillaLinkExtension", + "foo [link http://www.example.com/index.html] bar"); + + MT("vanillaLinkEmphasis", + "foo [em *][em&link http://www.example.com/index.html][em *] bar"); + + MT("notALink", + "foo asfd:asdf bar"); + + MT("notALink", + "[comment ```css]", + "[tag foo] {[property color]:[keyword black];}", + "[comment ```][link http://www.example.com/]"); + + MT("notALink", + "[comment ``foo `bar` http://www.example.com/``] hello"); + + MT("notALink", + "[comment `foo]", + "[comment&link http://www.example.com/]", + "[comment `] foo", + "", + "[link http://www.example.com/]"); + + MT("headerCodeBlockGithub", + "[header&header-1 # heading]", + "", + "[comment ```]", + "[comment code]", + "[comment ```]", + "", + "Commit: [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2]", + "Issue: [link #1]", + "Link: [link http://www.example.com/]"); + + MT("strikethrough", + "[strikethrough ~~foo~~]"); + + MT("strikethroughWithStartingSpace", + "~~ foo~~"); + + MT("strikethroughUnclosedStrayTildes", + "[strikethrough ~~foo~~~]"); + + MT("strikethroughUnclosedStrayTildes", + "[strikethrough ~~foo ~~]"); + + MT("strikethroughUnclosedStrayTildes", + "[strikethrough ~~foo ~~ bar]"); + + MT("strikethroughUnclosedStrayTildes", + "[strikethrough ~~foo ~~ bar~~]hello"); + + MT("strikethroughOneLetter", + "[strikethrough ~~a~~]"); + + MT("strikethroughWrapped", + "[strikethrough ~~foo]", + "[strikethrough foo~~]"); + + MT("strikethroughParagraph", + "[strikethrough ~~foo]", + "", + "foo[strikethrough ~~bar]"); + + MT("strikethroughEm", + "[strikethrough ~~foo][em&strikethrough *bar*][strikethrough ~~]"); + + MT("strikethroughEm", + "[em *][em&strikethrough ~~foo~~][em *]"); + + MT("strikethroughStrong", + "[strikethrough ~~][strong&strikethrough **foo**][strikethrough ~~]"); + + MT("strikethroughStrong", + "[strong **][strong&strikethrough ~~foo~~][strong **]"); + +})(); diff --git a/libraries/codemirror/mode/gherkin/gherkin.js b/libraries/codemirror/mode/gherkin/gherkin.js new file mode 100644 index 0000000..fc2ebee --- /dev/null +++ b/libraries/codemirror/mode/gherkin/gherkin.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* +Gherkin mode - http://www.cukes.info/ +Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues +*/ + +// Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js +//var Quotes = { +// SINGLE: 1, +// DOUBLE: 2 +//}; + +//var regex = { +// keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ +//}; + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("gherkin", function () { + return { + startState: function () { + return { + lineNumber: 0, + tableHeaderLine: false, + allowFeature: true, + allowBackground: false, + allowScenario: false, + allowSteps: false, + allowPlaceholders: false, + allowMultilineArgument: false, + inMultilineString: false, + inMultilineTable: false, + inKeywordLine: false + }; + }, + token: function (stream, state) { + if (stream.sol()) { + state.lineNumber++; + state.inKeywordLine = false; + if (state.inMultilineTable) { + state.tableHeaderLine = false; + if (!stream.match(/\s*\|/, false)) { + state.allowMultilineArgument = false; + state.inMultilineTable = false; + } + } + } + + stream.eatSpace(); + + if (state.allowMultilineArgument) { + + // STRING + if (state.inMultilineString) { + if (stream.match('"""')) { + state.inMultilineString = false; + state.allowMultilineArgument = false; + } else { + stream.match(/.*/); + } + return "string"; + } + + // TABLE + if (state.inMultilineTable) { + if (stream.match(/\|\s*/)) { + return "bracket"; + } else { + stream.match(/[^\|]*/); + return state.tableHeaderLine ? "header" : "string"; + } + } + + // DETECT START + if (stream.match('"""')) { + // String + state.inMultilineString = true; + return "string"; + } else if (stream.match("|")) { + // Table + state.inMultilineTable = true; + state.tableHeaderLine = true; + return "bracket"; + } + + } + + // LINE COMMENT + if (stream.match(/#.*/)) { + return "comment"; + + // TAG + } else if (!state.inKeywordLine && stream.match(/@\S+/)) { + return "tag"; + + // FEATURE + } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { + state.allowScenario = true; + state.allowBackground = true; + state.allowPlaceholders = false; + state.allowSteps = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // BACKGROUND + } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // SCENARIO OUTLINE + } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { + state.allowPlaceholders = true; + state.allowSteps = true; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // EXAMPLES + } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = true; + return "keyword"; + + // SCENARIO + } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // STEPS + } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { + state.inStep = true; + state.allowPlaceholders = true; + state.allowMultilineArgument = true; + state.inKeywordLine = true; + return "keyword"; + + // INLINE STRING + } else if (stream.match(/"[^"]*"?/)) { + return "string"; + + // PLACEHOLDER + } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { + return "variable"; + + // Fall through + } else { + stream.next(); + stream.eatWhile(/[^@"<#]/); + return null; + } + } + }; +}); + +CodeMirror.defineMIME("text/x-feature", "gherkin"); + +}); diff --git a/libraries/codemirror/mode/gherkin/index.html b/libraries/codemirror/mode/gherkin/index.html new file mode 100644 index 0000000..af8184c --- /dev/null +++ b/libraries/codemirror/mode/gherkin/index.html @@ -0,0 +1,48 @@ + + +CodeMirror: Gherkin mode + + + + + + + + + +
          +

          Gherkin mode

          +
          + + +

          MIME types defined: text/x-feature.

          + +
          diff --git a/libraries/codemirror/mode/go/go.js b/libraries/codemirror/mode/go/go.js new file mode 100644 index 0000000..21fe9a2 --- /dev/null +++ b/libraries/codemirror/mode/go/go.js @@ -0,0 +1,185 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("go", function(config) { + var indentUnit = config.indentUnit; + + var keywords = { + "break":true, "case":true, "chan":true, "const":true, "continue":true, + "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, + "func":true, "go":true, "goto":true, "if":true, "import":true, + "interface":true, "map":true, "package":true, "range":true, "return":true, + "select":true, "struct":true, "switch":true, "type":true, "var":true, + "bool":true, "byte":true, "complex64":true, "complex128":true, + "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, + "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, + "uint64":true, "int":true, "uint":true, "uintptr":true + }; + + var atoms = { + "true":true, "false":true, "iota":true, "nil":true, "append":true, + "cap":true, "close":true, "complex":true, "copy":true, "imag":true, + "len":true, "make":true, "new":true, "panic":true, "print":true, + "println":true, "real":true, "recover":true + }; + + var isOperatorChar = /[+\-*&^%:=<>!|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\d\.]/.test(ch)) { + if (ch == ".") { + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + } else if (ch == "0") { + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + } else { + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + } + return "number"; + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (cur == "case" || cur == "default") curPunc = "case"; + return "keyword"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && quote != "`" && next == "\\"; + } + if (end || !(escaped || quote == "`")) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + if (!state.context.prev) return; + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + if (ctx.type == "case") ctx.type = "}"; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "case") ctx.type = "case"; + else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); + else if (curPunc == ctx.type) popContext(state); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { + state.context.type = "}"; + return ctx.indented; + } + var closing = firstChar == ctx.type; + if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}):", + fold: "brace", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-go", "go"); + +}); diff --git a/libraries/codemirror/mode/go/index.html b/libraries/codemirror/mode/go/index.html new file mode 100644 index 0000000..72e3b36 --- /dev/null +++ b/libraries/codemirror/mode/go/index.html @@ -0,0 +1,85 @@ + + +CodeMirror: Go mode + + + + + + + + + + + +
          +

          Go mode

          +
          + + + +

          MIME type: text/x-go

          +
          diff --git a/libraries/codemirror/mode/groovy/groovy.js b/libraries/codemirror/mode/groovy/groovy.js new file mode 100644 index 0000000..721933b --- /dev/null +++ b/libraries/codemirror/mode/groovy/groovy.js @@ -0,0 +1,230 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("groovy", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words( + "abstract as assert boolean break byte case catch char class const continue def default " + + "do double else enum extends final finally float for goto if implements import in " + + "instanceof int interface long native new package private protected public return " + + "short static strictfp super switch synchronized threadsafe throw throws transient " + + "try void volatile while"); + var blockKeywords = words("catch class do else finally for if switch try while enum interface def"); + var standaloneKeywords = words("return break continue"); + var atoms = words("null true false this"); + + var curPunc; + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + return startString(ch, stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize.push(tokenComment); + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + if (expectExpression(state.lastToken, false)) { + return startString(ch, stream, state); + } + } + if (ch == "-" && stream.eat(">")) { + curPunc = "->"; + return null; + } + if (/[+\-*&%=<>!?|\/~]/.test(ch)) { + stream.eatWhile(/[+\-*&%=<>|~]/); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } + if (state.lastToken == ".") return "property"; + if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } + var cur = stream.current(); + if (atoms.propertyIsEnumerable(cur)) { return "atom"; } + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = "standalone"; + return "keyword"; + } + return "variable"; + } + tokenBase.isBase = true; + + function startString(quote, stream, state) { + var tripleQuoted = false; + if (quote != "/" && stream.eat(quote)) { + if (stream.eat(quote)) tripleQuoted = true; + else return "string"; + } + function t(stream, state) { + var escaped = false, next, end = !tripleQuoted; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + if (!tripleQuoted) { break; } + if (stream.match(quote + quote)) { end = true; break; } + } + if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { + state.tokenize.push(tokenBaseUntilBrace()); + return "string"; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize.pop(); + return "string"; + } + state.tokenize.push(t); + return t(stream, state); + } + + function tokenBaseUntilBrace() { + var depth = 1; + function t(stream, state) { + if (stream.peek() == "}") { + depth--; + if (depth == 0) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + } else if (stream.peek() == "{") { + depth++; + } + return tokenBase(stream, state); + } + t.isBase = true; + return t; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize.pop(); + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function expectExpression(last, newline) { + return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || + last == "newstatement" || last == "keyword" || last == "proplabel" || + (last == "standalone" && !newline); + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: [tokenBase], + context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), + indented: 0, + startOfLine: true, + lastToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + // Automatic semicolon insertion + if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) { + popContext(state); ctx = state.context; + } + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = state.tokenize[state.tokenize.length-1](stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + // Handle indentation for {x -> \n ... } + else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { + popContext(state); + state.context.align = false; + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + state.lastToken = curPunc || style; + return style; + }, + + indent: function(state, textAfter) { + if (!state.tokenize[state.tokenize.length-1].isBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; + if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : config.indentUnit); + }, + + electricChars: "{}", + closeBrackets: {triples: "'\""}, + fold: "brace" + }; +}); + +CodeMirror.defineMIME("text/x-groovy", "groovy"); + +}); diff --git a/libraries/codemirror/mode/groovy/index.html b/libraries/codemirror/mode/groovy/index.html new file mode 100644 index 0000000..bb0df07 --- /dev/null +++ b/libraries/codemirror/mode/groovy/index.html @@ -0,0 +1,84 @@ + + +CodeMirror: Groovy mode + + + + + + + + + + +
          +

          Groovy mode

          +
          + + + +

          MIME types defined: text/x-groovy

          +
          diff --git a/libraries/codemirror/mode/haml/haml.js b/libraries/codemirror/mode/haml/haml.js new file mode 100644 index 0000000..03ce833 --- /dev/null +++ b/libraries/codemirror/mode/haml/haml.js @@ -0,0 +1,161 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + // full haml mode. This handled embeded ruby and html fragments too + CodeMirror.defineMode("haml", function(config) { + var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); + var rubyMode = CodeMirror.getMode(config, "ruby"); + + function rubyInQuote(endQuote) { + return function(stream, state) { + var ch = stream.peek(); + if (ch == endQuote && state.rubyState.tokenize.length == 1) { + // step out of ruby context as it seems to complete processing all the braces + stream.next(); + state.tokenize = html; + return "closeAttributeTag"; + } else { + return ruby(stream, state); + } + }; + } + + function ruby(stream, state) { + if (stream.match("-#")) { + stream.skipToEnd(); + return "comment"; + } + return rubyMode.token(stream, state.rubyState); + } + + function html(stream, state) { + var ch = stream.peek(); + + // handle haml declarations. All declarations that cant be handled here + // will be passed to html mode + if (state.previousToken.style == "comment" ) { + if (state.indented > state.previousToken.indented) { + stream.skipToEnd(); + return "commentLine"; + } + } + + if (state.startOfLine) { + if (ch == "!" && stream.match("!!")) { + stream.skipToEnd(); + return "tag"; + } else if (stream.match(/^%[\w:#\.]+=/)) { + state.tokenize = ruby; + return "hamlTag"; + } else if (stream.match(/^%[\w:]+/)) { + return "hamlTag"; + } else if (ch == "/" ) { + stream.skipToEnd(); + return "comment"; + } + } + + if (state.startOfLine || state.previousToken.style == "hamlTag") { + if ( ch == "#" || ch == ".") { + stream.match(/[\w-#\.]*/); + return "hamlAttribute"; + } + } + + // donot handle --> as valid ruby, make it HTML close comment instead + if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { + state.tokenize = ruby; + return state.tokenize(stream, state); + } + + if (state.previousToken.style == "hamlTag" || + state.previousToken.style == "closeAttributeTag" || + state.previousToken.style == "hamlAttribute") { + if (ch == "(") { + state.tokenize = rubyInQuote(")"); + return state.tokenize(stream, state); + } else if (ch == "{") { + if (!stream.match(/^\{%.*/)) { + state.tokenize = rubyInQuote("}"); + return state.tokenize(stream, state); + } + } + } + + return htmlMode.token(stream, state.htmlState); + } + + return { + // default to html mode + startState: function() { + var htmlState = htmlMode.startState(); + var rubyState = rubyMode.startState(); + return { + htmlState: htmlState, + rubyState: rubyState, + indented: 0, + previousToken: { style: null, indented: 0}, + tokenize: html + }; + }, + + copyState: function(state) { + return { + htmlState : CodeMirror.copyState(htmlMode, state.htmlState), + rubyState: CodeMirror.copyState(rubyMode, state.rubyState), + indented: state.indented, + previousToken: state.previousToken, + tokenize: state.tokenize + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + state.startOfLine = false; + // dont record comment line as we only want to measure comment line with + // the opening comment block + if (style && style != "commentLine") { + state.previousToken = { style: style, indented: state.indented }; + } + // if current state is ruby and the previous token is not `,` reset the + // tokenize to html + if (stream.eol() && state.tokenize == ruby) { + stream.backUp(1); + var ch = stream.peek(); + stream.next(); + if (ch && ch != ",") { + state.tokenize = html; + } + } + // reprocess some of the specific style tag when finish setting previousToken + if (style == "hamlTag") { + style = "tag"; + } else if (style == "commentLine") { + style = "comment"; + } else if (style == "hamlAttribute") { + style = "attribute"; + } else if (style == "closeAttributeTag") { + style = null; + } + return style; + } + }; + }, "htmlmixed", "ruby"); + + CodeMirror.defineMIME("text/x-haml", "haml"); +}); diff --git a/libraries/codemirror/mode/haml/index.html b/libraries/codemirror/mode/haml/index.html new file mode 100644 index 0000000..2894a93 --- /dev/null +++ b/libraries/codemirror/mode/haml/index.html @@ -0,0 +1,79 @@ + + +CodeMirror: HAML mode + + + + + + + + + + + + + +
          +

          HAML mode

          +
          + + +

          MIME types defined: text/x-haml.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/haml/test.js b/libraries/codemirror/mode/haml/test.js new file mode 100644 index 0000000..508458a --- /dev/null +++ b/libraries/codemirror/mode/haml/test.js @@ -0,0 +1,97 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "haml"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + // Requires at least one media query + MT("elementName", + "[tag %h1] Hey There"); + + MT("oneElementPerLine", + "[tag %h1] Hey There %h2"); + + MT("idSelector", + "[tag %h1][attribute #test] Hey There"); + + MT("classSelector", + "[tag %h1][attribute .hello] Hey There"); + + MT("docType", + "[tag !!! XML]"); + + MT("comment", + "[comment / Hello WORLD]"); + + MT("notComment", + "[tag %h1] This is not a / comment "); + + MT("attributes", + "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); + + MT("htmlCode", + "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); + + MT("rubyBlock", + "[operator =][variable-2 @item]"); + + MT("selectorRubyBlock", + "[tag %a.selector=] [variable-2 @item]"); + + MT("nestedRubyBlock", + "[tag %a]", + " [operator =][variable puts] [string \"test\"]"); + + MT("multilinePlaintext", + "[tag %p]", + " Hello,", + " World"); + + MT("multilineRuby", + "[tag %p]", + " [comment -# this is a comment]", + " [comment and this is a comment too]", + " Date/Time", + " [operator -] [variable now] [operator =] [tag DateTime][operator .][property now]", + " [tag %strong=] [variable now]", + " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", + " [operator =][string \"Happy\"]", + " [operator =][string \"Belated\"]", + " [operator =][string \"Birthday\"]"); + + MT("multilineComment", + "[comment /]", + " [comment Multiline]", + " [comment Comment]"); + + MT("hamlComment", + "[comment -# this is a comment]"); + + MT("multilineHamlComment", + "[comment -# this is a comment]", + " [comment and this is a comment too]"); + + MT("multilineHTMLComment", + "[comment ]"); + + MT("hamlAfterRubyTag", + "[attribute .block]", + " [tag %strong=] [variable now]", + " [attribute .test]", + " [operator =][variable now]", + " [attribute .right]"); + + MT("stretchedRuby", + "[operator =] [variable puts] [string \"Hello\"],", + " [string \"World\"]"); + + MT("interpolationInHashAttribute", + //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); + "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); + + MT("interpolationInHTMLAttribute", + "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); +})(); diff --git a/libraries/codemirror/mode/handlebars/handlebars.js b/libraries/codemirror/mode/handlebars/handlebars.js new file mode 100644 index 0000000..2174e53 --- /dev/null +++ b/libraries/codemirror/mode/handlebars/handlebars.js @@ -0,0 +1,62 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple"), require("../../addon/mode/multiplex")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple", "../../addon/mode/multiplex"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode("handlebars-tags", { + start: [ + { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, + { regex: /\{\{!/, push: "comment", token: "comment" }, + { regex: /\{\{/, push: "handlebars", token: "tag" } + ], + handlebars: [ + { regex: /\}\}/, pop: true, token: "tag" }, + + // Double and single quotes + { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, + { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, + + // Handlebars keywords + { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, + { regex: /(?:else|this)\b/, token: "keyword" }, + + // Numeral + { regex: /\d+/i, token: "number" }, + + // Atoms like = and . + { regex: /=|~|@|true|false/, token: "atom" }, + + // Paths + { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } + ], + dash_comment: [ + { regex: /--\}\}/, pop: true, token: "comment" }, + + // Commented code + { regex: /./, token: "comment"} + ], + comment: [ + { regex: /\}\}/, pop: true, token: "comment" }, + { regex: /./, token: "comment" } + ] + }); + + CodeMirror.defineMode("handlebars", function(config, parserConfig) { + var handlebars = CodeMirror.getMode(config, "handlebars-tags"); + if (!parserConfig || !parserConfig.base) return handlebars; + return CodeMirror.multiplexingMode( + CodeMirror.getMode(config, parserConfig.base), + {open: "{{", close: "}}", mode: handlebars, parseDelimiters: true} + ); + }); + + CodeMirror.defineMIME("text/x-handlebars-template", "handlebars"); +}); diff --git a/libraries/codemirror/mode/handlebars/index.html b/libraries/codemirror/mode/handlebars/index.html new file mode 100644 index 0000000..b1bfad1 --- /dev/null +++ b/libraries/codemirror/mode/handlebars/index.html @@ -0,0 +1,79 @@ + + +CodeMirror: Handlebars mode + + + + + + + + + + + + +
          +

          Handlebars

          +
          + + +

          Handlebars syntax highlighting for CodeMirror.

          + +

          MIME types defined: text/x-handlebars-template

          + +

          Supported options: base to set the mode to + wrap. For example, use

          +
          mode: {name: "handlebars", base: "text/html"}
          +

          to highlight an HTML template.

          +
          diff --git a/libraries/codemirror/mode/haskell-literate/haskell-literate.js b/libraries/codemirror/mode/haskell-literate/haskell-literate.js new file mode 100644 index 0000000..9358994 --- /dev/null +++ b/libraries/codemirror/mode/haskell-literate/haskell-literate.js @@ -0,0 +1,43 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function (mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../haskell/haskell")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../haskell/haskell"], mod) + else // Plain browser env + mod(CodeMirror) +})(function (CodeMirror) { + "use strict" + + CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { + var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") + + return { + startState: function () { + return { + inCode: false, + baseState: CodeMirror.startState(baseMode) + } + }, + token: function (stream, state) { + if (stream.sol()) { + if (state.inCode = stream.eat(">")) + return "meta" + } + if (state.inCode) { + return baseMode.token(stream, state.baseState) + } else { + stream.skipToEnd() + return "comment" + } + }, + innerMode: function (state) { + return state.inCode ? {state: state.baseState, mode: baseMode} : null + } + } + }, "haskell") + + CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") +}) diff --git a/libraries/codemirror/mode/haskell-literate/index.html b/libraries/codemirror/mode/haskell-literate/index.html new file mode 100644 index 0000000..8c9bc60 --- /dev/null +++ b/libraries/codemirror/mode/haskell-literate/index.html @@ -0,0 +1,282 @@ + + +CodeMirror: Haskell-literate mode + + + + + + + + + + +
          +

          Haskell literate mode

          +
          + +
          + +

          MIME types + defined: text/x-literate-haskell.

          + +

          Parser configuration parameters recognized: base to + set the base mode (defaults to "haskell").

          + + + +
          diff --git a/libraries/codemirror/mode/haskell/haskell.js b/libraries/codemirror/mode/haskell/haskell.js new file mode 100644 index 0000000..fe0bab6 --- /dev/null +++ b/libraries/codemirror/mode/haskell/haskell.js @@ -0,0 +1,267 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("haskell", function(_config, modeConfig) { + + function switchState(source, setState, f) { + setState(f); + return f(source, setState); + } + + // These should all be Unicode extended, as per the Haskell 2010 report + var smallRE = /[a-z_]/; + var largeRE = /[A-Z]/; + var digitRE = /\d/; + var hexitRE = /[0-9A-Fa-f]/; + var octitRE = /[0-7]/; + var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; + var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; + var specialRE = /[(),;[\]`{}]/; + var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer + + function normal(source, setState) { + if (source.eatWhile(whiteCharRE)) { + return null; + } + + var ch = source.next(); + if (specialRE.test(ch)) { + if (ch == '{' && source.eat('-')) { + var t = "comment"; + if (source.eat('#')) { + t = "meta"; + } + return switchState(source, setState, ncomment(t, 1)); + } + return null; + } + + if (ch == '\'') { + if (source.eat('\\')) { + source.next(); // should handle other escapes here + } + else { + source.next(); + } + if (source.eat('\'')) { + return "string"; + } + return "error"; + } + + if (ch == '"') { + return switchState(source, setState, stringLiteral); + } + + if (largeRE.test(ch)) { + source.eatWhile(idRE); + if (source.eat('.')) { + return "qualifier"; + } + return "variable-2"; + } + + if (smallRE.test(ch)) { + source.eatWhile(idRE); + return "variable"; + } + + if (digitRE.test(ch)) { + if (ch == '0') { + if (source.eat(/[xX]/)) { + source.eatWhile(hexitRE); // should require at least 1 + return "integer"; + } + if (source.eat(/[oO]/)) { + source.eatWhile(octitRE); // should require at least 1 + return "number"; + } + } + source.eatWhile(digitRE); + var t = "number"; + if (source.match(/^\.\d+/)) { + t = "number"; + } + if (source.eat(/[eE]/)) { + t = "number"; + source.eat(/[-+]/); + source.eatWhile(digitRE); // should require at least 1 + } + return t; + } + + if (ch == "." && source.eat(".")) + return "keyword"; + + if (symbolRE.test(ch)) { + if (ch == '-' && source.eat(/-/)) { + source.eatWhile(/-/); + if (!source.eat(symbolRE)) { + source.skipToEnd(); + return "comment"; + } + } + var t = "variable"; + if (ch == ':') { + t = "variable-2"; + } + source.eatWhile(symbolRE); + return t; + } + + return "error"; + } + + function ncomment(type, nest) { + if (nest == 0) { + return normal; + } + return function(source, setState) { + var currNest = nest; + while (!source.eol()) { + var ch = source.next(); + if (ch == '{' && source.eat('-')) { + ++currNest; + } + else if (ch == '-' && source.eat('}')) { + --currNest; + if (currNest == 0) { + setState(normal); + return type; + } + } + } + setState(ncomment(type, currNest)); + return type; + }; + } + + function stringLiteral(source, setState) { + while (!source.eol()) { + var ch = source.next(); + if (ch == '"') { + setState(normal); + return "string"; + } + if (ch == '\\') { + if (source.eol() || source.eat(whiteCharRE)) { + setState(stringGap); + return "string"; + } + if (source.eat('&')) { + } + else { + source.next(); // should handle other escapes here + } + } + } + setState(normal); + return "error"; + } + + function stringGap(source, setState) { + if (source.eat('\\')) { + return switchState(source, setState, stringLiteral); + } + source.next(); + setState(normal); + return "error"; + } + + + var wellKnownWords = (function() { + var wkw = {}; + function setType(t) { + return function () { + for (var i = 0; i < arguments.length; i++) + wkw[arguments[i]] = t; + }; + } + + setType("keyword")( + "case", "class", "data", "default", "deriving", "do", "else", "foreign", + "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", + "module", "newtype", "of", "then", "type", "where", "_"); + + setType("keyword")( + "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>"); + + setType("builtin")( + "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<", + "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**"); + + setType("builtin")( + "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", + "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", + "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", + "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", + "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", + "String", "True"); + + setType("builtin")( + "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", + "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", + "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", + "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", + "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", + "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", + "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", + "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", + "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", + "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", + "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", + "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", + "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", + "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", + "otherwise", "pi", "pred", "print", "product", "properFraction", + "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", + "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", + "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", + "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", + "sequence", "sequence_", "show", "showChar", "showList", "showParen", + "showString", "shows", "showsPrec", "significand", "signum", "sin", + "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", + "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", + "toRational", "truncate", "uncurry", "undefined", "unlines", "until", + "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", + "zip3", "zipWith", "zipWith3"); + + var override = modeConfig.overrideKeywords; + if (override) for (var word in override) if (override.hasOwnProperty(word)) + wkw[word] = override[word]; + + return wkw; + })(); + + + + return { + startState: function () { return { f: normal }; }, + copyState: function (s) { return { f: s.f }; }, + + token: function(stream, state) { + var t = state.f(stream, function(s) { state.f = s; }); + var w = stream.current(); + return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; + }, + + blockCommentStart: "{-", + blockCommentEnd: "-}", + lineComment: "--" + }; + +}); + +CodeMirror.defineMIME("text/x-haskell", "haskell"); + +}); diff --git a/libraries/codemirror/mode/haskell/index.html b/libraries/codemirror/mode/haskell/index.html new file mode 100644 index 0000000..42240b0 --- /dev/null +++ b/libraries/codemirror/mode/haskell/index.html @@ -0,0 +1,73 @@ + + +CodeMirror: Haskell mode + + + + + + + + + + + +
          +

          Haskell mode

          +
          + + + +

          MIME types defined: text/x-haskell.

          +
          diff --git a/libraries/codemirror/mode/haxe/haxe.js b/libraries/codemirror/mode/haxe/haxe.js new file mode 100644 index 0000000..a9573dd --- /dev/null +++ b/libraries/codemirror/mode/haxe/haxe.js @@ -0,0 +1,515 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("haxe", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + // Tokenizer + + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; + var type = kw("typedef"); + var keywords = { + "if": A, "while": A, "else": B, "do": B, "try": B, + "return": C, "break": C, "continue": C, "new": C, "throw": C, + "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), + "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), + "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "never": kw("property_access"), "trace":kw("trace"), + "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, + "true": atom, "false": atom, "null": atom + }; + + var isOperatorChar = /[+\-*&%=<>!?|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function toUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == end && !escaped) + return true; + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function haxeTokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + return chain(stream, state, haxeTokenString(ch)); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { + toUnescaped(stream, "/"); + stream.eatWhile(/[gimsu]/); + return ret("regexp", "string-2"); + } else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, haxeTokenComment); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + } else if (ch == "#") { + stream.skipToEnd(); + return ret("conditional", "meta"); + } else if (ch == "@") { + stream.eat(/:/); + stream.eatWhile(/[\w_]/); + return ret ("metadata", "meta"); + } else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } else { + var word; + if(/[A-Z]/.test(ch)) { + stream.eatWhile(/[\w_<>]/); + word = stream.current(); + return ret("type", "variable-3", word); + } else { + stream.eatWhile(/[\w_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.kwAllowed) ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + } + + function haxeTokenString(quote) { + return function(stream, state) { + if (toUnescaped(stream, quote)) + state.tokenize = haxeTokenBase; + return ret("string", "string"); + }; + } + + function haxeTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = haxeTokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; + + function HaxeLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + } + + function parseHaxe(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + if (type == "variable" && imported(state, content)) return "variable-3"; + return style; + } + } + } + + function imported(state, typename) { + if (/[a-z]/.test(typename.charAt(0))) + return false; + var len = state.importedtypes.length; + for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) + if (v.name == name) return true; + return false; + } + function register(varname) { + var state = cx.state; + if (state.context) { + cx.marked = "def"; + if (inList(varname, state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else if (state.globalVars) { + if (inList(varname, state.globalVars)) return; + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: null}; + function pushcontext() { + if (!cx.state.context) cx.state.localVars = defaultVars; + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + popcontext.lex = true; + function pushlex(type, info) { + var result = function() { + var state = cx.state; + state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function f(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(f); + } + return f; + } + + function statement(type) { + if (type == "@") return cont(metadef); + if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), + poplex, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "import") return cont(importdef, expect(";")); + if (type == "typedef") return cont(typedef); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); + if (type == "type" ) return cont(maybeoperator); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); + if (type == "operator") return cont(expression); + if (type == "[") return cont(pushlex("]"), commasep(maybeexpression, "]"), poplex, maybeoperator); + if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperator(type, value) { + if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); + if (type == "operator" || type == ":") return cont(expression); + if (type == ";") return; + if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); + if (type == ".") return cont(property, maybeoperator); + if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); + } + + function maybeattribute(type) { + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "var") return cont(vardef1); + } + + function metadef(type) { + if(type == ":") return cont(metadef); + if(type == "variable") return cont(metadef); + if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); + } + function metaargs(type) { + if(type == "variable") return cont(); + } + + function importdef (type, value) { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); + } + + function typedef (type, value) + { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } + } + + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperator, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type) { + if (type == "variable") cx.marked = "property"; + if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") return cont(what, proceed); + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + else return pass(what, proceed); + }; + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function vardef1(type, value) { + if (type == "variable"){register(value); return cont(typeuse, vardef2);} + return cont(); + } + function vardef2(type, value) { + if (value == "=") return cont(expression, vardef2); + if (type == ",") return cont(vardef1); + } + function forspec1(type, value) { + if (type == "variable") { + register(value); + return cont(forin, expression) + } else { + return pass() + } + } + function forin(_type, value) { + if (value == "in") return cont(); + } + function functiondef(type, value) { + //function names starting with upper-case letters are recognised as types, so cludging them together here. + if (type == "variable" || type == "type") {register(value); return cont(functiondef);} + if (value == "new") return cont(functiondef); + if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); + } + function typeuse(type) { + if(type == ":") return cont(typestring); + } + function typestring(type) { + if(type == "type") return cont(); + if(type == "variable") return cont(); + if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); + } + function typeprop(type) { + if(type == "variable") return cont(typeuse); + } + function funarg(type, value) { + if (type == "variable") {register(value); return cont(typeuse);} + } + + // Interface + return { + startState: function(basecolumn) { + var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; + var state = { + tokenize: haxeTokenBase, + reAllowed: true, + kwAllowed: true, + cc: [], + lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + importedtypes: defaulttypes, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); + state.kwAllowed = type != '.'; + return parseHaxe(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize != haxeTokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + if (type == "vardef") return lexical.indented + 4; + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "stat" || type == "form") return lexical.indented + indentUnit; + else if (lexical.info == "switch" && !closing) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-haxe", "haxe"); + +CodeMirror.defineMode("hxml", function () { + + return { + startState: function () { + return { + define: false, + inString: false + }; + }, + token: function (stream, state) { + var ch = stream.peek(); + var sol = stream.sol(); + + ///* comments */ + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + if (sol && ch == "-") { + var style = "variable-2"; + + stream.eat(/-/); + + if (stream.peek() == "-") { + stream.eat(/-/); + style = "keyword a"; + } + + if (stream.peek() == "D") { + stream.eat(/[D]/); + style = "keyword c"; + state.define = true; + } + + stream.eatWhile(/[A-Z]/i); + return style; + } + + var ch = stream.peek(); + + if (state.inString == false && ch == "'") { + state.inString = true; + ch = stream.next(); + } + + if (state.inString == true) { + if (stream.skipTo("'")) { + + } else { + stream.skipToEnd(); + } + + if (stream.peek() == "'") { + stream.next(); + state.inString = false; + } + + return "string"; + } + + stream.next(); + return null; + }, + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-hxml", "hxml"); + +}); diff --git a/libraries/codemirror/mode/haxe/index.html b/libraries/codemirror/mode/haxe/index.html new file mode 100644 index 0000000..d415b5e --- /dev/null +++ b/libraries/codemirror/mode/haxe/index.html @@ -0,0 +1,124 @@ + + +CodeMirror: Haxe mode + + + + + + + + + +
          +

          Haxe mode

          + + +

          + +

          Hxml mode:

          + +

          +
          + + + +

          MIME types defined: text/x-haxe, text/x-hxml.

          +
          diff --git a/libraries/codemirror/mode/htmlembedded/htmlembedded.js b/libraries/codemirror/mode/htmlembedded/htmlembedded.js new file mode 100644 index 0000000..464dc57 --- /dev/null +++ b/libraries/codemirror/mode/htmlembedded/htmlembedded.js @@ -0,0 +1,28 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/multiplex")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/multiplex"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { + return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { + open: parserConfig.open || parserConfig.scriptStartRegex || "<%", + close: parserConfig.close || parserConfig.scriptEndRegex || "%>", + mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) + }); + }, "htmlmixed"); + + CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); + CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); + CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); + CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); +}); diff --git a/libraries/codemirror/mode/htmlembedded/index.html b/libraries/codemirror/mode/htmlembedded/index.html new file mode 100644 index 0000000..365ef8f --- /dev/null +++ b/libraries/codemirror/mode/htmlembedded/index.html @@ -0,0 +1,59 @@ + + +CodeMirror: Html Embedded Scripts mode + + + + + + + + + + + + + + +
          +

          Html Embedded Scripts mode

          +
          + + + +

          Mode for html embedded scripts like JSP and ASP.NET. Depends on HtmlMixed which in turn depends on + JavaScript, CSS and XML.
          Other dependancies include those of the scriping language chosen.

          + +

          MIME types defined: application/x-aspx (ASP.NET), + application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages)

          +
          diff --git a/libraries/codemirror/mode/htmlmixed/htmlmixed.js b/libraries/codemirror/mode/htmlmixed/htmlmixed.js new file mode 100644 index 0000000..6574fbd --- /dev/null +++ b/libraries/codemirror/mode/htmlmixed/htmlmixed.js @@ -0,0 +1,152 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaultTags = { + script: [ + ["lang", /(javascript|babel)/i, "javascript"], + ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, "javascript"], + ["type", /./, "text/plain"], + [null, null, "javascript"] + ], + style: [ + ["lang", /^css$/i, "css"], + ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], + ["type", /./, "text/plain"], + [null, null, "css"] + ] + }; + + function maybeBackup(stream, pat, style) { + var cur = stream.current(), close = cur.search(pat); + if (close > -1) { + stream.backUp(cur.length - close); + } else if (cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur); + } + return style; + } + + var attrRegexpCache = {}; + function getAttrRegexp(attr) { + var regexp = attrRegexpCache[attr]; + if (regexp) return regexp; + return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); + } + + function getAttrValue(text, attr) { + var match = text.match(getAttrRegexp(attr)) + return match ? match[2] : "" + } + + function getTagRegexp(tagName, anchored) { + return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); + } + + function addTags(from, to) { + for (var tag in from) { + var dest = to[tag] || (to[tag] = []); + var source = from[tag]; + for (var i = source.length - 1; i >= 0; i--) + dest.unshift(source[i]) + } + } + + function findMatchingMode(tagInfo, tagText) { + for (var i = 0; i < tagInfo.length; i++) { + var spec = tagInfo[i]; + if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; + } + } + + CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, { + name: "xml", + htmlMode: true, + multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, + multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag + }); + + var tags = {}; + var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; + addTags(defaultTags, tags); + if (configTags) addTags(configTags, tags); + if (configScript) for (var i = configScript.length - 1; i >= 0; i--) + tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) + + function html(stream, state) { + var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName + if (tag && !/[<>\s\/]/.test(stream.current()) && + (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && + tags.hasOwnProperty(tagName)) { + state.inTag = tagName + " " + } else if (state.inTag && tag && />$/.test(stream.current())) { + var inTag = /^([\S]+) (.*)/.exec(state.inTag) + state.inTag = null + var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) + var mode = CodeMirror.getMode(config, modeSpec) + var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); + state.token = function (stream, state) { + if (stream.match(endTagA, false)) { + state.token = html; + state.localState = state.localMode = null; + return null; + } + return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); + }; + state.localMode = mode; + state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "")); + } else if (state.inTag) { + state.inTag += stream.current() + if (stream.eol()) state.inTag += " " + } + return style; + }; + + return { + startState: function () { + var state = htmlMode.startState(); + return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function (state) { + var local; + if (state.localState) { + local = CodeMirror.copyState(state.localMode, state.localState); + } + return {token: state.token, inTag: state.inTag, + localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function (stream, state) { + return state.token(stream, state); + }, + + indent: function (state, textAfter) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter); + else + return CodeMirror.Pass; + }, + + innerMode: function (state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; + }, "xml", "javascript", "css"); + + CodeMirror.defineMIME("text/html", "htmlmixed"); +}); diff --git a/libraries/codemirror/mode/htmlmixed/index.html b/libraries/codemirror/mode/htmlmixed/index.html new file mode 100644 index 0000000..f94df9e --- /dev/null +++ b/libraries/codemirror/mode/htmlmixed/index.html @@ -0,0 +1,89 @@ + + +CodeMirror: HTML mixed mode + + + + + + + + + + + + + + +
          +

          HTML mixed mode

          +
          + + +

          The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

          + +

          It takes an optional mode configuration + option, scriptTypes, which can be used to add custom + behavior for specific <script type="..."> tags. If + given, it should hold an array of {matches, mode} + objects, where matches is a string or regexp that + matches the script type, and mode is + either null, for script types that should stay in + HTML mode, or a mode + spec corresponding to the mode that should be used for the + script.

          + +

          MIME types defined: text/html + (redefined, only takes effect if you load this parser after the + XML parser).

          + +
          diff --git a/libraries/codemirror/mode/http/http.js b/libraries/codemirror/mode/http/http.js new file mode 100644 index 0000000..9a3c5f9 --- /dev/null +++ b/libraries/codemirror/mode/http/http.js @@ -0,0 +1,113 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("http", function() { + function failFirstLine(stream, state) { + stream.skipToEnd(); + state.cur = header; + return "error"; + } + + function start(stream, state) { + if (stream.match(/^HTTP\/\d\.\d/)) { + state.cur = responseStatusCode; + return "keyword"; + } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { + state.cur = requestPath; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function responseStatusCode(stream, state) { + var code = stream.match(/^\d+/); + if (!code) return failFirstLine(stream, state); + + state.cur = responseStatusText; + var status = Number(code[0]); + if (status >= 100 && status < 200) { + return "positive informational"; + } else if (status >= 200 && status < 300) { + return "positive success"; + } else if (status >= 300 && status < 400) { + return "positive redirect"; + } else if (status >= 400 && status < 500) { + return "negative client-error"; + } else if (status >= 500 && status < 600) { + return "negative server-error"; + } else { + return "error"; + } + } + + function responseStatusText(stream, state) { + stream.skipToEnd(); + state.cur = header; + return null; + } + + function requestPath(stream, state) { + stream.eatWhile(/\S/); + state.cur = requestProtocol; + return "string-2"; + } + + function requestProtocol(stream, state) { + if (stream.match(/^HTTP\/\d\.\d$/)) { + state.cur = header; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function header(stream) { + if (stream.sol() && !stream.eat(/[ \t]/)) { + if (stream.match(/^.*?:/)) { + return "atom"; + } else { + stream.skipToEnd(); + return "error"; + } + } else { + stream.skipToEnd(); + return "string"; + } + } + + function body(stream) { + stream.skipToEnd(); + return null; + } + + return { + token: function(stream, state) { + var cur = state.cur; + if (cur != header && cur != body && stream.eatSpace()) return null; + return cur(stream, state); + }, + + blankLine: function(state) { + state.cur = body; + }, + + startState: function() { + return {cur: start}; + } + }; +}); + +CodeMirror.defineMIME("message/http", "http"); + +}); diff --git a/libraries/codemirror/mode/http/index.html b/libraries/codemirror/mode/http/index.html new file mode 100644 index 0000000..0b8d531 --- /dev/null +++ b/libraries/codemirror/mode/http/index.html @@ -0,0 +1,45 @@ + + +CodeMirror: HTTP mode + + + + + + + + + +
          +

          HTTP mode

          + + +
          + + + +

          MIME types defined: message/http.

          +
          diff --git a/libraries/codemirror/mode/idl/idl.js b/libraries/codemirror/mode/idl/idl.js new file mode 100644 index 0000000..07308d7 --- /dev/null +++ b/libraries/codemirror/mode/idl/idl.js @@ -0,0 +1,290 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); + }; + + var builtinArray = [ + 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', + 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', + 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', + 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', + 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', + 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', + 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', + 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', + 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', + 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', + 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', + 'caldat', 'call_external', 'call_function', 'call_method', + 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', + 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', + 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', + 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', + 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', + 'colorbar', 'colorize_sample', 'colormap_applicable', + 'colormap_gradient', 'colormap_rotation', 'colortable', + 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', + 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', + 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', + 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', + 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', + 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', + 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', + 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', + 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', + 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', + 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', + 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', + 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', + 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', + 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', + 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', + 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', + 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', + 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', + 'dialog_printjob', 'dialog_read_image', + 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', + 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', + 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', + 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', + 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', + 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', + 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', + 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice', + 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', + 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', + 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', + 'file_lines', 'file_link', 'file_mkdir', 'file_move', + 'file_poll_input', 'file_readlink', 'file_same', + 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', + 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', + 'fix', 'flick', 'float', 'floor', 'flow3', + 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', + 'fstat', 'fulstr', 'funct', 'function', 'fv_test', + 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', + 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', + 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', + 'get_kbrd', 'get_login_info', + 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', + 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', + 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', + 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', + 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', + 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', + 'hsv', 'i18n_multibytetoutf8', + 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', + 'i18n_widechartomultibyte', + 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', + 'idl_base64', 'idl_container', 'idl_validname', + 'idlexbr_assistant', 'idlitsys_createtool', + 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', + 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', + 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', + 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', + 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', + 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', + 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', + 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', + 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', + 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', + 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', + 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', + 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', + 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', + 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', + 'la_ludc', 'la_lumprove', 'la_lusol', + 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', + 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', + 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', + 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', + 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', + 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', + 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', + 'long', 'long64', 'lsode', 'lu_complex', 'ludc', + 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', + 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', + 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', + 'map_proj_forward', 'map_proj_image', 'map_proj_info', + 'map_proj_init', 'map_proj_inverse', + 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', + 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', + 'mesh_clip', 'mesh_decimate', 'mesh_issolid', + 'mesh_merge', 'mesh_numtriangles', + 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', + 'mesh_validate', 'mesh_volume', + 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', + 'moment', 'morph_close', 'morph_distance', + 'morph_gradient', 'morph_hitormiss', + 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', + 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', + 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', + 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', + 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', + 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', + 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', + 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', + 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', + 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', + 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', + 'polygon', 'polyline', 'polywarp', 'popd', 'powell', + 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', + 'print', 'printf', 'printd', 'pro', 'product', + 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', + 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', + 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', + 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', + 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', + 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', + 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', + 'r_test', 'radon', 'randomn', 'randomu', 'ranks', + 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', + 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', + 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', + 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', + 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', + 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', + 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', + 'register_cursor', 'regress', 'replicate', + 'replicate_inplace', 'resolve_all', + 'resolve_routine', 'restore', 'retall', 'return', 'reverse', + 'rk4', 'roberts', 'rot', 'rotate', 'round', + 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', + 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', + 'scope_level', 'scope_traceback', 'scope_varfetch', + 'scope_varname', 'search2d', + 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', + 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', + 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', + 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', + 'signum', 'simplex', 'sin', 'sindgen', 'sinh', + 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', + 'smooth', 'sobel', 'socket', 'sort', 'spawn', + 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', + 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', + 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', + 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', + 'stregex', 'stretch', 'string', 'strjoin', 'strlen', + 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', + 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', + 'strupcase', 'surface', 'surface', 'surfr', 'svdc', + 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', + 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', + 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', + 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', + 'thread', 'threed', 'tic', 'time_test2', 'timegen', + 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', + 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', + 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', + 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', + 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', + 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', + 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', + 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', + 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', + 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', + 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', + 'widget_button', 'widget_combobox', 'widget_control', + 'widget_displaycontextmenu', 'widget_draw', + 'widget_droplist', 'widget_event', 'widget_info', + 'widget_label', 'widget_list', + 'widget_propertysheet', 'widget_slider', 'widget_tab', + 'widget_table', 'widget_text', + 'widget_tree', 'widget_tree_move', 'widget_window', + 'wiener_filter', 'window', + 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', + 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', + 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', + 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', + 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', + 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', + 'wv_fn_daubechies', 'wv_fn_gaussian', + 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', + 'wv_fn_symlet', 'wv_import_data', + 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', + 'wv_pwt', 'wv_tool_denoise', + 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', + 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', + 'xobjview_rotate', 'xobjview_write_image', + 'xpalette', 'xpcolor', 'xplot3d', + 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', + 'xvolume', 'xvolume_rotate', 'xvolume_write_image', + 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' + ]; + var builtins = wordRegexp(builtinArray); + + var keywordArray = [ + 'begin', 'end', 'endcase', 'endfor', + 'endwhile', 'endif', 'endrep', 'endforeach', + 'break', 'case', 'continue', 'for', + 'foreach', 'goto', 'if', 'then', 'else', + 'repeat', 'until', 'switch', 'while', + 'do', 'pro', 'function' + ]; + var keywords = wordRegexp(keywordArray); + + CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); + + var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); + + var singleOperators = /[+\-*&=<>\/@#~$]/; + var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); + + function tokenBase(stream) { + // whitespaces + if (stream.eatSpace()) return null; + + // Handle one line Comments + if (stream.match(';')) { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.+-]/, false)) { + if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) + return 'number'; + if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) + return 'number'; + if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) + return 'number'; + } + + // Handle Strings + if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } + if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } + + // Handle words + if (stream.match(keywords)) { return 'keyword'; } + if (stream.match(builtins)) { return 'builtin'; } + if (stream.match(identifiers)) { return 'variable'; } + + if (stream.match(singleOperators) || stream.match(boolOperators)) { + return 'operator'; } + + // Handle non-detected items + stream.next(); + return null; + }; + + CodeMirror.defineMode('idl', function() { + return { + token: function(stream) { + return tokenBase(stream); + } + }; + }); + + CodeMirror.defineMIME('text/x-idl', 'idl'); +}); diff --git a/libraries/codemirror/mode/idl/index.html b/libraries/codemirror/mode/idl/index.html new file mode 100644 index 0000000..4c169e2 --- /dev/null +++ b/libraries/codemirror/mode/idl/index.html @@ -0,0 +1,64 @@ + + +CodeMirror: IDL mode + + + + + + + + + +
          +

          IDL mode

          + +
          + + +

          MIME types defined: text/x-idl.

          +
          diff --git a/libraries/codemirror/mode/index.html b/libraries/codemirror/mode/index.html new file mode 100644 index 0000000..08f5e97 --- /dev/null +++ b/libraries/codemirror/mode/index.html @@ -0,0 +1,158 @@ + + +CodeMirror: Language Modes + + + + + +
          + +

          Language modes

          + +

          This is a list of every mode in the distribution. Each mode lives +in a subdirectory of the mode/ directory, and typically +defines a single JavaScript file that implements the mode. Loading +such file will make the language available to CodeMirror, through +the mode +option.

          + +
          + +
          + +
          diff --git a/libraries/codemirror/mode/jade/index.html b/libraries/codemirror/mode/jade/index.html new file mode 100644 index 0000000..e534981 --- /dev/null +++ b/libraries/codemirror/mode/jade/index.html @@ -0,0 +1,70 @@ + + +CodeMirror: Jade Templating Mode + + + + + + + + + + + + + +
          +

          Jade Templating Mode

          +
          + +

          The Jade Templating Mode

          +

          Created by Forbes Lindesay. Managed as part of a Brackets extension at https://github.com/ForbesLindesay/jade-brackets.

          +

          MIME type defined: text/x-jade.

          +
          diff --git a/libraries/codemirror/mode/jade/jade.js b/libraries/codemirror/mode/jade/jade.js new file mode 100644 index 0000000..1db069a --- /dev/null +++ b/libraries/codemirror/mode/jade/jade.js @@ -0,0 +1,590 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../javascript/javascript"), require("../css/css"), require("../htmlmixed/htmlmixed")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('jade', function (config) { + // token types + var KEYWORD = 'keyword'; + var DOCTYPE = 'meta'; + var ID = 'builtin'; + var CLASS = 'qualifier'; + + var ATTRS_NEST = { + '{': '}', + '(': ')', + '[': ']' + }; + + var jsMode = CodeMirror.getMode(config, 'javascript'); + + function State() { + this.javaScriptLine = false; + this.javaScriptLineExcludesColon = false; + + this.javaScriptArguments = false; + this.javaScriptArgumentsDepth = 0; + + this.isInterpolating = false; + this.interpolationNesting = 0; + + this.jsState = jsMode.startState(); + + this.restOfLine = ''; + + this.isIncludeFiltered = false; + this.isEach = false; + + this.lastTag = ''; + this.scriptType = ''; + + // Attributes Mode + this.isAttrs = false; + this.attrsNest = []; + this.inAttributeName = true; + this.attributeIsType = false; + this.attrValue = ''; + + // Indented Mode + this.indentOf = Infinity; + this.indentToken = ''; + + this.innerMode = null; + this.innerState = null; + + this.innerModeForLine = false; + } + /** + * Safely copy a state + * + * @return {State} + */ + State.prototype.copy = function () { + var res = new State(); + res.javaScriptLine = this.javaScriptLine; + res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; + res.javaScriptArguments = this.javaScriptArguments; + res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; + res.isInterpolating = this.isInterpolating; + res.interpolationNesting = this.interpolationNesting; + + res.jsState = CodeMirror.copyState(jsMode, this.jsState); + + res.innerMode = this.innerMode; + if (this.innerMode && this.innerState) { + res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); + } + + res.restOfLine = this.restOfLine; + + res.isIncludeFiltered = this.isIncludeFiltered; + res.isEach = this.isEach; + res.lastTag = this.lastTag; + res.scriptType = this.scriptType; + res.isAttrs = this.isAttrs; + res.attrsNest = this.attrsNest.slice(); + res.inAttributeName = this.inAttributeName; + res.attributeIsType = this.attributeIsType; + res.attrValue = this.attrValue; + res.indentOf = this.indentOf; + res.indentToken = this.indentToken; + + res.innerModeForLine = this.innerModeForLine; + + return res; + }; + + function javaScript(stream, state) { + if (stream.sol()) { + // if javaScriptLine was set at end of line, ignore it + state.javaScriptLine = false; + state.javaScriptLineExcludesColon = false; + } + if (state.javaScriptLine) { + if (state.javaScriptLineExcludesColon && stream.peek() === ':') { + state.javaScriptLine = false; + state.javaScriptLineExcludesColon = false; + return; + } + var tok = jsMode.token(stream, state.jsState); + if (stream.eol()) state.javaScriptLine = false; + return tok || true; + } + } + function javaScriptArguments(stream, state) { + if (state.javaScriptArguments) { + if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { + state.javaScriptArguments = false; + return; + } + if (stream.peek() === '(') { + state.javaScriptArgumentsDepth++; + } else if (stream.peek() === ')') { + state.javaScriptArgumentsDepth--; + } + if (state.javaScriptArgumentsDepth === 0) { + state.javaScriptArguments = false; + return; + } + + var tok = jsMode.token(stream, state.jsState); + return tok || true; + } + } + + function yieldStatement(stream) { + if (stream.match(/^yield\b/)) { + return 'keyword'; + } + } + + function doctype(stream) { + if (stream.match(/^(?:doctype) *([^\n]+)?/)) { + return DOCTYPE; + } + } + + function interpolation(stream, state) { + if (stream.match('#{')) { + state.isInterpolating = true; + state.interpolationNesting = 0; + return 'punctuation'; + } + } + + function interpolationContinued(stream, state) { + if (state.isInterpolating) { + if (stream.peek() === '}') { + state.interpolationNesting--; + if (state.interpolationNesting < 0) { + stream.next(); + state.isInterpolating = false; + return 'punctuation'; + } + } else if (stream.peek() === '{') { + state.interpolationNesting++; + } + return jsMode.token(stream, state.jsState) || true; + } + } + + function caseStatement(stream, state) { + if (stream.match(/^case\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function when(stream, state) { + if (stream.match(/^when\b/)) { + state.javaScriptLine = true; + state.javaScriptLineExcludesColon = true; + return KEYWORD; + } + } + + function defaultStatement(stream) { + if (stream.match(/^default\b/)) { + return KEYWORD; + } + } + + function extendsStatement(stream, state) { + if (stream.match(/^extends?\b/)) { + state.restOfLine = 'string'; + return KEYWORD; + } + } + + function append(stream, state) { + if (stream.match(/^append\b/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + function prepend(stream, state) { + if (stream.match(/^prepend\b/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + function block(stream, state) { + if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + + function include(stream, state) { + if (stream.match(/^include\b/)) { + state.restOfLine = 'string'; + return KEYWORD; + } + } + + function includeFiltered(stream, state) { + if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { + state.isIncludeFiltered = true; + return KEYWORD; + } + } + + function includeFilteredContinued(stream, state) { + if (state.isIncludeFiltered) { + var tok = filter(stream, state); + state.isIncludeFiltered = false; + state.restOfLine = 'string'; + return tok; + } + } + + function mixin(stream, state) { + if (stream.match(/^mixin\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function call(stream, state) { + if (stream.match(/^\+([-\w]+)/)) { + if (!stream.match(/^\( *[-\w]+ *=/, false)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + } + return 'variable'; + } + if (stream.match(/^\+#{/, false)) { + stream.next(); + state.mixinCallAfter = true; + return interpolation(stream, state); + } + } + function callArguments(stream, state) { + if (state.mixinCallAfter) { + state.mixinCallAfter = false; + if (!stream.match(/^\( *[-\w]+ *=/, false)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + } + return true; + } + } + + function conditional(stream, state) { + if (stream.match(/^(if|unless|else if|else)\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function each(stream, state) { + if (stream.match(/^(- *)?(each|for)\b/)) { + state.isEach = true; + return KEYWORD; + } + } + function eachContinued(stream, state) { + if (state.isEach) { + if (stream.match(/^ in\b/)) { + state.javaScriptLine = true; + state.isEach = false; + return KEYWORD; + } else if (stream.sol() || stream.eol()) { + state.isEach = false; + } else if (stream.next()) { + while (!stream.match(/^ in\b/, false) && stream.next()); + return 'variable'; + } + } + } + + function whileStatement(stream, state) { + if (stream.match(/^while\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function tag(stream, state) { + var captures; + if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { + state.lastTag = captures[1].toLowerCase(); + if (state.lastTag === 'script') { + state.scriptType = 'application/javascript'; + } + return 'tag'; + } + } + + function filter(stream, state) { + if (stream.match(/^:([\w\-]+)/)) { + var innerMode; + if (config && config.innerModes) { + innerMode = config.innerModes(stream.current().substring(1)); + } + if (!innerMode) { + innerMode = stream.current().substring(1); + } + if (typeof innerMode === 'string') { + innerMode = CodeMirror.getMode(config, innerMode); + } + setInnerMode(stream, state, innerMode); + return 'atom'; + } + } + + function code(stream, state) { + if (stream.match(/^(!?=|-)/)) { + state.javaScriptLine = true; + return 'punctuation'; + } + } + + function id(stream) { + if (stream.match(/^#([\w-]+)/)) { + return ID; + } + } + + function className(stream) { + if (stream.match(/^\.([\w-]+)/)) { + return CLASS; + } + } + + function attrs(stream, state) { + if (stream.peek() == '(') { + stream.next(); + state.isAttrs = true; + state.attrsNest = []; + state.inAttributeName = true; + state.attrValue = ''; + state.attributeIsType = false; + return 'punctuation'; + } + } + + function attrsContinued(stream, state) { + if (state.isAttrs) { + if (ATTRS_NEST[stream.peek()]) { + state.attrsNest.push(ATTRS_NEST[stream.peek()]); + } + if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { + state.attrsNest.pop(); + } else if (stream.eat(')')) { + state.isAttrs = false; + return 'punctuation'; + } + if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { + if (stream.peek() === '=' || stream.peek() === '!') { + state.inAttributeName = false; + state.jsState = jsMode.startState(); + if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { + state.attributeIsType = true; + } else { + state.attributeIsType = false; + } + } + return 'attribute'; + } + + var tok = jsMode.token(stream, state.jsState); + if (state.attributeIsType && tok === 'string') { + state.scriptType = stream.current().toString(); + } + if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { + try { + Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); + state.inAttributeName = true; + state.attrValue = ''; + stream.backUp(stream.current().length); + return attrsContinued(stream, state); + } catch (ex) { + //not the end of an attribute + } + } + state.attrValue += stream.current(); + return tok || true; + } + } + + function attributesBlock(stream, state) { + if (stream.match(/^&attributes\b/)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + return 'keyword'; + } + } + + function indent(stream) { + if (stream.sol() && stream.eatSpace()) { + return 'indent'; + } + } + + function comment(stream, state) { + if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { + state.indentOf = stream.indentation(); + state.indentToken = 'comment'; + return 'comment'; + } + } + + function colon(stream) { + if (stream.match(/^: */)) { + return 'colon'; + } + } + + function text(stream, state) { + if (stream.match(/^(?:\| ?| )([^\n]+)/)) { + return 'string'; + } + if (stream.match(/^(<[^\n]*)/, false)) { + // html string + setInnerMode(stream, state, 'htmlmixed'); + state.innerModeForLine = true; + return innerMode(stream, state, true); + } + } + + function dot(stream, state) { + if (stream.eat('.')) { + var innerMode = null; + if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { + innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); + } else if (state.lastTag === 'style') { + innerMode = 'css'; + } + setInnerMode(stream, state, innerMode); + return 'dot'; + } + } + + function fail(stream) { + stream.next(); + return null; + } + + + function setInnerMode(stream, state, mode) { + mode = CodeMirror.mimeModes[mode] || mode; + mode = config.innerModes ? config.innerModes(mode) || mode : mode; + mode = CodeMirror.mimeModes[mode] || mode; + mode = CodeMirror.getMode(config, mode); + state.indentOf = stream.indentation(); + + if (mode && mode.name !== 'null') { + state.innerMode = mode; + } else { + state.indentToken = 'string'; + } + } + function innerMode(stream, state, force) { + if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { + if (state.innerMode) { + if (!state.innerState) { + state.innerState = state.innerMode.startState ? state.innerMode.startState(stream.indentation()) : {}; + } + return stream.hideFirstChars(state.indentOf + 2, function () { + return state.innerMode.token(stream, state.innerState) || true; + }); + } else { + stream.skipToEnd(); + return state.indentToken; + } + } else if (stream.sol()) { + state.indentOf = Infinity; + state.indentToken = null; + state.innerMode = null; + state.innerState = null; + } + } + function restOfLine(stream, state) { + if (stream.sol()) { + // if restOfLine was set at end of line, ignore it + state.restOfLine = ''; + } + if (state.restOfLine) { + stream.skipToEnd(); + var tok = state.restOfLine; + state.restOfLine = ''; + return tok; + } + } + + + function startState() { + return new State(); + } + function copyState(state) { + return state.copy(); + } + /** + * Get the next token in the stream + * + * @param {Stream} stream + * @param {State} state + */ + function nextToken(stream, state) { + var tok = innerMode(stream, state) + || restOfLine(stream, state) + || interpolationContinued(stream, state) + || includeFilteredContinued(stream, state) + || eachContinued(stream, state) + || attrsContinued(stream, state) + || javaScript(stream, state) + || javaScriptArguments(stream, state) + || callArguments(stream, state) + + || yieldStatement(stream, state) + || doctype(stream, state) + || interpolation(stream, state) + || caseStatement(stream, state) + || when(stream, state) + || defaultStatement(stream, state) + || extendsStatement(stream, state) + || append(stream, state) + || prepend(stream, state) + || block(stream, state) + || include(stream, state) + || includeFiltered(stream, state) + || mixin(stream, state) + || call(stream, state) + || conditional(stream, state) + || each(stream, state) + || whileStatement(stream, state) + || tag(stream, state) + || filter(stream, state) + || code(stream, state) + || id(stream, state) + || className(stream, state) + || attrs(stream, state) + || attributesBlock(stream, state) + || indent(stream, state) + || text(stream, state) + || comment(stream, state) + || colon(stream, state) + || dot(stream, state) + || fail(stream, state); + + return tok === true ? null : tok; + } + return { + startState: startState, + copyState: copyState, + token: nextToken + }; +}, 'javascript', 'css', 'htmlmixed'); + +CodeMirror.defineMIME('text/x-jade', 'jade'); + +}); diff --git a/libraries/codemirror/mode/javascript/index.html b/libraries/codemirror/mode/javascript/index.html new file mode 100644 index 0000000..592a133 --- /dev/null +++ b/libraries/codemirror/mode/javascript/index.html @@ -0,0 +1,114 @@ + + +CodeMirror: JavaScript mode + + + + + + + + + + + + +
          +

          JavaScript mode

          + + +
          + + + +

          + JavaScript mode supports several configuration options: +

            +
          • json which will set the mode to expect JSON + data rather than a JavaScript program.
          • +
          • jsonld which will set the mode to expect + JSON-LD linked data rather + than a JavaScript program (demo).
          • +
          • typescript which will activate additional + syntax highlighting and some other things for TypeScript code + (demo).
          • +
          • statementIndent which (given a number) will + determine the amount of indentation to use for statements + continued on a new line.
          • +
          • wordCharacters, a regexp that indicates which + characters should be considered part of an identifier. + Defaults to /[\w$]/, which does not handle + non-ASCII identifiers. Can be set to something more elaborate + to improve Unicode support.
          • +
          +

          + +

          MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.

          +
          diff --git a/libraries/codemirror/mode/javascript/javascript.js b/libraries/codemirror/mode/javascript/javascript.js new file mode 100644 index 0000000..fa5721d --- /dev/null +++ b/libraries/codemirror/mode/javascript/javascript.js @@ -0,0 +1,742 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// TODO actually recognize syntax of TypeScript constructs + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function expressionAllowed(stream, state, backUp) { + return /^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(state.lastType) || + (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) +} + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "variable-3"}; + var tsKeywords = { + // object-like things + "interface": kw("class"), + "implements": C, + "namespace": C, + "module": kw("module"), + "enum": kw("module"), + + // scope modifiers + "public": kw("modifier"), + "private": kw("modifier"), + "protected": kw("modifier"), + "abstract": kw("modifier"), + + // operators + "as": operator, + + // types + "string": type, "number": type, "boolean": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/o/i)) { + stream.eatWhile(/[0-7]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/b/i)) { + stream.eatWhile(/[01]/i); + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.lastType != ".") ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) break; + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/]/.test(ch)) { + return; + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + cx.marked = "def"; + if (state.context) { + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + if (parserConfig.globalVars) + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) + indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) + cx.state.cc.pop()(); + return cont(pushlex("form"), expression, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "class") return cont(pushlex("form"), className, poplex); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex) + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, false); + } + function expressionNoComma(type) { + return expressionInner(type, true); + } + function expressionInner(type, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeexpressionNoComma(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expressionNoComma); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value)) return cont(me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { return pass(quasi, me); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(expression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function(type) { + if (type == ".") return cont(noComma ? targetNoComma : target); + else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } + } + function targetNoComma(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (cx.style + " property"); + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (type == "modifier") { + return cont(objprop) + } else if (type == "[") { + return cont(expression, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expression); + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(what, proceed); + } + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type) { + if (isTS && type == ":") return cont(typedef); + } + function maybedefault(_, value) { + if (value == "=") return cont(expressionNoComma); + } + function typedef(type) { + if (type == "variable") {cx.marked = "variable-3"; return cont();} + } + function vardef() { + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (type == "modifier") return cont(pattern) + if (type == "variable") { register(value); return cont(); } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(pattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + return cont(expect(":"), pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type) { + if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybeinof); + return pass(expression, expect(";"), forspec2); + } + function formaybeinof(_type, value) { + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); + } + function funarg(type) { + if (type == "spread") return cont(funarg); + return pass(pattern, maybetype, maybedefault); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(type, value) { + if (value == "extends") return cont(expression, classNameAfter); + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "variable" || cx.style == "keyword") { + if (value == "static") { + cx.marked = "keyword"; + return cont(classBody); + } + cx.marked = "property"; + if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); + return cont(functiondef, classBody); + } + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == ";") return cont(classBody); + if (type == "}") return cont(); + } + function classGetterSetter(type) { + if (type != "variable") return pass(); + cx.marked = "property"; + return cont(); + } + function afterExport(_type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + return pass(statement); + } + function afterImport(type) { + if (type == "string") return cont(); + return pass(importSpec, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeAs(_type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(expressionNoComma, maybeArrayComprehension); + } + function maybeArrayComprehension(type) { + if (type == "for") return pass(comprehension, expect("]")); + if (type == ",") return cont(commasep(maybeexpressionNoComma, "]")); + return pass(commasep(expressionNoComma, "]")); + } + function comprehension(type) { + if (type == "for") return cont(forspec, comprehension); + if (type == "if") return cont(expression, comprehension); + } + + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || + isOperatorChar.test(textAfter.charAt(0)) || + /[,.]/.test(textAfter.charAt(0)); + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse) break; + } + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + + expressionAllowed: expressionAllowed, + skipExpression: function(state) { + var top = state.cc[state.cc.length - 1] + if (top == expression || top == expressionNoComma) state.cc.pop() + } + }; +}); + +CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/x-javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); diff --git a/libraries/codemirror/mode/javascript/json-ld.html b/libraries/codemirror/mode/javascript/json-ld.html new file mode 100644 index 0000000..3a37f0b --- /dev/null +++ b/libraries/codemirror/mode/javascript/json-ld.html @@ -0,0 +1,72 @@ + + +CodeMirror: JSON-LD mode + + + + + + + + + + + + +
          +

          JSON-LD mode

          + + +
          + + + +

          This is a specialization of the JavaScript mode.

          +
          diff --git a/libraries/codemirror/mode/javascript/test.js b/libraries/codemirror/mode/javascript/test.js new file mode 100644 index 0000000..cb43d08 --- /dev/null +++ b/libraries/codemirror/mode/javascript/test.js @@ -0,0 +1,210 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("locals", + "[keyword function] [def foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); + + MT("comma-and-binop", + "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); + + MT("destructuring", + "([keyword function]([def a], [[[def b], [def c] ]]) {", + " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", + " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", + "})();"); + + MT("destructure_trailing_comma", + "[keyword let] {[def a], [def b],} [operator =] [variable foo];", + "[keyword let] [def c];"); // Parser still in good state? + + MT("class_body", + "[keyword class] [def Foo] {", + " [property constructor]() {}", + " [property sayName]() {", + " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", + " }", + "}"); + + MT("class", + "[keyword class] [def Point] [keyword extends] [variable SuperThing] {", + " [property get] [property prop]() { [keyword return] [number 24]; }", + " [property constructor]([def x], [def y]) {", + " [keyword super]([string 'something']);", + " [keyword this].[property x] [operator =] [variable-2 x];", + " }", + "}"); + + MT("import", + "[keyword function] [def foo]() {", + " [keyword import] [def $] [keyword from] [string 'jquery'];", + " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", + "}"); + + MT("const", + "[keyword function] [def f]() {", + " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", + "}"); + + MT("for/of", + "[keyword for]([keyword let] [def of] [keyword of] [variable something]) {}"); + + MT("generator", + "[keyword function*] [def repeat]([def n]) {", + " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", + " [keyword yield] [variable-2 i];", + "}"); + + MT("quotedStringAddition", + "[keyword let] [def f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); + + MT("quotedFatArrow", + "[keyword let] [def f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); + + MT("fatArrow", + "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", + "[variable a];", // No longer in scope + "[keyword let] [def f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", + "[variable c];"); + + MT("spread", + "[keyword function] [def f]([def a], [meta ...][def b]) {", + " [variable something]([variable-2 a], [meta ...][variable-2 b]);", + "}"); + + MT("comprehension", + "[keyword function] [def f]() {", + " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", + " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", + "}"); + + MT("quasi", + "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); + + MT("quasi_no_function", + "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); + + MT("indent_statement", + "[keyword var] [def x] [operator =] [number 10]", + "[variable x] [operator +=] [variable y] [operator +]", + " [atom Infinity]", + "[keyword debugger];"); + + MT("indent_if", + "[keyword if] ([number 1])", + " [keyword break];", + "[keyword else] [keyword if] ([number 2])", + " [keyword continue];", + "[keyword else]", + " [number 10];", + "[keyword if] ([number 1]) {", + " [keyword break];", + "} [keyword else] [keyword if] ([number 2]) {", + " [keyword continue];", + "} [keyword else] {", + " [number 10];", + "}"); + + MT("indent_for", + "[keyword for] ([keyword var] [def i] [operator =] [number 0];", + " [variable i] [operator <] [number 100];", + " [variable i][operator ++])", + " [variable doSomething]([variable i]);", + "[keyword debugger];"); + + MT("indent_c_style", + "[keyword function] [def foo]()", + "{", + " [keyword debugger];", + "}"); + + MT("indent_else", + "[keyword for] (;;)", + " [keyword if] ([variable foo])", + " [keyword if] ([variable bar])", + " [number 1];", + " [keyword else]", + " [number 2];", + " [keyword else]", + " [number 3];"); + + MT("indent_funarg", + "[variable foo]([number 10000],", + " [keyword function]([def a]) {", + " [keyword debugger];", + "};"); + + MT("indent_below_if", + "[keyword for] (;;)", + " [keyword if] ([variable foo])", + " [number 1];", + "[number 2];"); + + MT("multilinestring", + "[keyword var] [def x] [operator =] [string 'foo\\]", + "[string bar'];"); + + MT("scary_regexp", + "[string-2 /foo[[/]]bar/];"); + + MT("indent_strange_array", + "[keyword var] [def x] [operator =] [[", + " [number 1],,", + " [number 2],", + "]];", + "[number 10];"); + + MT("param_default", + "[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {", + " [keyword return] [variable-2 x];", + "}"); + + MT("new_target", + "[keyword function] [def F]([def target]) {", + " [keyword if] ([variable-2 target] [operator &&] [keyword new].[keyword target].[property name]) {", + " [keyword return] [keyword new]", + " .[keyword target];", + " }", + "}"); + + var jsonld_mode = CodeMirror.getMode( + {indentUnit: 2}, + {name: "javascript", jsonld: true} + ); + function LD(name) { + test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); + } + + LD("json_ld_keywords", + '{', + ' [meta "@context"]: {', + ' [meta "@base"]: [string "http://example.com"],', + ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', + ' [property "likesFlavor"]: {', + ' [meta "@container"]: [meta "@list"]', + ' [meta "@reverse"]: [string "@beFavoriteOf"]', + ' },', + ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', + ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', + ' },', + ' [meta "@graph"]: [[ {', + ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', + ' [property "name"]: [string "John Lennon"],', + ' [property "modified"]: {', + ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', + ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', + ' }', + ' } ]]', + '}'); + + LD("json_ld_fake", + '{', + ' [property "@fake"]: [string "@fake"],', + ' [property "@contextual"]: [string "@identifier"],', + ' [property "user@domain.com"]: [string "@graphical"],', + ' [property "@ID"]: [string "@@ID"]', + '}'); +})(); diff --git a/libraries/codemirror/mode/javascript/typescript.html b/libraries/codemirror/mode/javascript/typescript.html new file mode 100644 index 0000000..2cfc538 --- /dev/null +++ b/libraries/codemirror/mode/javascript/typescript.html @@ -0,0 +1,61 @@ + + +CodeMirror: TypeScript mode + + + + + + + + + +
          +

          TypeScript mode

          + + +
          + + + +

          This is a specialization of the JavaScript mode.

          +
          diff --git a/libraries/codemirror/mode/jinja2/index.html b/libraries/codemirror/mode/jinja2/index.html new file mode 100644 index 0000000..5a70e91 --- /dev/null +++ b/libraries/codemirror/mode/jinja2/index.html @@ -0,0 +1,54 @@ + + +CodeMirror: Jinja2 mode + + + + + + + + + +
          +

          Jinja2 mode

          +
          + +
          diff --git a/libraries/codemirror/mode/jinja2/jinja2.js b/libraries/codemirror/mode/jinja2/jinja2.js new file mode 100644 index 0000000..ed19558 --- /dev/null +++ b/libraries/codemirror/mode/jinja2/jinja2.js @@ -0,0 +1,142 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("jinja2", function() { + var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", + "extends", "filter", "endfilter", "firstof", "for", + "endfor", "if", "endif", "ifchanged", "endifchanged", + "ifequal", "endifequal", "ifnotequal", + "endifnotequal", "in", "include", "load", "not", "now", "or", + "parsed", "regroup", "reversed", "spaceless", + "endspaceless", "ssi", "templatetag", "openblock", + "closeblock", "openvariable", "closevariable", + "openbrace", "closebrace", "opencomment", + "closecomment", "widthratio", "url", "with", "endwith", + "get_current_language", "trans", "endtrans", "noop", "blocktrans", + "endblocktrans", "get_available_languages", + "get_current_language_bidi", "plural"], + operator = /^[+\-*&%=<>!?|~^]/, + sign = /^[:\[\(\{]/, + atom = ["true", "false"], + number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; + + keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); + atom = new RegExp("((" + atom.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + var ch = stream.peek(); + + //Comment + if (state.incomment) { + if(!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Tag + } else if (state.intag) { + //After operator + if(state.operator) { + state.operator = false; + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + } + //After sign + if(state.sign) { + state.sign = false; + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + } + + if(state.instring) { + if(ch == state.instring) { + state.instring = false; + } + stream.next(); + return "string"; + } else if(ch == "'" || ch == '"') { + state.instring = ch; + stream.next(); + return "string"; + } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { + state.intag = false; + return "tag"; + } else if(stream.match(operator)) { + state.operator = true; + return "operator"; + } else if(stream.match(sign)) { + state.sign = true; + } else { + if(stream.eat(" ") || stream.sol()) { + if(stream.match(keywords)) { + return "keyword"; + } + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + if(stream.sol()) { + stream.next(); + } + } else { + stream.next(); + } + + } + return "variable"; + } else if (stream.eat("{")) { + if (ch = stream.eat("#")) { + state.incomment = true; + if(!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Open tag + } else if (ch = stream.eat(/\{|%/)) { + //Cache close tag + state.intag = ch; + if(ch == "{") { + state.intag = "}"; + } + stream.eat("-"); + return "tag"; + } + } + stream.next(); + }; + + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + } + }; + }); +}); diff --git a/libraries/codemirror/mode/jsx/index.html b/libraries/codemirror/mode/jsx/index.html new file mode 100644 index 0000000..cb51edb --- /dev/null +++ b/libraries/codemirror/mode/jsx/index.html @@ -0,0 +1,89 @@ + + +CodeMirror: JSX mode + + + + + + + + + + + +
          +

          JSX mode

          + +
          + + + +

          JSX Mode for React's +JavaScript syntax extension.

          + +

          MIME types defined: text/jsx.

          + +
          diff --git a/libraries/codemirror/mode/jsx/jsx.js b/libraries/codemirror/mode/jsx/jsx.js new file mode 100644 index 0000000..bc2ea79 --- /dev/null +++ b/libraries/codemirror/mode/jsx/jsx.js @@ -0,0 +1,147 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript"], mod) + else // Plain browser env + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + + // Depth means the amount of open braces in JS context, in XML + // context 0 means not in tag, 1 means in tag, and 2 means in tag + // and js block comment. + function Context(state, mode, depth, prev) { + this.state = state; this.mode = mode; this.depth = depth; this.prev = prev + } + + function copyContext(context) { + return new Context(CodeMirror.copyState(context.mode, context.state), + context.mode, + context.depth, + context.prev && copyContext(context.prev)) + } + + CodeMirror.defineMode("jsx", function(config) { + var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false}) + var jsMode = CodeMirror.getMode(config, "javascript") + + function flatXMLIndent(state) { + var tagName = state.tagName + state.tagName = null + var result = xmlMode.indent(state, "") + state.tagName = tagName + return result + } + + function token(stream, state) { + if (state.context.mode == xmlMode) + return xmlToken(stream, state, state.context) + else + return jsToken(stream, state, state.context) + } + + function xmlToken(stream, state, cx) { + if (cx.depth == 2) { // Inside a JS /* */ comment + if (stream.match(/^.*?\*\//)) cx.depth = 1 + else stream.skipToEnd() + return "comment" + } + + if (stream.peek() == "{") { + xmlMode.skipAttribute(cx.state) + + var indent = flatXMLIndent(cx.state), xmlContext = cx.state.context + // If JS starts on same line as tag + if (xmlContext && stream.match(/^[^>]*>\s*$/, false)) { + while (xmlContext.prev && !xmlContext.startOfLine) + xmlContext = xmlContext.prev + // If tag starts the line, use XML indentation level + if (xmlContext.startOfLine) indent -= config.indentUnit + // Else use JS indentation level + else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented + // Else if inside of tag + } else if (cx.depth == 1) { + indent += config.indentUnit + } + + state.context = new Context(CodeMirror.startState(jsMode, indent), + jsMode, 0, state.context) + return null + } + + if (cx.depth == 1) { // Inside of tag + if (stream.peek() == "<") { // Tag inside of tag + xmlMode.skipAttribute(cx.state) + state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), + xmlMode, 0, state.context) + return null + } else if (stream.match("//")) { + stream.skipToEnd() + return "comment" + } else if (stream.match("/*")) { + cx.depth = 2 + return token(stream, state) + } + } + + var style = xmlMode.token(stream, cx.state), cur = stream.current(), stop + if (/\btag\b/.test(style)) { + if (/>$/.test(cur)) { + if (cx.state.context) cx.depth = 0 + else state.context = state.context.prev + } else if (/^ -1) { + stream.backUp(cur.length - stop) + } + return style + } + + function jsToken(stream, state, cx) { + if (stream.peek() == "<" && jsMode.expressionAllowed(stream, cx.state)) { + jsMode.skipExpression(cx.state) + state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, "")), + xmlMode, 0, state.context) + return null + } + + var style = jsMode.token(stream, cx.state) + if (!style && cx.depth != null) { + var cur = stream.current() + if (cur == "{") { + cx.depth++ + } else if (cur == "}") { + if (--cx.depth == 0) state.context = state.context.prev + } + } + return style + } + + return { + startState: function() { + return {context: new Context(CodeMirror.startState(jsMode), jsMode)} + }, + + copyState: function(state) { + return {context: copyContext(state.context)} + }, + + token: token, + + indent: function(state, textAfter, fullLine) { + return state.context.mode.indent(state.context.state, textAfter, fullLine) + }, + + innerMode: function(state) { + return state.context + } + } + }, "xml", "javascript") + + CodeMirror.defineMIME("text/jsx", "jsx") +}) diff --git a/libraries/codemirror/mode/jsx/test.js b/libraries/codemirror/mode/jsx/test.js new file mode 100644 index 0000000..c54a8b2 --- /dev/null +++ b/libraries/codemirror/mode/jsx/test.js @@ -0,0 +1,69 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "jsx") + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)) } + + MT("selfclose", + "[keyword var] [def x] [operator =] [bracket&tag <] [tag foo] [bracket&tag />] [operator +] [number 1];") + + MT("openclose", + "([bracket&tag <][tag foo][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") + + MT("attr", + "([bracket&tag <][tag foo] [attribute abc]=[string 'value'][bracket&tag >]hello [atom &][bracket&tag ][operator ++])") + + MT("braced_attr", + "([bracket&tag <][tag foo] [attribute abc]={[number 10]}[bracket&tag >]hello [atom &][bracket&tag ][operator ++])") + + MT("braced_text", + "([bracket&tag <][tag foo][bracket&tag >]hello {[number 10]} [atom &][bracket&tag ][operator ++])") + + MT("nested_tag", + "([bracket&tag <][tag foo][bracket&tag ><][tag bar][bracket&tag >][operator ++])") + + MT("nested_jsx", + "[keyword return] (", + " [bracket&tag <][tag foo][bracket&tag >]", + " say {[number 1] [operator +] [bracket&tag <][tag bar] [attribute attr]={[number 10]}[bracket&tag />]}!", + " [bracket&tag ][operator ++]", + ")") + + MT("preserve_js_context", + "[variable x] [operator =] [string-2 `quasi${][bracket&tag <][tag foo][bracket&tag />][string-2 }quoted`]") + + MT("line_comment", + "([bracket&tag <][tag foo] [comment // hello]", + " [bracket&tag >][operator ++])") + + MT("line_comment_not_in_tag", + "([bracket&tag <][tag foo][bracket&tag >] // hello", + " [bracket&tag ][operator ++])") + + MT("block_comment", + "([bracket&tag <][tag foo] [comment /* hello]", + "[comment line 2]", + "[comment line 3 */] [bracket&tag >][operator ++])") + + MT("block_comment_not_in_tag", + "([bracket&tag <][tag foo][bracket&tag >]/* hello", + " line 2", + " line 3 */ [bracket&tag ][operator ++])") + + MT("missing_attr", + "([bracket&tag <][tag foo] [attribute selected][bracket&tag />][operator ++])") + + MT("indent_js", + "([bracket&tag <][tag foo][bracket&tag >]", + " [bracket&tag <][tag bar] [attribute baz]={[keyword function]() {", + " [keyword return] [number 10]", + " }}[bracket&tag />]", + " [bracket&tag ])") + + MT("spread", + "([bracket&tag <][tag foo] [attribute bar]={[meta ...][variable baz] [operator /][number 2]}[bracket&tag />])") + + MT("tag_attribute", + "([bracket&tag <][tag foo] [attribute bar]=[bracket&tag <][tag foo][bracket&tag />/>][operator ++])") +})() diff --git a/libraries/codemirror/mode/julia/index.html b/libraries/codemirror/mode/julia/index.html new file mode 100644 index 0000000..e1492c2 --- /dev/null +++ b/libraries/codemirror/mode/julia/index.html @@ -0,0 +1,195 @@ + + +CodeMirror: Julia mode + + + + + + + + + +
          +

          Julia mode

          + +
          + + +

          MIME types defined: text/x-julia.

          +
          diff --git a/libraries/codemirror/mode/julia/julia.js b/libraries/codemirror/mode/julia/julia.js new file mode 100644 index 0000000..004de44 --- /dev/null +++ b/libraries/codemirror/mode/julia/julia.js @@ -0,0 +1,392 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("julia", function(_conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words, end) { + if (typeof end === 'undefined') { end = "\\b"; } + return new RegExp("^((" + words.join(")|(") + "))" + end); + } + + var octChar = "\\\\[0-7]{1,3}"; + var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; + var specialChar = "\\\\[abfnrtv0%?'\"\\\\]"; + var singleChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; + var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b(?!\()|[\u2208\u2209](?!\()/; + var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; + var identifiers = parserConf.identifiers || /^[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; + var charsList = [octChar, hexChar, specialChar, singleChar]; + var blockOpeners = ["begin", "function", "type", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]; + var blockClosers = ["end", "else", "elseif", "catch", "finally"]; + var keywordList = ['if', 'else', 'elseif', 'while', 'for', 'begin', 'let', 'end', 'do', 'try', 'catch', 'finally', 'return', 'break', 'continue', 'global', 'local', 'const', 'export', 'import', 'importall', 'using', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable', 'quote', 'typealias', 'abstract', 'bitstype']; + var builtinList = ['true', 'false', 'nothing', 'NaN', 'Inf']; + + //var stringPrefixes = new RegExp("^[br]?('|\")") + var stringPrefixes = /^(`|"{3}|([brv]?"))/; + var chars = wordRegexp(charsList, "'"); + var keywords = wordRegexp(keywordList); + var builtins = wordRegexp(builtinList); + var openers = wordRegexp(blockOpeners); + var closers = wordRegexp(blockClosers); + var macro = /^@[_A-Za-z][\w]*/; + var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; + var typeAnnotation = /^::[^,;"{()=$\s]+({[^}]*}+)*/; + + function inArray(state) { + var ch = currentScope(state); + if (ch == '[') { + return true; + } + return false; + } + + function currentScope(state) { + if (state.scopes.length == 0) { + return null; + } + return state.scopes[state.scopes.length - 1]; + } + + // tokenizers + function tokenBase(stream, state) { + // Handle multiline comments + if (stream.match(/^#=/, false)) { + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + + // Handle scope changes + var leavingExpr = state.leavingExpr; + if (stream.sol()) { + leavingExpr = false; + } + state.leavingExpr = false; + if (leavingExpr) { + if (stream.match(/^'+/)) { + return 'operator'; + } + } + + if (stream.match(/^\.{2,3}/)) { + return 'operator'; + } + + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle single line comments + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + if (ch === '[') { + state.scopes.push('['); + } + + if (ch === '(') { + state.scopes.push('('); + } + + var scope = currentScope(state); + + if (scope == '[' && ch === ']') { + state.scopes.pop(); + state.leavingExpr = true; + } + + if (scope == '(' && ch === ')') { + state.scopes.pop(); + state.leavingExpr = true; + } + + var match; + if (!inArray(state) && (match=stream.match(openers, false))) { + state.scopes.push(match); + } + + if (!inArray(state) && stream.match(closers, false)) { + state.scopes.pop(); + } + + if (inArray(state)) { + if (state.lastToken == 'end' && stream.match(/^:/)) { + return 'operator'; + } + if (stream.match(/^end/)) { + return 'number'; + } + } + + if (stream.match(/^=>/)) { + return 'operator'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var imMatcher = RegExp(/^im\b/); + var numberLiteral = false; + // Floats + if (stream.match(/^\d*\.(?!\.)\d*([Eef][\+\-]?\d+)?/i)) { numberLiteral = true; } + if (stream.match(/^\d+\.(?!\.)\d*/)) { numberLiteral = true; } + if (stream.match(/^\.\d+/)) { numberLiteral = true; } + if (stream.match(/^0x\.[0-9a-f]+p[\+\-]?\d+/i)) { numberLiteral = true; } + // Integers + if (stream.match(/^0x[0-9a-f]+/i)) { numberLiteral = true; } // Hex + if (stream.match(/^0b[01]+/i)) { numberLiteral = true; } // Binary + if (stream.match(/^0o[0-7]+/i)) { numberLiteral = true; } // Octal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { numberLiteral = true; } // Decimal + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) { numberLiteral = true; } + if (numberLiteral) { + // Integer literals may be "long" + stream.match(imMatcher); + state.leavingExpr = true; + return 'number'; + } + } + + if (stream.match(/^<:/)) { + return 'operator'; + } + + if (stream.match(typeAnnotation)) { + return 'builtin'; + } + + // Handle symbols + if (!leavingExpr && stream.match(symbol) || stream.match(/:\./)) { + return 'builtin'; + } + + // Handle parametric types + if (stream.match(/^{[^}]*}(?=\()/)) { + return 'builtin'; + } + + // Handle operators and Delimiters + if (stream.match(operators)) { + return 'operator'; + } + + // Handle Chars + if (stream.match(/^'/)) { + state.tokenize = tokenChar; + return state.tokenize(stream, state); + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + if (stream.match(macro)) { + return 'meta'; + } + + if (stream.match(delimiters)) { + return null; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(builtins)) { + return 'builtin'; + } + + var isDefinition = state.isDefinition || + state.lastToken == 'function' || + state.lastToken == 'macro' || + state.lastToken == 'type' || + state.lastToken == 'immutable'; + + if (stream.match(identifiers)) { + if (isDefinition) { + if (stream.peek() === '.') { + state.isDefinition = true; + return 'variable'; + } + state.isDefinition = false; + return 'def'; + } + if (stream.match(/^({[^}]*})*\(/, false)) { + return callOrDef(stream, state); + } + state.leavingExpr = true; + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function callOrDef(stream, state) { + var match = stream.match(/^(\(\s*)/); + if (match) { + if (state.firstParenPos < 0) + state.firstParenPos = state.scopes.length; + state.scopes.push('('); + state.charsAdvanced += match[1].length; + } + if (currentScope(state) == '(' && stream.match(/^\)/)) { + state.scopes.pop(); + state.charsAdvanced += 1; + if (state.scopes.length <= state.firstParenPos) { + var isDefinition = stream.match(/^\s*?=(?!=)/, false); + stream.backUp(state.charsAdvanced); + state.firstParenPos = -1; + state.charsAdvanced = 0; + if (isDefinition) + return 'def'; + return 'builtin'; + } + } + // Unfortunately javascript does not support multiline strings, so we have + // to undo anything done upto here if a function call or definition splits + // over two or more lines. + if (stream.match(/^$/g, false)) { + stream.backUp(state.charsAdvanced); + while (state.scopes.length > state.firstParenPos) + state.scopes.pop(); + state.firstParenPos = -1; + state.charsAdvanced = 0; + return 'builtin'; + } + state.charsAdvanced += stream.match(/^([^()]*)/)[1].length; + return callOrDef(stream, state); + } + + function tokenComment(stream, state) { + if (stream.match(/^#=/)) { + state.weakScopes++; + } + if (!stream.match(/.*?(?=(#=|=#))/)) { + stream.skipToEnd(); + } + if (stream.match(/^=#/)) { + state.weakScopes--; + if (state.weakScopes == 0) + state.tokenize = tokenBase; + } + return 'comment'; + } + + function tokenChar(stream, state) { + var isChar = false, match; + if (stream.match(chars)) { + isChar = true; + } else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) { + var value = parseInt(match[1], 16); + if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF) + isChar = true; + stream.next(); + } + } else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) { + var value = parseInt(match[1], 16); + if (value <= 1114111) { // U+10FFFF + isChar = true; + stream.next(); + } + } + if (isChar) { + state.leavingExpr = true; + state.tokenize = tokenBase; + return 'string'; + } + if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); } + if (stream.match(/^'/)) { state.tokenize = tokenBase; } + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ('bruv'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { + delimiter = delimiter.substr(1); + } + var OUTCLASS = 'string'; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^"\\]/); + if (stream.eat('\\')) { + stream.next(); + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + state.leavingExpr = true; + return OUTCLASS; + } else { + stream.eat(/["]/); + } + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + var external = { + startState: function() { + return { + tokenize: tokenBase, + scopes: [], + weakScopes: 0, + lastToken: null, + leavingExpr: false, + isDefinition: false, + charsAdvanced: 0, + firstParenPos: -1 + }; + }, + + token: function(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + if (current && style) { + state.lastToken = current; + } + + // Handle '.' connected identifiers + if (current === '.') { + style = stream.match(identifiers, false) || stream.match(macro, false) || + stream.match(/\(/, false) ? 'operator' : ERRORCLASS; + } + return style; + }, + + indent: function(state, textAfter) { + var delta = 0; + if (textAfter == "]" || textAfter == ")" || textAfter == "end" || textAfter == "else" || textAfter == "elseif" || textAfter == "catch" || textAfter == "finally") { + delta = -1; + } + return (state.scopes.length + delta) * _conf.indentUnit; + }, + + electricInput: /(end|else(if)?|catch|finally)$/, + lineComment: "#", + fold: "indent" + }; + return external; +}); + + +CodeMirror.defineMIME("text/x-julia", "julia"); + +}); diff --git a/libraries/codemirror/mode/livescript/index.html b/libraries/codemirror/mode/livescript/index.html new file mode 100644 index 0000000..f415479 --- /dev/null +++ b/libraries/codemirror/mode/livescript/index.html @@ -0,0 +1,459 @@ + + +CodeMirror: LiveScript mode + + + + + + + + + + +
          +

          LiveScript mode

          +
          + + +

          MIME types defined: text/x-livescript.

          + +

          The LiveScript mode was written by Kenneth Bentley.

          + +
          diff --git a/libraries/codemirror/mode/livescript/livescript.js b/libraries/codemirror/mode/livescript/livescript.js new file mode 100644 index 0000000..4b26e04 --- /dev/null +++ b/libraries/codemirror/mode/livescript/livescript.js @@ -0,0 +1,280 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Link to the project's GitHub page: + * https://github.com/duralog/CodeMirror + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode('livescript', function(){ + var tokenBase = function(stream, state) { + var next_rule = state.next || "start"; + if (next_rule) { + state.next = state.next; + var nr = Rules[next_rule]; + if (nr.splice) { + for (var i$ = 0; i$ < nr.length; ++i$) { + var r = nr[i$]; + if (r.regex && stream.match(r.regex)) { + state.next = r.next || state.next; + return r.token; + } + } + stream.next(); + return 'error'; + } + if (stream.match(r = Rules[next_rule])) { + if (r.regex && stream.match(r.regex)) { + state.next = r.next; + return r.token; + } else { + stream.next(); + return 'error'; + } + } + } + stream.next(); + return 'error'; + }; + var external = { + startState: function(){ + return { + next: 'start', + lastToken: null + }; + }, + token: function(stream, state){ + while (stream.pos == stream.start) + var style = tokenBase(stream, state); + state.lastToken = { + style: style, + indent: stream.indentation(), + content: stream.current() + }; + return style.replace(/\./g, ' '); + }, + indent: function(state){ + var indentation = state.lastToken.indent; + if (state.lastToken.content.match(indenter)) { + indentation += 2; + } + return indentation; + } + }; + return external; + }); + + var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; + var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); + var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; + var stringfill = { + token: 'string', + regex: '.+' + }; + var Rules = { + start: [ + { + token: 'comment.doc', + regex: '/\\*', + next: 'comment' + }, { + token: 'comment', + regex: '#.*' + }, { + token: 'keyword', + regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend + }, { + token: 'constant.language', + regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend + }, { + token: 'invalid.illegal', + regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend + }, { + token: 'language.support.class', + regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend + }, { + token: 'language.support.function', + regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend + }, { + token: 'variable.language', + regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend + }, { + token: 'identifier', + regex: identifier + '\\s*:(?![:=])' + }, { + token: 'variable', + regex: identifier + }, { + token: 'keyword.operator', + regex: '(?:\\.{3}|\\s+\\?)' + }, { + token: 'keyword.variable', + regex: '(?:@+|::|\\.\\.)', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\.\\s*', + next: 'key' + }, { + token: 'string', + regex: '\\\\\\S[^\\s,;)}\\]]*' + }, { + token: 'string.doc', + regex: '\'\'\'', + next: 'qdoc' + }, { + token: 'string.doc', + regex: '"""', + next: 'qqdoc' + }, { + token: 'string', + regex: '\'', + next: 'qstring' + }, { + token: 'string', + regex: '"', + next: 'qqstring' + }, { + token: 'string', + regex: '`', + next: 'js' + }, { + token: 'string', + regex: '<\\[', + next: 'words' + }, { + token: 'string.regex', + regex: '//', + next: 'heregex' + }, { + token: 'string.regex', + regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', + next: 'key' + }, { + token: 'constant.numeric', + regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' + }, { + token: 'lparen', + regex: '[({[]' + }, { + token: 'rparen', + regex: '[)}\\]]', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\S+' + }, { + token: 'text', + regex: '\\s+' + } + ], + heregex: [ + { + token: 'string.regex', + regex: '.*?//[gimy$?]{0,4}', + next: 'start' + }, { + token: 'string.regex', + regex: '\\s*#{' + }, { + token: 'comment.regex', + regex: '\\s+(?:#.*)?' + }, { + token: 'string.regex', + regex: '\\S+' + } + ], + key: [ + { + token: 'keyword.operator', + regex: '[.?@!]+' + }, { + token: 'identifier', + regex: identifier, + next: 'start' + }, { + token: 'text', + regex: '', + next: 'start' + } + ], + comment: [ + { + token: 'comment.doc', + regex: '.*?\\*/', + next: 'start' + }, { + token: 'comment.doc', + regex: '.+' + } + ], + qdoc: [ + { + token: 'string', + regex: ".*?'''", + next: 'key' + }, stringfill + ], + qqdoc: [ + { + token: 'string', + regex: '.*?"""', + next: 'key' + }, stringfill + ], + qstring: [ + { + token: 'string', + regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', + next: 'key' + }, stringfill + ], + qqstring: [ + { + token: 'string', + regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', + next: 'key' + }, stringfill + ], + js: [ + { + token: 'string', + regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', + next: 'key' + }, stringfill + ], + words: [ + { + token: 'string', + regex: '.*?\\]>', + next: 'key' + }, stringfill + ] + }; + for (var idx in Rules) { + var r = Rules[idx]; + if (r.splice) { + for (var i = 0, len = r.length; i < len; ++i) { + var rr = r[i]; + if (typeof rr.regex === 'string') { + Rules[idx][i].regex = new RegExp('^' + rr.regex); + } + } + } else if (typeof rr.regex === 'string') { + Rules[idx].regex = new RegExp('^' + r.regex); + } + } + + CodeMirror.defineMIME('text/x-livescript', 'livescript'); + +}); diff --git a/libraries/codemirror/mode/lua/index.html b/libraries/codemirror/mode/lua/index.html new file mode 100644 index 0000000..fc98b94 --- /dev/null +++ b/libraries/codemirror/mode/lua/index.html @@ -0,0 +1,85 @@ + + +CodeMirror: Lua mode + + + + + + + + + + + +
          +

          Lua mode

          +
          + + +

          Loosely based on Franciszek + Wawrzak's CodeMirror + 1 mode. One configuration parameter is + supported, specials, to which you can provide an + array of strings to have those identifiers highlighted with + the lua-special style.

          +

          MIME types defined: text/x-lua.

          + +
          diff --git a/libraries/codemirror/mode/lua/lua.js b/libraries/codemirror/mode/lua/lua.js new file mode 100644 index 0000000..0b19abd --- /dev/null +++ b/libraries/codemirror/mode/lua/lua.js @@ -0,0 +1,159 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's +// CodeMirror 1 mode. +// highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("lua", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + function prefixRE(words) { + return new RegExp("^(?:" + words.join("|") + ")", "i"); + } + function wordRE(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var specials = wordRE(parserConfig.specials || []); + + // long list of standard functions from lua manual + var builtins = wordRE([ + "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", + "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", + "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", + + "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", + + "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", + "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", + "debug.setupvalue","debug.traceback", + + "close","flush","lines","read","seek","setvbuf","write", + + "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", + "io.stdout","io.tmpfile","io.type","io.write", + + "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", + "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", + "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", + "math.sqrt","math.tan","math.tanh", + + "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", + "os.time","os.tmpname", + + "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", + "package.seeall", + + "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", + "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", + + "table.concat","table.insert","table.maxn","table.remove","table.sort" + ]); + var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", + "true","function", "end", "if", "then", "else", "do", + "while", "repeat", "until", "for", "in", "local" ]); + + var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); + var dedentTokens = wordRE(["end", "until", "\\)", "}"]); + var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); + + function readBracket(stream) { + var level = 0; + while (stream.eat("=")) ++level; + stream.eat("["); + return level; + } + + function normal(stream, state) { + var ch = stream.next(); + if (ch == "-" && stream.eat("-")) { + if (stream.eat("[") && stream.eat("[")) + return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); + stream.skipToEnd(); + return "comment"; + } + if (ch == "\"" || ch == "'") + return (state.cur = string(ch))(stream, state); + if (ch == "[" && /[\[=]/.test(stream.peek())) + return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); + if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return "number"; + } + if (/[\w_]/.test(ch)) { + stream.eatWhile(/[\w\\\-_.]/); + return "variable"; + } + return null; + } + + function bracketed(level, style) { + return function(stream, state) { + var curlev = null, ch; + while ((ch = stream.next()) != null) { + if (curlev == null) {if (ch == "]") curlev = 0;} + else if (ch == "=") ++curlev; + else if (ch == "]" && curlev == level) { state.cur = normal; break; } + else curlev = null; + } + return style; + }; + } + + function string(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.cur = normal; + return "string"; + }; + } + + return { + startState: function(basecol) { + return {basecol: basecol || 0, indentDepth: 0, cur: normal}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.cur(stream, state); + var word = stream.current(); + if (style == "variable") { + if (keywords.test(word)) style = "keyword"; + else if (builtins.test(word)) style = "builtin"; + else if (specials.test(word)) style = "variable-2"; + } + if ((style != "comment") && (style != "string")){ + if (indentTokens.test(word)) ++state.indentDepth; + else if (dedentTokens.test(word)) --state.indentDepth; + } + return style; + }, + + indent: function(state, textAfter) { + var closing = dedentPartial.test(textAfter); + return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); + }, + + lineComment: "--", + blockCommentStart: "--[[", + blockCommentEnd: "]]" + }; +}); + +CodeMirror.defineMIME("text/x-lua", "lua"); + +}); diff --git a/libraries/codemirror/mode/markdown/index.html b/libraries/codemirror/mode/markdown/index.html new file mode 100644 index 0000000..15660c2 --- /dev/null +++ b/libraries/codemirror/mode/markdown/index.html @@ -0,0 +1,361 @@ + + +CodeMirror: Markdown mode + + + + + + + + + + + +
          +

          Markdown mode

          +
          + + + +

          You might want to use the Github-Flavored Markdown mode instead, which adds support for fenced code blocks and a few other things.

          + +

          Optionally depends on the XML mode for properly highlighted inline XML blocks.

          + +

          MIME types defined: text/x-markdown.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/markdown/markdown.js b/libraries/codemirror/mode/markdown/markdown.js new file mode 100644 index 0000000..c81bb0d --- /dev/null +++ b/libraries/codemirror/mode/markdown/markdown.js @@ -0,0 +1,799 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { + + var htmlFound = CodeMirror.modes.hasOwnProperty("xml"); + var htmlMode = CodeMirror.getMode(cmCfg, htmlFound ? {name: "xml", htmlMode: true} : "text/plain"); + + function getMode(name) { + if (CodeMirror.findModeByName) { + var found = CodeMirror.findModeByName(name); + if (found) name = found.mime || found.mimes[0]; + } + var mode = CodeMirror.getMode(cmCfg, name); + return mode.name == "null" ? null : mode; + } + + // Should characters that affect highlighting be highlighted separate? + // Does not include characters that will be output (such as `1.` and `-` for lists) + if (modeCfg.highlightFormatting === undefined) + modeCfg.highlightFormatting = false; + + // Maximum number of nested blockquotes. Set to 0 for infinite nesting. + // Excess `>` will emit `error` token. + if (modeCfg.maxBlockquoteDepth === undefined) + modeCfg.maxBlockquoteDepth = 0; + + // Should underscores in words open/close em/strong? + if (modeCfg.underscoresBreakWords === undefined) + modeCfg.underscoresBreakWords = true; + + // Use `fencedCodeBlocks` to configure fenced code blocks. false to + // disable, string to specify a precise regexp that the fence should + // match, and true to allow three or more backticks or tildes (as + // per CommonMark). + + // Turn on task lists? ("- [ ] " and "- [x] ") + if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; + + // Turn on strikethrough syntax + if (modeCfg.strikethrough === undefined) + modeCfg.strikethrough = false; + + // Allow token types to be overridden by user-provided token types. + if (modeCfg.tokenTypeOverrides === undefined) + modeCfg.tokenTypeOverrides = {}; + + var tokenTypes = { + header: "header", + code: "comment", + quote: "quote", + list1: "variable-2", + list2: "variable-3", + list3: "keyword", + hr: "hr", + image: "tag", + formatting: "formatting", + linkInline: "link", + linkEmail: "link", + linkText: "link", + linkHref: "string", + em: "em", + strong: "strong", + strikethrough: "strikethrough" + }; + + for (var tokenType in tokenTypes) { + if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) { + tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; + } + } + + var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/ + , ulRE = /^[*\-+]\s+/ + , olRE = /^[0-9]+([.)])\s+/ + , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE + , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/ + , setextHeaderRE = /^ *(?:\={1,}|-{1,})\s*$/ + , textRE = /^[^#!\[\]*_\\<>` "'(~]+/ + , fencedCodeRE = new RegExp("^(" + (modeCfg.fencedCodeBlocks === true ? "~~~+|```+" : modeCfg.fencedCodeBlocks) + + ")[ \\t]*([\\w+#]*)"); + + function switchInline(stream, state, f) { + state.f = state.inline = f; + return f(stream, state); + } + + function switchBlock(stream, state, f) { + state.f = state.block = f; + return f(stream, state); + } + + function lineIsEmpty(line) { + return !line || !/\S/.test(line.string) + } + + // Blocks + + function blankLine(state) { + // Reset linkTitle state + state.linkTitle = false; + // Reset EM state + state.em = false; + // Reset STRONG state + state.strong = false; + // Reset strikethrough state + state.strikethrough = false; + // Reset state.quote + state.quote = 0; + // Reset state.indentedCode + state.indentedCode = false; + if (!htmlFound && state.f == htmlBlock) { + state.f = inlineNormal; + state.block = blockNormal; + } + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + // Mark this line as blank + state.prevLine = state.thisLine + state.thisLine = null + return null; + } + + function blockNormal(stream, state) { + + var sol = stream.sol(); + + var prevLineIsList = state.list !== false, + prevLineIsIndentedCode = state.indentedCode; + + state.indentedCode = false; + + if (prevLineIsList) { + if (state.indentationDiff >= 0) { // Continued list + if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block + state.indentation -= state.indentationDiff; + } + state.list = null; + } else if (state.indentation > 0) { + state.list = null; + state.listDepth = Math.floor(state.indentation / 4); + } else { // No longer a list + state.list = false; + state.listDepth = 0; + } + } + + var match = null; + if (state.indentationDiff >= 4) { + stream.skipToEnd(); + if (prevLineIsIndentedCode || lineIsEmpty(state.prevLine)) { + state.indentation -= 4; + state.indentedCode = true; + return tokenTypes.code; + } else { + return null; + } + } else if (stream.eatSpace()) { + return null; + } else if ((match = stream.match(atxHeaderRE)) && match[1].length <= 6) { + state.header = match[1].length; + if (modeCfg.highlightFormatting) state.formatting = "header"; + state.f = state.inline; + return getType(state); + } else if (!lineIsEmpty(state.prevLine) && !state.quote && !prevLineIsList && + !prevLineIsIndentedCode && (match = stream.match(setextHeaderRE))) { + state.header = match[0].charAt(0) == '=' ? 1 : 2; + if (modeCfg.highlightFormatting) state.formatting = "header"; + state.f = state.inline; + return getType(state); + } else if (stream.eat('>')) { + state.quote = sol ? 1 : state.quote + 1; + if (modeCfg.highlightFormatting) state.formatting = "quote"; + stream.eatSpace(); + return getType(state); + } else if (stream.peek() === '[') { + return switchInline(stream, state, footnoteLink); + } else if (stream.match(hrRE, true)) { + state.hr = true; + return tokenTypes.hr; + } else if ((lineIsEmpty(state.prevLine) || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) { + var listType = null; + if (stream.match(ulRE, true)) { + listType = 'ul'; + } else { + stream.match(olRE, true); + listType = 'ol'; + } + state.indentation = stream.column() + stream.current().length; + state.list = true; + state.listDepth++; + if (modeCfg.taskLists && stream.match(taskListRE, false)) { + state.taskList = true; + } + state.f = state.inline; + if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; + return getType(state); + } else if (modeCfg.fencedCodeBlocks && (match = stream.match(fencedCodeRE, true))) { + state.fencedChars = match[1] + // try switching mode + state.localMode = getMode(match[2]); + if (state.localMode) state.localState = state.localMode.startState(); + state.f = state.block = local; + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + state.code = -1 + return getType(state); + } + + return switchInline(stream, state, state.inline); + } + + function htmlBlock(stream, state) { + var style = htmlMode.token(stream, state.htmlState); + if ((htmlFound && state.htmlState.tagStart === null && + (!state.htmlState.context && state.htmlState.tokenize.isInText)) || + (state.md_inside && stream.current().indexOf(">") > -1)) { + state.f = inlineNormal; + state.block = blockNormal; + state.htmlState = null; + } + return style; + } + + function local(stream, state) { + if (state.fencedChars && stream.match(state.fencedChars, false)) { + state.localMode = state.localState = null; + state.f = state.block = leavingLocal; + return null; + } else if (state.localMode) { + return state.localMode.token(stream, state.localState); + } else { + stream.skipToEnd(); + return tokenTypes.code; + } + } + + function leavingLocal(stream, state) { + stream.match(state.fencedChars); + state.block = blockNormal; + state.f = inlineNormal; + state.fencedChars = null; + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + state.code = 1 + var returnType = getType(state); + state.code = 0 + return returnType; + } + + // Inline + function getType(state) { + var styles = []; + + if (state.formatting) { + styles.push(tokenTypes.formatting); + + if (typeof state.formatting === "string") state.formatting = [state.formatting]; + + for (var i = 0; i < state.formatting.length; i++) { + styles.push(tokenTypes.formatting + "-" + state.formatting[i]); + + if (state.formatting[i] === "header") { + styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); + } + + // Add `formatting-quote` and `formatting-quote-#` for blockquotes + // Add `error` instead if the maximum blockquote nesting depth is passed + if (state.formatting[i] === "quote") { + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); + } else { + styles.push("error"); + } + } + } + } + + if (state.taskOpen) { + styles.push("meta"); + return styles.length ? styles.join(' ') : null; + } + if (state.taskClosed) { + styles.push("property"); + return styles.length ? styles.join(' ') : null; + } + + if (state.linkHref) { + styles.push(tokenTypes.linkHref, "url"); + } else { // Only apply inline styles to non-url text + if (state.strong) { styles.push(tokenTypes.strong); } + if (state.em) { styles.push(tokenTypes.em); } + if (state.strikethrough) { styles.push(tokenTypes.strikethrough); } + if (state.linkText) { styles.push(tokenTypes.linkText); } + if (state.code) { styles.push(tokenTypes.code); } + } + + if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); } + + if (state.quote) { + styles.push(tokenTypes.quote); + + // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(tokenTypes.quote + "-" + state.quote); + } else { + styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); + } + } + + if (state.list !== false) { + var listMod = (state.listDepth - 1) % 3; + if (!listMod) { + styles.push(tokenTypes.list1); + } else if (listMod === 1) { + styles.push(tokenTypes.list2); + } else { + styles.push(tokenTypes.list3); + } + } + + if (state.trailingSpaceNewLine) { + styles.push("trailing-space-new-line"); + } else if (state.trailingSpace) { + styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); + } + + return styles.length ? styles.join(' ') : null; + } + + function handleText(stream, state) { + if (stream.match(textRE, true)) { + return getType(state); + } + return undefined; + } + + function inlineNormal(stream, state) { + var style = state.text(stream, state); + if (typeof style !== 'undefined') + return style; + + if (state.list) { // List marker (*, +, -, 1., etc) + state.list = null; + return getType(state); + } + + if (state.taskList) { + var taskOpen = stream.match(taskListRE, true)[1] !== "x"; + if (taskOpen) state.taskOpen = true; + else state.taskClosed = true; + if (modeCfg.highlightFormatting) state.formatting = "task"; + state.taskList = false; + return getType(state); + } + + state.taskOpen = false; + state.taskClosed = false; + + if (state.header && stream.match(/^#+$/, true)) { + if (modeCfg.highlightFormatting) state.formatting = "header"; + return getType(state); + } + + // Get sol() value now, before character is consumed + var sol = stream.sol(); + + var ch = stream.next(); + + // Matches link titles present on next line + if (state.linkTitle) { + state.linkTitle = false; + var matchCh = ch; + if (ch === '(') { + matchCh = ')'; + } + matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; + if (stream.match(new RegExp(regex), true)) { + return tokenTypes.linkHref; + } + } + + // If this block is changed, it may need to be updated in GFM mode + if (ch === '`') { + var previousFormatting = state.formatting; + if (modeCfg.highlightFormatting) state.formatting = "code"; + stream.eatWhile('`'); + var count = stream.current().length + if (state.code == 0) { + state.code = count + return getType(state) + } else if (count == state.code) { // Must be exact + var t = getType(state) + state.code = 0 + return t + } else { + state.formatting = previousFormatting + return getType(state) + } + } else if (state.code) { + return getType(state); + } + + if (ch === '\\') { + stream.next(); + if (modeCfg.highlightFormatting) { + var type = getType(state); + var formattingEscape = tokenTypes.formatting + "-escape"; + return type ? type + " " + formattingEscape : formattingEscape; + } + } + + if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { + stream.match(/\[[^\]]*\]/); + state.inline = state.f = linkHref; + return tokenTypes.image; + } + + if (ch === '[' && stream.match(/.*\](\(.*\)| ?\[.*\])/, false)) { + state.linkText = true; + if (modeCfg.highlightFormatting) state.formatting = "link"; + return getType(state); + } + + if (ch === ']' && state.linkText && stream.match(/\(.*\)| ?\[.*\]/, false)) { + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + state.linkText = false; + state.inline = state.f = linkHref; + return type; + } + + if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkInline; + } + + if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkEmail; + } + + if (ch === '<' && stream.match(/^(!--|\w)/, false)) { + var end = stream.string.indexOf(">", stream.pos); + if (end != -1) { + var atts = stream.string.substring(stream.start, end); + if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; + } + stream.backUp(1); + state.htmlState = CodeMirror.startState(htmlMode); + return switchBlock(stream, state, htmlBlock); + } + + if (ch === '<' && stream.match(/^\/\w*?>/)) { + state.md_inside = false; + return "tag"; + } + + var ignoreUnderscore = false; + if (!modeCfg.underscoresBreakWords) { + if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { + var prevPos = stream.pos - 2; + if (prevPos >= 0) { + var prevCh = stream.string.charAt(prevPos); + if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { + ignoreUnderscore = true; + } + } + } + } + if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { + if (sol && stream.peek() === ' ') { + // Do nothing, surrounded by newline and space + } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG + if (modeCfg.highlightFormatting) state.formatting = "strong"; + var t = getType(state); + state.strong = false; + return t; + } else if (!state.strong && stream.eat(ch)) { // Add STRONG + state.strong = ch; + if (modeCfg.highlightFormatting) state.formatting = "strong"; + return getType(state); + } else if (state.em === ch) { // Remove EM + if (modeCfg.highlightFormatting) state.formatting = "em"; + var t = getType(state); + state.em = false; + return t; + } else if (!state.em) { // Add EM + state.em = ch; + if (modeCfg.highlightFormatting) state.formatting = "em"; + return getType(state); + } + } else if (ch === ' ') { + if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(1); + } + } + } + + if (modeCfg.strikethrough) { + if (ch === '~' && stream.eatWhile(ch)) { + if (state.strikethrough) {// Remove strikethrough + if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; + var t = getType(state); + state.strikethrough = false; + return t; + } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough + state.strikethrough = true; + if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; + return getType(state); + } + } else if (ch === ' ') { + if (stream.match(/^~~/, true)) { // Probably surrounded by space + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(2); + } + } + } + } + + if (ch === ' ') { + if (stream.match(/ +$/, false)) { + state.trailingSpace++; + } else if (state.trailingSpace) { + state.trailingSpaceNewLine = true; + } + } + + return getType(state); + } + + function linkInline(stream, state) { + var ch = stream.next(); + + if (ch === ">") { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkInline; + } + + stream.match(/^[^>]+/, true); + + return tokenTypes.linkInline; + } + + function linkHref(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + var ch = stream.next(); + if (ch === '(' || ch === '[') { + state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + state.linkHref = true; + return getType(state); + } + return 'error'; + } + + function getLinkHrefInside(endChar) { + return function(stream, state) { + var ch = stream.next(); + + if (ch === endChar) { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + var returnState = getType(state); + state.linkHref = false; + return returnState; + } + + if (stream.match(inlineRE(endChar), true)) { + stream.backUp(1); + } + + state.linkHref = true; + return getType(state); + }; + } + + function footnoteLink(stream, state) { + if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { + state.f = footnoteLinkInside; + stream.next(); // Consume [ + if (modeCfg.highlightFormatting) state.formatting = "link"; + state.linkText = true; + return getType(state); + } + return switchInline(stream, state, inlineNormal); + } + + function footnoteLinkInside(stream, state) { + if (stream.match(/^\]:/, true)) { + state.f = state.inline = footnoteUrl; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var returnType = getType(state); + state.linkText = false; + return returnType; + } + + stream.match(/^([^\]\\]|\\.)+/, true); + + return tokenTypes.linkText; + } + + function footnoteUrl(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + // Match URL + stream.match(/^[^\s]+/, true); + // Check for link title + if (stream.peek() === undefined) { // End of line, set flag to check next line + state.linkTitle = true; + } else { // More content on line, check if link title + stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); + } + state.f = state.inline = inlineNormal; + return tokenTypes.linkHref + " url"; + } + + var savedInlineRE = []; + function inlineRE(endChar) { + if (!savedInlineRE[endChar]) { + // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741) + endChar = (endChar+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + // Match any non-endChar, escaped character, as well as the closing + // endChar. + savedInlineRE[endChar] = new RegExp('^(?:[^\\\\]|\\\\.)*?(' + endChar + ')'); + } + return savedInlineRE[endChar]; + } + + var mode = { + startState: function() { + return { + f: blockNormal, + + prevLine: null, + thisLine: null, + + block: blockNormal, + htmlState: null, + indentation: 0, + + inline: inlineNormal, + text: handleText, + + formatting: false, + linkText: false, + linkHref: false, + linkTitle: false, + code: 0, + em: false, + strong: false, + header: 0, + hr: false, + taskList: false, + list: false, + listDepth: 0, + quote: 0, + trailingSpace: 0, + trailingSpaceNewLine: false, + strikethrough: false, + fencedChars: null + }; + }, + + copyState: function(s) { + return { + f: s.f, + + prevLine: s.prevLine, + thisLine: s.thisLine, + + block: s.block, + htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), + indentation: s.indentation, + + localMode: s.localMode, + localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, + + inline: s.inline, + text: s.text, + formatting: false, + linkTitle: s.linkTitle, + code: s.code, + em: s.em, + strong: s.strong, + strikethrough: s.strikethrough, + header: s.header, + hr: s.hr, + taskList: s.taskList, + list: s.list, + listDepth: s.listDepth, + quote: s.quote, + indentedCode: s.indentedCode, + trailingSpace: s.trailingSpace, + trailingSpaceNewLine: s.trailingSpaceNewLine, + md_inside: s.md_inside, + fencedChars: s.fencedChars + }; + }, + + token: function(stream, state) { + + // Reset state.formatting + state.formatting = false; + + if (stream != state.thisLine) { + var forceBlankLine = state.header || state.hr; + + // Reset state.header and state.hr + state.header = 0; + state.hr = false; + + if (stream.match(/^\s*$/, true) || forceBlankLine) { + blankLine(state); + if (!forceBlankLine) return null + state.prevLine = null + } + + state.prevLine = state.thisLine + state.thisLine = stream + + // Reset state.taskList + state.taskList = false; + + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + + state.f = state.block; + var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; + var difference = Math.floor((indentation - state.indentation) / 4) * 4; + if (difference > 4) difference = 4; + var adjustedIndentation = state.indentation + difference; + state.indentationDiff = adjustedIndentation - state.indentation; + state.indentation = adjustedIndentation; + if (indentation > 0) return null; + } + return state.f(stream, state); + }, + + innerMode: function(state) { + if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; + if (state.localState) return {state: state.localState, mode: state.localMode}; + return {state: state, mode: mode}; + }, + + blankLine: blankLine, + + getType: getType, + + fold: "markdown" + }; + return mode; +}, "xml"); + +CodeMirror.defineMIME("text/x-markdown", "markdown"); + +}); diff --git a/libraries/codemirror/mode/markdown/test.js b/libraries/codemirror/mode/markdown/test.js new file mode 100644 index 0000000..6d7829f --- /dev/null +++ b/libraries/codemirror/mode/markdown/test.js @@ -0,0 +1,956 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "markdown"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true}); + function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } + var modeAtxNoSpace = CodeMirror.getMode({tabSize: 4}, {name: "markdown", allowAtxHeaderWithoutSpace: true}); + function AtxNoSpaceTest(name) { test.mode(name, modeAtxNoSpace, Array.prototype.slice.call(arguments, 1)); } + var modeFenced = CodeMirror.getMode({tabSize: 4}, {name: "markdown", fencedCodeBlocks: true}); + function FencedTest(name) { test.mode(name, modeFenced, Array.prototype.slice.call(arguments, 1)); } + var modeOverrideClasses = CodeMirror.getMode({tabsize: 4}, { + name: "markdown", + strikethrough: true, + tokenTypeOverrides: { + "header" : "override-header", + "code" : "override-code", + "quote" : "override-quote", + "list1" : "override-list1", + "list2" : "override-list2", + "list3" : "override-list3", + "hr" : "override-hr", + "image" : "override-image", + "linkInline" : "override-link-inline", + "linkEmail" : "override-link-email", + "linkText" : "override-link-text", + "linkHref" : "override-link-href", + "em" : "override-em", + "strong" : "override-strong", + "strikethrough" : "override-strikethrough" + }}); + function TokenTypeOverrideTest(name) { test.mode(name, modeOverrideClasses, Array.prototype.slice.call(arguments, 1)); } + var modeFormattingOverride = CodeMirror.getMode({tabsize: 4}, { + name: "markdown", + highlightFormatting: true, + tokenTypeOverrides: { + "formatting" : "override-formatting" + }}); + function FormatTokenTypeOverrideTest(name) { test.mode(name, modeFormattingOverride, Array.prototype.slice.call(arguments, 1)); } + + + FT("formatting_emAsterisk", + "[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]"); + + FT("formatting_emUnderscore", + "[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]"); + + FT("formatting_strongAsterisk", + "[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]"); + + FT("formatting_strongUnderscore", + "[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]"); + + FT("formatting_codeBackticks", + "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); + + FT("formatting_doubleBackticks", + "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); + + FT("formatting_atxHeader", + "[header&header-1&formatting&formatting-header&formatting-header-1 # ][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]"); + + FT("formatting_setextHeader", + "foo", + "[header&header-1&formatting&formatting-header&formatting-header-1 =]"); + + FT("formatting_blockquote", + "[quote"e-1&formatting&formatting-quote&formatting-quote-1 > ][quote"e-1 foo]"); + + FT("formatting_list", + "[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]"); + FT("formatting_list", + "[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]"); + + FT("formatting_link", + "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url (][string&url http://example.com/][string&formatting&formatting-link-string&url )]"); + + FT("formatting_linkReference", + "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string&url [][string&url bar][string&formatting&formatting-link-string&url ]]]", + "[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string&url http://example.com/]"); + + FT("formatting_linkWeb", + "[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]"); + + FT("formatting_linkEmail", + "[link&formatting&formatting-link <][link user@example.com][link&formatting&formatting-link >]"); + + FT("formatting_escape", + "[formatting-escape \\*]"); + + MT("plainText", + "foo"); + + // Don't style single trailing space + MT("trailingSpace1", + "foo "); + + // Two or more trailing spaces should be styled with line break character + MT("trailingSpace2", + "foo[trailing-space-a ][trailing-space-new-line ]"); + + MT("trailingSpace3", + "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]"); + + MT("trailingSpace4", + "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]"); + + // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value) + MT("codeBlocksUsing4Spaces", + " [comment foo]"); + + // Code blocks using 4 spaces with internal indentation + MT("codeBlocksUsing4SpacesIndentation", + " [comment bar]", + " [comment hello]", + " [comment world]", + " [comment foo]", + "bar"); + + // Code blocks should end even after extra indented lines + MT("codeBlocksWithTrailingIndentedLine", + " [comment foo]", + " [comment bar]", + " [comment baz]", + " ", + "hello"); + + // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value) + MT("codeBlocksUsing1Tab", + "\t[comment foo]"); + + // No code blocks directly after paragraph + // http://spec.commonmark.org/0.19/#example-65 + MT("noCodeBlocksAfterParagraph", + "Foo", + " Bar"); + + // Inline code using backticks + MT("inlineCodeUsingBackticks", + "foo [comment `bar`]"); + + // Block code using single backtick (shouldn't work) + MT("blockCodeSingleBacktick", + "[comment `]", + "[comment foo]", + "[comment `]"); + + // Unclosed backticks + // Instead of simply marking as CODE, it would be nice to have an + // incomplete flag for CODE, that is styled slightly different. + MT("unclosedBackticks", + "foo [comment `bar]"); + + // Per documentation: "To include a literal backtick character within a + // code span, you can use multiple backticks as the opening and closing + // delimiters" + MT("doubleBackticks", + "[comment ``foo ` bar``]"); + + // Tests based on Dingus + // http://daringfireball.net/projects/markdown/dingus + // + // Multiple backticks within an inline code block + MT("consecutiveBackticks", + "[comment `foo```bar`]"); + + // Multiple backticks within an inline code block with a second code block + MT("consecutiveBackticks", + "[comment `foo```bar`] hello [comment `world`]"); + + // Unclosed with several different groups of backticks + MT("unclosedBackticks", + "[comment ``foo ``` bar` hello]"); + + // Closed with several different groups of backticks + MT("closedBackticks", + "[comment ``foo ``` bar` hello``] world"); + + // atx headers + // http://daringfireball.net/projects/markdown/syntax#header + + MT("atxH1", + "[header&header-1 # foo]"); + + MT("atxH2", + "[header&header-2 ## foo]"); + + MT("atxH3", + "[header&header-3 ### foo]"); + + MT("atxH4", + "[header&header-4 #### foo]"); + + MT("atxH5", + "[header&header-5 ##### foo]"); + + MT("atxH6", + "[header&header-6 ###### foo]"); + + // http://spec.commonmark.org/0.19/#example-24 + MT("noAtxH7", + "####### foo"); + + // http://spec.commonmark.org/0.19/#example-25 + MT("noAtxH1WithoutSpace", + "#5 bolt"); + + // CommonMark requires a space after # but most parsers don't + AtxNoSpaceTest("atxNoSpaceAllowed_H1NoSpace", + "[header&header-1 #foo]"); + + AtxNoSpaceTest("atxNoSpaceAllowed_H4NoSpace", + "[header&header-4 ####foo]"); + + AtxNoSpaceTest("atxNoSpaceAllowed_H1Space", + "[header&header-1 # foo]"); + + // Inline styles should be parsed inside headers + MT("atxH1inline", + "[header&header-1 # foo ][header&header-1&em *bar*]"); + + // Setext headers - H1, H2 + // Per documentation, "Any number of underlining =’s or -’s will work." + // http://daringfireball.net/projects/markdown/syntax#header + // Ideally, the text would be marked as `header` as well, but this is + // not really feasible at the moment. So, instead, we're testing against + // what works today, to avoid any regressions. + // + // Check if single underlining = works + MT("setextH1", + "foo", + "[header&header-1 =]"); + + // Check if 3+ ='s work + MT("setextH1", + "foo", + "[header&header-1 ===]"); + + // Check if single underlining - works + MT("setextH2", + "foo", + "[header&header-2 -]"); + + // Check if 3+ -'s work + MT("setextH2", + "foo", + "[header&header-2 ---]"); + + // http://spec.commonmark.org/0.19/#example-45 + MT("setextH2AllowSpaces", + "foo", + " [header&header-2 ---- ]"); + + // http://spec.commonmark.org/0.19/#example-44 + MT("noSetextAfterIndentedCodeBlock", + " [comment foo]", + "[hr ---]"); + + // http://spec.commonmark.org/0.19/#example-51 + MT("noSetextAfterQuote", + "[quote"e-1 > foo]", + "[hr ---]"); + + MT("noSetextAfterList", + "[variable-2 - foo]", + "[hr ---]"); + + // Single-line blockquote with trailing space + MT("blockquoteSpace", + "[quote"e-1 > foo]"); + + // Single-line blockquote + MT("blockquoteNoSpace", + "[quote"e-1 >foo]"); + + // No blank line before blockquote + MT("blockquoteNoBlankLine", + "foo", + "[quote"e-1 > bar]"); + + // Nested blockquote + MT("blockquoteSpace", + "[quote"e-1 > foo]", + "[quote"e-1 >][quote"e-2 > foo]", + "[quote"e-1 >][quote"e-2 >][quote"e-3 > foo]"); + + // Single-line blockquote followed by normal paragraph + MT("blockquoteThenParagraph", + "[quote"e-1 >foo]", + "", + "bar"); + + // Multi-line blockquote (lazy mode) + MT("multiBlockquoteLazy", + "[quote"e-1 >foo]", + "[quote"e-1 bar]"); + + // Multi-line blockquote followed by normal paragraph (lazy mode) + MT("multiBlockquoteLazyThenParagraph", + "[quote"e-1 >foo]", + "[quote"e-1 bar]", + "", + "hello"); + + // Multi-line blockquote (non-lazy mode) + MT("multiBlockquote", + "[quote"e-1 >foo]", + "[quote"e-1 >bar]"); + + // Multi-line blockquote followed by normal paragraph (non-lazy mode) + MT("multiBlockquoteThenParagraph", + "[quote"e-1 >foo]", + "[quote"e-1 >bar]", + "", + "hello"); + + // Header with leading space after continued blockquote (#3287, negative indentation) + MT("headerAfterContinuedBlockquote", + "[quote"e-1 > foo]", + "[quote"e-1 bar]", + "", + " [header&header-1 # hello]"); + + // Check list types + + MT("listAsterisk", + "foo", + "bar", + "", + "[variable-2 * foo]", + "[variable-2 * bar]"); + + MT("listPlus", + "foo", + "bar", + "", + "[variable-2 + foo]", + "[variable-2 + bar]"); + + MT("listDash", + "foo", + "bar", + "", + "[variable-2 - foo]", + "[variable-2 - bar]"); + + MT("listNumber", + "foo", + "bar", + "", + "[variable-2 1. foo]", + "[variable-2 2. bar]"); + + // Lists require a preceding blank line (per Dingus) + MT("listBogus", + "foo", + "1. bar", + "2. hello"); + + // List after hr + MT("listAfterHr", + "[hr ---]", + "[variable-2 - bar]"); + + // List after header + MT("listAfterHeader", + "[header&header-1 # foo]", + "[variable-2 - bar]"); + + // hr after list + MT("hrAfterList", + "[variable-2 - foo]", + "[hr -----]"); + + // Formatting in lists (*) + MT("listAsteriskFormatting", + "[variable-2 * ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (+) + MT("listPlusFormatting", + "[variable-2 + ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (-) + MT("listDashFormatting", + "[variable-2 - ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]"); + + // Formatting in lists (1.) + MT("listNumberFormatting", + "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]", + "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]", + "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", + "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]"); + + // Paragraph lists + MT("listParagraph", + "[variable-2 * foo]", + "", + "[variable-2 * bar]"); + + // Multi-paragraph lists + // + // 4 spaces + MT("listMultiParagraph", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2 hello]"); + + // 4 spaces, extra blank lines (should still be list, per Dingus) + MT("listMultiParagraphExtra", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "", + " [variable-2 hello]"); + + // 4 spaces, plus 1 space (should still be list, per Dingus) + MT("listMultiParagraphExtraSpace", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2 hello]", + "", + " [variable-2 world]"); + + // 1 tab + MT("listTab", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "\t[variable-2 hello]"); + + // No indent + MT("listNoIndent", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + "hello"); + + // Blockquote + MT("blockquote", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [variable-2"e"e-1 > hello]"); + + // Code block + MT("blockquoteCode", + "[variable-2 * foo]", + "", + "[variable-2 * bar]", + "", + " [comment > hello]", + "", + " [variable-2 world]"); + + // Code block followed by text + MT("blockquoteCodeText", + "[variable-2 * foo]", + "", + " [variable-2 bar]", + "", + " [comment hello]", + "", + " [variable-2 world]"); + + // Nested list + + MT("listAsteriskNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]"); + + MT("listPlusNested", + "[variable-2 + foo]", + "", + " [variable-3 + bar]"); + + MT("listDashNested", + "[variable-2 - foo]", + "", + " [variable-3 - bar]"); + + MT("listNumberNested", + "[variable-2 1. foo]", + "", + " [variable-3 2. bar]"); + + MT("listMixed", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [keyword - hello]", + "", + " [variable-2 1. world]"); + + MT("listBlockquote", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [quote"e-1&variable-3 > hello]"); + + MT("listCode", + "[variable-2 * foo]", + "", + " [variable-3 + bar]", + "", + " [comment hello]"); + + // Code with internal indentation + MT("listCodeIndentation", + "[variable-2 * foo]", + "", + " [comment bar]", + " [comment hello]", + " [comment world]", + " [comment foo]", + " [variable-2 bar]"); + + // List nesting edge cases + MT("listNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]", + "", + " [variable-3 hello]" + ); + MT("listNested", + "[variable-2 * foo]", + "", + " [variable-3 * bar]", + "", + " [keyword * foo]" + ); + + // Code followed by text + MT("listCodeText", + "[variable-2 * foo]", + "", + " [comment bar]", + "", + "hello"); + + // Following tests directly from official Markdown documentation + // http://daringfireball.net/projects/markdown/syntax#hr + + MT("hrSpace", + "[hr * * *]"); + + MT("hr", + "[hr ***]"); + + MT("hrLong", + "[hr *****]"); + + MT("hrSpaceDash", + "[hr - - -]"); + + MT("hrDashLong", + "[hr ---------------------------------------]"); + + // Inline link with title + MT("linkTitle", + "[link [[foo]]][string&url (http://example.com/ \"bar\")] hello"); + + // Inline link without title + MT("linkNoTitle", + "[link [[foo]]][string&url (http://example.com/)] bar"); + + // Inline link with image + MT("linkImage", + "[link [[][tag ![[foo]]][string&url (http://example.com/)][link ]]][string&url (http://example.com/)] bar"); + + // Inline link with Em + MT("linkEm", + "[link [[][link&em *foo*][link ]]][string&url (http://example.com/)] bar"); + + // Inline link with Strong + MT("linkStrong", + "[link [[][link&strong **foo**][link ]]][string&url (http://example.com/)] bar"); + + // Inline link with EmStrong + MT("linkEmStrong", + "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url (http://example.com/)] bar"); + + // Image with title + MT("imageTitle", + "[tag ![[foo]]][string&url (http://example.com/ \"bar\")] hello"); + + // Image without title + MT("imageNoTitle", + "[tag ![[foo]]][string&url (http://example.com/)] bar"); + + // Image with asterisks + MT("imageAsterisks", + "[tag ![[*foo*]]][string&url (http://example.com/)] bar"); + + // Not a link. Should be normal text due to square brackets being used + // regularly in text, especially in quoted material, and no space is allowed + // between square brackets and parentheses (per Dingus). + MT("notALink", + "[[foo]] (bar)"); + + // Reference-style links + MT("linkReference", + "[link [[foo]]][string&url [[bar]]] hello"); + + // Reference-style links with Em + MT("linkReferenceEm", + "[link [[][link&em *foo*][link ]]][string&url [[bar]]] hello"); + + // Reference-style links with Strong + MT("linkReferenceStrong", + "[link [[][link&strong **foo**][link ]]][string&url [[bar]]] hello"); + + // Reference-style links with EmStrong + MT("linkReferenceEmStrong", + "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string&url [[bar]]] hello"); + + // Reference-style links with optional space separator (per docuentation) + // "You can optionally use a space to separate the sets of brackets" + MT("linkReferenceSpace", + "[link [[foo]]] [string&url [[bar]]] hello"); + + // Should only allow a single space ("...use *a* space...") + MT("linkReferenceDoubleSpace", + "[[foo]] [[bar]] hello"); + + // Reference-style links with implicit link name + MT("linkImplicit", + "[link [[foo]]][string&url [[]]] hello"); + + // @todo It would be nice if, at some point, the document was actually + // checked to see if the referenced link exists + + // Link label, for reference-style links (taken from documentation) + + MT("labelNoTitle", + "[link [[foo]]:] [string&url http://example.com/]"); + + MT("labelIndented", + " [link [[foo]]:] [string&url http://example.com/]"); + + MT("labelSpaceTitle", + "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"]"); + + MT("labelDoubleTitle", + "[link [[foo bar]]:] [string&url http://example.com/ \"hello\"] \"world\""); + + MT("labelTitleDoubleQuotes", + "[link [[foo]]:] [string&url http://example.com/ \"bar\"]"); + + MT("labelTitleSingleQuotes", + "[link [[foo]]:] [string&url http://example.com/ 'bar']"); + + MT("labelTitleParenthese", + "[link [[foo]]:] [string&url http://example.com/ (bar)]"); + + MT("labelTitleInvalid", + "[link [[foo]]:] [string&url http://example.com/] bar"); + + MT("labelLinkAngleBrackets", + "[link [[foo]]:] [string&url \"bar\"]"); + + MT("labelTitleNextDoubleQuotes", + "[link [[foo]]:] [string&url http://example.com/]", + "[string \"bar\"] hello"); + + MT("labelTitleNextSingleQuotes", + "[link [[foo]]:] [string&url http://example.com/]", + "[string 'bar'] hello"); + + MT("labelTitleNextParenthese", + "[link [[foo]]:] [string&url http://example.com/]", + "[string (bar)] hello"); + + MT("labelTitleNextMixed", + "[link [[foo]]:] [string&url http://example.com/]", + "(bar\" hello"); + + MT("labelEscape", + "[link [[foo \\]] ]]:] [string&url http://example.com/]"); + + MT("labelEscapeColon", + "[link [[foo \\]]: bar]]:] [string&url http://example.com/]"); + + MT("labelEscapeEnd", + "[[foo\\]]: http://example.com/"); + + MT("linkWeb", + "[link ] foo"); + + MT("linkWebDouble", + "[link ] foo [link ]"); + + MT("linkEmail", + "[link ] foo"); + + MT("linkEmailDouble", + "[link ] foo [link ]"); + + MT("emAsterisk", + "[em *foo*] bar"); + + MT("emUnderscore", + "[em _foo_] bar"); + + MT("emInWordAsterisk", + "foo[em *bar*]hello"); + + MT("emInWordUnderscore", + "foo[em _bar_]hello"); + + // Per documentation: "...surround an * or _ with spaces, it’ll be + // treated as a literal asterisk or underscore." + + MT("emEscapedBySpaceIn", + "foo [em _bar _ hello_] world"); + + MT("emEscapedBySpaceOut", + "foo _ bar[em _hello_]world"); + + MT("emEscapedByNewline", + "foo", + "_ bar[em _hello_]world"); + + // Unclosed emphasis characters + // Instead of simply marking as EM / STRONG, it would be nice to have an + // incomplete flag for EM and STRONG, that is styled slightly different. + MT("emIncompleteAsterisk", + "foo [em *bar]"); + + MT("emIncompleteUnderscore", + "foo [em _bar]"); + + MT("strongAsterisk", + "[strong **foo**] bar"); + + MT("strongUnderscore", + "[strong __foo__] bar"); + + MT("emStrongAsterisk", + "[em *foo][em&strong **bar*][strong hello**] world"); + + MT("emStrongUnderscore", + "[em _foo][em&strong __bar_][strong hello__] world"); + + // "...same character must be used to open and close an emphasis span."" + MT("emStrongMixed", + "[em _foo][em&strong **bar*hello__ world]"); + + MT("emStrongMixed", + "[em *foo][em&strong __bar_hello** world]"); + + // These characters should be escaped: + // \ backslash + // ` backtick + // * asterisk + // _ underscore + // {} curly braces + // [] square brackets + // () parentheses + // # hash mark + // + plus sign + // - minus sign (hyphen) + // . dot + // ! exclamation mark + + MT("escapeBacktick", + "foo \\`bar\\`"); + + MT("doubleEscapeBacktick", + "foo \\\\[comment `bar\\\\`]"); + + MT("escapeAsterisk", + "foo \\*bar\\*"); + + MT("doubleEscapeAsterisk", + "foo \\\\[em *bar\\\\*]"); + + MT("escapeUnderscore", + "foo \\_bar\\_"); + + MT("doubleEscapeUnderscore", + "foo \\\\[em _bar\\\\_]"); + + MT("escapeHash", + "\\# foo"); + + MT("doubleEscapeHash", + "\\\\# foo"); + + MT("escapeNewline", + "\\", + "[em *foo*]"); + + // Class override tests + TokenTypeOverrideTest("overrideHeader1", + "[override-header&override-header-1 # Foo]"); + + TokenTypeOverrideTest("overrideHeader2", + "[override-header&override-header-2 ## Foo]"); + + TokenTypeOverrideTest("overrideHeader3", + "[override-header&override-header-3 ### Foo]"); + + TokenTypeOverrideTest("overrideHeader4", + "[override-header&override-header-4 #### Foo]"); + + TokenTypeOverrideTest("overrideHeader5", + "[override-header&override-header-5 ##### Foo]"); + + TokenTypeOverrideTest("overrideHeader6", + "[override-header&override-header-6 ###### Foo]"); + + TokenTypeOverrideTest("overrideCode", + "[override-code `foo`]"); + + TokenTypeOverrideTest("overrideCodeBlock", + "[override-code ```]", + "[override-code foo]", + "[override-code ```]"); + + TokenTypeOverrideTest("overrideQuote", + "[override-quote&override-quote-1 > foo]", + "[override-quote&override-quote-1 > bar]"); + + TokenTypeOverrideTest("overrideQuoteNested", + "[override-quote&override-quote-1 > foo]", + "[override-quote&override-quote-1 >][override-quote&override-quote-2 > bar]", + "[override-quote&override-quote-1 >][override-quote&override-quote-2 >][override-quote&override-quote-3 > baz]"); + + TokenTypeOverrideTest("overrideLists", + "[override-list1 - foo]", + "", + " [override-list2 + bar]", + "", + " [override-list3 * baz]", + "", + " [override-list1 1. qux]", + "", + " [override-list2 - quux]"); + + TokenTypeOverrideTest("overrideHr", + "[override-hr * * *]"); + + TokenTypeOverrideTest("overrideImage", + "[override-image ![[foo]]][override-link-href&url (http://example.com/)]") + + TokenTypeOverrideTest("overrideLinkText", + "[override-link-text [[foo]]][override-link-href&url (http://example.com)]"); + + TokenTypeOverrideTest("overrideLinkEmailAndInline", + "[override-link-email <][override-link-inline foo@example.com>]"); + + TokenTypeOverrideTest("overrideEm", + "[override-em *foo*]"); + + TokenTypeOverrideTest("overrideStrong", + "[override-strong **foo**]"); + + TokenTypeOverrideTest("overrideStrikethrough", + "[override-strikethrough ~~foo~~]"); + + FormatTokenTypeOverrideTest("overrideFormatting", + "[override-formatting-escape \\*]"); + + // Tests to make sure GFM-specific things aren't getting through + + MT("taskList", + "[variable-2 * [ ]] bar]"); + + MT("noFencedCodeBlocks", + "~~~", + "foo", + "~~~"); + + FencedTest("fencedCodeBlocks", + "[comment ```]", + "[comment foo]", + "[comment ```]", + "bar"); + + FencedTest("fencedCodeBlocksMultipleChars", + "[comment `````]", + "[comment foo]", + "[comment ```]", + "[comment foo]", + "[comment `````]", + "bar"); + + FencedTest("fencedCodeBlocksTildes", + "[comment ~~~]", + "[comment foo]", + "[comment ~~~]", + "bar"); + + FencedTest("fencedCodeBlocksTildesMultipleChars", + "[comment ~~~~~]", + "[comment ~~~]", + "[comment foo]", + "[comment ~~~~~]", + "bar"); + + FencedTest("fencedCodeBlocksMultipleChars", + "[comment `````]", + "[comment foo]", + "[comment ```]", + "[comment foo]", + "[comment `````]", + "bar"); + + FencedTest("fencedCodeBlocksMixed", + "[comment ~~~]", + "[comment ```]", + "[comment foo]", + "[comment ~~~]", + "bar"); + + // Tests that require XML mode + + MT("xmlMode", + "[tag&bracket <][tag div][tag&bracket >]", + "*foo*", + "[tag&bracket <][tag http://github.com][tag&bracket />]", + "[tag&bracket ]", + "[link ]"); + + MT("xmlModeWithMarkdownInside", + "[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]", + "[em *foo*]", + "[link ]", + "[tag
          ]", + "[link ]", + "[tag&bracket <][tag div][tag&bracket >]", + "[tag&bracket ]"); + +})(); diff --git a/libraries/codemirror/mode/mathematica/index.html b/libraries/codemirror/mode/mathematica/index.html new file mode 100644 index 0000000..57c4298 --- /dev/null +++ b/libraries/codemirror/mode/mathematica/index.html @@ -0,0 +1,72 @@ + + +CodeMirror: Mathematica mode + + + + + + + + + + +
          +

          Mathematica mode

          + + + + + + +

          MIME types defined: text/x-mathematica (Mathematica).

          +
          diff --git a/libraries/codemirror/mode/mathematica/mathematica.js b/libraries/codemirror/mode/mathematica/mathematica.js new file mode 100644 index 0000000..5ae6f55 --- /dev/null +++ b/libraries/codemirror/mode/mathematica/mathematica.js @@ -0,0 +1,175 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Mathematica mode copyright (c) 2015 by Calin Barbat +// Based on code by Patrick Scheibe (halirutan) +// See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('mathematica', function(_config, _parserConfig) { + + // used pattern building blocks + var Identifier = '[a-zA-Z\\$][a-zA-Z0-9\\$]*'; + var pBase = "(?:\\d+)"; + var pFloat = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)"; + var pFloatBase = "(?:\\.\\w+|\\w+\\.\\w*|\\w+)"; + var pPrecision = "(?:`(?:`?"+pFloat+")?)"; + + // regular expressions + var reBaseForm = new RegExp('(?:'+pBase+'(?:\\^\\^'+pFloatBase+pPrecision+'?(?:\\*\\^[+-]?\\d+)?))'); + var reFloatForm = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\*\\^[+-]?\\d+)?)'); + var reIdInContext = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)'); + + function tokenBase(stream, state) { + var ch; + + // get next character + ch = stream.next(); + + // string + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + + // comment + if (ch === '(') { + if (stream.eat('*')) { + state.commentLevel++; + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + } + + // go back one character + stream.backUp(1); + + // look for numbers + // Numbers in a baseform + if (stream.match(reBaseForm, true, false)) { + return 'number'; + } + + // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition + // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow. + if (stream.match(reFloatForm, true, false)) { + return 'number'; + } + + /* In[23] and Out[34] */ + if (stream.match(/(?:In|Out)\[[0-9]*\]/, true, false)) { + return 'atom'; + } + + // usage + if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::usage)/, true, false)) { + return 'meta'; + } + + // message + if (stream.match(/([a-zA-Z\$]+(?:`?[a-zA-Z0-9\$])*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, true, false)) { + return 'string-2'; + } + + // this makes a look-ahead match for something like variable:{_Integer} + // the match is then forwarded to the mma-patterns tokenizer. + if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, true, false)) { + return 'variable-2'; + } + + // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___) + // Cannot start with a number, but can have numbers at any other position. Examples + // blub__Integer, a1_, b34_Integer32 + if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { + return 'variable-2'; + } + if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, true, false)) { + return 'variable-2'; + } + if (stream.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { + return 'variable-2'; + } + + // Named characters in Mathematica, like \[Gamma]. + if (stream.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, true, false)) { + return 'variable-3'; + } + + // Match all braces separately + if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { + return 'bracket'; + } + + // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match + // only one. + if (stream.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, true, false)) { + return 'variable-2'; + } + + // Literals like variables, keywords, functions + if (stream.match(reIdInContext, true, false)) { + return 'keyword'; + } + + // operators. Note that operators like @@ or /; are matched separately for each symbol. + if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { + return 'operator'; + } + + // everything else is an error + return 'error'; + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while(state.commentLevel > 0 && (next = stream.next()) != null) { + if (prev === '(' && next === '*') state.commentLevel++; + if (prev === '*' && next === ')') state.commentLevel--; + prev = next; + } + if (state.commentLevel <= 0) { + state.tokenize = tokenBase; + } + return 'comment'; + } + + return { + startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + blockCommentStart: "(*", + blockCommentEnd: "*)" + }; +}); + +CodeMirror.defineMIME('text/x-mathematica', { + name: 'mathematica' +}); + +}); diff --git a/libraries/codemirror/mode/meta.js b/libraries/codemirror/mode/meta.js new file mode 100644 index 0000000..01116ac --- /dev/null +++ b/libraries/codemirror/mode/meta.js @@ -0,0 +1,202 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.modeInfo = [ + {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, + {name: "PGP", mimes: ["application/pgp", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["pgp"]}, + {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]}, + {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, + {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]}, + {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h"]}, + {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, + {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]}, + {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp"]}, + {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj"]}, + {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]}, + {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]}, + {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists.txt$/}, + {name: "CoffeeScript", mime: "text/x-coffeescript", mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, + {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, + {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, + {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, + {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]}, + {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, + {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, + {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, + {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, + {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, + {name: "Django", mime: "text/x-django", mode: "django"}, + {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, + {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, + {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, + {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, + {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, + {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, + {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]}, + {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, + {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, + {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, + {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, + {name: "FCL", mime: "text/x-fcl", mode: "fcl"}, + {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, + {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90"]}, + {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, + {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, + {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, + {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i}, + {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, + {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy"]}, + {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, + {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, + {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, + {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, + {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, + {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, + {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm"], alias: ["xhtml"]}, + {name: "HTTP", mime: "message/http", mode: "http"}, + {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, + {name: "Jade", mime: "text/x-jade", mode: "jade", ext: ["jade"]}, + {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, + {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, + {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], + mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]}, + {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, + {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, + {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]}, + {name: "Jinja2", mime: "null", mode: "jinja2"}, + {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]}, + {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]}, + {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, + {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, + {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, + {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, + {name: "mIRC", mime: "text/mirc", mode: "mirc"}, + {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, + {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb"]}, + {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, + {name: "MUMPS", mime: "text/x-mumps", mode: "mumps"}, + {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, + {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, + {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, + {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]}, + {name: "NTriples", mime: "text/n-triples", mode: "ntriples", ext: ["nt"]}, + {name: "Objective C", mime: "text/x-objectivec", mode: "clike", ext: ["m", "mm"]}, + {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, + {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, + {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]}, + {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, + {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, + {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, + {name: "PHP", mime: "application/x-httpd-php", mode: "php", ext: ["php", "php3", "php4", "php5", "phtml"]}, + {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, + {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, + {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, + {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, + {name: "Python", mime: "text/x-python", mode: "python", ext: ["py", "pyw"]}, + {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, + {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, + {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r"], alias: ["rscript"]}, + {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, + {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, + {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, + {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, + {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, + {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, + {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, + {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, + {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, + {name: "Shell", mime: "text/x-sh", mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/}, + {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, + {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, + {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, + {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, + {name: "Solr", mime: "text/x-solr", mode: "solr"}, + {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, + {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, + {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, + {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, + {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]}, + {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]}, + {name: "MariaDB", mime: "text/x-mariadb", mode: "sql"}, + {name: "sTeX", mime: "text/x-stex", mode: "stex"}, + {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx"], alias: ["tex"]}, + {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v"]}, + {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, + {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, + {name: "TiddlyWiki ", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, + {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, + {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, + {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, + {name: "troff", mime: "troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]}, + {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]}, + {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]}, + {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, + {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, + {name: "Twig", mime: "text/x-twig", mode: "twig"}, + {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, + {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, + {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, + {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, + {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]}, + {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd"], alias: ["rss", "wsdl", "xsd"]}, + {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, + {name: "YAML", mime: "text/x-yaml", mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"]}, + {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]}, + {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]}, + {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]}, + {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]} + ]; + // Ensure all modes have a mime property for backwards compatibility + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.mimes) info.mime = info.mimes[0]; + } + + CodeMirror.findModeByMIME = function(mime) { + mime = mime.toLowerCase(); + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.mime == mime) return info; + if (info.mimes) for (var j = 0; j < info.mimes.length; j++) + if (info.mimes[j] == mime) return info; + } + }; + + CodeMirror.findModeByExtension = function(ext) { + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.ext) for (var j = 0; j < info.ext.length; j++) + if (info.ext[j] == ext) return info; + } + }; + + CodeMirror.findModeByFileName = function(filename) { + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.file && info.file.test(filename)) return info; + } + var dot = filename.lastIndexOf("."); + var ext = dot > -1 && filename.substring(dot + 1, filename.length); + if (ext) return CodeMirror.findModeByExtension(ext); + }; + + CodeMirror.findModeByName = function(name) { + name = name.toLowerCase(); + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.name.toLowerCase() == name) return info; + if (info.alias) for (var j = 0; j < info.alias.length; j++) + if (info.alias[j].toLowerCase() == name) return info; + } + }; +}); diff --git a/libraries/codemirror/mode/mirc/index.html b/libraries/codemirror/mode/mirc/index.html new file mode 100644 index 0000000..fd2f34e --- /dev/null +++ b/libraries/codemirror/mode/mirc/index.html @@ -0,0 +1,160 @@ + + +CodeMirror: mIRC mode + + + + + + + + + + +
          +

          mIRC mode

          +
          + + +

          MIME types defined: text/mirc.

          + +
          diff --git a/libraries/codemirror/mode/mirc/mirc.js b/libraries/codemirror/mode/mirc/mirc.js new file mode 100644 index 0000000..f0d5c6a --- /dev/null +++ b/libraries/codemirror/mode/mirc/mirc.js @@ -0,0 +1,193 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +//mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMIME("text/mirc", "mirc"); +CodeMirror.defineMode("mirc", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); + var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + + "channel clear clearall cline clipboard close cnick color comclose comopen " + + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + + "events exit fclose filter findtext finger firewall flash flist flood flush " + + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + + "elseif else goto menu nicklist status title icon size option text edit " + + "button check radio box scroll list combo link tab item"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if (/[\[\]{}\(\),\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + else if (ch == "\\") { + stream.eat("\\"); + stream.eat(/./); + return "number"; + } + else if (ch == "/" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else if (ch == ";" && stream.match(/ *\( *\(/)) { + return chain(stream, state, tokenUnparsed); + } + else if (ch == ";" && !state.inParams) { + stream.skipToEnd(); + return "comment"; + } + else if (ch == '"') { + stream.eat(/"/); + return "keyword"; + } + else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.:]/); + if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { + return "keyword"; + } + else { + state.beforeParams = true; + return "builtin"; + } + } + else if (ch == "%") { + stream.eatWhile(/[^,^\s^\(^\)]/); + state.beforeParams = true; + return "string"; + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + stream.eatWhile(/[\w\$_{}]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == ";" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == ")") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); + +}); diff --git a/libraries/codemirror/mode/mllike/index.html b/libraries/codemirror/mode/mllike/index.html new file mode 100644 index 0000000..5923af8 --- /dev/null +++ b/libraries/codemirror/mode/mllike/index.html @@ -0,0 +1,179 @@ + + +CodeMirror: ML-like mode + + + + + + + + + + +
          +

          OCaml mode

          + + + + +

          F# mode

          + + + + + +

          MIME types defined: text/x-ocaml (OCaml) and text/x-fsharp (F#).

          +
          diff --git a/libraries/codemirror/mode/mllike/mllike.js b/libraries/codemirror/mode/mllike/mllike.js new file mode 100644 index 0000000..bf0b8a6 --- /dev/null +++ b/libraries/codemirror/mode/mllike/mllike.js @@ -0,0 +1,205 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('mllike', function(_config, parserConfig) { + var words = { + 'let': 'keyword', + 'rec': 'keyword', + 'in': 'keyword', + 'of': 'keyword', + 'and': 'keyword', + 'if': 'keyword', + 'then': 'keyword', + 'else': 'keyword', + 'for': 'keyword', + 'to': 'keyword', + 'while': 'keyword', + 'do': 'keyword', + 'done': 'keyword', + 'fun': 'keyword', + 'function': 'keyword', + 'val': 'keyword', + 'type': 'keyword', + 'mutable': 'keyword', + 'match': 'keyword', + 'with': 'keyword', + 'try': 'keyword', + 'open': 'builtin', + 'ignore': 'builtin', + 'begin': 'keyword', + 'end': 'keyword' + }; + + var extraWords = parserConfig.extraWords || {}; + for (var prop in extraWords) { + if (extraWords.hasOwnProperty(prop)) { + words[prop] = parserConfig.extraWords[prop]; + } + } + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + if (ch === '(') { + if (stream.eat('*')) { + state.commentLevel++; + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + } + if (ch === '~') { + stream.eatWhile(/\w/); + return 'variable-2'; + } + if (ch === '`') { + stream.eatWhile(/\w/); + return 'quote'; + } + if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { + stream.skipToEnd(); + return 'comment'; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\d]/); + if (stream.eat('.')) { + stream.eatWhile(/[\d]/); + } + return 'number'; + } + if ( /[+\-*&%=<>!?|]/.test(ch)) { + return 'operator'; + } + stream.eatWhile(/\w/); + var cur = stream.current(); + return words.hasOwnProperty(cur) ? words[cur] : 'variable'; + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while(state.commentLevel > 0 && (next = stream.next()) != null) { + if (prev === '(' && next === '*') state.commentLevel++; + if (prev === '*' && next === ')') state.commentLevel--; + prev = next; + } + if (state.commentLevel <= 0) { + state.tokenize = tokenBase; + } + return 'comment'; + } + + return { + startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + + blockCommentStart: "(*", + blockCommentEnd: "*)", + lineComment: parserConfig.slashComments ? "//" : null + }; +}); + +CodeMirror.defineMIME('text/x-ocaml', { + name: 'mllike', + extraWords: { + 'succ': 'keyword', + 'trace': 'builtin', + 'exit': 'builtin', + 'print_string': 'builtin', + 'print_endline': 'builtin', + 'true': 'atom', + 'false': 'atom', + 'raise': 'keyword' + } +}); + +CodeMirror.defineMIME('text/x-fsharp', { + name: 'mllike', + extraWords: { + 'abstract': 'keyword', + 'as': 'keyword', + 'assert': 'keyword', + 'base': 'keyword', + 'class': 'keyword', + 'default': 'keyword', + 'delegate': 'keyword', + 'downcast': 'keyword', + 'downto': 'keyword', + 'elif': 'keyword', + 'exception': 'keyword', + 'extern': 'keyword', + 'finally': 'keyword', + 'global': 'keyword', + 'inherit': 'keyword', + 'inline': 'keyword', + 'interface': 'keyword', + 'internal': 'keyword', + 'lazy': 'keyword', + 'let!': 'keyword', + 'member' : 'keyword', + 'module': 'keyword', + 'namespace': 'keyword', + 'new': 'keyword', + 'null': 'keyword', + 'override': 'keyword', + 'private': 'keyword', + 'public': 'keyword', + 'return': 'keyword', + 'return!': 'keyword', + 'select': 'keyword', + 'static': 'keyword', + 'struct': 'keyword', + 'upcast': 'keyword', + 'use': 'keyword', + 'use!': 'keyword', + 'val': 'keyword', + 'when': 'keyword', + 'yield': 'keyword', + 'yield!': 'keyword', + + 'List': 'builtin', + 'Seq': 'builtin', + 'Map': 'builtin', + 'Set': 'builtin', + 'int': 'builtin', + 'string': 'builtin', + 'raise': 'builtin', + 'failwith': 'builtin', + 'not': 'builtin', + 'true': 'builtin', + 'false': 'builtin' + }, + slashComments: true +}); + +}); diff --git a/libraries/codemirror/mode/modelica/index.html b/libraries/codemirror/mode/modelica/index.html new file mode 100644 index 0000000..408c3b1 --- /dev/null +++ b/libraries/codemirror/mode/modelica/index.html @@ -0,0 +1,67 @@ + + +CodeMirror: Modelica mode + + + + + + + + + + + + +
          +

          Modelica mode

          + +
          + + + +

          Simple mode that tries to handle Modelica as well as it can.

          + +

          MIME types defined: text/x-modelica + (Modlica code).

          +
          diff --git a/libraries/codemirror/mode/modelica/modelica.js b/libraries/codemirror/mode/modelica/modelica.js new file mode 100644 index 0000000..77ec7a3 --- /dev/null +++ b/libraries/codemirror/mode/modelica/modelica.js @@ -0,0 +1,245 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Modelica support for CodeMirror, copyright (c) by Lennart Ochel + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +}) + +(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("modelica", function(config, parserConfig) { + + var indentUnit = config.indentUnit; + var keywords = parserConfig.keywords || {}; + var builtin = parserConfig.builtin || {}; + var atoms = parserConfig.atoms || {}; + + var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; + var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; + var isDigit = /[0-9]/; + var isNonDigit = /[_a-zA-Z]/; + + function tokenLineComment(stream, state) { + stream.skipToEnd(); + state.tokenize = null; + return "comment"; + } + + function tokenBlockComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == '"' && !escaped) { + state.tokenize = null; + state.sol = false; + break; + } + escaped = !escaped && ch == "\\"; + } + + return "string"; + } + + function tokenIdent(stream, state) { + stream.eatWhile(isDigit); + while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } + + + var cur = stream.current(); + + if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; + else if(state.sol && cur == "end" && state.level > 0) state.level--; + + state.tokenize = null; + state.sol = false; + + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + else if (builtin.propertyIsEnumerable(cur)) return "builtin"; + else if (atoms.propertyIsEnumerable(cur)) return "atom"; + else return "variable"; + } + + function tokenQIdent(stream, state) { + while (stream.eat(/[^']/)) { } + + state.tokenize = null; + state.sol = false; + + if(stream.eat("'")) + return "variable"; + else + return "error"; + } + + function tokenUnsignedNuber(stream, state) { + stream.eatWhile(isDigit); + if (stream.eat('.')) { + stream.eatWhile(isDigit); + } + if (stream.eat('e') || stream.eat('E')) { + if (!stream.eat('-')) + stream.eat('+'); + stream.eatWhile(isDigit); + } + + state.tokenize = null; + state.sol = false; + return "number"; + } + + // Interface + return { + startState: function() { + return { + tokenize: null, + level: 0, + sol: true + }; + }, + + token: function(stream, state) { + if(state.tokenize != null) { + return state.tokenize(stream, state); + } + + if(stream.sol()) { + state.sol = true; + } + + // WHITESPACE + if(stream.eatSpace()) { + state.tokenize = null; + return null; + } + + var ch = stream.next(); + + // LINECOMMENT + if(ch == '/' && stream.eat('/')) { + state.tokenize = tokenLineComment; + } + // BLOCKCOMMENT + else if(ch == '/' && stream.eat('*')) { + state.tokenize = tokenBlockComment; + } + // TWO SYMBOL TOKENS + else if(isDoubleOperatorChar.test(ch+stream.peek())) { + stream.next(); + state.tokenize = null; + return "operator"; + } + // SINGLE SYMBOL TOKENS + else if(isSingleOperatorChar.test(ch)) { + state.tokenize = null; + return "operator"; + } + // IDENT + else if(isNonDigit.test(ch)) { + state.tokenize = tokenIdent; + } + // Q-IDENT + else if(ch == "'" && stream.peek() && stream.peek() != "'") { + state.tokenize = tokenQIdent; + } + // STRING + else if(ch == '"') { + state.tokenize = tokenString; + } + // UNSIGNED_NUBER + else if(isDigit.test(ch)) { + state.tokenize = tokenUnsignedNuber; + } + // ERROR + else { + state.tokenize = null; + return "error"; + } + + return state.tokenize(stream, state); + }, + + indent: function(state, textAfter) { + if (state.tokenize != null) return CodeMirror.Pass; + + var level = state.level; + if(/(algorithm)/.test(textAfter)) level--; + if(/(equation)/.test(textAfter)) level--; + if(/(initial algorithm)/.test(textAfter)) level--; + if(/(initial equation)/.test(textAfter)) level--; + if(/(end)/.test(textAfter)) level--; + + if(level > 0) + return indentUnit*level; + else + return 0; + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i=0; i + +CodeMirror: MscGen mode + + + + + + + + + +
          +

          MscGen mode

          + +
          + +

          Xù mode

          + +
          + +

          MsGenny mode

          +
          + +

          + Simple mode for highlighting MscGen and two derived sequence + chart languages. +

          + + + +

          MIME types defined: + text/x-mscgen + text/x-xu + text/x-msgenny +

          + +
          diff --git a/libraries/codemirror/mode/mscgen/mscgen.js b/libraries/codemirror/mode/mscgen/mscgen.js new file mode 100644 index 0000000..d61b470 --- /dev/null +++ b/libraries/codemirror/mode/mscgen/mscgen.js @@ -0,0 +1,169 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// mode(s) for the sequence chart dsl's mscgen, xù and msgenny +// For more information on mscgen, see the site of the original author: +// http://www.mcternan.me.uk/mscgen +// +// This mode for mscgen and the two derivative languages were +// originally made for use in the mscgen_js interpreter +// (https://sverweij.github.io/mscgen_js) + +(function(mod) { + if ( typeof exports == "object" && typeof module == "object")// CommonJS + mod(require("../../lib/codemirror")); + else if ( typeof define == "function" && define.amd)// AMD + define(["../../lib/codemirror"], mod); + else// Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var languages = { + mscgen: { + "keywords" : ["msc"], + "options" : ["hscale", "width", "arcgradient", "wordwraparcs"], + "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], + "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists + "arcsWords" : ["note", "abox", "rbox", "box"], + "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + }, + xu: { + "keywords" : ["msc"], + "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], + "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"], + "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists + "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], + "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + }, + msgenny: { + "keywords" : null, + "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "watermark"], + "attributes" : null, + "brackets" : ["\\{", "\\}"], + "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], + "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + } + } + + CodeMirror.defineMode("mscgen", function(_, modeConfig) { + var language = languages[modeConfig && modeConfig.language || "mscgen"] + return { + startState: startStateFn, + copyState: copyStateFn, + token: produceTokenFunction(language), + lineComment : "#", + blockCommentStart : "/*", + blockCommentEnd : "*/" + }; + }); + + CodeMirror.defineMIME("text/x-mscgen", "mscgen"); + CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"}); + CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"}); + + function wordRegexpBoundary(pWords) { + return new RegExp("\\b(" + pWords.join("|") + ")\\b", "i"); + } + + function wordRegexp(pWords) { + return new RegExp("(" + pWords.join("|") + ")", "i"); + } + + function startStateFn() { + return { + inComment : false, + inString : false, + inAttributeList : false, + inScript : false + }; + } + + function copyStateFn(pState) { + return { + inComment : pState.inComment, + inString : pState.inString, + inAttributeList : pState.inAttributeList, + inScript : pState.inScript + }; + } + + function produceTokenFunction(pConfig) { + + return function(pStream, pState) { + if (pStream.match(wordRegexp(pConfig.brackets), true, true)) { + return "bracket"; + } + /* comments */ + if (!pState.inComment) { + if (pStream.match(/\/\*[^\*\/]*/, true, true)) { + pState.inComment = true; + return "comment"; + } + if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) { + pStream.skipToEnd(); + return "comment"; + } + } + if (pState.inComment) { + if (pStream.match(/[^\*\/]*\*\//, true, true)) + pState.inComment = false; + else + pStream.skipToEnd(); + return "comment"; + } + /* strings */ + if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) { + pState.inString = true; + return "string"; + } + if (pState.inString) { + if (pStream.match(/[^\"]*\"/, true, true)) + pState.inString = false; + else + pStream.skipToEnd(); + return "string"; + } + /* keywords & operators */ + if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true)) + return "keyword"; + + if (pStream.match(wordRegexpBoundary(pConfig.options), true, true)) + return "keyword"; + + if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true)) + return "keyword"; + + if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true)) + return "keyword"; + + if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true)) + return "operator"; + + /* attribute lists */ + if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match(/\[/, true, true)) { + pConfig.inAttributeList = true; + return "bracket"; + } + if (pConfig.inAttributeList) { + if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) { + return "attribute"; + } + if (pStream.match(/]/, true, true)) { + pConfig.inAttributeList = false; + return "bracket"; + } + } + + pStream.next(); + return "base"; + }; + } + +}); diff --git a/libraries/codemirror/mode/mscgen/mscgen_test.js b/libraries/codemirror/mode/mscgen/mscgen_test.js new file mode 100644 index 0000000..e319a39 --- /dev/null +++ b/libraries/codemirror/mode/mscgen/mscgen_test.js @@ -0,0 +1,75 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "mscgen"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("empty chart", + "[keyword msc][bracket {]", + "[base ]", + "[bracket }]" + ); + + MT("comments", + "[comment // a single line comment]", + "[comment # another single line comment /* and */ ignored here]", + "[comment /* A multi-line comment even though it contains]", + "[comment msc keywords and \"quoted text\"*/]"); + + MT("strings", + "[string \"// a string\"]", + "[string \"a string running over]", + "[string two lines\"]", + "[string \"with \\\"escaped quote\"]" + ); + + MT("xù/ msgenny keywords classify as 'base'", + "[base watermark]", + "[base alt loop opt ref else break par seq assert]" + ); + + MT("mscgen options classify as keyword", + "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" + ); + + MT("mscgen arcs classify as keyword", + "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", + "[keyword |||...---]", "[keyword ..--==::]", + "[keyword ->]", "[keyword <-]", "[keyword <->]", + "[keyword =>]", "[keyword <=]", "[keyword <=>]", + "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", + "[keyword >>]", "[keyword <<]", "[keyword <<>>]", + "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", + "[keyword :>]", "[keyword <:]", "[keyword <:>]" + ); + + MT("within an attribute list, attributes classify as attribute", + "[bracket [[][attribute label]", + "[attribute id]","[attribute url]","[attribute idurl]", + "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", + "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", + "[attribute arcskip][bracket ]]]" + ); + + MT("outside an attribute list, attributes classify as base", + "[base label]", + "[base id]","[base url]","[base idurl]", + "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", + "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", + "[base arcskip]" + ); + + MT("a typical program", + "[comment # typical mscgen program]", + "[keyword msc][base ][bracket {]", + "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", + "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", + "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", + "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", + "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", + "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", + "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", + "[bracket }]" + ); +})(); diff --git a/libraries/codemirror/mode/mscgen/msgenny_test.js b/libraries/codemirror/mode/mscgen/msgenny_test.js new file mode 100644 index 0000000..80173de --- /dev/null +++ b/libraries/codemirror/mode/mscgen/msgenny_test.js @@ -0,0 +1,71 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-msgenny"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "msgenny"); } + + MT("comments", + "[comment // a single line comment]", + "[comment # another single line comment /* and */ ignored here]", + "[comment /* A multi-line comment even though it contains]", + "[comment msc keywords and \"quoted text\"*/]"); + + MT("strings", + "[string \"// a string\"]", + "[string \"a string running over]", + "[string two lines\"]", + "[string \"with \\\"escaped quote\"]" + ); + + MT("xù/ msgenny keywords classify as 'keyword'", + "[keyword watermark]", + "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" + ); + + MT("mscgen options classify as keyword", + "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" + ); + + MT("mscgen arcs classify as keyword", + "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", + "[keyword |||...---]", "[keyword ..--==::]", + "[keyword ->]", "[keyword <-]", "[keyword <->]", + "[keyword =>]", "[keyword <=]", "[keyword <=>]", + "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", + "[keyword >>]", "[keyword <<]", "[keyword <<>>]", + "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", + "[keyword :>]", "[keyword <:]", "[keyword <:>]" + ); + + MT("within an attribute list, mscgen/ xù attributes classify as base", + "[base [[label]", + "[base idurl id url]", + "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", + "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", + "[base arcskip]]]" + ); + + MT("outside an attribute list, mscgen/ xù attributes classify as base", + "[base label]", + "[base idurl id url]", + "[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]", + "[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]", + "[base arcskip]" + ); + + MT("a typical program", + "[comment # typical msgenny program]", + "[keyword wordwraparcs][operator =][string \"true\"][base , ][keyword hscale][operator =][string \"0.8\"][base , ][keyword arcgradient][operator =][base 30;]", + "[base a : ][string \"Entity A\"][base ,]", + "[base b : Entity B,]", + "[base c : Entity C;]", + "[base a ][keyword =>>][base b: ][string \"Hello entity B\"][base ;]", + "[base a ][keyword alt][base c][bracket {]", + "[base a ][keyword <<][base b: ][string \"Here's an answer dude!\"][base ;]", + "[keyword ---][base : ][string \"sorry, won't march - comm glitch\"]", + "[base a ][keyword x-][base b: ][string \"Here's an answer dude! (won't arrive...)\"][base ;]", + "[bracket }]", + "[base c ][keyword :>][base *: What about me?;]" + ); +})(); diff --git a/libraries/codemirror/mode/mscgen/xu_test.js b/libraries/codemirror/mode/mscgen/xu_test.js new file mode 100644 index 0000000..f9a50f0 --- /dev/null +++ b/libraries/codemirror/mode/mscgen/xu_test.js @@ -0,0 +1,75 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-xu"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "xu"); } + + MT("empty chart", + "[keyword msc][bracket {]", + "[base ]", + "[bracket }]" + ); + + MT("comments", + "[comment // a single line comment]", + "[comment # another single line comment /* and */ ignored here]", + "[comment /* A multi-line comment even though it contains]", + "[comment msc keywords and \"quoted text\"*/]"); + + MT("strings", + "[string \"// a string\"]", + "[string \"a string running over]", + "[string two lines\"]", + "[string \"with \\\"escaped quote\"]" + ); + + MT("xù/ msgenny keywords classify as 'keyword'", + "[keyword watermark]", + "[keyword alt]","[keyword loop]","[keyword opt]","[keyword ref]","[keyword else]","[keyword break]","[keyword par]","[keyword seq]","[keyword assert]" + ); + + MT("mscgen options classify as keyword", + "[keyword hscale]", "[keyword width]", "[keyword arcgradient]", "[keyword wordwraparcs]" + ); + + MT("mscgen arcs classify as keyword", + "[keyword note]","[keyword abox]","[keyword rbox]","[keyword box]", + "[keyword |||...---]", "[keyword ..--==::]", + "[keyword ->]", "[keyword <-]", "[keyword <->]", + "[keyword =>]", "[keyword <=]", "[keyword <=>]", + "[keyword =>>]", "[keyword <<=]", "[keyword <<=>>]", + "[keyword >>]", "[keyword <<]", "[keyword <<>>]", + "[keyword -x]", "[keyword x-]", "[keyword -X]", "[keyword X-]", + "[keyword :>]", "[keyword <:]", "[keyword <:>]" + ); + + MT("within an attribute list, attributes classify as attribute", + "[bracket [[][attribute label]", + "[attribute id]","[attribute url]","[attribute idurl]", + "[attribute linecolor]","[attribute linecolour]","[attribute textcolor]","[attribute textcolour]","[attribute textbgcolor]","[attribute textbgcolour]", + "[attribute arclinecolor]","[attribute arclinecolour]","[attribute arctextcolor]","[attribute arctextcolour]","[attribute arctextbgcolor]","[attribute arctextbgcolour]", + "[attribute arcskip][bracket ]]]" + ); + + MT("outside an attribute list, attributes classify as base", + "[base label]", + "[base id]","[base url]","[base idurl]", + "[base linecolor]","[base linecolour]","[base textcolor]","[base textcolour]","[base textbgcolor]","[base textbgcolour]", + "[base arclinecolor]","[base arclinecolour]","[base arctextcolor]","[base arctextcolour]","[base arctextbgcolor]","[base arctextbgcolour]", + "[base arcskip]" + ); + + MT("a typical program", + "[comment # typical mscgen program]", + "[keyword msc][base ][bracket {]", + "[keyword wordwraparcs][operator =][string \"true\"][keyword hscale][operator =][string \"0.8\"][keyword arcgradient][operator =][base 30;]", + "[base a][bracket [[][attribute label][operator =][string \"Entity A\"][bracket ]]][base ,]", + "[base b][bracket [[][attribute label][operator =][string \"Entity B\"][bracket ]]][base ,]", + "[base c][bracket [[][attribute label][operator =][string \"Entity C\"][bracket ]]][base ;]", + "[base a ][keyword =>>][base b][bracket [[][attribute label][operator =][string \"Hello entity B\"][bracket ]]][base ;]", + "[base a ][keyword <<][base b][bracket [[][attribute label][operator =][string \"Here's an answer dude!\"][bracket ]]][base ;]", + "[base c ][keyword :>][base *][bracket [[][attribute label][operator =][string \"What about me?\"][base , ][attribute textcolor][operator =][base red][bracket ]]][base ;]", + "[bracket }]" + ); +})(); diff --git a/libraries/codemirror/mode/mumps/index.html b/libraries/codemirror/mode/mumps/index.html new file mode 100644 index 0000000..b1f92c2 --- /dev/null +++ b/libraries/codemirror/mode/mumps/index.html @@ -0,0 +1,85 @@ + + +CodeMirror: MUMPS mode + + + + + + + + + +
          +

          MUMPS mode

          + + +
          + + +
          diff --git a/libraries/codemirror/mode/mumps/mumps.js b/libraries/codemirror/mode/mumps/mumps.js new file mode 100644 index 0000000..469f8c3 --- /dev/null +++ b/libraries/codemirror/mode/mumps/mumps.js @@ -0,0 +1,148 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* + This MUMPS Language script was constructed using vbscript.js as a template. +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("mumps", function() { + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"); + var doubleOperators = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"); + var singleDelimiters = new RegExp("^[\\.,:]"); + var brackets = new RegExp("[()]"); + var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*"); + var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]; + // The following list includes instrinsic functions _and_ special variables + var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]; + var intrinsicFuncs = wordRegexp(intrinsicFuncsWords); + var command = wordRegexp(commandKeywords); + + function tokenBase(stream, state) { + if (stream.sol()) { + state.label = true; + state.commandMode = 0; + } + + // The character has meaning in MUMPS. Ignoring consecutive + // spaces would interfere with interpreting whether the next non-space + // character belongs to the command or argument context. + + // Examine each character and update a mode variable whose interpretation is: + // >0 => command 0 => argument <0 => command post-conditional + var ch = stream.peek(); + + if (ch == " " || ch == "\t") { // Pre-process + state.label = false; + if (state.commandMode == 0) + state.commandMode = 1; + else if ((state.commandMode < 0) || (state.commandMode == 2)) + state.commandMode = 0; + } else if ((ch != ".") && (state.commandMode > 0)) { + if (ch == ":") + state.commandMode = -1; // SIS - Command post-conditional + else + state.commandMode = 2; + } + + // Do not color parameter list as line tag + if ((ch === "(") || (ch === "\u0009")) + state.label = false; + + // MUMPS comment starts with ";" + if (ch === ";") { + stream.skipToEnd(); + return "comment"; + } + + // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator + if (stream.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/)) + return "number"; + + // Handle Strings + if (ch == '"') { + if (stream.skipTo('"')) { + stream.next(); + return "string"; + } else { + stream.skipToEnd(); + return "error"; + } + } + + // Handle operators and Delimiters + if (stream.match(doubleOperators) || stream.match(singleOperators)) + return "operator"; + + // Prevents leading "." in DO block from falling through to error + if (stream.match(singleDelimiters)) + return null; + + if (brackets.test(ch)) { + stream.next(); + return "bracket"; + } + + if (state.commandMode > 0 && stream.match(command)) + return "variable-2"; + + if (stream.match(intrinsicFuncs)) + return "builtin"; + + if (stream.match(identifiers)) + return "variable"; + + // Detect dollar-sign when not a documented intrinsic function + // "^" may introduce a GVN or SSVN - Color same as function + if (ch === "$" || ch === "^") { + stream.next(); + return "builtin"; + } + + // MUMPS Indirection + if (ch === "@") { + stream.next(); + return "string-2"; + } + + if (/[\w%]/.test(ch)) { + stream.eatWhile(/[\w%]/); + return "variable"; + } + + // Handle non-detected items + stream.next(); + return "error"; + } + + return { + startState: function() { + return { + label: false, + commandMode: 0 + }; + }, + + token: function(stream, state) { + var style = tokenBase(stream, state); + if (state.label) return "tag"; + return style; + } + }; + }); + + CodeMirror.defineMIME("text/x-mumps", "mumps"); +}); diff --git a/libraries/codemirror/mode/nginx/index.html b/libraries/codemirror/mode/nginx/index.html new file mode 100644 index 0000000..03cf671 --- /dev/null +++ b/libraries/codemirror/mode/nginx/index.html @@ -0,0 +1,181 @@ + + +CodeMirror: NGINX mode + + + + + + + + + + + + + +
          +

          NGINX mode

          +
          + + +

          MIME types defined: text/nginx.

          + +
          diff --git a/libraries/codemirror/mode/nginx/nginx.js b/libraries/codemirror/mode/nginx/nginx.js new file mode 100644 index 0000000..00a3224 --- /dev/null +++ b/libraries/codemirror/mode/nginx/nginx.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("nginx", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words( + /* ngxDirectiveControl */ "break return rewrite set" + + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" + ); + + var keywords_block = words( + /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" + ); + + var keywords_important = words( + /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" + ); + + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + + + stream.eatWhile(/[\w\$_]/); + + var cur = stream.current(); + + + if (keywords.propertyIsEnumerable(cur)) { + return "keyword"; + } + else if (keywords_block.propertyIsEnumerable(cur)) { + return "variable-2"; + } + else if (keywords_important.propertyIsEnumerable(cur)) { + return "string-2"; + } + /**/ + + var ch = stream.next(); + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} + else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + else if (ch == "<" && stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (/[,.+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (/[;{}:\[\]]/.test(ch)) { + return ret(null, ch); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("variable", "variable"); + } + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (type == "hash" && context == "rule") style = "atom"; + else if (style == "variable") { + if (context == "rule") style = "number"; + else if (!context || context == "@media{") style = "tag"; + } + + if (context == "rule" && /^[\{\};]$/.test(type)) + state.stack.pop(); + if (type == "{") { + if (context == "@media") state.stack[state.stack.length-1] = "@media{"; + else state.stack.push("{"); + } + else if (type == "}") state.stack.pop(); + else if (type == "@media") state.stack.push("@media"); + else if (context == "{" && type != "comment") state.stack.push("rule"); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("text/x-nginx-conf", "nginx"); + +}); diff --git a/libraries/codemirror/mode/nsis/index.html b/libraries/codemirror/mode/nsis/index.html new file mode 100644 index 0000000..2afae87 --- /dev/null +++ b/libraries/codemirror/mode/nsis/index.html @@ -0,0 +1,80 @@ + + +CodeMirror: NSIS mode + + + + + + + + + + + +
          +

          NSIS mode

          + + + + + + +

          MIME types defined: text/x-nsis.

          +
          \ No newline at end of file diff --git a/libraries/codemirror/mode/nsis/nsis.js b/libraries/codemirror/mode/nsis/nsis.js new file mode 100644 index 0000000..172207c --- /dev/null +++ b/libraries/codemirror/mode/nsis/nsis.js @@ -0,0 +1,95 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Author: Jan T. Sott (http://github.com/idleberg) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineSimpleMode("nsis",{ + start:[ + // Numbers + {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, + + // Strings + { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, + { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, + { regex: /`(?:[^\\`]|\\.)*`?/, token: "string" }, + + // Compile Time Commands + {regex: /(?:\!(include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|finalize|getdllversion|system|tempfile|warning|verbose|define|undef|insertmacro|makensis|searchparse|searchreplace))\b/, token: "keyword"}, + + // Conditional Compilation + {regex: /(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/, token: "keyword", indent: true}, + {regex: /(?:\!(else|endif|macroend))\b/, token: "keyword", dedent: true}, + + // Runtime Commands + {regex: /\b(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|IntCmp|IntCmpU|IntFmt|IntOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetPluginUnload|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegStr|WriteUninstaller|XPStyle)\b/, token: "keyword"}, + {regex: /\b(?:Function|PageEx|Section(?:Group)?)\b/, token: "keyword", indent: true}, + {regex: /\b(?:(Function|PageEx|Section(?:Group)?)End)\b/, token: "keyword", dedent: true}, + + // Command Options + {regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/, token: "atom"}, + {regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/, token: "builtin"}, + + // LogicLib.nsh + {regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/, token: "variable-2", indent: true}, + + // FileFunc.nsh + {regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/, token: "variable-2", dedent: true}, + + // Memento.nsh + {regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/, token: "variable-2", dedent: true}, + + // TextFunc.nsh + {regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/, token: "variable-2", dedent: true}, + + // WinVer.nsh + {regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/, token: "variable", dedent: true}, + + // WordFunc.nsh + {regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/, token: "variable-2", dedent: true}, + + // x64.nsh + {regex: /\$\{(?:RunningX64)\}/, token: "variable", dedent: true}, + {regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/, token: "variable-2", dedent: true}, + + // Line Comment + {regex: /(#|;).*/, token: "comment"}, + + // Block Comment + {regex: /\/\*/, token: "comment", next: "comment"}, + + // Operator + {regex: /[-+\/*=<>!]+/, token: "operator"}, + + // Variable + {regex: /\$[\w]+/, token: "variable"}, + + // Constant + {regex: /\${[\w]+}/,token: "variable-2"}, + + // Language String + {regex: /\$\([\w]+\)/,token: "variable-3"} + ], + comment: [ + {regex: /.*?\*\//, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"} + ], + meta: { + electricInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: ["#", ";"] + } +}); + +CodeMirror.defineMIME("text/x-nsis", "nsis"); +}); diff --git a/libraries/codemirror/mode/ntriples/index.html b/libraries/codemirror/mode/ntriples/index.html new file mode 100644 index 0000000..1355e71 --- /dev/null +++ b/libraries/codemirror/mode/ntriples/index.html @@ -0,0 +1,45 @@ + + +CodeMirror: NTriples mode + + + + + + + + + +
          +

          NTriples mode

          +
          + +
          + + +

          MIME types defined: text/n-triples.

          +
          diff --git a/libraries/codemirror/mode/ntriples/ntriples.js b/libraries/codemirror/mode/ntriples/ntriples.js new file mode 100644 index 0000000..0524b1e --- /dev/null +++ b/libraries/codemirror/mode/ntriples/ntriples.js @@ -0,0 +1,186 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/********************************************************** +* This script provides syntax highlighting support for +* the Ntriples format. +* Ntriples format specification: +* http://www.w3.org/TR/rdf-testcases/#ntriples +***********************************************************/ + +/* + The following expression defines the defined ASF grammar transitions. + + pre_subject -> + { + ( writing_subject_uri | writing_bnode_uri ) + -> pre_predicate + -> writing_predicate_uri + -> pre_object + -> writing_object_uri | writing_object_bnode | + ( + writing_object_literal + -> writing_literal_lang | writing_literal_type + ) + -> post_object + -> BEGIN + } otherwise { + -> ERROR + } +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ntriples", function() { + + var Location = { + PRE_SUBJECT : 0, + WRITING_SUB_URI : 1, + WRITING_BNODE_URI : 2, + PRE_PRED : 3, + WRITING_PRED_URI : 4, + PRE_OBJ : 5, + WRITING_OBJ_URI : 6, + WRITING_OBJ_BNODE : 7, + WRITING_OBJ_LITERAL : 8, + WRITING_LIT_LANG : 9, + WRITING_LIT_TYPE : 10, + POST_OBJ : 11, + ERROR : 12 + }; + function transitState(currState, c) { + var currLocation = currState.location; + var ret; + + // Opening. + if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; + else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; + else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; + else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; + else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; + else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; + + // Closing. + else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; + else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; + + // Closing typed and language literal. + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; + + // Spaces. + else if( c == ' ' && + ( + currLocation == Location.PRE_SUBJECT || + currLocation == Location.PRE_PRED || + currLocation == Location.PRE_OBJ || + currLocation == Location.POST_OBJ + ) + ) ret = currLocation; + + // Reset. + else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; + + // Error + else ret = Location.ERROR; + + currState.location=ret; + } + + return { + startState: function() { + return { + location : Location.PRE_SUBJECT, + uris : [], + anchors : [], + bnodes : [], + langs : [], + types : [] + }; + }, + token: function(stream, state) { + var ch = stream.next(); + if(ch == '<') { + transitState(state, ch); + var parsedURI = ''; + stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); + state.uris.push(parsedURI); + if( stream.match('#', false) ) return 'variable'; + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if(ch == '#') { + var parsedAnchor = ''; + stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); + state.anchors.push(parsedAnchor); + return 'variable-2'; + } + if(ch == '>') { + transitState(state, '>'); + return 'variable'; + } + if(ch == '_') { + transitState(state, ch); + var parsedBNode = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); + state.bnodes.push(parsedBNode); + stream.next(); + transitState(state, ' '); + return 'builtin'; + } + if(ch == '"') { + transitState(state, ch); + stream.eatWhile( function(c) { return c != '"'; } ); + stream.next(); + if( stream.peek() != '@' && stream.peek() != '^' ) { + transitState(state, '"'); + } + return 'string'; + } + if( ch == '@' ) { + transitState(state, '@'); + var parsedLang = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); + state.langs.push(parsedLang); + stream.next(); + transitState(state, ' '); + return 'string-2'; + } + if( ch == '^' ) { + stream.next(); + transitState(state, '^'); + var parsedType = ''; + stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); + state.types.push(parsedType); + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if( ch == ' ' ) { + transitState(state, ch); + } + if( ch == '.' ) { + transitState(state, ch); + } + } + }; +}); + +CodeMirror.defineMIME("text/n-triples", "ntriples"); + +}); diff --git a/libraries/codemirror/mode/octave/index.html b/libraries/codemirror/mode/octave/index.html new file mode 100644 index 0000000..79df581 --- /dev/null +++ b/libraries/codemirror/mode/octave/index.html @@ -0,0 +1,83 @@ + + +CodeMirror: Octave mode + + + + + + + + + +
          +

          Octave mode

          + +
          + + +

          MIME types defined: text/x-octave.

          +
          diff --git a/libraries/codemirror/mode/octave/octave.js b/libraries/codemirror/mode/octave/octave.js new file mode 100644 index 0000000..a7bec03 --- /dev/null +++ b/libraries/codemirror/mode/octave/octave.js @@ -0,0 +1,135 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("octave", function() { + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"); + var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;]'); + var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); + var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); + var expressionEnd = new RegExp("^[\\]\\)]"); + var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); + + var builtins = wordRegexp([ + 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', + 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', + 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', + 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', + 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', + 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', + 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' + ]); + + var keywords = wordRegexp([ + 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', + 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', + 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', + 'continue', 'pkg' + ]); + + + // tokenizers + function tokenTranspose(stream, state) { + if (!stream.sol() && stream.peek() === '\'') { + stream.next(); + state.tokenize = tokenBase; + return 'operator'; + } + state.tokenize = tokenBase; + return tokenBase(stream, state); + } + + + function tokenComment(stream, state) { + if (stream.match(/^.*%}/)) { + state.tokenize = tokenBase; + return 'comment'; + }; + stream.skipToEnd(); + return 'comment'; + } + + function tokenBase(stream, state) { + // whitespaces + if (stream.eatSpace()) return null; + + // Handle one line Comments + if (stream.match('%{')){ + state.tokenize = tokenComment; + stream.skipToEnd(); + return 'comment'; + } + + if (stream.match(/^[%#]/)){ + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.+-]/, false)) { + if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { + stream.tokenize = tokenBase; + return 'number'; }; + if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; + if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; + } + if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; }; + + // Handle Strings + if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } ; + if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } ; + + // Handle words + if (stream.match(keywords)) { return 'keyword'; } ; + if (stream.match(builtins)) { return 'builtin'; } ; + if (stream.match(identifiers)) { return 'variable'; } ; + + if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; }; + if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; }; + + if (stream.match(expressionEnd)) { + state.tokenize = tokenTranspose; + return null; + }; + + + // Handle non-detected items + stream.next(); + return 'error'; + }; + + + return { + startState: function() { + return { + tokenize: tokenBase + }; + }, + + token: function(stream, state) { + var style = state.tokenize(stream, state); + if (style === 'number' || style === 'variable'){ + state.tokenize = tokenTranspose; + } + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-octave", "octave"); + +}); diff --git a/libraries/codemirror/mode/oz/index.html b/libraries/codemirror/mode/oz/index.html new file mode 100644 index 0000000..febd82a --- /dev/null +++ b/libraries/codemirror/mode/oz/index.html @@ -0,0 +1,59 @@ + + +CodeMirror: Oz mode + + + + + + + + + + +
          +

          Oz mode

          + +

          MIME type defined: text/x-oz.

          + + +
          diff --git a/libraries/codemirror/mode/oz/oz.js b/libraries/codemirror/mode/oz/oz.js new file mode 100644 index 0000000..ee8cb0a --- /dev/null +++ b/libraries/codemirror/mode/oz/oz.js @@ -0,0 +1,252 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("oz", function (conf) { + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/; + var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/; + var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/; + + var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", + "finally", "with", "require", "prepare", "import", "export", "define", "do"]; + var end = ["end"]; + + var atoms = wordRegexp(["true", "false", "nil", "unit"]); + var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex", + "mod", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]); + var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", + "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]); + var middleKeywords = wordRegexp(middle); + var endKeywords = wordRegexp(end); + + // Tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + // Brackets + if(stream.match(/[{}]/)) { + return "bracket"; + } + + // Special [] keyword + if (stream.match(/(\[])/)) { + return "keyword" + } + + // Operators + if (stream.match(tripleOperators) || stream.match(doubleOperators)) { + return "operator"; + } + + // Atoms + if(stream.match(atoms)) { + return 'atom'; + } + + // Opening keywords + var matched = stream.match(openingKeywords); + if (matched) { + if (!state.doInCurrentLine) + state.currentIndent++; + else + state.doInCurrentLine = false; + + // Special matching for signatures + if(matched[0] == "proc" || matched[0] == "fun") + state.tokenize = tokenFunProc; + else if(matched[0] == "class") + state.tokenize = tokenClass; + else if(matched[0] == "meth") + state.tokenize = tokenMeth; + + return 'keyword'; + } + + // Middle and other keywords + if (stream.match(middleKeywords) || stream.match(commonKeywords)) { + return "keyword" + } + + // End keywords + if (stream.match(endKeywords)) { + state.currentIndent--; + return 'keyword'; + } + + // Eat the next char for next comparisons + var ch = stream.next(); + + // Strings + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + + // Numbers + if (/[~\d]/.test(ch)) { + if (ch == "~") { + if(! /^[0-9]/.test(stream.peek())) + return null; + else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) + return "number"; + } + + if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) + return "number"; + + return null; + } + + // Comments + if (ch == "%") { + stream.skipToEnd(); + return 'comment'; + } + else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + } + + // Single operators + if(singleOperators.test(ch)) { + return "operator"; + } + + // If nothing match, we skip the entire alphanumerical block + stream.eatWhile(/\w/); + + return "variable"; + } + + function tokenClass(stream, state) { + if (stream.eatSpace()) { + return null; + } + stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/); + state.tokenize = tokenBase; + return "variable-3" + } + + function tokenMeth(stream, state) { + if (stream.eatSpace()) { + return null; + } + stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/); + state.tokenize = tokenBase; + return "def" + } + + function tokenFunProc(stream, state) { + if (stream.eatSpace()) { + return null; + } + + if(!state.hasPassedFirstStage && stream.eat("{")) { + state.hasPassedFirstStage = true; + return "bracket"; + } + else if(state.hasPassedFirstStage) { + stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/); + state.hasPassedFirstStage = false; + state.tokenize = tokenBase; + return "def" + } + else { + state.tokenize = tokenBase; + return null; + } + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function (stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end || !escaped) + state.tokenize = tokenBase; + return "string"; + }; + } + + function buildElectricInputRegEx() { + // Reindentation should occur on [] or on a match of any of + // the block closing keywords, at the end of a line. + var allClosings = middle.concat(end); + return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$"); + } + + return { + + startState: function () { + return { + tokenize: tokenBase, + currentIndent: 0, + doInCurrentLine: false, + hasPassedFirstStage: false + }; + }, + + token: function (stream, state) { + if (stream.sol()) + state.doInCurrentLine = 0; + + return state.tokenize(stream, state); + }, + + indent: function (state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, ''); + + if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/)) + return conf.indentUnit * (state.currentIndent - 1); + + if (state.currentIndent < 0) + return 0; + + return state.currentIndent * conf.indentUnit; + }, + fold: "indent", + electricInput: buildElectricInputRegEx(), + lineComment: "%", + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +CodeMirror.defineMIME("text/x-oz", "oz"); + +}); diff --git a/libraries/codemirror/mode/pascal/index.html b/libraries/codemirror/mode/pascal/index.html new file mode 100644 index 0000000..f8a99ad --- /dev/null +++ b/libraries/codemirror/mode/pascal/index.html @@ -0,0 +1,61 @@ + + +CodeMirror: Pascal mode + + + + + + + + + +
          +

          Pascal mode

          + + +
          + + + +

          MIME types defined: text/x-pascal.

          +
          diff --git a/libraries/codemirror/mode/pascal/pascal.js b/libraries/codemirror/mode/pascal/pascal.js new file mode 100644 index 0000000..2d0c3d4 --- /dev/null +++ b/libraries/codemirror/mode/pascal/pascal.js @@ -0,0 +1,109 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pascal", function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words("and array begin case const div do downto else end file for forward integer " + + "boolean char function goto if in label mod nil not of or packed procedure " + + "program record repeat set string then to type until var while with"); + var atoms = {"null": true}; + + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == "#" && state.startOfLine) { + stream.skipToEnd(); + return "meta"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (ch == "(" && stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + // Interface + + return { + startState: function() { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-pascal", "pascal"); + +}); diff --git a/libraries/codemirror/mode/pegjs/index.html b/libraries/codemirror/mode/pegjs/index.html new file mode 100644 index 0000000..0c74604 --- /dev/null +++ b/libraries/codemirror/mode/pegjs/index.html @@ -0,0 +1,66 @@ + + + + CodeMirror: PEG.js Mode + + + + + + + + + + + + +
          +

          PEG.js Mode

          +
          + +

          The PEG.js Mode

          +

          Created by Forbes Lindesay.

          +
          + + diff --git a/libraries/codemirror/mode/pegjs/pegjs.js b/libraries/codemirror/mode/pegjs/pegjs.js new file mode 100644 index 0000000..306e376 --- /dev/null +++ b/libraries/codemirror/mode/pegjs/pegjs.js @@ -0,0 +1,114 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../javascript/javascript")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../javascript/javascript"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pegjs", function (config) { + var jsMode = CodeMirror.getMode(config, "javascript"); + + function identifier(stream) { + return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); + } + + return { + startState: function () { + return { + inString: false, + stringType: null, + inComment: false, + inChracterClass: false, + braced: 0, + lhs: true, + localState: null + }; + }, + token: function (stream, state) { + if (stream) + + //check for state changes + if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.inString = true; // Update state + } + if (!state.inString && !state.inComment && stream.match(/^\/\*/)) { + state.inComment = true; + } + + //return state + if (state.inString) { + while (state.inString && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.inString = false; // Clear flag + } else if (stream.peek() === '\\') { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + } else if (state.inComment) { + while (state.inComment && !stream.eol()) { + if (stream.match(/\*\//)) { + state.inComment = false; // Clear flag + } else { + stream.match(/^.[^\*]*/); + } + } + return "comment"; + } else if (state.inChracterClass) { + while (state.inChracterClass && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { + state.inChracterClass = false; + } + } + } else if (stream.peek() === '[') { + stream.next(); + state.inChracterClass = true; + return 'bracket'; + } else if (stream.match(/^\/\//)) { + stream.skipToEnd(); + return "comment"; + } else if (state.braced || stream.peek() === '{') { + if (state.localState === null) { + state.localState = jsMode.startState(); + } + var token = jsMode.token(stream, state.localState); + var text = stream.current(); + if (!token) { + for (var i = 0; i < text.length; i++) { + if (text[i] === '{') { + state.braced++; + } else if (text[i] === '}') { + state.braced--; + } + }; + } + return token; + } else if (identifier(stream)) { + if (stream.peek() === ':') { + return 'variable'; + } + return 'variable-2'; + } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { + stream.next(); + return 'bracket'; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; +}, "javascript"); + +}); diff --git a/libraries/codemirror/mode/perl/index.html b/libraries/codemirror/mode/perl/index.html new file mode 100644 index 0000000..8c1021c --- /dev/null +++ b/libraries/codemirror/mode/perl/index.html @@ -0,0 +1,75 @@ + + +CodeMirror: Perl mode + + + + + + + + + +
          +

          Perl mode

          + + +
          + + + +

          MIME types defined: text/x-perl.

          +
          diff --git a/libraries/codemirror/mode/perl/perl.js b/libraries/codemirror/mode/perl/perl.js new file mode 100644 index 0000000..bef62bc --- /dev/null +++ b/libraries/codemirror/mode/perl/perl.js @@ -0,0 +1,837 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) +// This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("perl",function(){ + // http://perldoc.perl.org + var PERL={ // null - magic touch + // 1 - keyword + // 2 - def + // 3 - atom + // 4 - operator + // 5 - variable-2 (predefined) + // [x,y] - x=1,2,3; y=must be defined if x{...} + // PERL operators + '->' : 4, + '++' : 4, + '--' : 4, + '**' : 4, + // ! ~ \ and unary + and - + '=~' : 4, + '!~' : 4, + '*' : 4, + '/' : 4, + '%' : 4, + 'x' : 4, + '+' : 4, + '-' : 4, + '.' : 4, + '<<' : 4, + '>>' : 4, + // named unary operators + '<' : 4, + '>' : 4, + '<=' : 4, + '>=' : 4, + 'lt' : 4, + 'gt' : 4, + 'le' : 4, + 'ge' : 4, + '==' : 4, + '!=' : 4, + '<=>' : 4, + 'eq' : 4, + 'ne' : 4, + 'cmp' : 4, + '~~' : 4, + '&' : 4, + '|' : 4, + '^' : 4, + '&&' : 4, + '||' : 4, + '//' : 4, + '..' : 4, + '...' : 4, + '?' : 4, + ':' : 4, + '=' : 4, + '+=' : 4, + '-=' : 4, + '*=' : 4, // etc. ??? + ',' : 4, + '=>' : 4, + '::' : 4, + // list operators (rightward) + 'not' : 4, + 'and' : 4, + 'or' : 4, + 'xor' : 4, + // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) + 'BEGIN' : [5,1], + 'END' : [5,1], + 'PRINT' : [5,1], + 'PRINTF' : [5,1], + 'GETC' : [5,1], + 'READ' : [5,1], + 'READLINE' : [5,1], + 'DESTROY' : [5,1], + 'TIE' : [5,1], + 'TIEHANDLE' : [5,1], + 'UNTIE' : [5,1], + 'STDIN' : 5, + 'STDIN_TOP' : 5, + 'STDOUT' : 5, + 'STDOUT_TOP' : 5, + 'STDERR' : 5, + 'STDERR_TOP' : 5, + '$ARG' : 5, + '$_' : 5, + '@ARG' : 5, + '@_' : 5, + '$LIST_SEPARATOR' : 5, + '$"' : 5, + '$PROCESS_ID' : 5, + '$PID' : 5, + '$$' : 5, + '$REAL_GROUP_ID' : 5, + '$GID' : 5, + '$(' : 5, + '$EFFECTIVE_GROUP_ID' : 5, + '$EGID' : 5, + '$)' : 5, + '$PROGRAM_NAME' : 5, + '$0' : 5, + '$SUBSCRIPT_SEPARATOR' : 5, + '$SUBSEP' : 5, + '$;' : 5, + '$REAL_USER_ID' : 5, + '$UID' : 5, + '$<' : 5, + '$EFFECTIVE_USER_ID' : 5, + '$EUID' : 5, + '$>' : 5, + '$a' : 5, + '$b' : 5, + '$COMPILING' : 5, + '$^C' : 5, + '$DEBUGGING' : 5, + '$^D' : 5, + '${^ENCODING}' : 5, + '$ENV' : 5, + '%ENV' : 5, + '$SYSTEM_FD_MAX' : 5, + '$^F' : 5, + '@F' : 5, + '${^GLOBAL_PHASE}' : 5, + '$^H' : 5, + '%^H' : 5, + '@INC' : 5, + '%INC' : 5, + '$INPLACE_EDIT' : 5, + '$^I' : 5, + '$^M' : 5, + '$OSNAME' : 5, + '$^O' : 5, + '${^OPEN}' : 5, + '$PERLDB' : 5, + '$^P' : 5, + '$SIG' : 5, + '%SIG' : 5, + '$BASETIME' : 5, + '$^T' : 5, + '${^TAINT}' : 5, + '${^UNICODE}' : 5, + '${^UTF8CACHE}' : 5, + '${^UTF8LOCALE}' : 5, + '$PERL_VERSION' : 5, + '$^V' : 5, + '${^WIN32_SLOPPY_STAT}' : 5, + '$EXECUTABLE_NAME' : 5, + '$^X' : 5, + '$1' : 5, // - regexp $1, $2... + '$MATCH' : 5, + '$&' : 5, + '${^MATCH}' : 5, + '$PREMATCH' : 5, + '$`' : 5, + '${^PREMATCH}' : 5, + '$POSTMATCH' : 5, + "$'" : 5, + '${^POSTMATCH}' : 5, + '$LAST_PAREN_MATCH' : 5, + '$+' : 5, + '$LAST_SUBMATCH_RESULT' : 5, + '$^N' : 5, + '@LAST_MATCH_END' : 5, + '@+' : 5, + '%LAST_PAREN_MATCH' : 5, + '%+' : 5, + '@LAST_MATCH_START' : 5, + '@-' : 5, + '%LAST_MATCH_START' : 5, + '%-' : 5, + '$LAST_REGEXP_CODE_RESULT' : 5, + '$^R' : 5, + '${^RE_DEBUG_FLAGS}' : 5, + '${^RE_TRIE_MAXBUF}' : 5, + '$ARGV' : 5, + '@ARGV' : 5, + 'ARGV' : 5, + 'ARGVOUT' : 5, + '$OUTPUT_FIELD_SEPARATOR' : 5, + '$OFS' : 5, + '$,' : 5, + '$INPUT_LINE_NUMBER' : 5, + '$NR' : 5, + '$.' : 5, + '$INPUT_RECORD_SEPARATOR' : 5, + '$RS' : 5, + '$/' : 5, + '$OUTPUT_RECORD_SEPARATOR' : 5, + '$ORS' : 5, + '$\\' : 5, + '$OUTPUT_AUTOFLUSH' : 5, + '$|' : 5, + '$ACCUMULATOR' : 5, + '$^A' : 5, + '$FORMAT_FORMFEED' : 5, + '$^L' : 5, + '$FORMAT_PAGE_NUMBER' : 5, + '$%' : 5, + '$FORMAT_LINES_LEFT' : 5, + '$-' : 5, + '$FORMAT_LINE_BREAK_CHARACTERS' : 5, + '$:' : 5, + '$FORMAT_LINES_PER_PAGE' : 5, + '$=' : 5, + '$FORMAT_TOP_NAME' : 5, + '$^' : 5, + '$FORMAT_NAME' : 5, + '$~' : 5, + '${^CHILD_ERROR_NATIVE}' : 5, + '$EXTENDED_OS_ERROR' : 5, + '$^E' : 5, + '$EXCEPTIONS_BEING_CAUGHT' : 5, + '$^S' : 5, + '$WARNING' : 5, + '$^W' : 5, + '${^WARNING_BITS}' : 5, + '$OS_ERROR' : 5, + '$ERRNO' : 5, + '$!' : 5, + '%OS_ERROR' : 5, + '%ERRNO' : 5, + '%!' : 5, + '$CHILD_ERROR' : 5, + '$?' : 5, + '$EVAL_ERROR' : 5, + '$@' : 5, + '$OFMT' : 5, + '$#' : 5, + '$*' : 5, + '$ARRAY_BASE' : 5, + '$[' : 5, + '$OLD_PERL_VERSION' : 5, + '$]' : 5, + // PERL blocks + 'if' :[1,1], + elsif :[1,1], + 'else' :[1,1], + 'while' :[1,1], + unless :[1,1], + 'for' :[1,1], + foreach :[1,1], + // PERL functions + 'abs' :1, // - absolute value function + accept :1, // - accept an incoming socket connect + alarm :1, // - schedule a SIGALRM + 'atan2' :1, // - arctangent of Y/X in the range -PI to PI + bind :1, // - binds an address to a socket + binmode :1, // - prepare binary files for I/O + bless :1, // - create an object + bootstrap :1, // + 'break' :1, // - break out of a "given" block + caller :1, // - get context of the current subroutine call + chdir :1, // - change your current working directory + chmod :1, // - changes the permissions on a list of files + chomp :1, // - remove a trailing record separator from a string + chop :1, // - remove the last character from a string + chown :1, // - change the owership on a list of files + chr :1, // - get character this number represents + chroot :1, // - make directory new root for path lookups + close :1, // - close file (or pipe or socket) handle + closedir :1, // - close directory handle + connect :1, // - connect to a remote socket + 'continue' :[1,1], // - optional trailing block in a while or foreach + 'cos' :1, // - cosine function + crypt :1, // - one-way passwd-style encryption + dbmclose :1, // - breaks binding on a tied dbm file + dbmopen :1, // - create binding on a tied dbm file + 'default' :1, // + defined :1, // - test whether a value, variable, or function is defined + 'delete' :1, // - deletes a value from a hash + die :1, // - raise an exception or bail out + 'do' :1, // - turn a BLOCK into a TERM + dump :1, // - create an immediate core dump + each :1, // - retrieve the next key/value pair from a hash + endgrent :1, // - be done using group file + endhostent :1, // - be done using hosts file + endnetent :1, // - be done using networks file + endprotoent :1, // - be done using protocols file + endpwent :1, // - be done using passwd file + endservent :1, // - be done using services file + eof :1, // - test a filehandle for its end + 'eval' :1, // - catch exceptions or compile and run code + 'exec' :1, // - abandon this program to run another + exists :1, // - test whether a hash key is present + exit :1, // - terminate this program + 'exp' :1, // - raise I to a power + fcntl :1, // - file control system call + fileno :1, // - return file descriptor from filehandle + flock :1, // - lock an entire file with an advisory lock + fork :1, // - create a new process just like this one + format :1, // - declare a picture format with use by the write() function + formline :1, // - internal function used for formats + getc :1, // - get the next character from the filehandle + getgrent :1, // - get next group record + getgrgid :1, // - get group record given group user ID + getgrnam :1, // - get group record given group name + gethostbyaddr :1, // - get host record given its address + gethostbyname :1, // - get host record given name + gethostent :1, // - get next hosts record + getlogin :1, // - return who logged in at this tty + getnetbyaddr :1, // - get network record given its address + getnetbyname :1, // - get networks record given name + getnetent :1, // - get next networks record + getpeername :1, // - find the other end of a socket connection + getpgrp :1, // - get process group + getppid :1, // - get parent process ID + getpriority :1, // - get current nice value + getprotobyname :1, // - get protocol record given name + getprotobynumber :1, // - get protocol record numeric protocol + getprotoent :1, // - get next protocols record + getpwent :1, // - get next passwd record + getpwnam :1, // - get passwd record given user login name + getpwuid :1, // - get passwd record given user ID + getservbyname :1, // - get services record given its name + getservbyport :1, // - get services record given numeric port + getservent :1, // - get next services record + getsockname :1, // - retrieve the sockaddr for a given socket + getsockopt :1, // - get socket options on a given socket + given :1, // + glob :1, // - expand filenames using wildcards + gmtime :1, // - convert UNIX time into record or string using Greenwich time + 'goto' :1, // - create spaghetti code + grep :1, // - locate elements in a list test true against a given criterion + hex :1, // - convert a string to a hexadecimal number + 'import' :1, // - patch a module's namespace into your own + index :1, // - find a substring within a string + 'int' :1, // - get the integer portion of a number + ioctl :1, // - system-dependent device control system call + 'join' :1, // - join a list into a string using a separator + keys :1, // - retrieve list of indices from a hash + kill :1, // - send a signal to a process or process group + last :1, // - exit a block prematurely + lc :1, // - return lower-case version of a string + lcfirst :1, // - return a string with just the next letter in lower case + length :1, // - return the number of bytes in a string + 'link' :1, // - create a hard link in the filesytem + listen :1, // - register your socket as a server + local : 2, // - create a temporary value for a global variable (dynamic scoping) + localtime :1, // - convert UNIX time into record or string using local time + lock :1, // - get a thread lock on a variable, subroutine, or method + 'log' :1, // - retrieve the natural logarithm for a number + lstat :1, // - stat a symbolic link + m :null, // - match a string with a regular expression pattern + map :1, // - apply a change to a list to get back a new list with the changes + mkdir :1, // - create a directory + msgctl :1, // - SysV IPC message control operations + msgget :1, // - get SysV IPC message queue + msgrcv :1, // - receive a SysV IPC message from a message queue + msgsnd :1, // - send a SysV IPC message to a message queue + my : 2, // - declare and assign a local variable (lexical scoping) + 'new' :1, // + next :1, // - iterate a block prematurely + no :1, // - unimport some module symbols or semantics at compile time + oct :1, // - convert a string to an octal number + open :1, // - open a file, pipe, or descriptor + opendir :1, // - open a directory + ord :1, // - find a character's numeric representation + our : 2, // - declare and assign a package variable (lexical scoping) + pack :1, // - convert a list into a binary representation + 'package' :1, // - declare a separate global namespace + pipe :1, // - open a pair of connected filehandles + pop :1, // - remove the last element from an array and return it + pos :1, // - find or set the offset for the last/next m//g search + print :1, // - output a list to a filehandle + printf :1, // - output a formatted list to a filehandle + prototype :1, // - get the prototype (if any) of a subroutine + push :1, // - append one or more elements to an array + q :null, // - singly quote a string + qq :null, // - doubly quote a string + qr :null, // - Compile pattern + quotemeta :null, // - quote regular expression magic characters + qw :null, // - quote a list of words + qx :null, // - backquote quote a string + rand :1, // - retrieve the next pseudorandom number + read :1, // - fixed-length buffered input from a filehandle + readdir :1, // - get a directory from a directory handle + readline :1, // - fetch a record from a file + readlink :1, // - determine where a symbolic link is pointing + readpipe :1, // - execute a system command and collect standard output + recv :1, // - receive a message over a Socket + redo :1, // - start this loop iteration over again + ref :1, // - find out the type of thing being referenced + rename :1, // - change a filename + require :1, // - load in external functions from a library at runtime + reset :1, // - clear all variables of a given name + 'return' :1, // - get out of a function early + reverse :1, // - flip a string or a list + rewinddir :1, // - reset directory handle + rindex :1, // - right-to-left substring search + rmdir :1, // - remove a directory + s :null, // - replace a pattern with a string + say :1, // - print with newline + scalar :1, // - force a scalar context + seek :1, // - reposition file pointer for random-access I/O + seekdir :1, // - reposition directory pointer + select :1, // - reset default output or do I/O multiplexing + semctl :1, // - SysV semaphore control operations + semget :1, // - get set of SysV semaphores + semop :1, // - SysV semaphore operations + send :1, // - send a message over a socket + setgrent :1, // - prepare group file for use + sethostent :1, // - prepare hosts file for use + setnetent :1, // - prepare networks file for use + setpgrp :1, // - set the process group of a process + setpriority :1, // - set a process's nice value + setprotoent :1, // - prepare protocols file for use + setpwent :1, // - prepare passwd file for use + setservent :1, // - prepare services file for use + setsockopt :1, // - set some socket options + shift :1, // - remove the first element of an array, and return it + shmctl :1, // - SysV shared memory operations + shmget :1, // - get SysV shared memory segment identifier + shmread :1, // - read SysV shared memory + shmwrite :1, // - write SysV shared memory + shutdown :1, // - close down just half of a socket connection + 'sin' :1, // - return the sine of a number + sleep :1, // - block for some number of seconds + socket :1, // - create a socket + socketpair :1, // - create a pair of sockets + 'sort' :1, // - sort a list of values + splice :1, // - add or remove elements anywhere in an array + 'split' :1, // - split up a string using a regexp delimiter + sprintf :1, // - formatted print into a string + 'sqrt' :1, // - square root function + srand :1, // - seed the random number generator + stat :1, // - get a file's status information + state :1, // - declare and assign a state variable (persistent lexical scoping) + study :1, // - optimize input data for repeated searches + 'sub' :1, // - declare a subroutine, possibly anonymously + 'substr' :1, // - get or alter a portion of a stirng + symlink :1, // - create a symbolic link to a file + syscall :1, // - execute an arbitrary system call + sysopen :1, // - open a file, pipe, or descriptor + sysread :1, // - fixed-length unbuffered input from a filehandle + sysseek :1, // - position I/O pointer on handle used with sysread and syswrite + system :1, // - run a separate program + syswrite :1, // - fixed-length unbuffered output to a filehandle + tell :1, // - get current seekpointer on a filehandle + telldir :1, // - get current seekpointer on a directory handle + tie :1, // - bind a variable to an object class + tied :1, // - get a reference to the object underlying a tied variable + time :1, // - return number of seconds since 1970 + times :1, // - return elapsed time for self and child processes + tr :null, // - transliterate a string + truncate :1, // - shorten a file + uc :1, // - return upper-case version of a string + ucfirst :1, // - return a string with just the next letter in upper case + umask :1, // - set file creation mode mask + undef :1, // - remove a variable or function definition + unlink :1, // - remove one link to a file + unpack :1, // - convert binary structure into normal perl variables + unshift :1, // - prepend more elements to the beginning of a list + untie :1, // - break a tie binding to a variable + use :1, // - load in a module at compile time + utime :1, // - set a file's last access and modify times + values :1, // - return a list of the values in a hash + vec :1, // - test or set particular bits in a string + wait :1, // - wait for any child process to die + waitpid :1, // - wait for a particular child process to die + wantarray :1, // - get void vs scalar vs list context of current subroutine call + warn :1, // - print debugging info + when :1, // + write :1, // - print a picture record + y :null}; // - transliterate a string + + var RXstyle="string-2"; + var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type + + function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) + state.chain=null; // 12 3tail + state.style=null; + state.tail=null; + state.tokenize=function(stream,state){ + var e=false,c,i=0; + while(c=stream.next()){ + if(c===chain[i]&&!e){ + if(chain[++i]!==undefined){ + state.chain=chain[i]; + state.style=style; + state.tail=tail;} + else if(tail) + stream.eatWhile(tail); + state.tokenize=tokenPerl; + return style;} + e=!e&&c=="\\";} + return style;}; + return state.tokenize(stream,state);} + + function tokenSOMETHING(stream,state,string){ + state.tokenize=function(stream,state){ + if(stream.string==string) + state.tokenize=tokenPerl; + stream.skipToEnd(); + return "string";}; + return state.tokenize(stream,state);} + + function tokenPerl(stream,state){ + if(stream.eatSpace()) + return null; + if(state.chain) + return tokenChain(stream,state,state.chain,state.style,state.tail); + if(stream.match(/^\-?[\d\.]/,false)) + if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) + return 'number'; + if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(c=="q"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"string");}} + else if(c=="w"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"bracket");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"bracket");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"bracket");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"bracket");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"bracket");}} + else if(c=="r"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(/[\^'"!~\/(\[{<]/.test(c)){ + if(c=="("){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[stream.eat(c)],"string");}}}} + if(ch=="m"){ + var c=look(stream, -2); + if(!(c&&/\w/.test(c))){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} + if(c=="("){ + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} + if(ch=="s"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="y"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="t"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat("r");if(c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} + if(ch=="`"){ + return tokenChain(stream,state,[ch],"variable-2");} + if(ch=="/"){ + if(!/~\s*$/.test(prefix(stream))) + return "operator"; + else + return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} + if(ch=="$"){ + var p=stream.pos; + if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) + return "variable-2"; + else + stream.pos=p;} + if(/[$@%]/.test(ch)){ + var p=stream.pos; + if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ + var c=stream.current(); + if(PERL[c]) + return "variable-2";} + stream.pos=p;} + if(/[$@%&]/.test(ch)){ + if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ + var c=stream.current(); + if(PERL[c]) + return "variable-2"; + else + return "variable";}} + if(ch=="#"){ + if(look(stream, -2)!="$"){ + stream.skipToEnd(); + return "comment";}} + if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ + var p=stream.pos; + stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); + if(PERL[stream.current()]) + return "operator"; + else + stream.pos=p;} + if(ch=="_"){ + if(stream.pos==1){ + if(suffix(stream, 6)=="_END__"){ + return tokenChain(stream,state,['\0'],"comment");} + else if(suffix(stream, 7)=="_DATA__"){ + return tokenChain(stream,state,['\0'],"variable-2");} + else if(suffix(stream, 7)=="_C__"){ + return tokenChain(stream,state,['\0'],"string");}}} + if(/\w/.test(ch)){ + var p=stream.pos; + if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) + return "string"; + else + stream.pos=p;} + if(/[A-Z]/.test(ch)){ + var l=look(stream, -2); + var p=stream.pos; + stream.eatWhile(/[A-Z_]/); + if(/[\da-z]/.test(look(stream, 0))){ + stream.pos=p;} + else{ + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";}} + if(/[a-zA-Z_]/.test(ch)){ + var l=look(stream, -2); + stream.eatWhile(/\w/); + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";} + return null;} + + return { + startState: function() { + return { + tokenize: tokenPerl, + chain: null, + style: null, + tail: null + }; + }, + token: function(stream, state) { + return (state.tokenize || tokenPerl)(stream, state); + }, + lineComment: '#' + }; +}); + +CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); + +CodeMirror.defineMIME("text/x-perl", "perl"); + +// it's like "peek", but need for look-ahead or look-behind if index < 0 +function look(stream, c){ + return stream.string.charAt(stream.pos+(c||0)); +} + +// return a part of prefix of current stream from current position +function prefix(stream, c){ + if(c){ + var x=stream.pos-c; + return stream.string.substr((x>=0?x:0),c);} + else{ + return stream.string.substr(0,stream.pos-1); + } +} + +// return a part of suffix of current stream from current position +function suffix(stream, c){ + var y=stream.string.length; + var x=y-stream.pos+1; + return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) + stream.pos=y; + else + stream.pos=x; +} + +}); diff --git a/libraries/codemirror/mode/php/index.html b/libraries/codemirror/mode/php/index.html new file mode 100644 index 0000000..adf6b1b --- /dev/null +++ b/libraries/codemirror/mode/php/index.html @@ -0,0 +1,64 @@ + + +CodeMirror: PHP mode + + + + + + + + + + + + + + + +
          +

          PHP mode

          +
          + + + +

          Simple HTML/PHP mode based on + the C-like mode. Depends on XML, + JavaScript, CSS, HTMLMixed, and C-like modes.

          + +

          MIME types defined: application/x-httpd-php (HTML with PHP code), text/x-php (plain, non-wrapped PHP code).

          +
          diff --git a/libraries/codemirror/mode/php/php.js b/libraries/codemirror/mode/php/php.js new file mode 100644 index 0000000..2249446 --- /dev/null +++ b/libraries/codemirror/mode/php/php.js @@ -0,0 +1,234 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // Helper for phpString + function matchSequence(list, end, escapes) { + if (list.length == 0) return phpString(end); + return function (stream, state) { + var patterns = list[0]; + for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { + state.tokenize = matchSequence(list.slice(1), end); + return patterns[i][1]; + } + state.tokenize = phpString(end, escapes); + return "string"; + }; + } + function phpString(closing, escapes) { + return function(stream, state) { return phpString_(stream, state, closing, escapes); }; + } + function phpString_(stream, state, closing, escapes) { + // "Complex" syntax + if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { + state.tokenize = null; + return "string"; + } + + // Simple syntax + if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { + // After the variable name there may appear array or object operator. + if (stream.match("[", false)) { + // Match array operator + state.tokenize = matchSequence([ + [["[", null]], + [[/\d[\w\.]*/, "number"], + [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], + [/[\w\$]+/, "variable"]], + [["]", null]] + ], closing, escapes); + } + if (stream.match(/\-\>\w/, false)) { + // Match object operator + state.tokenize = matchSequence([ + [["->", null]], + [[/[\w]+/, "variable"]] + ], closing, escapes); + } + return "variable-2"; + } + + var escaped = false; + // Normal string + while (!stream.eol() && + (escaped || escapes === false || + (!stream.match("{$", false) && + !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { + if (!escaped && stream.match(closing)) { + state.tokenize = null; + state.tokStack.pop(); state.tokStack.pop(); + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + + "for foreach function global goto if implements interface instanceof namespace " + + "new or private protected public static switch throw trait try use var while xor " + + "die echo empty exit eval include include_once isset list require require_once return " + + "print unset __halt_compiler self static parent yield insteadof finally"; + var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; + var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; + CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); + CodeMirror.registerHelper("wordChars", "php", /[\w$]/); + + var phpConfig = { + name: "clike", + helperType: "php", + keywords: keywords(phpKeywords), + blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), + defKeywords: keywords("class function interface namespace trait"), + atoms: keywords(phpAtoms), + builtin: keywords(phpBuiltin), + multiLineStrings: true, + hooks: { + "$": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "variable-2"; + }, + "<": function(stream, state) { + var before; + if (before = stream.match(/<<\s*/)) { + var quoted = stream.eat(/['"]/); + stream.eatWhile(/[\w\.]/); + var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); + if (quoted) stream.eat(quoted); + if (delim) { + (state.tokStack || (state.tokStack = [])).push(delim, 0); + state.tokenize = phpString(delim, quoted != "'"); + return "string"; + } + } + return false; + }, + "#": function(stream) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + }, + "/": function(stream) { + if (stream.eat("/")) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + } + return false; + }, + '"': function(_stream, state) { + (state.tokStack || (state.tokStack = [])).push('"', 0); + state.tokenize = phpString('"'); + return "string"; + }, + "{": function(_stream, state) { + if (state.tokStack && state.tokStack.length) + state.tokStack[state.tokStack.length - 1]++; + return false; + }, + "}": function(_stream, state) { + if (state.tokStack && state.tokStack.length > 0 && + !--state.tokStack[state.tokStack.length - 1]) { + state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); + } + return false; + } + } + }; + + CodeMirror.defineMode("php", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, "text/html"); + var phpMode = CodeMirror.getMode(config, phpConfig); + + function dispatch(stream, state) { + var isPHP = state.curMode == phpMode; + if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; + if (!isPHP) { + if (stream.match(/^<\?\w*/)) { + state.curMode = phpMode; + if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "")) + state.curState = state.php; + return "meta"; + } + if (state.pending == '"' || state.pending == "'") { + while (!stream.eol() && stream.next() != state.pending) {} + var style = "string"; + } else if (state.pending && stream.pos < state.pending.end) { + stream.pos = state.pending.end; + var style = state.pending.style; + } else { + var style = htmlMode.token(stream, state.curState); + } + if (state.pending) state.pending = null; + var cur = stream.current(), openPHP = cur.search(/<\?/), m; + if (openPHP != -1) { + if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; + else state.pending = {end: stream.pos, style: style}; + stream.backUp(cur.length - openPHP); + } + return style; + } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { + state.curMode = htmlMode; + state.curState = state.html; + if (!state.php.context.prev) state.php = null; + return "meta"; + } else { + return phpMode.token(stream, state.curState); + } + } + + return { + startState: function() { + var html = CodeMirror.startState(htmlMode) + var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null + return {html: html, + php: php, + curMode: parserConfig.startOpen ? phpMode : htmlMode, + curState: parserConfig.startOpen ? php : html, + pending: null}; + }, + + copyState: function(state) { + var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), + php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; + if (state.curMode == htmlMode) cur = htmlNew; + else cur = phpNew; + return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, + pending: state.pending}; + }, + + token: dispatch, + + indent: function(state, textAfter) { + if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || + (state.curMode == phpMode && /^\?>/.test(textAfter))) + return htmlMode.indent(state.html, textAfter); + return state.curMode.indent(state.curState, textAfter); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + + innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } + }; + }, "htmlmixed", "clike"); + + CodeMirror.defineMIME("application/x-httpd-php", "php"); + CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); + CodeMirror.defineMIME("text/x-php", phpConfig); +}); diff --git a/libraries/codemirror/mode/php/test.js b/libraries/codemirror/mode/php/test.js new file mode 100644 index 0000000..e2ecefc --- /dev/null +++ b/libraries/codemirror/mode/php/test.js @@ -0,0 +1,154 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "php"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT('simple_test', + '[meta ]'); + + MT('variable_interpolation_non_alphanumeric', + '[meta $/$\\$}$\\\"$:$;$?$|$[[$]]$+$=aaa"]', + '[meta ?>]'); + + MT('variable_interpolation_digits', + '[meta ]'); + + MT('variable_interpolation_simple_syntax_1', + '[meta ]'); + + MT('variable_interpolation_simple_syntax_2', + '[meta ]'); + + MT('variable_interpolation_simple_syntax_3', + '[meta [variable aaaaa][string .aaaaaa"];', + '[keyword echo] [string "aaa][variable-2 $aaaa][string ->][variable-2 $aaaaa][string .aaaaaa"];', + '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string [[2]].aaaaaa"];', + '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string ->aaaa2.aaaaaa"];', + '[meta ?>]'); + + MT('variable_interpolation_escaping', + '[meta aaa.aaa"];', + '[keyword echo] [string "aaa\\$aaaa[[2]]aaa.aaa"];', + '[keyword echo] [string "aaa\\$aaaa[[asd]]aaa.aaa"];', + '[keyword echo] [string "aaa{\\$aaaa->aaa.aaa"];', + '[keyword echo] [string "aaa{\\$aaaa[[2]]aaa.aaa"];', + '[keyword echo] [string "aaa{\\aaaaa[[asd]]aaa.aaa"];', + '[keyword echo] [string "aaa\\${aaaa->aaa.aaa"];', + '[keyword echo] [string "aaa\\${aaaa[[2]]aaa.aaa"];', + '[keyword echo] [string "aaa\\${aaaa[[asd]]aaa.aaa"];', + '[meta ?>]'); + + MT('variable_interpolation_complex_syntax_1', + '[meta aaa.aaa"];', + '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa]}[string ->aaa.aaa"];', + '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa][[',' [number 42]',']]}[string ->aaa.aaa"];', + '[keyword echo] [string "aaa][variable-2 $]{[variable aaaa][meta ?>]aaaaaa'); + + MT('variable_interpolation_complex_syntax_2', + '[meta } $aaaaaa.aaa"];', + '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*}?>*/][[',' [string "aaa][variable-2 $aaa][string {}][variable-2 $]{[variable aaa]}[string "]',']]}[string ->aaa.aaa"];', + '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*} } $aaa } */]}[string ->aaa.aaa"];'); + + + function build_recursive_monsters(nt, t, n){ + var monsters = [t]; + for (var i = 1; i <= n; ++i) + monsters[i] = nt.join(monsters[i - 1]); + return monsters; + } + + var m1 = build_recursive_monsters( + ['[string "][variable-2 $]{[variable aaa] [operator +] ', '}[string "]'], + '[comment /* }?>} */] [string "aaa][variable-2 $aaa][string .aaa"]', + 10 + ); + + MT('variable_interpolation_complex_syntax_3_1', + '[meta ]'); + + var m2 = build_recursive_monsters( + ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', '}[string .a"]'], + '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', + 5 + ); + + MT('variable_interpolation_complex_syntax_3_2', + '[meta ]'); + + function build_recursive_monsters_2(mf1, mf2, nt, t, n){ + var monsters = [t]; + for (var i = 1; i <= n; ++i) + monsters[i] = nt[0] + mf1[i - 1] + nt[1] + mf2[i - 1] + nt[2] + monsters[i - 1] + nt[3]; + return monsters; + } + + var m3 = build_recursive_monsters_2( + m1, + m2, + ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', ' [operator +] ', '}[string .a"]'], + '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', + 4 + ); + + MT('variable_interpolation_complex_syntax_3_3', + '[meta ]'); + + MT("variable_interpolation_heredoc", + "[meta +CodeMirror: Pig Latin mode + + + + + + + + + +
          +

          Pig Latin mode

          +
          + + + +

          + Simple mode that handles Pig Latin language. +

          + +

          MIME type defined: text/x-pig + (PIG code) +

          diff --git a/libraries/codemirror/mode/pig/pig.js b/libraries/codemirror/mode/pig/pig.js new file mode 100644 index 0000000..5b56727 --- /dev/null +++ b/libraries/codemirror/mode/pig/pig.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* + * Pig Latin Mode for CodeMirror 2 + * @author Prasanth Jayachandran + * @link https://github.com/prasanthj/pig-codemirror-2 + * This implementation is adapted from PL/SQL mode in CodeMirror 2. + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pig", function(_config, parserConfig) { + var keywords = parserConfig.keywords, + builtins = parserConfig.builtins, + types = parserConfig.types, + multiLineStrings = parserConfig.multiLineStrings; + + var isOperatorChar = /[*+\-%<>=&?:\/!|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenComment(stream, state) { + var isEnd = false; + var ch; + while(ch = stream.next()) { + if(ch == "/" && isEnd) { + state.tokenize = tokenBase; + break; + } + isEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return "error"; + }; + } + + + function tokenBase(stream, state) { + var ch = stream.next(); + + // is a start of string? + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch)); + // is it one of the special chars + else if(/[\[\]{}\(\),;\.]/.test(ch)) + return null; + // is it a number? + else if(/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + // multi line comment or operator + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else { + stream.eatWhile(isOperatorChar); + return "operator"; + } + } + // single line comment or operator + else if (ch=="-") { + if(stream.eat("-")){ + stream.skipToEnd(); + return "comment"; + } + else { + stream.eatWhile(isOperatorChar); + return "operator"; + } + } + // is it an operator + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + // get the while word + stream.eatWhile(/[\w\$_]/); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + //keywords can be used as variables like flatten(group), group.$0 etc.. + if (!stream.eat(")") && !stream.eat(".")) + return "keyword"; + } + // is it one of the builtin functions? + if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) + return "variable-2"; + // is it one of the listed types? + if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) + return "variable-3"; + // default is a 'variable' + return "variable"; + } + } + + // Interface + return { + startState: function() { + return { + tokenize: tokenBase, + startOfLine: true + }; + }, + + token: function(stream, state) { + if(stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; +}); + +(function() { + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // builtin funcs taken from trunk revision 1303237 + var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; + + // taken from QueryLexer.g + var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + + "NEQ MATCHES TRUE FALSE DUMP"; + + // data types + var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; + + CodeMirror.defineMIME("text/x-pig", { + name: "pig", + builtins: keywords(pBuiltins), + keywords: keywords(pKeywords), + types: keywords(pTypes) + }); + + CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); +}()); + +}); diff --git a/libraries/codemirror/mode/properties/index.html b/libraries/codemirror/mode/properties/index.html new file mode 100644 index 0000000..f885302 --- /dev/null +++ b/libraries/codemirror/mode/properties/index.html @@ -0,0 +1,53 @@ + + +CodeMirror: Properties files mode + + + + + + + + + +
          +

          Properties files mode

          +
          + + +

          MIME types defined: text/x-properties, + text/x-ini.

          + +
          diff --git a/libraries/codemirror/mode/properties/properties.js b/libraries/codemirror/mode/properties/properties.js new file mode 100644 index 0000000..9da5baf --- /dev/null +++ b/libraries/codemirror/mode/properties/properties.js @@ -0,0 +1,78 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("properties", function() { + return { + token: function(stream, state) { + var sol = stream.sol() || state.afterSection; + var eol = stream.eol(); + + state.afterSection = false; + + if (sol) { + if (state.nextMultiline) { + state.inMultiline = true; + state.nextMultiline = false; + } else { + state.position = "def"; + } + } + + if (eol && ! state.nextMultiline) { + state.inMultiline = false; + state.position = "def"; + } + + if (sol) { + while(stream.eatSpace()); + } + + var ch = stream.next(); + + if (sol && (ch === "#" || ch === "!" || ch === ";")) { + state.position = "comment"; + stream.skipToEnd(); + return "comment"; + } else if (sol && ch === "[") { + state.afterSection = true; + stream.skipTo("]"); stream.eat("]"); + return "header"; + } else if (ch === "=" || ch === ":") { + state.position = "quote"; + return null; + } else if (ch === "\\" && state.position === "quote") { + if (stream.eol()) { // end of line? + // Multiline value + state.nextMultiline = true; + } + } + + return state.position; + }, + + startState: function() { + return { + position : "def", // Current position, "def", "quote" or "comment" + nextMultiline : false, // Is the next line multiline value + inMultiline : false, // Is the current line a multiline value + afterSection : false // Did we just open a section + }; + } + + }; +}); + +CodeMirror.defineMIME("text/x-properties", "properties"); +CodeMirror.defineMIME("text/x-ini", "properties"); + +}); diff --git a/libraries/codemirror/mode/puppet/index.html b/libraries/codemirror/mode/puppet/index.html new file mode 100644 index 0000000..ea01e1b --- /dev/null +++ b/libraries/codemirror/mode/puppet/index.html @@ -0,0 +1,121 @@ + + +CodeMirror: Puppet mode + + + + + + + + + + +
          +

          Puppet mode

          +
          + + +

          MIME types defined: text/x-puppet.

          + +
          diff --git a/libraries/codemirror/mode/puppet/puppet.js b/libraries/codemirror/mode/puppet/puppet.js new file mode 100644 index 0000000..e7f799f --- /dev/null +++ b/libraries/codemirror/mode/puppet/puppet.js @@ -0,0 +1,220 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("puppet", function () { + // Stores the words from the define method + var words = {}; + // Taken, mostly, from the Puppet official variable standards regex + var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; + + // Takes a string of words separated by spaces and adds them as + // keys with the value of the first argument 'style' + function define(style, string) { + var split = string.split(' '); + for (var i = 0; i < split.length; i++) { + words[split[i]] = style; + } + } + + // Takes commonly known puppet types/words and classifies them to a style + define('keyword', 'class define site node include import inherits'); + define('keyword', 'case if else in and elsif default or'); + define('atom', 'false true running present absent file directory undef'); + define('builtin', 'action augeas burst chain computer cron destination dport exec ' + + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + + 'resources router schedule scheduled_task selboolean selmodule service source ' + + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + + 'user vlan yumrepo zfs zone zpool'); + + // After finding a start of a string ('|") this function attempts to find the end; + // If a variable is encountered along the way, we display it differently when it + // is encapsulated in a double-quoted string. + function tokenString(stream, state) { + var current, prev, found_var = false; + while (!stream.eol() && (current = stream.next()) != state.pending) { + if (current === '$' && prev != '\\' && state.pending == '"') { + found_var = true; + break; + } + prev = current; + } + if (found_var) { + stream.backUp(1); + } + if (current == state.pending) { + state.continueString = false; + } else { + state.continueString = true; + } + return "string"; + } + + // Main function + function tokenize(stream, state) { + // Matches one whole word + var word = stream.match(/[\w]+/, false); + // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) + var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); + // Matches non-builtin resource declarations + // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) + var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); + // Matches virtual and exported resources (i.e. @@user { ; and the like) + var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); + + // Finally advance the stream + var ch = stream.next(); + + // Have we found a variable? + if (ch === '$') { + if (stream.match(variable_regex)) { + // If so, and its in a string, assign it a different color + return state.continueString ? 'variable-2' : 'variable'; + } + // Otherwise return an invalid variable + return "error"; + } + // Should we still be looking for the end of a string? + if (state.continueString) { + // If so, go through the loop again + stream.backUp(1); + return tokenString(stream, state); + } + // Are we in a definition (class, node, define)? + if (state.inDefinition) { + // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) + if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { + return 'def'; + } + // Match the rest it the next time around + stream.match(/\s+{/); + state.inDefinition = false; + } + // Are we in an 'include' statement? + if (state.inInclude) { + // Match and return the included class + stream.match(/(\s+)?\S+(\s+)?/); + state.inInclude = false; + return 'def'; + } + // Do we just have a function on our hands? + // In 'ensure_resource("myclass")', 'ensure_resource' is matched + if (stream.match(/(\s+)?\w+\(/)) { + stream.backUp(1); + return 'def'; + } + // Have we matched the prior attribute regex? + if (attribute) { + stream.match(/(\s+)?\w+/); + return 'tag'; + } + // Do we have Puppet specific words? + if (word && words.hasOwnProperty(word)) { + // Negates the initial next() + stream.backUp(1); + // Acutally move the stream + stream.match(/[\w]+/); + // We want to process these words differently + // do to the importance they have in Puppet + if (stream.match(/\s+\S+\s+{/, false)) { + state.inDefinition = true; + } + if (word == 'include') { + state.inInclude = true; + } + // Returns their value as state in the prior define methods + return words[word]; + } + // Is there a match on a reference? + if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { + // Negate the next() + stream.backUp(1); + // Match the full reference + stream.match(/(^|\s+)[A-Z][\w:_]+/); + return 'def'; + } + // Have we matched the prior resource regex? + if (resource) { + stream.match(/(\s+)?[\w:_]+/); + return 'def'; + } + // Have we matched the prior special_resource regex? + if (special_resource) { + stream.match(/(\s+)?[@]{1,2}/); + return 'special'; + } + // Match all the comments. All of them. + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + // Have we found a string? + if (ch == "'" || ch == '"') { + // Store the type (single or double) + state.pending = ch; + // Perform the looping function to find the end + return tokenString(stream, state); + } + // Match all the brackets + if (ch == '{' || ch == '}') { + return 'bracket'; + } + // Match characters that we are going to assume + // are trying to be regex + if (ch == '/') { + stream.match(/.*?\//); + return 'variable-3'; + } + // Match all the numbers + if (ch.match(/[0-9]/)) { + stream.eatWhile(/[0-9]+/); + return 'number'; + } + // Match the '=' and '=>' operators + if (ch == '=') { + if (stream.peek() == '>') { + stream.next(); + } + return "operator"; + } + // Keep advancing through all the rest + stream.eatWhile(/[\w-]/); + // Return a blank line for everything else + return null; + } + // Start it all + return { + startState: function () { + var state = {}; + state.inDefinition = false; + state.inInclude = false; + state.continueString = false; + state.pending = false; + return state; + }, + token: function (stream, state) { + // Strip the spaces, but regex will account for them eitherway + if (stream.eatSpace()) return null; + // Go through the main process + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-puppet", "puppet"); + +}); diff --git a/libraries/codemirror/mode/python/index.html b/libraries/codemirror/mode/python/index.html new file mode 100644 index 0000000..86eb3d5 --- /dev/null +++ b/libraries/codemirror/mode/python/index.html @@ -0,0 +1,198 @@ + + +CodeMirror: Python mode + + + + + + + + + + +
          +

          Python mode

          + +
          + + +

          Cython mode

          + +
          + + +

          Configuration Options for Python mode:

          +
            +
          • version - 2/3 - The version of Python to recognize. Default is 2.
          • +
          • singleLineStringErrors - true/false - If you have a single-line string that is not terminated at the end of the line, this will show subsequent lines as errors if true, otherwise it will consider the newline as the end of the string. Default is false.
          • +
          • hangingIndent - int - If you want to write long arguments to a function starting on a new line, how much that line should be indented. Defaults to one normal indentation unit.
          • +
          +

          Advanced Configuration Options:

          +

          Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help

          +
            +
          • singleOperators - RegEx - Regular Expression for single operator matching, default :
            ^[\\+\\-\\*/%&|\\^~<>!]
            including
            @
            on Python 3
          • +
          • singleDelimiters - RegEx - Regular Expression for single delimiter matching, default :
            ^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]
          • +
          • doubleOperators - RegEx - Regular Expression for double operators matching, default :
            ^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))
          • +
          • doubleDelimiters - RegEx - Regular Expressoin for double delimiters matching, default :
            ^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))
          • +
          • tripleDelimiters - RegEx - Regular Expression for triple delimiters matching, default :
            ^((//=)|(>>=)|(<<=)|(\\*\\*=))
          • +
          • identifiers - RegEx - Regular Expression for identifier, default :
            ^[_A-Za-z][_A-Za-z0-9]*
            on Python 2 and
            ^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*
            on Python 3.
          • +
          • extra_keywords - list of string - List of extra words ton consider as keywords
          • +
          • extra_builtins - list of string - List of extra words ton consider as builtins
          • +
          + + +

          MIME types defined: text/x-python and text/x-cython.

          +
          diff --git a/libraries/codemirror/mode/python/python.js b/libraries/codemirror/mode/python/python.js new file mode 100644 index 0000000..196b026 --- /dev/null +++ b/libraries/codemirror/mode/python/python.js @@ -0,0 +1,348 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var wordOperators = wordRegexp(["and", "or", "not", "is"]); + var commonKeywords = ["as", "assert", "break", "class", "continue", + "def", "del", "elif", "else", "except", "finally", + "for", "from", "global", "if", "import", + "lambda", "pass", "raise", "return", + "try", "while", "with", "yield", "in"]; + var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", + "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", + "enumerate", "eval", "filter", "float", "format", "frozenset", + "getattr", "globals", "hasattr", "hash", "help", "hex", "id", + "input", "int", "isinstance", "issubclass", "iter", "len", + "list", "locals", "map", "max", "memoryview", "min", "next", + "object", "oct", "open", "ord", "pow", "property", "range", + "repr", "reversed", "round", "set", "setattr", "slice", + "sorted", "staticmethod", "str", "sum", "super", "tuple", + "type", "vars", "zip", "__import__", "NotImplemented", + "Ellipsis", "__debug__"]; + var py2 = {builtins: ["apply", "basestring", "buffer", "cmp", "coerce", "execfile", + "file", "intern", "long", "raw_input", "reduce", "reload", + "unichr", "unicode", "xrange", "False", "True", "None"], + keywords: ["exec", "print"]}; + var py3 = {builtins: ["ascii", "bytes", "exec", "print"], + keywords: ["nonlocal", "False", "True", "None", "async", "await"]}; + + CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); + + function top(state) { + return state.scopes[state.scopes.length - 1]; + } + + CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = "error"; + + var singleDelimiters = parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.]/; + var doubleOperators = parserConf.doubleOperators || /^([!<>]==|<>|<<|>>|\/\/|\*\*)/; + var doubleDelimiters = parserConf.doubleDelimiters || /^(\+=|\-=|\*=|%=|\/=|&=|\|=|\^=)/; + var tripleDelimiters = parserConf.tripleDelimiters || /^(\/\/=|>>=|<<=|\*\*=)/; + + if (parserConf.version && parseInt(parserConf.version, 10) == 3) { + // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator + var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!@]/; + var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; + } else { + var singleOperators = parserConf.singleOperators || /^[\+\-\*\/%&|\^~<>!]/; + var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; + } + + var hangingIndent = parserConf.hangingIndent || conf.indentUnit; + + var myKeywords = commonKeywords, myBuiltins = commonBuiltins; + if (parserConf.extra_keywords != undefined) + myKeywords = myKeywords.concat(parserConf.extra_keywords); + + if (parserConf.extra_builtins != undefined) + myBuiltins = myBuiltins.concat(parserConf.extra_builtins); + + if (parserConf.version && parseInt(parserConf.version, 10) == 3) { + myKeywords = myKeywords.concat(py3.keywords); + myBuiltins = myBuiltins.concat(py3.builtins); + var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); + } else { + myKeywords = myKeywords.concat(py2.keywords); + myBuiltins = myBuiltins.concat(py2.builtins); + var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(myKeywords); + var builtins = wordRegexp(myBuiltins); + + // tokenizers + function tokenBase(stream, state) { + if (stream.sol()) state.indent = stream.indentation() + // Handle scope changes + if (stream.sol() && top(state).type == "py") { + var scopeOffset = top(state).offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) + pushPyScope(state); + else if (lineOffset < scopeOffset && dedent(stream, state)) + state.errorToken = true; + return null; + } else { + var style = tokenBaseInner(stream, state); + if (scopeOffset > 0 && dedent(stream, state)) + style += " " + ERRORCLASS; + return style; + } + } + return tokenBaseInner(stream, state); + } + + function tokenBaseInner(stream, state) { + if (stream.eatSpace()) return null; + + var ch = stream.peek(); + + // Handle Comments + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return "number"; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f]+/i)) intLiteral = true; + // Binary + if (stream.match(/^0b[01]+/i)) intLiteral = true; + // Octal + if (stream.match(/^0o[0-7]+/i)) intLiteral = true; + // Decimal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) intLiteral = true; + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return "number"; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) + return "punctuation"; + + if (stream.match(doubleOperators) || stream.match(singleOperators)) + return "operator"; + + if (stream.match(singleDelimiters)) + return "punctuation"; + + if (state.lastToken == "." && stream.match(identifiers)) + return "property"; + + if (stream.match(keywords) || stream.match(wordOperators)) + return "keyword"; + + if (stream.match(builtins)) + return "builtin"; + + if (stream.match(/^(self|cls)\b/)) + return "variable-2"; + + if (stream.match(identifiers)) { + if (state.lastToken == "def" || state.lastToken == "class") + return "def"; + return "variable"; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ("rub".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) + delimiter = delimiter.substr(1); + + var singleline = delimiter.length == 1; + var OUTCLASS = "string"; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) + return OUTCLASS; + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) + return ERRORCLASS; + else + state.tokenize = tokenBase; + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function pushPyScope(state) { + while (top(state).type != "py") state.scopes.pop() + state.scopes.push({offset: top(state).offset + conf.indentUnit, + type: "py", + align: null}) + } + + function pushBracketScope(stream, state, type) { + var align = stream.match(/^([\s\[\{\(]|#.*)*$/, false) ? null : stream.column() + 1 + state.scopes.push({offset: state.indent + hangingIndent, + type: type, + align: align}) + } + + function dedent(stream, state) { + var indented = stream.indentation(); + while (top(state).offset > indented) { + if (top(state).type != "py") return true; + state.scopes.pop(); + } + return top(state).offset != indented; + } + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle decorators + if (current == "@") { + if (parserConf.version && parseInt(parserConf.version, 10) == 3) + return stream.match(identifiers, false) ? "meta" : "operator"; + else + return stream.match(identifiers, false) ? "meta" : ERRORCLASS; + } + + if ((style == "variable" || style == "builtin") + && state.lastToken == "meta") + style = "meta"; + + // Handle scope changes. + if (current == "pass" || current == "return") + state.dedent += 1; + + if (current == "lambda") state.lambda = true; + if (current == ":" && !state.lambda && top(state).type == "py") + pushPyScope(state); + + var delimiter_index = current.length == 1 ? "[({".indexOf(current) : -1; + if (delimiter_index != -1) + pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); + + delimiter_index = "])}".indexOf(current); + if (delimiter_index != -1) { + if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent + else return ERRORCLASS; + } + if (state.dedent > 0 && stream.eol() && top(state).type == "py") { + if (state.scopes.length > 1) state.scopes.pop(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset: basecolumn || 0, type: "py", align: null}], + indent: basecolumn || 0, + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var addErr = state.errorToken; + if (addErr) state.errorToken = false; + var style = tokenLexer(stream, state); + + if (style && style != "comment") + state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; + if (style == "punctuation") style = null; + + if (stream.eol() && state.lambda) + state.lambda = false; + return addErr ? style + " " + ERRORCLASS : style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) + return state.tokenize.isString ? CodeMirror.Pass : 0; + + var scope = top(state), closing = scope.type == textAfter.charAt(0) + if (scope.align != null) + return scope.align - (closing ? 1 : 0) + else + return scope.offset - (closing ? hangingIndent : 0) + }, + + electricInput: /^\s*[\}\]\)]$/, + closeBrackets: {triples: "'\""}, + lineComment: "#", + fold: "indent" + }; + return external; + }); + + CodeMirror.defineMIME("text/x-python", "python"); + + var words = function(str) { return str.split(" "); }; + + CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ + "extern gil include nogil property public"+ + "readonly struct union DEF IF ELIF ELSE") + }); + +}); diff --git a/libraries/codemirror/mode/q/index.html b/libraries/codemirror/mode/q/index.html new file mode 100644 index 0000000..72785ba --- /dev/null +++ b/libraries/codemirror/mode/q/index.html @@ -0,0 +1,144 @@ + + +CodeMirror: Q mode + + + + + + + + + + +
          +

          Q mode

          + + +
          + + + +

          MIME type defined: text/x-q.

          +
          diff --git a/libraries/codemirror/mode/q/q.js b/libraries/codemirror/mode/q/q.js new file mode 100644 index 0000000..a4af938 --- /dev/null +++ b/libraries/codemirror/mode/q/q.js @@ -0,0 +1,139 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("q",function(config){ + var indentUnit=config.indentUnit, + curPunc, + keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), + E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; + function buildRE(w){return new RegExp("^("+w.join("|")+")$");} + function tokenBase(stream,state){ + var sol=stream.sol(),c=stream.next(); + curPunc=null; + if(sol) + if(c=="/") + return(state.tokenize=tokenLineComment)(stream,state); + else if(c=="\\"){ + if(stream.eol()||/\s/.test(stream.peek())) + return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment"; + else + return state.tokenize=tokenBase,"builtin"; + } + if(/\s/.test(c)) + return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; + if(c=='"') + return(state.tokenize=tokenString)(stream,state); + if(c=='`') + return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol"; + if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ + var t=null; + stream.backUp(1); + if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) + || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) + || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) + || stream.match(/^\d+[ptuv]{1}/)) + t="temporal"; + else if(stream.match(/^0[NwW]{1}/) + || stream.match(/^0x[\d|a-f|A-F]*/) + || stream.match(/^[0|1]+[b]{1}/) + || stream.match(/^\d+[chijn]{1}/) + || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) + t="number"; + return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); + } + if(/[A-Z|a-z]|\./.test(c)) + return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable"; + if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) + return null; + if(/[{}\(\[\]\)]/.test(c)) + return null; + return"error"; + } + function tokenLineComment(stream,state){ + return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; + } + function tokenBlockComment(stream,state){ + var f=stream.sol()&&stream.peek()=="\\"; + stream.skipToEnd(); + if(f&&/^\\\s*$/.test(stream.current())) + state.tokenize=tokenBase; + return"comment"; + } + function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} + function tokenString(stream,state){ + var escaped=false,next,end=false; + while((next=stream.next())){ + if(next=="\""&&!escaped){end=true;break;} + escaped=!escaped&&next=="\\"; + } + if(end)state.tokenize=tokenBase; + return"string"; + } + function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} + function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} + return{ + startState:function(){ + return{tokenize:tokenBase, + context:null, + indent:0, + col:0}; + }, + token:function(stream,state){ + if(stream.sol()){ + if(state.context&&state.context.align==null) + state.context.align=false; + state.indent=stream.indentation(); + } + //if (stream.eatSpace()) return null; + var style=state.tokenize(stream,state); + if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ + state.context.align=true; + } + if(curPunc=="(")pushContext(state,")",stream.column()); + else if(curPunc=="[")pushContext(state,"]",stream.column()); + else if(curPunc=="{")pushContext(state,"}",stream.column()); + else if(/[\]\}\)]/.test(curPunc)){ + while(state.context&&state.context.type=="pattern")popContext(state); + if(state.context&&curPunc==state.context.type)popContext(state); + } + else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); + else if(/atom|string|variable/.test(style)&&state.context){ + if(/[\}\]]/.test(state.context.type)) + pushContext(state,"pattern",stream.column()); + else if(state.context.type=="pattern"&&!state.context.align){ + state.context.align=true; + state.context.col=stream.column(); + } + } + return style; + }, + indent:function(state,textAfter){ + var firstChar=textAfter&&textAfter.charAt(0); + var context=state.context; + if(/[\]\}]/.test(firstChar)) + while (context&&context.type=="pattern")context=context.prev; + var closing=context&&firstChar==context.type; + if(!context) + return 0; + else if(context.type=="pattern") + return context.col; + else if(context.align) + return context.col+(closing?0:1); + else + return context.indent+(closing?0:indentUnit); + } + }; +}); +CodeMirror.defineMIME("text/x-q","q"); + +}); diff --git a/libraries/codemirror/mode/r/index.html b/libraries/codemirror/mode/r/index.html new file mode 100644 index 0000000..6dd9634 --- /dev/null +++ b/libraries/codemirror/mode/r/index.html @@ -0,0 +1,85 @@ + + +CodeMirror: R mode + + + + + + + + + +
          +

          R mode

          +
          + + +

          MIME types defined: text/x-rsrc.

          + +

          Development of the CodeMirror R mode was kindly sponsored + by Ubalo.

          + +
          diff --git a/libraries/codemirror/mode/r/r.js b/libraries/codemirror/mode/r/r.js new file mode 100644 index 0000000..1ab4a95 --- /dev/null +++ b/libraries/codemirror/mode/r/r.js @@ -0,0 +1,162 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("r", function(config) { + function wordObj(str) { + var words = str.split(" "), res = {}; + for (var i = 0; i < words.length; ++i) res[words[i]] = true; + return res; + } + var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); + var builtins = wordObj("list quote bquote eval return call parse deparse"); + var keywords = wordObj("if else repeat while function for in next break"); + var blockkeywords = wordObj("if else repeat while function for"); + var opChars = /[+\-*\/^<>=!&|~$:]/; + var curPunc; + + function tokenBase(stream, state) { + curPunc = null; + var ch = stream.next(); + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "0" && stream.eat("x")) { + stream.eatWhile(/[\da-f]/i); + return "number"; + } else if (ch == "." && stream.eat(/\d/)) { + stream.match(/\d*(?:e[+\-]?\d+)?/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); + return "number"; + } else if (ch == "'" || ch == '"') { + state.tokenize = tokenString(ch); + return "string"; + } else if (ch == "." && stream.match(/.[.\d]+/)) { + return "keyword"; + } else if (/[\w\.]/.test(ch) && ch != "_") { + stream.eatWhile(/[\w\.]/); + var word = stream.current(); + if (atoms.propertyIsEnumerable(word)) return "atom"; + if (keywords.propertyIsEnumerable(word)) { + // Block keywords start new blocks, except 'else if', which only starts + // one new block for the 'if', no block for the 'else'. + if (blockkeywords.propertyIsEnumerable(word) && + !stream.match(/\s*if(\s+|$)/, false)) + curPunc = "block"; + return "keyword"; + } + if (builtins.propertyIsEnumerable(word)) return "builtin"; + return "variable"; + } else if (ch == "%") { + if (stream.skipTo("%")) stream.next(); + return "variable-2"; + } else if (ch == "<" && stream.eat("-")) { + return "arrow"; + } else if (ch == "=" && state.ctx.argList) { + return "arg-is"; + } else if (opChars.test(ch)) { + if (ch == "$") return "dollar"; + stream.eatWhile(opChars); + return "operator"; + } else if (/[\(\){}\[\];]/.test(ch)) { + curPunc = ch; + if (ch == ";") return "semi"; + return null; + } else { + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + if (stream.eat("\\")) { + var ch = stream.next(); + if (ch == "x") stream.match(/^[a-f0-9]{2}/i); + else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); + else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); + else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); + else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); + return "string-2"; + } else { + var next; + while ((next = stream.next()) != null) { + if (next == quote) { state.tokenize = tokenBase; break; } + if (next == "\\") { stream.backUp(1); break; } + } + return "string"; + } + }; + } + + function push(state, type, stream) { + state.ctx = {type: type, + indent: state.indent, + align: null, + column: stream.column(), + prev: state.ctx}; + } + function pop(state) { + state.indent = state.ctx.indent; + state.ctx = state.ctx.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + ctx: {type: "top", + indent: -config.indentUnit, + align: false}, + indent: 0, + afterIdent: false}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.ctx.align == null) state.ctx.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (style != "comment" && state.ctx.align == null) state.ctx.align = true; + + var ctype = state.ctx.type; + if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); + if (curPunc == "{") push(state, "}", stream); + else if (curPunc == "(") { + push(state, ")", stream); + if (state.afterIdent) state.ctx.argList = true; + } + else if (curPunc == "[") push(state, "]", stream); + else if (curPunc == "block") push(state, "block", stream); + else if (curPunc == ctype) pop(state); + state.afterIdent = style == "variable" || style == "keyword"; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, + closing = firstChar == ctx.type; + if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indent + (closing ? 0 : config.indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-rsrc", "r"); + +}); diff --git a/libraries/codemirror/mode/rpm/changes/index.html b/libraries/codemirror/mode/rpm/changes/index.html new file mode 100644 index 0000000..6e5031b --- /dev/null +++ b/libraries/codemirror/mode/rpm/changes/index.html @@ -0,0 +1,66 @@ + + +CodeMirror: RPM changes mode + + + + + + + + + + + +
          +

          RPM changes mode

          + +
          + + +

          MIME types defined: text/x-rpm-changes.

          +
          diff --git a/libraries/codemirror/mode/rpm/index.html b/libraries/codemirror/mode/rpm/index.html new file mode 100644 index 0000000..9a34e6d --- /dev/null +++ b/libraries/codemirror/mode/rpm/index.html @@ -0,0 +1,149 @@ + + +CodeMirror: RPM changes mode + + + + + + + + + + + +
          +

          RPM changes mode

          + +
          + + +

          RPM spec mode

          + +
          + + +

          MIME types defined: text/x-rpm-spec, text/x-rpm-changes.

          +
          diff --git a/libraries/codemirror/mode/rpm/rpm.js b/libraries/codemirror/mode/rpm/rpm.js new file mode 100644 index 0000000..87cde59 --- /dev/null +++ b/libraries/codemirror/mode/rpm/rpm.js @@ -0,0 +1,109 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("rpm-changes", function() { + var headerSeperator = /^-+$/; + var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; + var simpleEmail = /^[\w+.-]+@[\w.-]+/; + + return { + token: function(stream) { + if (stream.sol()) { + if (stream.match(headerSeperator)) { return 'tag'; } + if (stream.match(headerLine)) { return 'tag'; } + } + if (stream.match(simpleEmail)) { return 'string'; } + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); + +// Quick and dirty spec file highlighting + +CodeMirror.defineMode("rpm-spec", function() { + var arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; + + var preamble = /^[a-zA-Z0-9()]+:/; + var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/; + var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros + var control_flow_simple = /^%(else|endif)/; // rpm control flow macros + var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros + + return { + startState: function () { + return { + controlFlow: false, + macroParameters: false, + section: false + }; + }, + token: function (stream, state) { + var ch = stream.peek(); + if (ch == "#") { stream.skipToEnd(); return "comment"; } + + if (stream.sol()) { + if (stream.match(preamble)) { return "header"; } + if (stream.match(section)) { return "atom"; } + } + + if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' + if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' + + if (stream.match(control_flow_simple)) { return "keyword"; } + if (stream.match(control_flow_complex)) { + state.controlFlow = true; + return "keyword"; + } + if (state.controlFlow) { + if (stream.match(operators)) { return "operator"; } + if (stream.match(/^(\d+)/)) { return "number"; } + if (stream.eol()) { state.controlFlow = false; } + } + + if (stream.match(arch)) { + if (stream.eol()) { state.controlFlow = false; } + return "number"; + } + + // Macros like '%make_install' or '%attr(0775,root,root)' + if (stream.match(/^%[\w]+/)) { + if (stream.match(/^\(/)) { state.macroParameters = true; } + return "keyword"; + } + if (state.macroParameters) { + if (stream.match(/^\d+/)) { return "number";} + if (stream.match(/^\)/)) { + state.macroParameters = false; + return "keyword"; + } + } + + // Macros like '%{defined fedora}' + if (stream.match(/^%\{\??[\w \-\:\!]+\}/)) { + if (stream.eol()) { state.controlFlow = false; } + return "def"; + } + + //TODO: Include bash script sub-parser (CodeMirror supports that) + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); + +}); diff --git a/libraries/codemirror/mode/rst/index.html b/libraries/codemirror/mode/rst/index.html new file mode 100644 index 0000000..2902dea --- /dev/null +++ b/libraries/codemirror/mode/rst/index.html @@ -0,0 +1,535 @@ + + +CodeMirror: reStructuredText mode + + + + + + + + + + +
          +

          reStructuredText mode

          +
          + + +

          + The python mode will be used for highlighting blocks + containing Python/IPython terminal sessions: blocks starting with + >>> (for Python) or In [num]: (for + IPython). + + Further, the stex mode will be used for highlighting + blocks containing LaTex code. +

          + +

          MIME types defined: text/x-rst.

          +
          diff --git a/libraries/codemirror/mode/rst/rst.js b/libraries/codemirror/mode/rst/rst.js new file mode 100644 index 0000000..bcf110c --- /dev/null +++ b/libraries/codemirror/mode/rst/rst.js @@ -0,0 +1,557 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('rst', function (config, options) { + + var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; + var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; + var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; + + var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; + var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; + var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; + + var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; + var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; + var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; + var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); + + var overlay = { + token: function (stream) { + + if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) + return 'strong'; + if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) + return 'em'; + if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) + return 'string-2'; + if (stream.match(rx_number)) + return 'number'; + if (stream.match(rx_positive)) + return 'positive'; + if (stream.match(rx_negative)) + return 'negative'; + if (stream.match(rx_uri)) + return 'link'; + + while (stream.next() != null) { + if (stream.match(rx_strong, false)) break; + if (stream.match(rx_emphasis, false)) break; + if (stream.match(rx_literal, false)) break; + if (stream.match(rx_number, false)) break; + if (stream.match(rx_positive, false)) break; + if (stream.match(rx_negative, false)) break; + if (stream.match(rx_uri, false)) break; + } + + return null; + } + }; + + var mode = CodeMirror.getMode( + config, options.backdrop || 'rst-base' + ); + + return CodeMirror.overlayMode(mode, overlay, true); // combine +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMode('rst-base', function (config) { + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function format(string) { + var args = Array.prototype.slice.call(arguments, 1); + return string.replace(/{(\d+)}/g, function (match, n) { + return typeof args[n] != 'undefined' ? args[n] : match; + }); + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var mode_python = CodeMirror.getMode(config, 'python'); + var mode_stex = CodeMirror.getMode(config, 'stex'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var SEPA = "\\s+"; + var TAIL = "(?:\\s*|\\W|$)", + rx_TAIL = new RegExp(format('^{0}', TAIL)); + + var NAME = + "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", + rx_NAME = new RegExp(format('^{0}', NAME)); + var NAME_WWS = + "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; + var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); + + var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; + var TEXT2 = "(?:[^\\`]+)", + rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); + + var rx_section = new RegExp( + "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); + var rx_explicit = new RegExp( + format('^\\.\\.{0}', SEPA)); + var rx_link = new RegExp( + format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); + var rx_directive = new RegExp( + format('^{0}::{1}', REF_NAME, TAIL)); + var rx_substitution = new RegExp( + format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); + var rx_footnote = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); + var rx_citation = new RegExp( + format('^\\[{0}\\]{1}', REF_NAME, TAIL)); + + var rx_substitution_ref = new RegExp( + format('^\\|{0}\\|', TEXT1)); + var rx_footnote_ref = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); + var rx_citation_ref = new RegExp( + format('^\\[{0}\\]_', REF_NAME)); + var rx_link_ref1 = new RegExp( + format('^{0}__?', REF_NAME)); + var rx_link_ref2 = new RegExp( + format('^`{0}`_', TEXT2)); + + var rx_role_pre = new RegExp( + format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); + var rx_role_suf = new RegExp( + format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); + var rx_role = new RegExp( + format('^:{0}:{1}', NAME, TAIL)); + + var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); + var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); + var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); + var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); + var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); + var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); + var rx_link_head = new RegExp("^_"); + var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); + var rx_link_tail = new RegExp(format('^:{0}', TAIL)); + + var rx_verbatim = new RegExp('^::\\s*$'); + var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_normal(stream, state) { + var token = null; + + if (stream.sol() && stream.match(rx_examples, false)) { + change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } else if (stream.sol() && stream.match(rx_explicit)) { + change(state, to_explicit); + token = 'meta'; + } else if (stream.sol() && stream.match(rx_section)) { + change(state, to_normal); + token = 'header'; + } else if (phase(state) == rx_role_pre || + stream.match(rx_role_pre, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_pre, 1)); + stream.match(/^:/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_pre, 2)); + stream.match(rx_NAME); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) { + state.tmp_stex = true; + } + break; + case 2: + change(state, to_normal, context(rx_role_pre, 3)); + stream.match(/^:`/); + token = 'meta'; + break; + case 3: + if (state.tmp_stex) { + state.tmp_stex = undefined; state.tmp = { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }; + } + + if (state.tmp) { + if (stream.peek() == '`') { + change(state, to_normal, context(rx_role_pre, 4)); + state.tmp = undefined; + break; + } + + token = state.tmp.mode.token(stream, state.tmp.local); + break; + } + + change(state, to_normal, context(rx_role_pre, 4)); + stream.match(rx_TEXT2); + token = 'string'; + break; + case 4: + change(state, to_normal, context(rx_role_pre, 5)); + stream.match(/^`/); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_pre, 6)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_role_suf || + stream.match(rx_role_suf, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_suf, 1)); + stream.match(/^`/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_suf, 2)); + stream.match(rx_TEXT2); + token = 'string'; + break; + case 2: + change(state, to_normal, context(rx_role_suf, 3)); + stream.match(/^`:/); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role_suf, 4)); + stream.match(rx_NAME); + token = 'keyword'; + break; + case 4: + change(state, to_normal, context(rx_role_suf, 5)); + stream.match(/^:/); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_suf, 6)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_role || stream.match(rx_role, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role, 1)); + stream.match(/^:/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role, 2)); + stream.match(rx_NAME); + token = 'keyword'; + break; + case 2: + change(state, to_normal, context(rx_role, 3)); + stream.match(/^:/); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role, 4)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_substitution_ref || + stream.match(rx_substitution_ref, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_substitution_ref, 1)); + stream.match(rx_substitution_text); + token = 'variable-2'; + break; + case 1: + change(state, to_normal, context(rx_substitution_ref, 2)); + if (stream.match(/^_?_?/)) token = 'link'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_footnote_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_link_ref1)) { + change(state, to_normal); + if (!stream.peek() || stream.peek().match(/^\W$/)) { + token = 'link'; + } + } else if (phase(state) == rx_link_ref2 || + stream.match(rx_link_ref2, false)) { + + switch (stage(state)) { + case 0: + if (!stream.peek() || stream.peek().match(/^\W$/)) { + change(state, to_normal, context(rx_link_ref2, 1)); + } else { + stream.match(rx_link_ref2); + } + break; + case 1: + change(state, to_normal, context(rx_link_ref2, 2)); + stream.match(/^`/); + token = 'link'; + break; + case 2: + change(state, to_normal, context(rx_link_ref2, 3)); + stream.match(rx_TEXT2); + break; + case 3: + change(state, to_normal, context(rx_link_ref2, 4)); + stream.match(/^`_/); + token = 'link'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_verbatim)) { + change(state, to_verbatim); + } + + else { + if (stream.next()) change(state, to_normal); + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_explicit(stream, state) { + var token = null; + + if (phase(state) == rx_substitution || + stream.match(rx_substitution, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_substitution, 1)); + stream.match(rx_substitution_text); + token = 'variable-2'; + break; + case 1: + change(state, to_explicit, context(rx_substitution, 2)); + stream.match(rx_substitution_sepa); + break; + case 2: + change(state, to_explicit, context(rx_substitution, 3)); + stream.match(rx_substitution_name); + token = 'keyword'; + break; + case 3: + change(state, to_explicit, context(rx_substitution, 4)); + stream.match(rx_substitution_tail); + token = 'meta'; + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_directive || + stream.match(rx_directive, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_directive, 1)); + stream.match(rx_directive_name); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) + state.tmp_stex = true; + else if (stream.current().match(/^python/)) + state.tmp_py = true; + break; + case 1: + change(state, to_explicit, context(rx_directive, 2)); + stream.match(rx_directive_tail); + token = 'meta'; + + if (stream.match(/^latex\s*$/) || state.tmp_stex) { + state.tmp_stex = undefined; change(state, to_mode, { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }); + } + break; + case 2: + change(state, to_explicit, context(rx_directive, 3)); + if (stream.match(/^python\s*$/) || state.tmp_py) { + state.tmp_py = undefined; change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_link || stream.match(rx_link, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_link, 1)); + stream.match(rx_link_head); + stream.match(rx_link_name); + token = 'link'; + break; + case 1: + change(state, to_explicit, context(rx_link, 2)); + stream.match(rx_link_tail); + token = 'meta'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_footnote)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation)) { + change(state, to_normal); + token = 'quote'; + } + + else { + stream.eatSpace(); + if (stream.eol()) { + change(state, to_normal); + } else { + stream.skipToEnd(); + change(state, to_comment); + token = 'comment'; + } + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_comment(stream, state) { + return as_block(stream, state, 'comment'); + } + + function to_verbatim(stream, state) { + return as_block(stream, state, 'meta'); + } + + function as_block(stream, state, token) { + if (stream.eol() || stream.eatSpace()) { + stream.skipToEnd(); + return token; + } else { + change(state, to_normal); + return null; + } + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_mode(stream, state) { + + if (state.ctx.mode && state.ctx.local) { + + if (stream.sol()) { + if (!stream.eatSpace()) change(state, to_normal); + return null; + } + + return state.ctx.mode.token(stream, state.ctx.local); + } + + change(state, to_normal); + return null; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function context(phase, stage, mode, local) { + return {phase: phase, stage: stage, mode: mode, local: local}; + } + + function change(state, tok, ctx) { + state.tok = tok; + state.ctx = ctx || {}; + } + + function stage(state) { + return state.ctx.stage || 0; + } + + function phase(state) { + return state.ctx.phase; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + return { + startState: function () { + return {tok: to_normal, ctx: context(undefined, 0)}; + }, + + copyState: function (state) { + var ctx = state.ctx, tmp = state.tmp; + if (ctx.local) + ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; + if (tmp) + tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; + return {tok: state.tok, ctx: ctx, tmp: tmp}; + }, + + innerMode: function (state) { + return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} + : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} + : null; + }, + + token: function (stream, state) { + return state.tok(stream, state); + } + }; +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMIME('text/x-rst', 'rst'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +}); diff --git a/libraries/codemirror/mode/ruby/index.html b/libraries/codemirror/mode/ruby/index.html new file mode 100644 index 0000000..97544ba --- /dev/null +++ b/libraries/codemirror/mode/ruby/index.html @@ -0,0 +1,183 @@ + + +CodeMirror: Ruby mode + + + + + + + + + + +
          +

          Ruby mode

          +
          + + +

          MIME types defined: text/x-ruby.

          + +

          Development of the CodeMirror Ruby mode was kindly sponsored + by Ubalo.

          + +
          diff --git a/libraries/codemirror/mode/ruby/ruby.js b/libraries/codemirror/mode/ruby/ruby.js new file mode 100644 index 0000000..10cad8d --- /dev/null +++ b/libraries/codemirror/mode/ruby/ruby.js @@ -0,0 +1,285 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ruby", function(config) { + function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; + } + var keywords = wordObj([ + "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", + "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", + "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", + "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", + "caller", "lambda", "proc", "public", "protected", "private", "require", "load", + "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" + ]); + var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then", + "catch", "loop", "proc", "begin"]); + var dedentWords = wordObj(["end", "until"]); + var matching = {"[": "]", "{": "}", "(": ")"}; + var curPunc; + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + if (stream.sol() && stream.match("=begin") && stream.eol()) { + state.tokenize.push(readBlockComment); + return "comment"; + } + if (stream.eatSpace()) return null; + var ch = stream.next(), m; + if (ch == "`" || ch == "'" || ch == '"') { + return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); + } else if (ch == "/") { + var currentIndex = stream.current().length; + if (stream.skipTo("/")) { + var search_till = stream.current().length; + stream.backUp(stream.current().length - currentIndex); + var balance = 0; // balance brackets + while (stream.current().length < search_till) { + var chchr = stream.next(); + if (chchr == "(") balance += 1; + else if (chchr == ")") balance -= 1; + if (balance < 0) break; + } + stream.backUp(stream.current().length - currentIndex); + if (balance == 0) + return chain(readQuoted(ch, "string-2", true), stream, state); + } + return "operator"; + } else if (ch == "%") { + var style = "string", embed = true; + if (stream.eat("s")) style = "atom"; + else if (stream.eat(/[WQ]/)) style = "string"; + else if (stream.eat(/[r]/)) style = "string-2"; + else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } + var delim = stream.eat(/[^\w\s=]/); + if (!delim) return "operator"; + if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; + return chain(readQuoted(delim, style, embed, true), stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { + return chain(readHereDoc(m[1]), stream, state); + } else if (ch == "0") { + if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); + else if (stream.eat("b")) stream.eatWhile(/[01]/); + else stream.eatWhile(/[0-7]/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); + return "number"; + } else if (ch == "?") { + while (stream.match(/^\\[CM]-/)) {} + if (stream.eat("\\")) stream.eatWhile(/\w/); + else stream.next(); + return "string"; + } else if (ch == ":") { + if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); + if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); + + // :> :>> :< :<< are valid symbols + if (stream.eat(/[\<\>]/)) { + stream.eat(/[\<\>]/); + return "atom"; + } + + // :+ :- :/ :* :| :& :! are valid symbols + if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { + return "atom"; + } + + // Symbols can't start by a digit + if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { + stream.eatWhile(/[\w$\xa1-\uffff]/); + // Only one ? ! = is allowed and only as the last character + stream.eat(/[\?\!\=]/); + return "atom"; + } + return "operator"; + } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { + stream.eat("@"); + stream.eatWhile(/[\w\xa1-\uffff]/); + return "variable-2"; + } else if (ch == "$") { + if (stream.eat(/[a-zA-Z_]/)) { + stream.eatWhile(/[\w]/); + } else if (stream.eat(/\d/)) { + stream.eat(/\d/); + } else { + stream.next(); // Must be a special global like $: or $! + } + return "variable-3"; + } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { + stream.eatWhile(/[\w\xa1-\uffff]/); + stream.eat(/[\?\!]/); + if (stream.eat(":")) return "atom"; + return "ident"; + } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { + curPunc = "|"; + return null; + } else if (/[\(\)\[\]{}\\;]/.test(ch)) { + curPunc = ch; + return null; + } else if (ch == "-" && stream.eat(">")) { + return "arrow"; + } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { + var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); + if (ch == "." && !more) curPunc = "."; + return "operator"; + } else { + return null; + } + } + + function tokenBaseUntilBrace(depth) { + if (!depth) depth = 1; + return function(stream, state) { + if (stream.peek() == "}") { + if (depth == 1) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } else { + state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); + } + } else if (stream.peek() == "{") { + state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); + } + return tokenBase(stream, state); + }; + } + function tokenBaseOnce() { + var alreadyCalled = false; + return function(stream, state) { + if (alreadyCalled) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + alreadyCalled = true; + return tokenBase(stream, state); + }; + } + function readQuoted(quote, style, embed, unescaped) { + return function(stream, state) { + var escaped = false, ch; + + if (state.context.type === 'read-quoted-paused') { + state.context = state.context.prev; + stream.eat("}"); + } + + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + if (embed && ch == "#" && !escaped) { + if (stream.eat("{")) { + if (quote == "}") { + state.context = {prev: state.context, type: 'read-quoted-paused'}; + } + state.tokenize.push(tokenBaseUntilBrace()); + break; + } else if (/[@\$]/.test(stream.peek())) { + state.tokenize.push(tokenBaseOnce()); + break; + } + } + escaped = !escaped && ch == "\\"; + } + return style; + }; + } + function readHereDoc(phrase) { + return function(stream, state) { + if (stream.match(phrase)) state.tokenize.pop(); + else stream.skipToEnd(); + return "string"; + }; + } + function readBlockComment(stream, state) { + if (stream.sol() && stream.match("=end") && stream.eol()) + state.tokenize.pop(); + stream.skipToEnd(); + return "comment"; + } + + return { + startState: function() { + return {tokenize: [tokenBase], + indented: 0, + context: {type: "top", indented: -config.indentUnit}, + continuedLine: false, + lastTok: null, + varList: false}; + }, + + token: function(stream, state) { + curPunc = null; + if (stream.sol()) state.indented = stream.indentation(); + var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; + var thisTok = curPunc; + if (style == "ident") { + var word = stream.current(); + style = state.lastTok == "." ? "property" + : keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : /^[A-Z]/.test(word) ? "tag" + : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" + : "variable"; + if (style == "keyword") { + thisTok = word; + if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; + else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; + else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) + kwtype = "indent"; + else if (word == "do" && state.context.indented < state.indented) + kwtype = "indent"; + } + } + if (curPunc || (style && style != "comment")) state.lastTok = thisTok; + if (curPunc == "|") state.varList = !state.varList; + + if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) + state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; + else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) + state.context = state.context.prev; + + if (stream.eol()) + state.continuedLine = (curPunc == "\\" || style == "operator"); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0); + var ct = state.context; + var closing = ct.type == matching[firstChar] || + ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); + return ct.indented + (closing ? 0 : config.indentUnit) + + (state.continuedLine ? config.indentUnit : 0); + }, + + electricInput: /^\s*(?:end|rescue|\})$/, + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-ruby", "ruby"); + +}); diff --git a/libraries/codemirror/mode/ruby/test.js b/libraries/codemirror/mode/ruby/test.js new file mode 100644 index 0000000..cade864 --- /dev/null +++ b/libraries/codemirror/mode/ruby/test.js @@ -0,0 +1,14 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("divide_equal_operator", + "[variable bar] [operator /=] [variable foo]"); + + MT("divide_equal_operator_no_spacing", + "[variable foo][operator /=][number 42]"); + +})(); diff --git a/libraries/codemirror/mode/rust/index.html b/libraries/codemirror/mode/rust/index.html new file mode 100644 index 0000000..1fe0ad1 --- /dev/null +++ b/libraries/codemirror/mode/rust/index.html @@ -0,0 +1,64 @@ + + +CodeMirror: Rust mode + + + + + + + + + + +
          +

          Rust mode

          + + +
          + + + +

          MIME types defined: text/x-rustsrc.

          +
          diff --git a/libraries/codemirror/mode/rust/rust.js b/libraries/codemirror/mode/rust/rust.js new file mode 100644 index 0000000..8558b53 --- /dev/null +++ b/libraries/codemirror/mode/rust/rust.js @@ -0,0 +1,71 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineSimpleMode("rust",{ + start: [ + // string and byte string + {regex: /b?"/, token: "string", next: "string"}, + // raw string and raw byte string + {regex: /b?r"/, token: "string", next: "string_raw"}, + {regex: /b?r#+"/, token: "string", next: "string_raw_hash"}, + // character + {regex: /'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/, token: "string-2"}, + // byte + {regex: /b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/, token: "string-2"}, + + {regex: /(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/, + token: "number"}, + {regex: /(let(?:\s+mut)?|fn|enum|mod|struct|type)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null, "def"]}, + {regex: /(?:abstract|alignof|as|box|break|continue|const|crate|do|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/, token: "keyword"}, + {regex: /\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/, token: "atom"}, + {regex: /\b(?:true|false|Some|None|Ok|Err)\b/, token: "builtin"}, + {regex: /\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, + token: ["keyword", null ,"def"]}, + {regex: /#!?\[.*\]/, token: "meta"}, + {regex: /\/\/.*/, token: "comment"}, + {regex: /\/\*/, token: "comment", next: "comment"}, + {regex: /[-+\/*=<>!]+/, token: "operator"}, + {regex: /[a-zA-Z_]\w*!/,token: "variable-3"}, + {regex: /[a-zA-Z_]\w*/, token: "variable"}, + {regex: /[\{\[\(]/, indent: true}, + {regex: /[\}\]\)]/, dedent: true} + ], + string: [ + {regex: /"/, token: "string", next: "start"}, + {regex: /(?:[^\\"]|\\(?:.|$))*/, token: "string"} + ], + string_raw: [ + {regex: /"/, token: "string", next: "start"}, + {regex: /[^"]*/, token: "string"} + ], + string_raw_hash: [ + {regex: /"#+/, token: "string", next: "start"}, + {regex: /(?:[^"]|"(?!#))*/, token: "string"} + ], + comment: [ + {regex: /.*?\*\//, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"} + ], + meta: { + dontIndentStates: ["comment"], + electricInput: /^\s*\}$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + } +}); + + +CodeMirror.defineMIME("text/x-rustsrc", "rust"); +}); diff --git a/libraries/codemirror/mode/rust/test.js b/libraries/codemirror/mode/rust/test.js new file mode 100644 index 0000000..eb256c4 --- /dev/null +++ b/libraries/codemirror/mode/rust/test.js @@ -0,0 +1,39 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); + function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} + + MT('integer_test', + '[number 123i32]', + '[number 123u32]', + '[number 123_u32]', + '[number 0xff_u8]', + '[number 0o70_i16]', + '[number 0b1111_1111_1001_0000_i32]', + '[number 0usize]'); + + MT('float_test', + '[number 123.0f64]', + '[number 0.1f64]', + '[number 0.1f32]', + '[number 12E+99_f64]'); + + MT('string-literals-test', + '[string "foo"]', + '[string r"foo"]', + '[string "\\"foo\\""]', + '[string r#""foo""#]', + '[string "foo #\\"# bar"]', + + '[string b"foo"]', + '[string br"foo"]', + '[string b"\\"foo\\""]', + '[string br#""foo""#]', + '[string br##"foo #" bar"##]', + + "[string-2 'h']", + "[string-2 b'h']"); + +})(); diff --git a/libraries/codemirror/mode/sass/index.html b/libraries/codemirror/mode/sass/index.html new file mode 100644 index 0000000..9f4a790 --- /dev/null +++ b/libraries/codemirror/mode/sass/index.html @@ -0,0 +1,66 @@ + + +CodeMirror: Sass mode + + + + + + + + + + +
          +

          Sass mode

          +
          + + +

          MIME types defined: text/x-sass.

          +
          diff --git a/libraries/codemirror/mode/sass/sass.js b/libraries/codemirror/mode/sass/sass.js new file mode 100644 index 0000000..6973ece --- /dev/null +++ b/libraries/codemirror/mode/sass/sass.js @@ -0,0 +1,414 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sass", function(config) { + function tokenRegexp(words) { + return new RegExp("^" + words.join("|")); + } + + var keywords = ["true", "false", "null", "auto"]; + var keywordsRegexp = new RegExp("^" + keywords.join("|")); + + var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", + "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; + var opRegexp = tokenRegexp(operators); + + var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; + + function urlTokens(stream, state) { + var ch = stream.peek(); + + if (ch === ")") { + stream.next(); + state.tokenizer = tokenBase; + return "operator"; + } else if (ch === "(") { + stream.next(); + stream.eatSpace(); + + return "operator"; + } else if (ch === "'" || ch === '"') { + state.tokenizer = buildStringTokenizer(stream.next()); + return "string"; + } else { + state.tokenizer = buildStringTokenizer(")", false); + return "string"; + } + } + function comment(indentation, multiLine) { + return function(stream, state) { + if (stream.sol() && stream.indentation() <= indentation) { + state.tokenizer = tokenBase; + return tokenBase(stream, state); + } + + if (multiLine && stream.skipTo("*/")) { + stream.next(); + stream.next(); + state.tokenizer = tokenBase; + } else { + stream.skipToEnd(); + } + + return "comment"; + }; + } + + function buildStringTokenizer(quote, greedy) { + if (greedy == null) { greedy = true; } + + function stringTokenizer(stream, state) { + var nextChar = stream.next(); + var peekChar = stream.peek(); + var previousChar = stream.string.charAt(stream.pos-2); + + var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); + + if (endingString) { + if (nextChar !== quote && greedy) { stream.next(); } + state.tokenizer = tokenBase; + return "string"; + } else if (nextChar === "#" && peekChar === "{") { + state.tokenizer = buildInterpolationTokenizer(stringTokenizer); + stream.next(); + return "operator"; + } else { + return "string"; + } + } + + return stringTokenizer; + } + + function buildInterpolationTokenizer(currentTokenizer) { + return function(stream, state) { + if (stream.peek() === "}") { + stream.next(); + state.tokenizer = currentTokenizer; + return "operator"; + } else { + return tokenBase(stream, state); + } + }; + } + + function indent(state) { + if (state.indentCount == 0) { + state.indentCount++; + var lastScopeOffset = state.scopes[0].offset; + var currentOffset = lastScopeOffset + config.indentUnit; + state.scopes.unshift({ offset:currentOffset }); + } + } + + function dedent(state) { + if (state.scopes.length == 1) return; + + state.scopes.shift(); + } + + function tokenBase(stream, state) { + var ch = stream.peek(); + + // Comment + if (stream.match("/*")) { + state.tokenizer = comment(stream.indentation(), true); + return state.tokenizer(stream, state); + } + if (stream.match("//")) { + state.tokenizer = comment(stream.indentation(), false); + return state.tokenizer(stream, state); + } + + // Interpolation + if (stream.match("#{")) { + state.tokenizer = buildInterpolationTokenizer(tokenBase); + return "operator"; + } + + // Strings + if (ch === '"' || ch === "'") { + stream.next(); + state.tokenizer = buildStringTokenizer(ch); + return "string"; + } + + if(!state.cursorHalf){// state.cursorHalf === 0 + // first half i.e. before : for key-value pairs + // including selectors + + if (ch === ".") { + stream.next(); + if (stream.match(/^[\w-]+/)) { + indent(state); + return "atom"; + } else if (stream.peek() === "#") { + indent(state); + return "atom"; + } + } + + if (ch === "#") { + stream.next(); + // ID selectors + if (stream.match(/^[\w-]+/)) { + indent(state); + return "atom"; + } + if (stream.peek() === "#") { + indent(state); + return "atom"; + } + } + + // Variables + if (ch === "$") { + stream.next(); + stream.eatWhile(/[\w-]/); + return "variable-2"; + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)) + return "number"; + + // Units + if (stream.match(/^(px|em|in)\b/)) + return "unit"; + + if (stream.match(keywordsRegexp)) + return "keyword"; + + if (stream.match(/^url/) && stream.peek() === "(") { + state.tokenizer = urlTokens; + return "atom"; + } + + if (ch === "=") { + // Match shortcut mixin definition + if (stream.match(/^=[\w-]+/)) { + indent(state); + return "meta"; + } + } + + if (ch === "+") { + // Match shortcut mixin definition + if (stream.match(/^\+[\w-]+/)){ + return "variable-3"; + } + } + + if(ch === "@"){ + if(stream.match(/@extend/)){ + if(!stream.match(/\s*[\w]/)) + dedent(state); + } + } + + + // Indent Directives + if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { + indent(state); + return "meta"; + } + + // Other Directives + if (ch === "@") { + stream.next(); + stream.eatWhile(/[\w-]/); + return "meta"; + } + + if (stream.eatWhile(/[\w-]/)){ + if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ + return "property"; + } + else if(stream.match(/ *:/,false)){ + indent(state); + state.cursorHalf = 1; + return "atom"; + } + else if(stream.match(/ *,/,false)){ + return "atom"; + } + else{ + indent(state); + return "atom"; + } + } + + if(ch === ":"){ + if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element + return "keyword"; + } + stream.next(); + state.cursorHalf=1; + return "operator"; + } + + } // cursorHalf===0 ends here + else{ + + if (ch === "#") { + stream.next(); + // Hex numbers + if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "number"; + } + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)){ + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "number"; + } + + // Units + if (stream.match(/^(px|em|in)\b/)){ + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "unit"; + } + + if (stream.match(keywordsRegexp)){ + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "keyword"; + } + + if (stream.match(/^url/) && stream.peek() === "(") { + state.tokenizer = urlTokens; + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "atom"; + } + + // Variables + if (ch === "$") { + stream.next(); + stream.eatWhile(/[\w-]/); + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "variable-3"; + } + + // bang character for !important, !default, etc. + if (ch === "!") { + stream.next(); + if(!stream.peek()){ + state.cursorHalf = 0; + } + return stream.match(/^[\w]+/) ? "keyword": "operator"; + } + + if (stream.match(opRegexp)){ + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "operator"; + } + + // attributes + if (stream.eatWhile(/[\w-]/)) { + if(!stream.peek()){ + state.cursorHalf = 0; + } + return "attribute"; + } + + //stream.eatSpace(); + if(!stream.peek()){ + state.cursorHalf = 0; + return null; + } + + } // else ends here + + if (stream.match(opRegexp)) + return "operator"; + + // If we haven't returned by now, we move 1 character + // and return an error + stream.next(); + return null; + } + + function tokenLexer(stream, state) { + if (stream.sol()) state.indentCount = 0; + var style = state.tokenizer(stream, state); + var current = stream.current(); + + if (current === "@return" || current === "}"){ + dedent(state); + } + + if (style !== null) { + var startOfToken = stream.pos - current.length; + + var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); + + var newScopes = []; + + for (var i = 0; i < state.scopes.length; i++) { + var scope = state.scopes[i]; + + if (scope.offset <= withCurrentIndent) + newScopes.push(scope); + } + + state.scopes = newScopes; + } + + + return style; + } + + return { + startState: function() { + return { + tokenizer: tokenBase, + scopes: [{offset: 0, type: "sass"}], + indentCount: 0, + cursorHalf: 0, // cursor half tells us if cursor lies after (1) + // or before (0) colon (well... more or less) + definedVars: [], + definedMixins: [] + }; + }, + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = { style: style, content: stream.current() }; + + return style; + }, + + indent: function(state) { + return state.scopes[0].offset; + } + }; +}); + +CodeMirror.defineMIME("text/x-sass", "sass"); + +}); diff --git a/libraries/codemirror/mode/scheme/index.html b/libraries/codemirror/mode/scheme/index.html new file mode 100644 index 0000000..04d5c6a --- /dev/null +++ b/libraries/codemirror/mode/scheme/index.html @@ -0,0 +1,77 @@ + + +CodeMirror: Scheme mode + + + + + + + + + +
          +

          Scheme mode

          +
          + + +

          MIME types defined: text/x-scheme.

          + +
          diff --git a/libraries/codemirror/mode/scheme/scheme.js b/libraries/codemirror/mode/scheme/scheme.js new file mode 100644 index 0000000..2234645 --- /dev/null +++ b/libraries/codemirror/mode/scheme/scheme.js @@ -0,0 +1,249 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Author: Koh Zi Han, based on implementation by Koh Zi Chun + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("scheme", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; + var INDENT_WORD_SKIP = 2; + + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); + var indentKeys = makeKeywords("define let letrec let* lambda"); + + function stateStack(indent, type, prev) { // represents a state stack object + this.indent = indent; + this.type = type; + this.prev = prev; + } + + function pushStack(state, indent, type) { + state.indentStack = new stateStack(indent, type, state.indentStack); + } + + function popStack(state) { + state.indentStack = state.indentStack.prev; + } + + var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); + var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); + var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); + var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); + + function isBinaryNumber (stream) { + return stream.match(binaryMatcher); + } + + function isOctalNumber (stream) { + return stream.match(octalMatcher); + } + + function isDecimalNumber (stream, backup) { + if (backup === true) { + stream.backUp(1); + } + return stream.match(decimalMatcher); + } + + function isHexNumber (stream) { + return stream.match(hexMatcher); + } + + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false, + sExprComment: false + }; + }, + + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = stream.indentation(); + } + + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + + switch(state.mode){ + case "string": // multi-line string parsing mode + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next == "\"" && !escaped) { + + state.mode = false; + break; + } + escaped = !escaped && next == "\\"; + } + returnType = STRING; // continue on in scheme-string mode + break; + case "comment": // comment parsing mode + var next, maybeEnd = false; + while ((next = stream.next()) != null) { + if (next == "#" && maybeEnd) { + + state.mode = false; + break; + } + maybeEnd = (next == "|"); + } + returnType = COMMENT; + break; + case "s-expr-comment": // s-expr commenting mode + state.mode = false; + if(stream.peek() == "(" || stream.peek() == "["){ + // actually start scheme s-expr commenting mode + state.sExprComment = 0; + }else{ + // if not we just comment the entire of the next token + stream.eatWhile(/[^/s]/); // eat non spaces + returnType = COMMENT; + break; + } + default: // default parsing mode + var ch = stream.next(); + + if (ch == "\"") { + state.mode = "string"; + returnType = STRING; + + } else if (ch == "'") { + returnType = ATOM; + } else if (ch == '#') { + if (stream.eat("|")) { // Multi-line comment + state.mode = "comment"; // toggle to comment mode + returnType = COMMENT; + } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) + returnType = ATOM; + } else if (stream.eat(';')) { // S-Expr comment + state.mode = "s-expr-comment"; + returnType = COMMENT; + } else { + var numTest = null, hasExactness = false, hasRadix = true; + if (stream.eat(/[ei]/i)) { + hasExactness = true; + } else { + stream.backUp(1); // must be radix specifier + } + if (stream.match(/^#b/i)) { + numTest = isBinaryNumber; + } else if (stream.match(/^#o/i)) { + numTest = isOctalNumber; + } else if (stream.match(/^#x/i)) { + numTest = isHexNumber; + } else if (stream.match(/^#d/i)) { + numTest = isDecimalNumber; + } else if (stream.match(/^[-+0-9.]/, false)) { + hasRadix = false; + numTest = isDecimalNumber; + // re-consume the intial # if all matches failed + } else if (!hasExactness) { + stream.eat('#'); + } + if (numTest != null) { + if (hasRadix && !hasExactness) { + // consume optional exactness after radix + stream.match(/^#[ei]/i); + } + if (numTest(stream)) + returnType = NUMBER; + } + } + } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal + returnType = NUMBER; + } else if (ch == ";") { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "(" || ch == "[") { + var keyWord = ''; var indentTemp = stream.column(), letter; + /** + Either + (indent-word .. + (non-indent-word .. + (;something else, bracket, etc. + */ + + while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { + keyWord += letter; + } + + if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word + + pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); + } else { // non-indent word + // we continue eating the spaces + stream.eatSpace(); + if (stream.eol() || stream.peek() == ";") { + // nothing significant after + // we restart indentation 1 space after + pushStack(state, indentTemp + 1, ch); + } else { + pushStack(state, indentTemp + stream.current().length, ch); // else we match + } + } + stream.backUp(stream.current().length - 1); // undo all the eating + + if(typeof state.sExprComment == "number") state.sExprComment++; + + returnType = BRACKET; + } else if (ch == ")" || ch == "]") { + returnType = BRACKET; + if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { + popStack(state); + + if(typeof state.sExprComment == "number"){ + if(--state.sExprComment == 0){ + returnType = COMMENT; // final closing bracket + state.sExprComment = false; // turn off s-expr commenting mode + } + } + } + } else { + stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/); + + if (keywords && keywords.propertyIsEnumerable(stream.current())) { + returnType = BUILTIN; + } else returnType = "variable"; + } + } + return (typeof state.sExprComment == "number") ? COMMENT : returnType; + }, + + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + }, + + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-scheme", "scheme"); + +}); diff --git a/libraries/codemirror/mode/shell/index.html b/libraries/codemirror/mode/shell/index.html new file mode 100644 index 0000000..0b56300 --- /dev/null +++ b/libraries/codemirror/mode/shell/index.html @@ -0,0 +1,66 @@ + + +CodeMirror: Shell mode + + + + + + + + + + +
          +

          Shell mode

          + + + + + + +

          MIME types defined: text/x-sh.

          +
          diff --git a/libraries/codemirror/mode/shell/shell.js b/libraries/codemirror/mode/shell/shell.js new file mode 100644 index 0000000..a684e8c --- /dev/null +++ b/libraries/codemirror/mode/shell/shell.js @@ -0,0 +1,139 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('shell', function() { + + var words = {}; + function define(style, string) { + var split = string.split(' '); + for(var i = 0; i < split.length; i++) { + words[split[i]] = style; + } + }; + + // Atoms + define('atom', 'true false'); + + // Keywords + define('keyword', 'if then do else elif while until for in esac fi fin ' + + 'fil done exit set unset export function'); + + // Commands + define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + + 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + + 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + + 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + + 'touch vi vim wall wc wget who write yes zsh'); + + function tokenBase(stream, state) { + if (stream.eatSpace()) return null; + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\\') { + stream.next(); + return null; + } + if (ch === '\'' || ch === '"' || ch === '`') { + state.tokens.unshift(tokenString(ch)); + return tokenize(stream, state); + } + if (ch === '#') { + if (sol && stream.eat('!')) { + stream.skipToEnd(); + return 'meta'; // 'comment'? + } + stream.skipToEnd(); + return 'comment'; + } + if (ch === '$') { + state.tokens.unshift(tokenDollar); + return tokenize(stream, state); + } + if (ch === '+' || ch === '=') { + return 'operator'; + } + if (ch === '-') { + stream.eat('-'); + stream.eatWhile(/\w/); + return 'attribute'; + } + if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + if(stream.eol() || !/\w/.test(stream.peek())) { + return 'number'; + } + } + stream.eatWhile(/[\w-]/); + var cur = stream.current(); + if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; + return words.hasOwnProperty(cur) ? words[cur] : null; + } + + function tokenString(quote) { + return function(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === quote && !escaped) { + end = true; + break; + } + if (next === '$' && !escaped && quote !== '\'') { + escaped = true; + stream.backUp(1); + state.tokens.unshift(tokenDollar); + break; + } + escaped = !escaped && next === '\\'; + } + if (end || !escaped) { + state.tokens.shift(); + } + return (quote === '`' || quote === ')' ? 'quote' : 'string'); + }; + }; + + var tokenDollar = function(stream, state) { + if (state.tokens.length > 1) stream.eat('$'); + var ch = stream.next(), hungry = /\w/; + if (ch === '{') hungry = /[^}]/; + if (ch === '(') { + state.tokens[0] = tokenString(')'); + return tokenize(stream, state); + } + if (!/\d/.test(ch)) { + stream.eatWhile(hungry); + stream.eat('}'); + } + state.tokens.shift(); + return 'def'; + }; + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]};}, + token: function(stream, state) { + return tokenize(stream, state); + }, + lineComment: '#', + fold: "brace" + }; +}); + +CodeMirror.defineMIME('text/x-sh', 'shell'); + +}); diff --git a/libraries/codemirror/mode/shell/test.js b/libraries/codemirror/mode/shell/test.js new file mode 100644 index 0000000..a413b5a --- /dev/null +++ b/libraries/codemirror/mode/shell/test.js @@ -0,0 +1,58 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({}, "shell"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("var", + "text [def $var] text"); + MT("varBraces", + "text[def ${var}]text"); + MT("varVar", + "text [def $a$b] text"); + MT("varBracesVarBraces", + "text[def ${a}${b}]text"); + + MT("singleQuotedVar", + "[string 'text $var text']"); + MT("singleQuotedVarBraces", + "[string 'text ${var} text']"); + + MT("doubleQuotedVar", + '[string "text ][def $var][string text"]'); + MT("doubleQuotedVarBraces", + '[string "text][def ${var}][string text"]'); + MT("doubleQuotedVarPunct", + '[string "text ][def $@][string text"]'); + MT("doubleQuotedVarVar", + '[string "][def $a$b][string "]'); + MT("doubleQuotedVarBracesVarBraces", + '[string "][def ${a}${b}][string "]'); + + MT("notAString", + "text\\'text"); + MT("escapes", + "outside\\'\\\"\\`\\\\[string \"inside\\`\\'\\\"\\\\`\\$notAVar\"]outside\\$\\(notASubShell\\)"); + + MT("subshell", + "[builtin echo] [quote $(whoami)] s log, stardate [quote `date`]."); + MT("doubleQuotedSubshell", + "[builtin echo] [string \"][quote $(whoami)][string 's log, stardate `date`.\"]"); + + MT("hashbang", + "[meta #!/bin/bash]"); + MT("comment", + "text [comment # Blurb]"); + + MT("numbers", + "[number 0] [number 1] [number 2]"); + MT("keywords", + "[keyword while] [atom true]; [keyword do]", + " [builtin sleep] [number 3]", + "[keyword done]"); + MT("options", + "[builtin ls] [attribute -l] [attribute --human-readable]"); + MT("operator", + "[def var][operator =]value"); +})(); diff --git a/libraries/codemirror/mode/sieve/index.html b/libraries/codemirror/mode/sieve/index.html new file mode 100644 index 0000000..6f029b6 --- /dev/null +++ b/libraries/codemirror/mode/sieve/index.html @@ -0,0 +1,93 @@ + + +CodeMirror: Sieve (RFC5228) mode + + + + + + + + + +
          +

          Sieve (RFC5228) mode

          +
          + + +

          MIME types defined: application/sieve.

          + +
          diff --git a/libraries/codemirror/mode/sieve/sieve.js b/libraries/codemirror/mode/sieve/sieve.js new file mode 100644 index 0000000..f67db2f --- /dev/null +++ b/libraries/codemirror/mode/sieve/sieve.js @@ -0,0 +1,193 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sieve", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words("if elsif else stop require"); + var atoms = words("true false not"); + var indentUnit = config.indentUnit; + + function tokenBase(stream, state) { + + var ch = stream.next(); + if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + + if (ch === '#') { + stream.skipToEnd(); + return "comment"; + } + + if (ch == "\"") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + + if (ch == "(") { + state._indent.push("("); + // add virtual angel wings so that editor behaves... + // ...more sane incase of broken brackets + state._indent.push("{"); + return null; + } + + if (ch === "{") { + state._indent.push("{"); + return null; + } + + if (ch == ")") { + state._indent.pop(); + state._indent.pop(); + } + + if (ch === "}") { + state._indent.pop(); + return null; + } + + if (ch == ",") + return null; + + if (ch == ";") + return null; + + + if (/[{}\(\),;]/.test(ch)) + return null; + + // 1*DIGIT "K" / "M" / "G" + if (/\d/.test(ch)) { + stream.eatWhile(/[\d]/); + stream.eat(/[KkMmGg]/); + return "number"; + } + + // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") + if (ch == ":") { + stream.eatWhile(/[a-zA-Z_]/); + stream.eatWhile(/[a-zA-Z0-9_]/); + + return "operator"; + } + + stream.eatWhile(/\w/); + var cur = stream.current(); + + // "text:" *(SP / HTAB) (hash-comment / CRLF) + // *(multiline-literal / multiline-dotstart) + // "." CRLF + if ((cur == "text") && stream.eat(":")) + { + state.tokenize = tokenMultiLineString; + return "string"; + } + + if (keywords.propertyIsEnumerable(cur)) + return "keyword"; + + if (atoms.propertyIsEnumerable(cur)) + return "atom"; + + return null; + } + + function tokenMultiLineString(stream, state) + { + state._multiLineString = true; + // the first line is special it may contain a comment + if (!stream.sol()) { + stream.eatSpace(); + + if (stream.peek() == "#") { + stream.skipToEnd(); + return "comment"; + } + + stream.skipToEnd(); + return "string"; + } + + if ((stream.next() == ".") && (stream.eol())) + { + state._multiLineString = false; + state.tokenize = tokenBase; + } + + return "string"; + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return "string"; + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + _indent: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) + return null; + + return (state.tokenize || tokenBase)(stream, state);; + }, + + indent: function(state, _textAfter) { + var length = state._indent.length; + if (_textAfter && (_textAfter[0] == "}")) + length--; + + if (length <0) + length = 0; + + return length * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("application/sieve", "sieve"); + +}); diff --git a/libraries/codemirror/mode/slim/index.html b/libraries/codemirror/mode/slim/index.html new file mode 100644 index 0000000..7fa4e50 --- /dev/null +++ b/libraries/codemirror/mode/slim/index.html @@ -0,0 +1,96 @@ + + +CodeMirror: SLIM mode + + + + + + + + + + + + + + + + + + + + +
          +

          SLIM mode

          +
          + + +

          MIME types defined: application/x-slim.

          + +

          + Parsing/Highlighting Tests: + normal, + verbose. +

          +
          diff --git a/libraries/codemirror/mode/slim/slim.js b/libraries/codemirror/mode/slim/slim.js new file mode 100644 index 0000000..164464d --- /dev/null +++ b/libraries/codemirror/mode/slim/slim.js @@ -0,0 +1,575 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + CodeMirror.defineMode("slim", function(config) { + var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); + var rubyMode = CodeMirror.getMode(config, "ruby"); + var modes = { html: htmlMode, ruby: rubyMode }; + var embedded = { + ruby: "ruby", + javascript: "javascript", + css: "text/css", + sass: "text/x-sass", + scss: "text/x-scss", + less: "text/x-less", + styl: "text/x-styl", // no highlighting so far + coffee: "coffeescript", + asciidoc: "text/x-asciidoc", + markdown: "text/x-markdown", + textile: "text/x-textile", // no highlighting so far + creole: "text/x-creole", // no highlighting so far + wiki: "text/x-wiki", // no highlighting so far + mediawiki: "text/x-mediawiki", // no highlighting so far + rdoc: "text/x-rdoc", // no highlighting so far + builder: "text/x-builder", // no highlighting so far + nokogiri: "text/x-nokogiri", // no highlighting so far + erb: "application/x-erb" + }; + var embeddedRegexp = function(map){ + var arr = []; + for(var key in map) arr.push(key); + return new RegExp("^("+arr.join('|')+"):"); + }(embedded); + + var styleMap = { + "commentLine": "comment", + "slimSwitch": "operator special", + "slimTag": "tag", + "slimId": "attribute def", + "slimClass": "attribute qualifier", + "slimAttribute": "attribute", + "slimSubmode": "keyword special", + "closeAttributeTag": null, + "slimDoctype": null, + "lineContinuation": null + }; + var closing = { + "{": "}", + "[": "]", + "(": ")" + }; + + var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; + var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; + var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); + var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); + var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); + var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; + var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; + + function backup(pos, tokenize, style) { + var restore = function(stream, state) { + state.tokenize = tokenize; + if (stream.pos < pos) { + stream.pos = pos; + return style; + } + return state.tokenize(stream, state); + }; + return function(stream, state) { + state.tokenize = restore; + return tokenize(stream, state); + }; + } + + function maybeBackup(stream, state, pat, offset, style) { + var cur = stream.current(); + var idx = cur.search(pat); + if (idx > -1) { + state.tokenize = backup(stream.pos, state.tokenize, style); + stream.backUp(cur.length - idx - offset); + } + return style; + } + + function continueLine(state, column) { + state.stack = { + parent: state.stack, + style: "continuation", + indented: column, + tokenize: state.line + }; + state.line = state.tokenize; + } + function finishContinue(state) { + if (state.line == state.tokenize) { + state.line = state.stack.tokenize; + state.stack = state.stack.parent; + } + } + + function lineContinuable(column, tokenize) { + return function(stream, state) { + finishContinue(state); + if (stream.match(/^\\$/)) { + continueLine(state, column); + return "lineContinuation"; + } + var style = tokenize(stream, state); + if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { + stream.backUp(1); + } + return style; + }; + } + function commaContinuable(column, tokenize) { + return function(stream, state) { + finishContinue(state); + var style = tokenize(stream, state); + if (stream.eol() && stream.current().match(/,$/)) { + continueLine(state, column); + } + return style; + }; + } + + function rubyInQuote(endQuote, tokenize) { + // TODO: add multi line support + return function(stream, state) { + var ch = stream.peek(); + if (ch == endQuote && state.rubyState.tokenize.length == 1) { + // step out of ruby context as it seems to complete processing all the braces + stream.next(); + state.tokenize = tokenize; + return "closeAttributeTag"; + } else { + return ruby(stream, state); + } + }; + } + function startRubySplat(tokenize) { + var rubyState; + var runSplat = function(stream, state) { + if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { + stream.backUp(1); + if (stream.eatSpace()) { + state.rubyState = rubyState; + state.tokenize = tokenize; + return tokenize(stream, state); + } + stream.next(); + } + return ruby(stream, state); + }; + return function(stream, state) { + rubyState = state.rubyState; + state.rubyState = rubyMode.startState(); + state.tokenize = runSplat; + return ruby(stream, state); + }; + } + + function ruby(stream, state) { + return rubyMode.token(stream, state.rubyState); + } + + function htmlLine(stream, state) { + if (stream.match(/^\\$/)) { + return "lineContinuation"; + } + return html(stream, state); + } + function html(stream, state) { + if (stream.match(/^#\{/)) { + state.tokenize = rubyInQuote("}", state.tokenize); + return null; + } + return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); + } + + function startHtmlLine(lastTokenize) { + return function(stream, state) { + var style = htmlLine(stream, state); + if (stream.eol()) state.tokenize = lastTokenize; + return style; + }; + } + + function startHtmlMode(stream, state, offset) { + state.stack = { + parent: state.stack, + style: "html", + indented: stream.column() + offset, // pipe + space + tokenize: state.line + }; + state.line = state.tokenize = html; + return null; + } + + function comment(stream, state) { + stream.skipToEnd(); + return state.stack.style; + } + + function commentMode(stream, state) { + state.stack = { + parent: state.stack, + style: "comment", + indented: state.indented + 1, + tokenize: state.line + }; + state.line = comment; + return comment(stream, state); + } + + function attributeWrapper(stream, state) { + if (stream.eat(state.stack.endQuote)) { + state.line = state.stack.line; + state.tokenize = state.stack.tokenize; + state.stack = state.stack.parent; + return null; + } + if (stream.match(wrappedAttributeNameRegexp)) { + state.tokenize = attributeWrapperAssign; + return "slimAttribute"; + } + stream.next(); + return null; + } + function attributeWrapperAssign(stream, state) { + if (stream.match(/^==?/)) { + state.tokenize = attributeWrapperValue; + return null; + } + return attributeWrapper(stream, state); + } + function attributeWrapperValue(stream, state) { + var ch = stream.peek(); + if (ch == '"' || ch == "\'") { + state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); + stream.next(); + return state.tokenize(stream, state); + } + if (ch == '[') { + return startRubySplat(attributeWrapper)(stream, state); + } + if (stream.match(/^(true|false|nil)\b/)) { + state.tokenize = attributeWrapper; + return "keyword"; + } + return startRubySplat(attributeWrapper)(stream, state); + } + + function startAttributeWrapperMode(state, endQuote, tokenize) { + state.stack = { + parent: state.stack, + style: "wrapper", + indented: state.indented + 1, + tokenize: tokenize, + line: state.line, + endQuote: endQuote + }; + state.line = state.tokenize = attributeWrapper; + return null; + } + + function sub(stream, state) { + if (stream.match(/^#\{/)) { + state.tokenize = rubyInQuote("}", state.tokenize); + return null; + } + var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); + subStream.pos = stream.pos - state.stack.indented; + subStream.start = stream.start - state.stack.indented; + subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; + subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; + var style = state.subMode.token(subStream, state.subState); + stream.pos = subStream.pos + state.stack.indented; + return style; + } + function firstSub(stream, state) { + state.stack.indented = stream.column(); + state.line = state.tokenize = sub; + return state.tokenize(stream, state); + } + + function createMode(mode) { + var query = embedded[mode]; + var spec = CodeMirror.mimeModes[query]; + if (spec) { + return CodeMirror.getMode(config, spec); + } + var factory = CodeMirror.modes[query]; + if (factory) { + return factory(config, {name: query}); + } + return CodeMirror.getMode(config, "null"); + } + + function getMode(mode) { + if (!modes.hasOwnProperty(mode)) { + return modes[mode] = createMode(mode); + } + return modes[mode]; + } + + function startSubMode(mode, state) { + var subMode = getMode(mode); + var subState = subMode.startState && subMode.startState(); + + state.subMode = subMode; + state.subState = subState; + + state.stack = { + parent: state.stack, + style: "sub", + indented: state.indented + 1, + tokenize: state.line + }; + state.line = state.tokenize = firstSub; + return "slimSubmode"; + } + + function doctypeLine(stream, _state) { + stream.skipToEnd(); + return "slimDoctype"; + } + + function startLine(stream, state) { + var ch = stream.peek(); + if (ch == '<') { + return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); + } + if (stream.match(/^[|']/)) { + return startHtmlMode(stream, state, 1); + } + if (stream.match(/^\/(!|\[\w+])?/)) { + return commentMode(stream, state); + } + if (stream.match(/^(-|==?[<>]?)/)) { + state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); + return "slimSwitch"; + } + if (stream.match(/^doctype\b/)) { + state.tokenize = doctypeLine; + return "keyword"; + } + + var m = stream.match(embeddedRegexp); + if (m) { + return startSubMode(m[1], state); + } + + return slimTag(stream, state); + } + + function slim(stream, state) { + if (state.startOfLine) { + return startLine(stream, state); + } + return slimTag(stream, state); + } + + function slimTag(stream, state) { + if (stream.eat('*')) { + state.tokenize = startRubySplat(slimTagExtras); + return null; + } + if (stream.match(nameRegexp)) { + state.tokenize = slimTagExtras; + return "slimTag"; + } + return slimClass(stream, state); + } + function slimTagExtras(stream, state) { + if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { + state.line = state.tokenize = state.stack.tokenize; + state.stack = state.stack.parent; + state.subMode = null; + state.subState = null; + } + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + state.startOfLine = false; + if (style) state.last = style; + return styleMap.hasOwnProperty(style) ? styleMap[style] : style; + }, + + blankLine: function(state) { + if (state.subMode && state.subMode.blankLine) { + return state.subMode.blankLine(state.subState); + } + }, + + innerMode: function(state) { + if (state.subMode) return {state: state.subState, mode: state.subMode}; + return {state: state, mode: mode}; + } + + //indent: function(state) { + // return state.indented; + //} + }; + return mode; + }, "htmlmixed", "ruby"); + + CodeMirror.defineMIME("text/x-slim", "slim"); + CodeMirror.defineMIME("application/x-slim", "slim"); +}); diff --git a/libraries/codemirror/mode/slim/test.js b/libraries/codemirror/mode/slim/test.js new file mode 100644 index 0000000..be4ddac --- /dev/null +++ b/libraries/codemirror/mode/slim/test.js @@ -0,0 +1,96 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh + +(function() { + var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "slim"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + // Requires at least one media query + MT("elementName", + "[tag h1] Hey There"); + + MT("oneElementPerLine", + "[tag h1] Hey There .h2"); + + MT("idShortcut", + "[attribute&def #test] Hey There"); + + MT("tagWithIdShortcuts", + "[tag h1][attribute&def #test] Hey There"); + + MT("classShortcut", + "[attribute&qualifier .hello] Hey There"); + + MT("tagWithIdAndClassShortcuts", + "[tag h1][attribute&def #test][attribute&qualifier .hello] Hey There"); + + MT("docType", + "[keyword doctype] xml"); + + MT("comment", + "[comment / Hello WORLD]"); + + MT("notComment", + "[tag h1] This is not a / comment "); + + MT("attributes", + "[tag a]([attribute title]=[string \"test\"]) [attribute href]=[string \"link\"]}"); + + MT("multiLineAttributes", + "[tag a]([attribute title]=[string \"test\"]", + " ) [attribute href]=[string \"link\"]}"); + + MT("htmlCode", + "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); + + MT("rubyBlock", + "[operator&special =][variable-2 @item]"); + + MT("selectorRubyBlock", + "[tag a][attribute&qualifier .test][operator&special =] [variable-2 @item]"); + + MT("nestedRubyBlock", + "[tag a]", + " [operator&special =][variable puts] [string \"test\"]"); + + MT("multilinePlaintext", + "[tag p]", + " | Hello,", + " World"); + + MT("multilineRuby", + "[tag p]", + " [comment /# this is a comment]", + " [comment and this is a comment too]", + " | Date/Time", + " [operator&special -] [variable now] [operator =] [tag DateTime][operator .][property now]", + " [tag strong][operator&special =] [variable now]", + " [operator&special -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", + " [operator&special =][string \"Happy\"]", + " [operator&special =][string \"Belated\"]", + " [operator&special =][string \"Birthday\"]"); + + MT("multilineComment", + "[comment /]", + " [comment Multiline]", + " [comment Comment]"); + + MT("hamlAfterRubyTag", + "[attribute&qualifier .block]", + " [tag strong][operator&special =] [variable now]", + " [attribute&qualifier .test]", + " [operator&special =][variable now]", + " [attribute&qualifier .right]"); + + MT("stretchedRuby", + "[operator&special =] [variable puts] [string \"Hello\"],", + " [string \"World\"]"); + + MT("interpolationInHashAttribute", + "[tag div]{[attribute id] = [string \"]#{[variable test]}[string _]#{[variable ting]}[string \"]} test"); + + MT("interpolationInHTMLAttribute", + "[tag div]([attribute title]=[string \"]#{[variable test]}[string _]#{[variable ting]()}[string \"]) Test"); +})(); diff --git a/libraries/codemirror/mode/smalltalk/index.html b/libraries/codemirror/mode/smalltalk/index.html new file mode 100644 index 0000000..2155ebc --- /dev/null +++ b/libraries/codemirror/mode/smalltalk/index.html @@ -0,0 +1,68 @@ + + +CodeMirror: Smalltalk mode + + + + + + + + + + +
          +

          Smalltalk mode

          +
          + + + +

          Simple Smalltalk mode.

          + +

          MIME types defined: text/x-stsrc.

          +
          diff --git a/libraries/codemirror/mode/smalltalk/smalltalk.js b/libraries/codemirror/mode/smalltalk/smalltalk.js new file mode 100644 index 0000000..bb510ba --- /dev/null +++ b/libraries/codemirror/mode/smalltalk/smalltalk.js @@ -0,0 +1,168 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('smalltalk', function(config) { + + var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; + var keywords = /true|false|nil|self|super|thisContext/; + + var Context = function(tokenizer, parent) { + this.next = tokenizer; + this.parent = parent; + }; + + var Token = function(name, context, eos) { + this.name = name; + this.context = context; + this.eos = eos; + }; + + var State = function() { + this.context = new Context(next, null); + this.expectVariable = true; + this.indentation = 0; + this.userIndentationDelta = 0; + }; + + State.prototype.userIndent = function(indentation) { + this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; + }; + + var next = function(stream, context, state) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '"') { + token = nextComment(stream, new Context(nextComment, context)); + + } else if (aChar === '\'') { + token = nextString(stream, new Context(nextString, context)); + + } else if (aChar === '#') { + if (stream.peek() === '\'') { + stream.next(); + token = nextSymbol(stream, new Context(nextSymbol, context)); + } else { + if (stream.eatWhile(/[^\s.{}\[\]()]/)) + token.name = 'string-2'; + else + token.name = 'meta'; + } + + } else if (aChar === '$') { + if (stream.next() === '<') { + stream.eatWhile(/[^\s>]/); + stream.next(); + } + token.name = 'string-2'; + + } else if (aChar === '|' && state.expectVariable) { + token.context = new Context(nextTemporaries, context); + + } else if (/[\[\]{}()]/.test(aChar)) { + token.name = 'bracket'; + token.eos = /[\[{(]/.test(aChar); + + if (aChar === '[') { + state.indentation++; + } else if (aChar === ']') { + state.indentation = Math.max(0, state.indentation - 1); + } + + } else if (specialChars.test(aChar)) { + stream.eatWhile(specialChars); + token.name = 'operator'; + token.eos = aChar !== ';'; // ; cascaded message expression + + } else if (/\d/.test(aChar)) { + stream.eatWhile(/[\w\d]/); + token.name = 'number'; + + } else if (/[\w_]/.test(aChar)) { + stream.eatWhile(/[\w\d_]/); + token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; + + } else { + token.eos = state.expectVariable; + } + + return token; + }; + + var nextComment = function(stream, context) { + stream.eatWhile(/[^"]/); + return new Token('comment', stream.eat('"') ? context.parent : context, true); + }; + + var nextString = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string', stream.eat('\'') ? context.parent : context, false); + }; + + var nextSymbol = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string-2', stream.eat('\'') ? context.parent : context, false); + }; + + var nextTemporaries = function(stream, context) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '|') { + token.context = context.parent; + token.eos = true; + + } else { + stream.eatWhile(/[^|]/); + token.name = 'variable'; + } + + return token; + }; + + return { + startState: function() { + return new State; + }, + + token: function(stream, state) { + state.userIndent(stream.indentation()); + + if (stream.eatSpace()) { + return null; + } + + var token = state.context.next(stream, state.context, state); + state.context = token.context; + state.expectVariable = token.eos; + + return token.name; + }, + + blankLine: function(state) { + state.userIndent(0); + }, + + indent: function(state, textAfter) { + var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; + return (state.indentation + i) * config.indentUnit; + }, + + electricChars: ']' + }; + +}); + +CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); + +}); diff --git a/libraries/codemirror/mode/smarty/index.html b/libraries/codemirror/mode/smarty/index.html new file mode 100644 index 0000000..b19c8f0 --- /dev/null +++ b/libraries/codemirror/mode/smarty/index.html @@ -0,0 +1,138 @@ + + +CodeMirror: Smarty mode + + + + + + + + + + +
          +

          Smarty mode

          +
          + +

          Mode for Smarty version 2 or 3, which allows for custom delimiter tags.

          + +

          Several configuration parameters are supported:

          + +
            +
          • leftDelimiter and rightDelimiter, + which should be strings that determine where the Smarty syntax + starts and ends.
          • +
          • version, which should be 2 or 3.
          • +
          • baseMode, which can be a mode spec + like "text/html" to set a different background mode.
          • +
          + +

          MIME types defined: text/x-smarty

          + +

          Smarty 2, custom delimiters

          + +
          + +

          Smarty 3

          + + + + + +
          diff --git a/libraries/codemirror/mode/smarty/smarty.js b/libraries/codemirror/mode/smarty/smarty.js new file mode 100644 index 0000000..6e0fbed --- /dev/null +++ b/libraries/codemirror/mode/smarty/smarty.js @@ -0,0 +1,225 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/** + * Smarty 2 and 3 mode. + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("smarty", function(config, parserConf) { + var rightDelimiter = parserConf.rightDelimiter || "}"; + var leftDelimiter = parserConf.leftDelimiter || "{"; + var version = parserConf.version || 2; + var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null"); + + var keyFunctions = ["debug", "extends", "function", "include", "literal"]; + var regs = { + operatorChars: /[+\-*&%=<>!?]/, + validIdentifier: /[a-zA-Z0-9_]/, + stringChar: /['"]/ + }; + + var last; + function cont(style, lastType) { + last = lastType; + return style; + } + + function chain(stream, state, parser) { + state.tokenize = parser; + return parser(stream, state); + } + + // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode + function doesNotCount(stream, pos) { + if (pos == null) pos = stream.pos; + return version === 3 && leftDelimiter == "{" && + (pos == stream.string.length || /\s/.test(stream.string.charAt(pos))); + } + + function tokenTop(stream, state) { + var string = stream.string; + for (var scan = stream.pos;;) { + var nextMatch = string.indexOf(leftDelimiter, scan); + scan = nextMatch + leftDelimiter.length; + if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break; + } + if (nextMatch == stream.pos) { + stream.match(leftDelimiter); + if (stream.eat("*")) { + return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter)); + } else { + state.depth++; + state.tokenize = tokenSmarty; + last = "startTag"; + return "tag"; + } + } + + if (nextMatch > -1) stream.string = string.slice(0, nextMatch); + var token = baseMode.token(stream, state.base); + if (nextMatch > -1) stream.string = string; + return token; + } + + // parsing Smarty content + function tokenSmarty(stream, state) { + if (stream.match(rightDelimiter, true)) { + if (version === 3) { + state.depth--; + if (state.depth <= 0) { + state.tokenize = tokenTop; + } + } else { + state.tokenize = tokenTop; + } + return cont("tag", null); + } + + if (stream.match(leftDelimiter, true)) { + state.depth++; + return cont("tag", "startTag"); + } + + var ch = stream.next(); + if (ch == "$") { + stream.eatWhile(regs.validIdentifier); + return cont("variable-2", "variable"); + } else if (ch == "|") { + return cont("operator", "pipe"); + } else if (ch == ".") { + return cont("operator", "property"); + } else if (regs.stringChar.test(ch)) { + state.tokenize = tokenAttribute(ch); + return cont("string", "string"); + } else if (regs.operatorChars.test(ch)) { + stream.eatWhile(regs.operatorChars); + return cont("operator", "operator"); + } else if (ch == "[" || ch == "]") { + return cont("bracket", "bracket"); + } else if (ch == "(" || ch == ")") { + return cont("bracket", "operator"); + } else if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + return cont("number", "number"); + } else { + + if (state.last == "variable") { + if (ch == "@") { + stream.eatWhile(regs.validIdentifier); + return cont("property", "property"); + } else if (ch == "|") { + stream.eatWhile(regs.validIdentifier); + return cont("qualifier", "modifier"); + } + } else if (state.last == "pipe") { + stream.eatWhile(regs.validIdentifier); + return cont("qualifier", "modifier"); + } else if (state.last == "whitespace") { + stream.eatWhile(regs.validIdentifier); + return cont("attribute", "modifier"); + } if (state.last == "property") { + stream.eatWhile(regs.validIdentifier); + return cont("property", null); + } else if (/\s/.test(ch)) { + last = "whitespace"; + return null; + } + + var str = ""; + if (ch != "/") { + str += ch; + } + var c = null; + while (c = stream.eat(regs.validIdentifier)) { + str += c; + } + for (var i=0, j=keyFunctions.length; i + +CodeMirror: Solr mode + + + + + + + + + +
          +

          Solr mode

          + +
          + +
          + + + +

          MIME types defined: text/x-solr.

          +
          diff --git a/libraries/codemirror/mode/solr/solr.js b/libraries/codemirror/mode/solr/solr.js new file mode 100644 index 0000000..f7f7087 --- /dev/null +++ b/libraries/codemirror/mode/solr/solr.js @@ -0,0 +1,104 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("solr", function() { + "use strict"; + + var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/; + var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/; + var isOperatorString = /^(OR|AND|NOT|TO)$/i; + + function isNumber(word) { + return parseFloat(word, 10).toString() === word; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + + if (!escaped) state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenOperator(operator) { + return function(stream, state) { + var style = "operator"; + if (operator == "+") + style += " positive"; + else if (operator == "-") + style += " negative"; + else if (operator == "|") + stream.eat(/\|/); + else if (operator == "&") + stream.eat(/\&/); + else if (operator == "^") + style += " boost"; + + state.tokenize = tokenBase; + return style; + }; + } + + function tokenWord(ch) { + return function(stream, state) { + var word = ch; + while ((ch = stream.peek()) && ch.match(isStringChar) != null) { + word += stream.next(); + } + + state.tokenize = tokenBase; + if (isOperatorString.test(word)) + return "operator"; + else if (isNumber(word)) + return "number"; + else if (stream.peek() == ":") + return "field"; + else + return "string"; + }; + } + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"') + state.tokenize = tokenString(ch); + else if (isOperatorChar.test(ch)) + state.tokenize = tokenOperator(ch); + else if (isStringChar.test(ch)) + state.tokenize = tokenWord(ch); + + return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null; + } + + return { + startState: function() { + return { + tokenize: tokenBase + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-solr", "solr"); + +}); diff --git a/libraries/codemirror/mode/soy/index.html b/libraries/codemirror/mode/soy/index.html new file mode 100644 index 0000000..f0216f0 --- /dev/null +++ b/libraries/codemirror/mode/soy/index.html @@ -0,0 +1,68 @@ + + +CodeMirror: Soy (Closure Template) mode + + + + + + + + + + + + + + +
          +

          Soy (Closure Template) mode

          +
          + + + +

          A mode for Closure Templates (Soy).

          +

          MIME type defined: text/x-soy.

          +
          diff --git a/libraries/codemirror/mode/soy/soy.js b/libraries/codemirror/mode/soy/soy.js new file mode 100644 index 0000000..79bfc24 --- /dev/null +++ b/libraries/codemirror/mode/soy/soy.js @@ -0,0 +1,198 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var indentingTags = ["template", "literal", "msg", "fallbackmsg", "let", "if", "elseif", + "else", "switch", "case", "default", "foreach", "ifempty", "for", + "call", "param", "deltemplate", "delcall", "log"]; + + CodeMirror.defineMode("soy", function(config) { + var textMode = CodeMirror.getMode(config, "text/plain"); + var modes = { + html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}), + attributes: textMode, + text: textMode, + uri: textMode, + css: CodeMirror.getMode(config, "text/css"), + js: CodeMirror.getMode(config, {name: "text/javascript", statementIndent: 2 * config.indentUnit}) + }; + + function last(array) { + return array[array.length - 1]; + } + + function tokenUntil(stream, state, untilRegExp) { + var oldString = stream.string; + var match = untilRegExp.exec(oldString.substr(stream.pos)); + if (match) { + // We don't use backUp because it backs up just the position, not the state. + // This uses an undocumented API. + stream.string = oldString.substr(0, stream.pos + match.index); + } + var result = stream.hideFirstChars(state.indent, function() { + return state.localMode.token(stream, state.localState); + }); + stream.string = oldString; + return result; + } + + return { + startState: function() { + return { + kind: [], + kindTag: [], + soyState: [], + indent: 0, + localMode: modes.html, + localState: CodeMirror.startState(modes.html) + }; + }, + + copyState: function(state) { + return { + tag: state.tag, // Last seen Soy tag. + kind: state.kind.concat([]), // Values of kind="" attributes. + kindTag: state.kindTag.concat([]), // Opened tags with kind="" attributes. + soyState: state.soyState.concat([]), + indent: state.indent, // Indentation of the following line. + localMode: state.localMode, + localState: CodeMirror.copyState(state.localMode, state.localState) + }; + }, + + token: function(stream, state) { + var match; + + switch (last(state.soyState)) { + case "comment": + if (stream.match(/^.*?\*\//)) { + state.soyState.pop(); + } else { + stream.skipToEnd(); + } + return "comment"; + + case "variable": + if (stream.match(/^}/)) { + state.indent -= 2 * config.indentUnit; + state.soyState.pop(); + return "variable-2"; + } + stream.next(); + return null; + + case "tag": + if (stream.match(/^\/?}/)) { + if (state.tag == "/template" || state.tag == "/deltemplate") state.indent = 0; + else state.indent -= (stream.current() == "/}" || indentingTags.indexOf(state.tag) == -1 ? 2 : 1) * config.indentUnit; + state.soyState.pop(); + return "keyword"; + } else if (stream.match(/^([\w?]+)(?==)/)) { + if (stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { + var kind = match[1]; + state.kind.push(kind); + state.kindTag.push(state.tag); + state.localMode = modes[kind] || modes.html; + state.localState = CodeMirror.startState(state.localMode); + } + return "attribute"; + } else if (stream.match(/^"/)) { + state.soyState.push("string"); + return "string"; + } + stream.next(); + return null; + + case "literal": + if (stream.match(/^(?=\{\/literal})/)) { + state.indent -= config.indentUnit; + state.soyState.pop(); + return this.token(stream, state); + } + return tokenUntil(stream, state, /\{\/literal}/); + + case "string": + if (stream.match(/^.*?"/)) { + state.soyState.pop(); + } else { + stream.skipToEnd(); + } + return "string"; + } + + if (stream.match(/^\/\*/)) { + state.soyState.push("comment"); + return "comment"; + } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { + return "comment"; + } else if (stream.match(/^\{\$[\w?]*/)) { + state.indent += 2 * config.indentUnit; + state.soyState.push("variable"); + return "variable-2"; + } else if (stream.match(/^\{literal}/)) { + state.indent += config.indentUnit; + state.soyState.push("literal"); + return "keyword"; + } else if (match = stream.match(/^\{([\/@\\]?[\w?]*)/)) { + if (match[1] != "/switch") + state.indent += (/^(\/|(else|elseif|case|default)$)/.test(match[1]) && state.tag != "switch" ? 1 : 2) * config.indentUnit; + state.tag = match[1]; + if (state.tag == "/" + last(state.kindTag)) { + // We found the tag that opened the current kind="". + state.kind.pop(); + state.kindTag.pop(); + state.localMode = modes[last(state.kind)] || modes.html; + state.localState = CodeMirror.startState(state.localMode); + } + state.soyState.push("tag"); + return "keyword"; + } + + return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); + }, + + indent: function(state, textAfter) { + var indent = state.indent, top = last(state.soyState); + if (top == "comment") return CodeMirror.Pass; + + if (top == "literal") { + if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; + } else { + if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; + if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; + if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; + if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; + } + if (indent && state.localMode.indent) + indent += state.localMode.indent(state.localState, textAfter); + return indent; + }, + + innerMode: function(state) { + if (state.soyState.length && last(state.soyState) != "literal") return null; + else return {state: state.localState, mode: state.localMode}; + }, + + electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, + lineComment: "//", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + fold: "indent" + }; + }, "htmlmixed"); + + CodeMirror.registerHelper("hintWords", "soy", indentingTags.concat( + ["delpackage", "namespace", "alias", "print", "css", "debugger"])); + + CodeMirror.defineMIME("text/x-soy", "soy"); +}); diff --git a/libraries/codemirror/mode/sparql/index.html b/libraries/codemirror/mode/sparql/index.html new file mode 100644 index 0000000..84ef4d3 --- /dev/null +++ b/libraries/codemirror/mode/sparql/index.html @@ -0,0 +1,61 @@ + + +CodeMirror: SPARQL mode + + + + + + + + + + +
          +

          SPARQL mode

          +
          + + +

          MIME types defined: application/sparql-query.

          + +
          diff --git a/libraries/codemirror/mode/sparql/sparql.js b/libraries/codemirror/mode/sparql/sparql.js new file mode 100644 index 0000000..90b08e1 --- /dev/null +++ b/libraries/codemirror/mode/sparql/sparql.js @@ -0,0 +1,180 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sparql", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", + "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", + "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", + "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", + "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", + "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", + "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", + "isblank", "isliteral", "a"]); + var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", + "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", + "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", + "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", + "true", "false", "with", + "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); + var operatorChars = /[*+\-<>=&|\^\/!\?]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "$" || ch == "?") { + if(ch == "?" && stream.match(/\s/, false)){ + return "operator"; + } + stream.match(/^[\w\d]*/); + return "variable-2"; + } + else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return "bracket"; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return "operator"; + } + else if (ch == ":") { + stream.eatWhile(/[\w\d\._\-]/); + return "atom"; + } + else if (ch == "@") { + stream.eatWhile(/[a-z\d\-]/i); + return "meta"; + } + else { + stream.eatWhile(/[_\w\d]/); + if (stream.eat(":")) { + stream.eatWhile(/[\w\d_\-]/); + return "atom"; + } + var word = stream.current(); + if (ops.test(word)) + return "builtin"; + else if (keywords.test(word)) + return "keyword"; + else + return "variable"; + } + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) { + popContext(state); + if (curPunc == "}" && state.context && state.context.type == "pattern") + popContext(state); + } + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("application/sparql-query", "sparql"); + +}); diff --git a/libraries/codemirror/mode/spreadsheet/index.html b/libraries/codemirror/mode/spreadsheet/index.html new file mode 100644 index 0000000..a52f76f --- /dev/null +++ b/libraries/codemirror/mode/spreadsheet/index.html @@ -0,0 +1,42 @@ + + +CodeMirror: Spreadsheet mode + + + + + + + + + + +
          +

          Spreadsheet mode

          +
          + + + +

          MIME types defined: text/x-spreadsheet.

          + +

          The Spreadsheet Mode

          +

          Created by Robert Plummer

          +
          diff --git a/libraries/codemirror/mode/spreadsheet/spreadsheet.js b/libraries/codemirror/mode/spreadsheet/spreadsheet.js new file mode 100644 index 0000000..6fab00f --- /dev/null +++ b/libraries/codemirror/mode/spreadsheet/spreadsheet.js @@ -0,0 +1,109 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("spreadsheet", function () { + return { + startState: function () { + return { + stringType: null, + stack: [] + }; + }, + token: function (stream, state) { + if (!stream) return; + + //check for state changes + if (state.stack.length === 0) { + //strings + if ((stream.peek() == '"') || (stream.peek() == "'")) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.stack.unshift("string"); + } + } + + //return state + //stack has + switch (state.stack[0]) { + case "string": + while (state.stack[0] === "string" && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.stack.shift(); // Clear flag + } else if (stream.peek() === "\\") { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return "string"; + + case "characterClass": + while (state.stack[0] === "characterClass" && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) + state.stack.shift(); + } + return "operator"; + } + + var peek = stream.peek(); + + //no stack + switch (peek) { + case "[": + stream.next(); + state.stack.unshift("characterClass"); + return "bracket"; + case ":": + stream.next(); + return "operator"; + case "\\": + if (stream.match(/\\[a-z]+/)) return "string-2"; + else return null; + case ".": + case ",": + case ";": + case "*": + case "-": + case "+": + case "^": + case "<": + case "/": + case "=": + stream.next(); + return "atom"; + case "$": + stream.next(); + return "builtin"; + } + + if (stream.match(/\d+/)) { + if (stream.match(/^\w+/)) return "error"; + return "number"; + } else if (stream.match(/^[a-zA-Z_]\w*/)) { + if (stream.match(/(?=[\(.])/, false)) return "keyword"; + return "variable-2"; + } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { + stream.next(); + return "bracket"; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; + }); + + CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); +}); diff --git a/libraries/codemirror/mode/sql/index.html b/libraries/codemirror/mode/sql/index.html new file mode 100644 index 0000000..a0d8d9e --- /dev/null +++ b/libraries/codemirror/mode/sql/index.html @@ -0,0 +1,84 @@ + + +CodeMirror: SQL Mode for CodeMirror + + + + + + + + + + + + +
          +

          SQL Mode for CodeMirror

          +
          + +
          +

          MIME types defined: + text/x-sql, + text/x-mysql, + text/x-mariadb, + text/x-cassandra, + text/x-plsql, + text/x-mssql, + text/x-hive. +

          + + +
          diff --git a/libraries/codemirror/mode/sql/sql.js b/libraries/codemirror/mode/sql/sql.js new file mode 100644 index 0000000..86c68f7 --- /dev/null +++ b/libraries/codemirror/mode/sql/sql.js @@ -0,0 +1,391 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sql", function(config, parserConfig) { + "use strict"; + + var client = parserConfig.client || {}, + atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, + builtin = parserConfig.builtin || {}, + keywords = parserConfig.keywords || {}, + operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, + support = parserConfig.support || {}, + hooks = parserConfig.hooks || {}, + dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; + + function tokenBase(stream, state) { + var ch = stream.next(); + + // call hooks from the mime type + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + + if (support.hexNumber == true && + ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + // hex + // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + return "number"; + } else if (support.binaryNumber == true && + (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + || (ch == "0" && stream.match(/^b[01]+/)))) { + // bitstring + // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + return "number"; + } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { + // numbers + // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); + support.decimallessFloat == true && stream.eat('.'); + return "number"; + } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { + // placeholders + return "variable-3"; + } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { + // strings + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) + || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) + && (stream.peek() == "'" || stream.peek() == '"'))) { + // charset casting: _utf8'str', N'str', n'str' + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + return "keyword"; + } else if (/^[\(\),\;\[\]]/.test(ch)) { + // no highlightning + return null; + } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { + // 1-line comment + stream.skipToEnd(); + return "comment"; + } else if ((support.commentHash && ch == "#") + || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { + // 1-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + stream.skipToEnd(); + return "comment"; + } else if (ch == "/" && stream.eat("*")) { + // multi-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } else if (ch == ".") { + // .1 for 0.1 + if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { + return "number"; + } + // .table_name (ODBC) + // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { + return "variable-2"; + } + } else if (operatorChars.test(ch)) { + // operators + stream.eatWhile(operatorChars); + return null; + } else if (ch == '{' && + (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { + // dates (weird ODBC syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + return "number"; + } else { + stream.eatWhile(/^[_\w\d]/); + var word = stream.current().toLowerCase(); + // dates (standard SQL syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) + return "number"; + if (atoms.hasOwnProperty(word)) return "atom"; + if (builtin.hasOwnProperty(word)) return "builtin"; + if (keywords.hasOwnProperty(word)) return "keyword"; + if (client.hasOwnProperty(word)) return "string-2"; + return null; + } + } + + // 'string', with char specified in quote escaped by '\' + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + function tokenComment(stream, state) { + while (true) { + if (stream.skipTo("*")) { + stream.next(); + if (stream.eat("/")) { + state.tokenize = tokenBase; + break; + } + } else { + stream.skipToEnd(); + break; + } + } + return "comment"; + } + + function pushContext(stream, state, type) { + state.context = { + prev: state.context, + indent: stream.indentation(), + col: stream.column(), + type: type + }; + } + + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, context: null}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) + state.context.align = false; + } + if (stream.eatSpace()) return null; + + var style = state.tokenize(stream, state); + if (style == "comment") return style; + + if (state.context && state.context.align == null) + state.context.align = true; + + var tok = stream.current(); + if (tok == "(") + pushContext(stream, state, ")"); + else if (tok == "[") + pushContext(stream, state, "]"); + else if (state.context && state.context.type == tok) + popContext(state); + return style; + }, + + indent: function(state, textAfter) { + var cx = state.context; + if (!cx) return CodeMirror.Pass; + var closing = textAfter.charAt(0) == cx.type; + if (cx.align) return cx.col + (closing ? 0 : 1); + else return cx.indent + (closing ? 0 : config.indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null + }; +}); + +(function() { + "use strict"; + + // `identifier` + function hookIdentifier(stream) { + // MySQL/MariaDB identifiers + // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "`" && !stream.eat("`")) return "variable-2"; + } + stream.backUp(stream.current().length - 1); + return stream.eatWhile(/\w/) ? "variable-2" : null; + } + + // variable token + function hookVar(stream) { + // variables + // @@prefix.varName @varName + // varName can be quoted with ` or ' or " + // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + if (stream.eat("@")) { + stream.match(/^session\./); + stream.match(/^local\./); + stream.match(/^global\./); + } + + if (stream.eat("'")) { + stream.match(/^.*'/); + return "variable-2"; + } else if (stream.eat('"')) { + stream.match(/^.*"/); + return "variable-2"; + } else if (stream.eat("`")) { + stream.match(/^.*`/); + return "variable-2"; + } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { + return "variable-2"; + } + return null; + }; + + // short client keyword token + function hookClient(stream) { + // \N means NULL + // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + if (stream.eat("N")) { + return "atom"; + } + // \g, etc + // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; + } + + // these keywords are used by all SQL dialects (however, a mode can still overwrite it) + var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit"; + + // turn a space-separated list into an array + function set(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + CodeMirror.defineMIME("text/x-sql", { + name: "sql", + keywords: set(sqlKeywords + "begin"), + builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-mssql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare"), + builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), + hooks: { + "@": hookVar + } + }); + + CodeMirror.defineMIME("text/x-mysql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + CodeMirror.defineMIME("text/x-mariadb", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + // the query language used by Apache Cassandra is called CQL, but this mime type + // is called Cassandra to avoid confusion with Contextual Query Language + CodeMirror.defineMIME("text/x-cassandra", { + name: "sql", + client: { }, + keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), + builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), + atoms: set("false true infinity NaN"), + operatorChars: /^[<>=]/, + dateSQL: { }, + support: set("commentSlashSlash decimallessFloat"), + hooks: { } + }); + + // this is based on Peter Raganitsch's 'plsql' mode + CodeMirror.defineMIME("text/x-plsql", { + name: "sql", + client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), + keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), + builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least lenght lenghtb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), + operatorChars: /^[*+\-%<>!=~]/, + dateSQL: set("date time timestamp"), + support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") + }); + + // Created to support specific hive keywords + CodeMirror.defineMIME("text/x-hive", { + name: "sql", + keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), + builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); +}()); + +}); + +/* + How Properties of Mime Types are used by SQL Mode + ================================================= + + keywords: + A list of keywords you want to be highlighted. + builtin: + A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). + operatorChars: + All characters that must be handled as operators. + client: + Commands parsed and executed by the client (not the server). + support: + A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. + * ODBCdotTable: .tableName + * zerolessFloat: .1 + * doubleQuote + * nCharCast: N'string' + * charsetCast: _utf8'string' + * commentHash: use # char for comments + * commentSlashSlash: use // for comments + * commentSpaceRequired: require a space after -- for comments + atoms: + Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: + UNKNOWN, INFINITY, UNDERFLOW, NaN... + dateSQL: + Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. +*/ diff --git a/libraries/codemirror/mode/stex/index.html b/libraries/codemirror/mode/stex/index.html new file mode 100644 index 0000000..14679da --- /dev/null +++ b/libraries/codemirror/mode/stex/index.html @@ -0,0 +1,110 @@ + + +CodeMirror: sTeX mode + + + + + + + + + +
          +

          sTeX mode

          +
          + + +

          MIME types defined: text/x-stex.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/stex/stex.js b/libraries/codemirror/mode/stex/stex.js new file mode 100644 index 0000000..835ed46 --- /dev/null +++ b/libraries/codemirror/mode/stex/stex.js @@ -0,0 +1,251 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* + * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) + * Licence: MIT + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("stex", function() { + "use strict"; + + function pushCommand(state, command) { + state.cmdState.push(command); + } + + function peekCommand(state) { + if (state.cmdState.length > 0) { + return state.cmdState[state.cmdState.length - 1]; + } else { + return null; + } + } + + function popCommand(state) { + var plug = state.cmdState.pop(); + if (plug) { + plug.closeBracket(); + } + } + + // returns the non-default plugin closest to the end of the list + function getMostPowerful(state) { + var context = state.cmdState; + for (var i = context.length - 1; i >= 0; i--) { + var plug = context[i]; + if (plug.name == "DEFAULT") { + continue; + } + return plug; + } + return { styleIdentifier: function() { return null; } }; + } + + function addPluginPattern(pluginName, cmdStyle, styles) { + return function () { + this.name = pluginName; + this.bracketNo = 0; + this.style = cmdStyle; + this.styles = styles; + this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin + + this.styleIdentifier = function() { + return this.styles[this.bracketNo - 1] || null; + }; + this.openBracket = function() { + this.bracketNo++; + return "bracket"; + }; + this.closeBracket = function() {}; + }; + } + + var plugins = {}; + + plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); + plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); + plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); + plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); + plugins["end"] = addPluginPattern("end", "tag", ["atom"]); + + plugins["DEFAULT"] = function () { + this.name = "DEFAULT"; + this.style = "tag"; + + this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; + }; + + function setState(state, f) { + state.f = f; + } + + // called when in a normal (no environment) context + function normal(source, state) { + var plug; + // Do we look like '\command' ? If so, attempt to apply the plugin 'command' + if (source.match(/^\\[a-zA-Z@]+/)) { + var cmdName = source.current().slice(1); + plug = plugins[cmdName] || plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + setState(state, beginParams); + return plug.style; + } + + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + + // white space control characters + if (source.match(/^\\[,;!\/\\]/)) { + return "tag"; + } + + // find if we're starting various math modes + if (source.match("\\[")) { + setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); + return "keyword"; + } + if (source.match("$$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); + return "keyword"; + } + if (source.match("$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$"); }); + return "keyword"; + } + + var ch = source.next(); + if (ch == "%") { + source.skipToEnd(); + return "comment"; + } else if (ch == '}' || ch == ']') { + plug = peekCommand(state); + if (plug) { + plug.closeBracket(ch); + setState(state, beginParams); + } else { + return "error"; + } + return "bracket"; + } else if (ch == '{' || ch == '[') { + plug = plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + return "bracket"; + } else if (/\d/.test(ch)) { + source.eatWhile(/[\w.%]/); + return "atom"; + } else { + source.eatWhile(/[\w\-_]/); + plug = getMostPowerful(state); + if (plug.name == 'begin') { + plug.argument = source.current(); + } + return plug.styleIdentifier(); + } + } + + function inMathMode(source, state, endModeSeq) { + if (source.eatSpace()) { + return null; + } + if (source.match(endModeSeq)) { + setState(state, normal); + return "keyword"; + } + if (source.match(/^\\[a-zA-Z@]+/)) { + return "tag"; + } + if (source.match(/^[a-zA-Z]+/)) { + return "variable-2"; + } + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + // white space control characters + if (source.match(/^\\[,;!\/]/)) { + return "tag"; + } + // special math-mode characters + if (source.match(/^[\^_&]/)) { + return "tag"; + } + // non-special characters + if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { + return null; + } + if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { + return "number"; + } + var ch = source.next(); + if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { + return "bracket"; + } + + if (ch == "%") { + source.skipToEnd(); + return "comment"; + } + return "error"; + } + + function beginParams(source, state) { + var ch = source.peek(), lastPlug; + if (ch == '{' || ch == '[') { + lastPlug = peekCommand(state); + lastPlug.openBracket(ch); + source.eat(ch); + setState(state, normal); + return "bracket"; + } + if (/[ \t\r]/.test(ch)) { + source.eat(ch); + return null; + } + setState(state, normal); + popCommand(state); + + return normal(source, state); + } + + return { + startState: function() { + return { + cmdState: [], + f: normal + }; + }, + copyState: function(s) { + return { + cmdState: s.cmdState.slice(), + f: s.f + }; + }, + token: function(stream, state) { + return state.f(stream, state); + }, + blankLine: function(state) { + state.f = normal; + state.cmdState.length = 0; + }, + lineComment: "%" + }; + }); + + CodeMirror.defineMIME("text/x-stex", "stex"); + CodeMirror.defineMIME("text/x-latex", "stex"); + +}); diff --git a/libraries/codemirror/mode/stex/test.js b/libraries/codemirror/mode/stex/test.js new file mode 100644 index 0000000..22f027e --- /dev/null +++ b/libraries/codemirror/mode/stex/test.js @@ -0,0 +1,123 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "stex"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("word", + "foo"); + + MT("twoWords", + "foo bar"); + + MT("beginEndDocument", + "[tag \\begin][bracket {][atom document][bracket }]", + "[tag \\end][bracket {][atom document][bracket }]"); + + MT("beginEndEquation", + "[tag \\begin][bracket {][atom equation][bracket }]", + " E=mc^2", + "[tag \\end][bracket {][atom equation][bracket }]"); + + MT("beginModule", + "[tag \\begin][bracket {][atom module][bracket }[[]]]"); + + MT("beginModuleId", + "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); + + MT("importModule", + "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); + + MT("importModulePath", + "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); + + MT("psForPDF", + "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); + + MT("comment", + "[comment % foo]"); + + MT("tagComment", + "[tag \\item][comment % bar]"); + + MT("commentTag", + " [comment % \\item]"); + + MT("commentLineBreak", + "[comment %]", + "foo"); + + MT("tagErrorCurly", + "[tag \\begin][error }][bracket {]"); + + MT("tagErrorSquare", + "[tag \\item][error ]]][bracket {]"); + + MT("commentCurly", + "[comment % }]"); + + MT("tagHash", + "the [tag \\#] key"); + + MT("tagNumber", + "a [tag \\$][atom 5] stetson"); + + MT("tagPercent", + "[atom 100][tag \\%] beef"); + + MT("tagAmpersand", + "L [tag \\&] N"); + + MT("tagUnderscore", + "foo[tag \\_]bar"); + + MT("tagBracketOpen", + "[tag \\emph][bracket {][tag \\{][bracket }]"); + + MT("tagBracketClose", + "[tag \\emph][bracket {][tag \\}][bracket }]"); + + MT("tagLetterNumber", + "section [tag \\S][atom 1]"); + + MT("textTagNumber", + "para [tag \\P][atom 2]"); + + MT("thinspace", + "x[tag \\,]y"); + + MT("thickspace", + "x[tag \\;]y"); + + MT("negativeThinspace", + "x[tag \\!]y"); + + MT("periodNotSentence", + "J.\\ L.\\ is"); + + MT("periodSentence", + "X[tag \\@]. The"); + + MT("italicCorrection", + "[bracket {][tag \\em] If[tag \\/][bracket }] I"); + + MT("tagBracket", + "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); + + MT("inlineMathTagFollowedByNumber", + "[keyword $][tag \\pi][number 2][keyword $]"); + + MT("inlineMath", + "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); + + MT("displayMath", + "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); + + MT("mathWithComment", + "[keyword $][variable-2 x] [comment % $]", + "[variable-2 y][keyword $] other text"); + + MT("lineBreakArgument", + "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); +})(); diff --git a/libraries/codemirror/mode/stylus/index.html b/libraries/codemirror/mode/stylus/index.html new file mode 100644 index 0000000..862c18f --- /dev/null +++ b/libraries/codemirror/mode/stylus/index.html @@ -0,0 +1,106 @@ + + +CodeMirror: Stylus mode + + + + + + + + + + + +
          +

          Stylus mode

          +
          +
          + + +

          MIME types defined: text/x-styl.

          +

          Created by Dmitry Kiselyov

          +
          diff --git a/libraries/codemirror/mode/stylus/stylus.js b/libraries/codemirror/mode/stylus/stylus.js new file mode 100644 index 0000000..662cd03 --- /dev/null +++ b/libraries/codemirror/mode/stylus/stylus.js @@ -0,0 +1,769 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Stylus mode created by Dmitry Kiselyov http://git.io/AaRB + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("stylus", function(config) { + var indentUnit = config.indentUnit, + tagKeywords = keySet(tagKeywords_), + tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, + propertyKeywords = keySet(propertyKeywords_), + nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), + valueKeywords = keySet(valueKeywords_), + colorKeywords = keySet(colorKeywords_), + documentTypes = keySet(documentTypes_), + documentTypesRegexp = wordRegexp(documentTypes_), + mediaFeatures = keySet(mediaFeatures_), + mediaTypes = keySet(mediaTypes_), + fontProperties = keySet(fontProperties_), + operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, + wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), + blockKeywords = keySet(blockKeywords_), + vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), + commonAtoms = keySet(commonAtoms_), + firstWordMatch = "", + states = {}, + ch, + style, + type, + override; + + /** + * Tokenizers + */ + function tokenBase(stream, state) { + firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); + state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; + state.context.line.indent = stream.indentation(); + ch = stream.peek(); + + // Line comment + if (stream.match("//")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } + // Block comment + if (stream.match("/*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + // String + if (ch == "\"" || ch == "'") { + stream.next(); + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + // Def + if (ch == "@") { + stream.next(); + stream.eatWhile(/[\w\\-]/); + return ["def", stream.current()]; + } + // ID selector or Hex color + if (ch == "#") { + stream.next(); + // Hex color + if (stream.match(/^[0-9a-f]{6}|[0-9a-f]{3}/i)) { + return ["atom", "atom"]; + } + // ID selector + if (stream.match(/^[a-z][\w-]*/i)) { + return ["builtin", "hash"]; + } + } + // Vendor prefixes + if (stream.match(vendorPrefixesRegexp)) { + return ["meta", "vendor-prefixes"]; + } + // Numbers + if (stream.match(/^-?[0-9]?\.?[0-9]/)) { + stream.eatWhile(/[a-z%]/i); + return ["number", "unit"]; + } + // !important|optional + if (ch == "!") { + stream.next(); + return [stream.match(/^(important|optional)/i) ? "keyword": "operator", "important"]; + } + // Class + if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) { + return ["qualifier", "qualifier"]; + } + // url url-prefix domain regexp + if (stream.match(documentTypesRegexp)) { + if (stream.peek() == "(") state.tokenize = tokenParenthesized; + return ["property", "word"]; + } + // Mixins / Functions + if (stream.match(/^[a-z][\w-]*\(/i)) { + stream.backUp(1); + return ["keyword", "mixin"]; + } + // Block mixins + if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { + stream.backUp(1); + return ["keyword", "block-mixin"]; + } + // Parent Reference BEM naming + if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) { + return ["qualifier", "qualifier"]; + } + // / Root Reference & Parent Reference + if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { + stream.backUp(1); + return ["variable-3", "reference"]; + } + if (stream.match(/^&{1}\s*$/)) { + return ["variable-3", "reference"]; + } + // Word operator + if (stream.match(wordOperatorKeywordsRegexp)) { + return ["operator", "operator"]; + } + // Word + if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { + // Variable + if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { + if (!wordIsTag(stream.current())) { + stream.match(/\./); + return ["variable-2", "variable-name"]; + } + } + return ["variable-2", "word"]; + } + // Operators + if (stream.match(operatorsRegexp)) { + return ["operator", stream.current()]; + } + // Delimiters + if (/[:;,{}\[\]\(\)]/.test(ch)) { + stream.next(); + return [null, ch]; + } + // Non-detected items + stream.next(); + return [null, null]; + } + + /** + * Token comment + */ + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + /** + * Token string + */ + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ["string", "string"]; + }; + } + + /** + * Token parenthesized + */ + function tokenParenthesized(stream, state) { + stream.next(); // Must be "(" + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return [null, "("]; + } + + /** + * Context management + */ + function Context(type, indent, prev, line) { + this.type = type; + this.indent = indent; + this.prev = prev; + this.line = line || {firstWord: "", indent: 0}; + } + + function pushContext(state, stream, type, indent) { + indent = indent >= 0 ? indent : indentUnit; + state.context = new Context(type, stream.indentation() + indent, state.context); + return type; + } + + function popContext(state, currentIndent) { + var contextIndent = state.context.indent - indentUnit; + currentIndent = currentIndent || false; + state.context = state.context.prev; + if (currentIndent) state.context.indent = contextIndent; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + + /** + * Parser + */ + function wordIsTag(word) { + return word.toLowerCase() in tagKeywords; + } + + function wordIsProperty(word) { + word = word.toLowerCase(); + return word in propertyKeywords || word in fontProperties; + } + + function wordIsBlock(word) { + return word.toLowerCase() in blockKeywords; + } + + function wordIsVendorPrefix(word) { + return word.toLowerCase().match(vendorPrefixesRegexp); + } + + function wordAsValue(word) { + var wordLC = word.toLowerCase(); + var override = "variable-2"; + if (wordIsTag(word)) override = "tag"; + else if (wordIsBlock(word)) override = "block-keyword"; + else if (wordIsProperty(word)) override = "property"; + else if (wordLC in valueKeywords || wordLC in commonAtoms) override = "atom"; + else if (wordLC == "return" || wordLC in colorKeywords) override = "keyword"; + + // Font family + else if (word.match(/^[A-Z]/)) override = "string"; + return override; + } + + function typeIsBlock(type, stream) { + return ((endOfLine(stream) && (type == "{" || type == "]" || type == "hash" || type == "qualifier")) || type == "block-mixin"); + } + + function typeIsInterpolation(type, stream) { + return type == "{" && stream.match(/^\s*\$?[\w-]+/i, false); + } + + function typeIsPseudo(type, stream) { + return type == ":" && stream.match(/^[a-z-]+/, false); + } + + function startOfLine(stream) { + return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); + } + + function endOfLine(stream) { + return stream.eol() || stream.match(/^\s*$/, false); + } + + function firstWordOfLine(line) { + var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; + var result = typeof line == "string" ? line.match(re) : line.string.match(re); + return result ? result[0].replace(/^\s*/, "") : ""; + } + + + /** + * Block + */ + states.block = function(type, stream, state) { + if ((type == "comment" && startOfLine(stream)) || + (type == "," && endOfLine(stream)) || + type == "mixin") { + return pushContext(state, stream, "block", 0); + } + if (typeIsInterpolation(type, stream)) { + return pushContext(state, stream, "interpolation"); + } + if (endOfLine(stream) && type == "]") { + if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) { + return pushContext(state, stream, "block", 0); + } + } + if (typeIsBlock(type, stream, state)) { + return pushContext(state, stream, "block"); + } + if (type == "}" && endOfLine(stream)) { + return pushContext(state, stream, "block", 0); + } + if (type == "variable-name") { + if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) { + return pushContext(state, stream, "variableName"); + } + else { + return pushContext(state, stream, "variableName", 0); + } + } + if (type == "=") { + if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "*") { + if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/,false)) { + override = "tag"; + return pushContext(state, stream, "block"); + } + } + if (typeIsPseudo(type, stream)) { + return pushContext(state, stream, "pseudo"); + } + if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { + return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); + } + if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { + return pushContext(state, stream, "keyframes"); + } + if (/@extends?/.test(type)) { + return pushContext(state, stream, "extend", 0); + } + if (type && type.charAt(0) == "@") { + + // Property Lookup + if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { + override = "variable-2"; + return "block"; + } + if (/(@import|@require|@charset)/.test(type)) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "reference" && endOfLine(stream)) { + return pushContext(state, stream, "block"); + } + if (type == "(") { + return pushContext(state, stream, "parens"); + } + + if (type == "vendor-prefixes") { + return pushContext(state, stream, "vendorPrefixes"); + } + if (type == "word") { + var word = stream.current(); + override = wordAsValue(word); + + if (override == "property") { + if (startOfLine(stream)) { + return pushContext(state, stream, "block", 0); + } else { + override = "atom"; + return "block"; + } + } + + if (override == "tag") { + + // tag is a css value + if (/embed|menu|pre|progress|sub|table/.test(word)) { + if (wordIsProperty(firstWordOfLine(stream))) { + override = "atom"; + return "block"; + } + } + + // tag is an attribute + if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word +"\\s*\\]"))) { + override = "atom"; + return "block"; + } + + // tag is a variable + if (tagVariablesRegexp.test(word)) { + if ((startOfLine(stream) && stream.string.match(/=/)) || + (!startOfLine(stream) && + !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && + !wordIsTag(firstWordOfLine(stream)))) { + override = "variable-2"; + if (wordIsBlock(firstWordOfLine(stream))) return "block"; + return pushContext(state, stream, "block", 0); + } + } + + if (endOfLine(stream)) return pushContext(state, stream, "block"); + } + if (override == "block-keyword") { + override = "keyword"; + + // Postfix conditionals + if (stream.current(/(if|unless)/) && !startOfLine(stream)) { + return "block"; + } + return pushContext(state, stream, "block"); + } + if (word == "return") return pushContext(state, stream, "block", 0); + + // Placeholder selector + if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) { + return pushContext(state, stream, "block"); + } + } + return state.context.type; + }; + + + /** + * Parens + */ + states.parens = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "parens"); + if (type == ")") { + if (state.context.prev.type == "parens") { + return popContext(state); + } + if ((stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream)) || + wordIsBlock(firstWordOfLine(stream)) || + /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || + (!stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && + wordIsTag(firstWordOfLine(stream)))) { + return pushContext(state, stream, "block"); + } + if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || + stream.string.match(/^\s*(\(|\)|[0-9])/) || + stream.string.match(/^\s+[a-z][\w-]*\(/i) || + stream.string.match(/^\s+[\$-]?[a-z]/i)) { + return pushContext(state, stream, "block", 0); + } + if (endOfLine(stream)) return pushContext(state, stream, "block"); + else return pushContext(state, stream, "block", 0); + } + if (type && type.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) { + override = "variable-2"; + } + if (type == "word") { + var word = stream.current(); + override = wordAsValue(word); + if (override == "tag" && tagVariablesRegexp.test(word)) { + override = "variable-2"; + } + if (override == "property" || word == "to") override = "atom"; + } + if (type == "variable-name") { + return pushContext(state, stream, "variableName"); + } + if (typeIsPseudo(type, stream)) { + return pushContext(state, stream, "pseudo"); + } + return state.context.type; + }; + + + /** + * Vendor prefixes + */ + states.vendorPrefixes = function(type, stream, state) { + if (type == "word") { + override = "property"; + return pushContext(state, stream, "block", 0); + } + return popContext(state); + }; + + + /** + * Pseudo + */ + states.pseudo = function(type, stream, state) { + if (!wordIsProperty(firstWordOfLine(stream.string))) { + stream.match(/^[a-z-]+/); + override = "variable-3"; + if (endOfLine(stream)) return pushContext(state, stream, "block"); + return popContext(state); + } + return popAndPass(type, stream, state); + }; + + + /** + * atBlock + */ + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (typeIsBlock(type, stream, state)) { + return pushContext(state, stream, "block"); + } + if (typeIsInterpolation(type, stream)) { + return pushContext(state, stream, "interpolation"); + } + if (type == "word") { + var word = stream.current().toLowerCase(); + if (/^(only|not|and|or)$/.test(word)) + override = "keyword"; + else if (documentTypes.hasOwnProperty(word)) + override = "tag"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else override = wordAsValue(stream.current()); + if (override == "tag" && endOfLine(stream)) { + return pushContext(state, stream, "block"); + } + } + if (type == "operator" && /^(not|and|or)$/.test(stream.current())) { + override = "keyword"; + } + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == "{" || type == "}") return state.context.type; + if (type == ")") { + if (endOfLine(stream)) return pushContext(state, stream, "block"); + else return pushContext(state, stream, "atBlock"); + } + if (type == "word") { + var word = stream.current().toLowerCase(); + override = wordAsValue(word); + if (/^(max|min)/.test(word)) override = "property"; + if (override == "tag") { + tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; + } + return state.context.type; + } + return states.atBlock(type, stream, state); + }; + + + /** + * Keyframes + */ + states.keyframes = function(type, stream, state) { + if (stream.indentation() == "0" && ((type == "}" && startOfLine(stream)) || type == "]" || type == "hash" + || type == "qualifier" || wordIsTag(stream.current()))) { + return popAndPass(type, stream, state); + } + if (type == "{") return pushContext(state, stream, "keyframes"); + if (type == "}") { + if (startOfLine(stream)) return popContext(state, true); + else return pushContext(state, stream, "keyframes"); + } + if (type == "unit" && /^[0-9]+\%$/.test(stream.current())) { + return pushContext(state, stream, "keyframes"); + } + if (type == "word") { + override = wordAsValue(stream.current()); + if (override == "block-keyword") { + override = "keyword"; + return pushContext(state, stream, "keyframes"); + } + } + if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { + return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); + } + if (type == "mixin") { + return pushContext(state, stream, "block", 0); + } + return state.context.type; + }; + + + /** + * Interpolation + */ + states.interpolation = function(type, stream, state) { + if (type == "{") popContext(state) && pushContext(state, stream, "block"); + if (type == "}") { + if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || + (stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) { + return pushContext(state, stream, "block"); + } + if (!stream.string.match(/^(\{|\s*\&)/) || + stream.match(/\s*[\w-]/,false)) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "variable-name") { + return pushContext(state, stream, "variableName", 0); + } + if (type == "word") { + override = wordAsValue(stream.current()); + if (override == "tag") override = "atom"; + } + return state.context.type; + }; + + + /** + * Extend/s + */ + states.extend = function(type, stream, state) { + if (type == "[" || type == "=") return "extend"; + if (type == "]") return popContext(state); + if (type == "word") { + override = wordAsValue(stream.current()); + return "extend"; + } + return popContext(state); + }; + + + /** + * Variable name + */ + states.variableName = function(type, stream, state) { + if (type == "string" || type == "[" || type == "]" || stream.current().match(/^(\.|\$)/)) { + if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; + return "variableName"; + } + return popAndPass(type, stream, state); + }; + + + return { + startState: function(base) { + return { + tokenize: null, + state: "block", + context: new Context("block", base || 0, null) + }; + }, + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + state.state = states[state.state](type, stream, state); + return override; + }, + indent: function(state, textAfter, line) { + + var cx = state.context, + ch = textAfter && textAfter.charAt(0), + indent = cx.indent, + lineFirstWord = firstWordOfLine(textAfter), + lineIndent = line.length - line.replace(/^\s*/, "").length, + prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", + prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; + + if (cx.prev && + (ch == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || + ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at"))) { + indent = cx.indent - indentUnit; + cx = cx.prev; + } else if (!(/(\})/.test(ch))) { + if (/@|\$|\d/.test(ch) || + /^\{/.test(textAfter) || +/^\s*\/(\/|\*)/.test(textAfter) || + /^\s*\/\*/.test(prevLineFirstWord) || + /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || +/^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || +/^return/.test(textAfter) || + wordIsBlock(lineFirstWord)) { + indent = lineIndent; + } else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch) || wordIsTag(lineFirstWord)) { + if (/\,\s*$/.test(prevLineFirstWord)) { + indent = prevLineIndent; + } else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) { + indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; + } else { + indent = lineIndent; + } + } else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) { + if (wordIsBlock(prevLineFirstWord)) { + indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; + } else if (/^\{/.test(prevLineFirstWord)) { + indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; + } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) { + indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; + } else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || + /=\s*$/.test(prevLineFirstWord) || + wordIsTag(prevLineFirstWord) || + /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) { + indent = prevLineIndent + indentUnit; + } else { + indent = lineIndent; + } + } + } + return indent; + }, + electricChars: "}", + lineComment: "//", + fold: "indent" + }; + }); + + // developer.mozilla.org/en-US/docs/Web/HTML/Element + var tagKeywords_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi", "bdo","bgsound","blockquote","body","br","button","canvas","caption","cite", "code","col","colgroup","data","datalist","dd","del","details","dfn","div", "dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1", "h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe", "img","input","ins","kbd","keygen","label","legend","li","link","main","map", "mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes", "noscript","object","ol","optgroup","option","output","p","param","pre", "progress","q","rp","rt","ruby","s","samp","script","section","select", "small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track", "u","ul","var","video"]; + + // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js + var documentTypes_ = ["domain", "regexp", "url", "url-prefix"]; + var mediaTypes_ = ["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]; + var mediaFeatures_ = ["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]; + var propertyKeywords_ = ["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"]; + var nonStandardPropertyKeywords_ = ["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"]; + var fontProperties_ = ["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]; + var colorKeywords_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; + var valueKeywords_ = ["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around"]; + + var wordOperatorKeywords_ = ["in","and","or","not","is not","is a","is","isnt","defined","if unless"], + blockKeywords_ = ["for","if","else","unless", "from", "to"], + commonAtoms_ = ["null","true","false","href","title","type","not-allowed","readonly","disabled"], + commonDef_ = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]; + + var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_, + propertyKeywords_,nonStandardPropertyKeywords_, + colorKeywords_,valueKeywords_,fontProperties_, + wordOperatorKeywords_,blockKeywords_, + commonAtoms_,commonDef_); + + function wordRegexp(words) { + words = words.sort(function(a,b){return b > a;}); + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) keys[array[i]] = true; + return keys; + } + + function escapeRegExp(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + } + + CodeMirror.registerHelper("hintWords", "stylus", hintWords); + CodeMirror.defineMIME("text/x-styl", "stylus"); +}); diff --git a/libraries/codemirror/mode/swift/index.html b/libraries/codemirror/mode/swift/index.html new file mode 100644 index 0000000..109f3fd --- /dev/null +++ b/libraries/codemirror/mode/swift/index.html @@ -0,0 +1,88 @@ + + +CodeMirror: Swift mode + + + + + + + + + + +
          +

          Swift mode

          +
          + + + +

          A simple mode for Swift

          + +

          MIME types defined: text/x-swift (Swift code)

          +
          diff --git a/libraries/codemirror/mode/swift/swift.js b/libraries/codemirror/mode/swift/swift.js new file mode 100644 index 0000000..86d1c6b --- /dev/null +++ b/libraries/codemirror/mode/swift/swift.js @@ -0,0 +1,202 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Swift mode created by Michael Kaminsky https://github.com/mkaminsky11 + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod) + else + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + + function wordSet(words) { + var set = {} + for (var i = 0; i < words.length; i++) set[words[i]] = true + return set + } + + var keywords = wordSet(["var","let","class","deinit","enum","extension","func","import","init","protocol", + "static","struct","subscript","typealias","as","dynamicType","is","new","super", + "self","Self","Type","__COLUMN__","__FILE__","__FUNCTION__","__LINE__","break","case", + "continue","default","do","else","fallthrough","if","in","for","return","switch", + "where","while","associativity","didSet","get","infix","inout","left","mutating", + "none","nonmutating","operator","override","postfix","precedence","prefix","right", + "set","unowned","weak","willSet"]) + var definingKeywords = wordSet(["var","let","class","enum","extension","func","import","protocol","struct", + "typealias","dynamicType","for"]) + var atoms = wordSet(["Infinity","NaN","undefined","null","true","false","on","off","yes","no","nil","null", + "this","super"]) + var types = wordSet(["String","bool","int","string","double","Double","Int","Float","float","public", + "private","extension"]) + var operators = "+-/*%=|&<>#" + var punc = ";,.(){}[]" + var number = /^-?(?:(?:[\d_]+\.[_\d]*|\.[_\d]+|0o[0-7_\.]+|0b[01_\.]+)(?:e-?[\d_]+)?|0x[\d_a-f\.]+(?:p-?[\d_]+)?)/i + var identifier = /^[_A-Za-z$][_A-Za-z$0-9]*/ + var property = /^[@\.][_A-Za-z$][_A-Za-z$0-9]*/ + var regexp = /^\/(?!\s)(?:\/\/)?(?:\\.|[^\/])+\// + + function tokenBase(stream, state, prev) { + if (stream.sol()) state.indented = stream.indentation() + if (stream.eatSpace()) return null + + var ch = stream.peek() + if (ch == "/") { + if (stream.match("//")) { + stream.skipToEnd() + return "comment" + } + if (stream.match("/*")) { + state.tokenize.push(tokenComment) + return tokenComment(stream, state) + } + if (stream.match(regexp)) return "string-2" + } + if (operators.indexOf(ch) > -1) { + stream.next() + return "operator" + } + if (punc.indexOf(ch) > -1) { + stream.next() + stream.match("..") + return "punctuation" + } + if (ch == '"' || ch == "'") { + stream.next() + var tokenize = tokenString(ch) + state.tokenize.push(tokenize) + return tokenize(stream, state) + } + + if (stream.match(number)) return "number" + if (stream.match(property)) return "property" + + if (stream.match(identifier)) { + var ident = stream.current() + if (keywords.hasOwnProperty(ident)) { + if (definingKeywords.hasOwnProperty(ident)) + state.prev = "define" + return "keyword" + } + if (types.hasOwnProperty(ident)) return "variable-2" + if (atoms.hasOwnProperty(ident)) return "atom" + if (prev == "define") return "def" + return "variable" + } + + stream.next() + return null + } + + function tokenUntilClosingParen() { + var depth = 0 + return function(stream, state, prev) { + var inner = tokenBase(stream, state, prev) + if (inner == "punctuation") { + if (stream.current() == "(") ++depth + else if (stream.current() == ")") { + if (depth == 0) { + stream.backUp(1) + state.tokenize.pop() + return state.tokenize[state.tokenize.length - 1](stream, state) + } + else --depth + } + } + return inner + } + } + + function tokenString(quote) { + return function(stream, state) { + var ch, escaped = false + while (ch = stream.next()) { + if (escaped) { + if (ch == "(") { + state.tokenize.push(tokenUntilClosingParen()) + return "string" + } + escaped = false + } else if (ch == quote) { + break + } else { + escaped = ch == "\\" + } + } + state.tokenize.pop() + return "string" + } + } + + function tokenComment(stream, state) { + stream.match(/^(?:[^*]|\*(?!\/))*/) + if (stream.match("*/")) state.tokenize.pop() + return "comment" + } + + function Context(prev, align, indented) { + this.prev = prev + this.align = align + this.indented = indented + } + + function pushContext(state, stream) { + var align = stream.match(/^\s*($|\/[\/\*])/, false) ? null : stream.column() + 1 + state.context = new Context(state.context, align, state.indented) + } + + function popContext(state) { + if (state.context) { + state.indented = state.context.indented + state.context = state.context.prev + } + } + + CodeMirror.defineMode("swift", function(config) { + return { + startState: function() { + return { + prev: null, + context: null, + indented: 0, + tokenize: [] + } + }, + + token: function(stream, state) { + var prev = state.prev + state.prev = null + var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase + var style = tokenize(stream, state, prev) + if (!style || style == "comment") state.prev = prev + else if (!state.prev) state.prev = style + + if (style == "punctuation") { + var bracket = /[\(\[\{]|([\]\)\}])/.exec(stream.current()) + if (bracket) (bracket[1] ? popContext : pushContext)(state, stream) + } + + return style + }, + + indent: function(state, textAfter) { + var cx = state.context + if (!cx) return 0 + var closing = /^[\]\}\)]/.test(textAfter) + if (cx.align != null) return cx.align - (closing ? 1 : 0) + return cx.indented + (closing ? 0 : config.indentUnit) + }, + + electricInput: /^\s*[\)\}\]]$/, + + lineComment: "//", + blockCommentStart: "/*", + blockCommentEnd: "*/" + } + }) + + CodeMirror.defineMIME("text/x-swift","swift") +}) diff --git a/libraries/codemirror/mode/tcl/index.html b/libraries/codemirror/mode/tcl/index.html new file mode 100644 index 0000000..ce4ad34 --- /dev/null +++ b/libraries/codemirror/mode/tcl/index.html @@ -0,0 +1,142 @@ + + +CodeMirror: Tcl mode + + + + + + + + + + +
          +

          Tcl mode

          +
          + + +

          MIME types defined: text/x-tcl.

          + +
          diff --git a/libraries/codemirror/mode/tcl/tcl.js b/libraries/codemirror/mode/tcl/tcl.js new file mode 100644 index 0000000..056accb --- /dev/null +++ b/libraries/codemirror/mode/tcl/tcl.js @@ -0,0 +1,147 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +//tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("tcl", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + + "binary break catch cd close concat continue dde eof encoding error " + + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + + "filename flush for foreach format gets glob global history http if " + + "incr info interp join lappend lindex linsert list llength load lrange " + + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + + "registry regsub rename resource return scan seek set socket source split " + + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + + "tclvars tell time trace unknown unset update uplevel upvar variable " + + "vwait"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if ((ch == '"' || ch == "'") && state.inParams) + return chain(stream, state, tokenString(ch)); + else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + else if (ch == "#" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else if (ch == "#" && stream.match(/ *\[ *\[/)) { + return chain(stream, state, tokenUnparsed); + } + else if (ch == "#" && stream.eat("#")) { + stream.skipToEnd(); + return "comment"; + } + else if (ch == '"') { + stream.skipTo(/"/); + return "comment"; + } + else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); + stream.eatWhile(/}/); + state.beforeParams = true; + return "builtin"; + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "comment"; + } + else { + stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); +CodeMirror.defineMIME("text/x-tcl", "tcl"); + +}); diff --git a/libraries/codemirror/mode/textile/index.html b/libraries/codemirror/mode/textile/index.html new file mode 100644 index 0000000..42b156b --- /dev/null +++ b/libraries/codemirror/mode/textile/index.html @@ -0,0 +1,191 @@ + + +CodeMirror: Textile mode + + + + + + + + + +
          +

          Textile mode

          +
          + + +

          MIME types defined: text/x-textile.

          + +

          Parsing/Highlighting Tests: normal, verbose.

          + +
          diff --git a/libraries/codemirror/mode/textile/test.js b/libraries/codemirror/mode/textile/test.js new file mode 100644 index 0000000..49cdaf9 --- /dev/null +++ b/libraries/codemirror/mode/textile/test.js @@ -0,0 +1,417 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, 'textile'); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT('simpleParagraphs', + 'Some text.', + '', + 'Some more text.'); + + /* + * Phrase Modifiers + */ + + MT('em', + 'foo [em _bar_]'); + + MT('emBoogus', + 'code_mirror'); + + MT('strong', + 'foo [strong *bar*]'); + + MT('strongBogus', + '3 * 3 = 9'); + + MT('italic', + 'foo [em __bar__]'); + + MT('italicBogus', + 'code__mirror'); + + MT('bold', + 'foo [strong **bar**]'); + + MT('boldBogus', + '3 ** 3 = 27'); + + MT('simpleLink', + '[link "CodeMirror":http://codemirror.net]'); + + MT('referenceLink', + '[link "CodeMirror":code_mirror]', + 'Normal Text.', + '[link [[code_mirror]]http://codemirror.net]'); + + MT('footCite', + 'foo bar[qualifier [[1]]]'); + + MT('footCiteBogus', + 'foo bar[[1a2]]'); + + MT('special-characters', + 'Registered [tag (r)], ' + + 'Trademark [tag (tm)], and ' + + 'Copyright [tag (c)] 2008'); + + MT('cite', + "A book is [keyword ??The Count of Monte Cristo??] by Dumas."); + + MT('additionAndDeletion', + 'The news networks declared [negative -Al Gore-] ' + + '[positive +George W. Bush+] the winner in Florida.'); + + MT('subAndSup', + 'f(x, n) = log [builtin ~4~] x [builtin ^n^]'); + + MT('spanAndCode', + 'A [quote %span element%] and [atom @code element@]'); + + MT('spanBogus', + 'Percentage 25% is not a span.'); + + MT('citeBogus', + 'Question? is not a citation.'); + + MT('codeBogus', + 'user@example.com'); + + MT('subBogus', + '~username'); + + MT('supBogus', + 'foo ^ bar'); + + MT('deletionBogus', + '3 - 3 = 0'); + + MT('additionBogus', + '3 + 3 = 6'); + + MT('image', + 'An image: [string !http://www.example.com/image.png!]'); + + MT('imageWithAltText', + 'An image: [string !http://www.example.com/image.png (Alt Text)!]'); + + MT('imageWithUrl', + 'An image: [string !http://www.example.com/image.png!:http://www.example.com/]'); + + /* + * Headers + */ + + MT('h1', + '[header&header-1 h1. foo]'); + + MT('h2', + '[header&header-2 h2. foo]'); + + MT('h3', + '[header&header-3 h3. foo]'); + + MT('h4', + '[header&header-4 h4. foo]'); + + MT('h5', + '[header&header-5 h5. foo]'); + + MT('h6', + '[header&header-6 h6. foo]'); + + MT('h7Bogus', + 'h7. foo'); + + MT('multipleHeaders', + '[header&header-1 h1. Heading 1]', + '', + 'Some text.', + '', + '[header&header-2 h2. Heading 2]', + '', + 'More text.'); + + MT('h1inline', + '[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1 baz]'); + + /* + * Lists + */ + + MT('ul', + 'foo', + 'bar', + '', + '[variable-2 * foo]', + '[variable-2 * bar]'); + + MT('ulNoBlank', + 'foo', + 'bar', + '[variable-2 * foo]', + '[variable-2 * bar]'); + + MT('ol', + 'foo', + 'bar', + '', + '[variable-2 # foo]', + '[variable-2 # bar]'); + + MT('olNoBlank', + 'foo', + 'bar', + '[variable-2 # foo]', + '[variable-2 # bar]'); + + MT('ulFormatting', + '[variable-2 * ][variable-2&em _foo_][variable-2 bar]', + '[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' + + '[variable-2&strong *][variable-2 bar]', + '[variable-2 * ][variable-2&strong *foo*][variable-2 bar]'); + + MT('olFormatting', + '[variable-2 # ][variable-2&em _foo_][variable-2 bar]', + '[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' + + '[variable-2&strong *][variable-2 bar]', + '[variable-2 # ][variable-2&strong *foo*][variable-2 bar]'); + + MT('ulNested', + '[variable-2 * foo]', + '[variable-3 ** bar]', + '[keyword *** bar]', + '[variable-2 **** bar]', + '[variable-3 ** bar]'); + + MT('olNested', + '[variable-2 # foo]', + '[variable-3 ## bar]', + '[keyword ### bar]', + '[variable-2 #### bar]', + '[variable-3 ## bar]'); + + MT('ulNestedWithOl', + '[variable-2 * foo]', + '[variable-3 ## bar]', + '[keyword *** bar]', + '[variable-2 #### bar]', + '[variable-3 ** bar]'); + + MT('olNestedWithUl', + '[variable-2 # foo]', + '[variable-3 ** bar]', + '[keyword ### bar]', + '[variable-2 **** bar]', + '[variable-3 ## bar]'); + + MT('definitionList', + '[number - coffee := Hot ][number&em _and_][number black]', + '', + 'Normal text.'); + + MT('definitionListSpan', + '[number - coffee :=]', + '', + '[number Hot ][number&em _and_][number black =:]', + '', + 'Normal text.'); + + MT('boo', + '[number - dog := woof woof]', + '[number - cat := meow meow]', + '[number - whale :=]', + '[number Whale noises.]', + '', + '[number Also, ][number&em _splashing_][number . =:]'); + + /* + * Attributes + */ + + MT('divWithAttribute', + '[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]'); + + MT('divWithAttributeAnd2emRightPadding', + '[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]'); + + MT('divWithClassAndId', + '[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]'); + + MT('paragraphWithCss', + 'p[attribute {color:red;}]. foo bar'); + + MT('paragraphNestedStyles', + 'p. [strong *foo ][strong&em _bar_][strong *]'); + + MT('paragraphWithLanguage', + 'p[attribute [[fr]]]. Parlez-vous français?'); + + MT('paragraphLeftAlign', + 'p[attribute <]. Left'); + + MT('paragraphRightAlign', + 'p[attribute >]. Right'); + + MT('paragraphRightAlign', + 'p[attribute =]. Center'); + + MT('paragraphJustified', + 'p[attribute <>]. Justified'); + + MT('paragraphWithLeftIndent1em', + 'p[attribute (]. Left'); + + MT('paragraphWithRightIndent1em', + 'p[attribute )]. Right'); + + MT('paragraphWithLeftIndent2em', + 'p[attribute ((]. Left'); + + MT('paragraphWithRightIndent2em', + 'p[attribute ))]. Right'); + + MT('paragraphWithLeftIndent3emRightIndent2em', + 'p[attribute ((())]. Right'); + + MT('divFormatting', + '[punctuation div. ][punctuation&strong *foo ]' + + '[punctuation&strong&em _bar_][punctuation&strong *]'); + + MT('phraseModifierAttributes', + 'p[attribute (my-class)]. This is a paragraph that has a class and' + + ' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' + + ' has an id.'); + + MT('linkWithClass', + '[link "(my-class). This is a link with class":http://redcloth.org]'); + + /* + * Layouts + */ + + MT('paragraphLayouts', + 'p. This is one paragraph.', + '', + 'p. This is another.'); + + MT('div', + '[punctuation div. foo bar]'); + + MT('pre', + '[operator pre. Text]'); + + MT('bq.', + '[bracket bq. foo bar]', + '', + 'Normal text.'); + + MT('footnote', + '[variable fn123. foo ][variable&strong *bar*]'); + + /* + * Spanning Layouts + */ + + MT('bq..ThenParagraph', + '[bracket bq.. foo bar]', + '', + '[bracket More quote.]', + 'p. Normal Text'); + + MT('bq..ThenH1', + '[bracket bq.. foo bar]', + '', + '[bracket More quote.]', + '[header&header-1 h1. Header Text]'); + + MT('bc..ThenParagraph', + '[atom bc.. # Some ruby code]', + '[atom obj = {foo: :bar}]', + '[atom puts obj]', + '', + '[atom obj[[:love]] = "*love*"]', + '[atom puts obj.love.upcase]', + '', + 'p. Normal text.'); + + MT('fn1..ThenParagraph', + '[variable fn1.. foo bar]', + '', + '[variable More.]', + 'p. Normal Text'); + + MT('pre..ThenParagraph', + '[operator pre.. foo bar]', + '', + '[operator More.]', + 'p. Normal Text'); + + /* + * Tables + */ + + MT('table', + '[variable-3&operator |_. name |_. age|]', + '[variable-3 |][variable-3&strong *Walter*][variable-3 | 5 |]', + '[variable-3 |Florence| 6 |]', + '', + 'p. Normal text.'); + + MT('tableWithAttributes', + '[variable-3&operator |_. name |_. age|]', + '[variable-3 |][variable-3&attribute /2.][variable-3 Jim |]', + '[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3 Sam |]'); + + /* + * HTML + */ + + MT('html', + '[comment
          ]', + '[comment
          ]', + '', + '[header&header-1 h1. Welcome]', + '', + '[variable-2 * Item one]', + '[variable-2 * Item two]', + '', + '[comment Example]', + '', + '[comment
          ]', + '[comment
          ]'); + + MT('inlineHtml', + 'I can use HTML directly in my [comment Textile].'); + + /* + * No-Textile + */ + + MT('notextile', + '[string-2 notextile. *No* formatting]'); + + MT('notextileInline', + 'Use [string-2 ==*asterisks*==] for [strong *strong*] text.'); + + MT('notextileWithPre', + '[operator pre. *No* formatting]'); + + MT('notextileWithSpanningPre', + '[operator pre.. *No* formatting]', + '', + '[operator *No* formatting]'); + + /* Only toggling phrases between non-word chars. */ + + MT('phrase-in-word', + 'foo_bar_baz'); + + MT('phrase-non-word', + '[negative -x-] aaa-bbb ccc-ddd [negative -eee-] fff [negative -ggg-]'); + + MT('phrase-lone-dash', + 'foo - bar - baz'); +})(); diff --git a/libraries/codemirror/mode/textile/textile.js b/libraries/codemirror/mode/textile/textile.js new file mode 100644 index 0000000..a6f7576 --- /dev/null +++ b/libraries/codemirror/mode/textile/textile.js @@ -0,0 +1,469 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") { // CommonJS + mod(require("../../lib/codemirror")); + } else if (typeof define == "function" && define.amd) { // AMD + define(["../../lib/codemirror"], mod); + } else { // Plain browser env + mod(CodeMirror); + } +})(function(CodeMirror) { + "use strict"; + + var TOKEN_STYLES = { + addition: "positive", + attributes: "attribute", + bold: "strong", + cite: "keyword", + code: "atom", + definitionList: "number", + deletion: "negative", + div: "punctuation", + em: "em", + footnote: "variable", + footCite: "qualifier", + header: "header", + html: "comment", + image: "string", + italic: "em", + link: "link", + linkDefinition: "link", + list1: "variable-2", + list2: "variable-3", + list3: "keyword", + notextile: "string-2", + pre: "operator", + p: "property", + quote: "bracket", + span: "quote", + specialChar: "tag", + strong: "strong", + sub: "builtin", + sup: "builtin", + table: "variable-3", + tableHeading: "operator" + }; + + function startNewLine(stream, state) { + state.mode = Modes.newLayout; + state.tableHeading = false; + + if (state.layoutType === "definitionList" && state.spanningLayout && + stream.match(RE("definitionListEnd"), false)) + state.spanningLayout = false; + } + + function handlePhraseModifier(stream, state, ch) { + if (ch === "_") { + if (stream.eat("_")) + return togglePhraseModifier(stream, state, "italic", /__/, 2); + else + return togglePhraseModifier(stream, state, "em", /_/, 1); + } + + if (ch === "*") { + if (stream.eat("*")) { + return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); + } + return togglePhraseModifier(stream, state, "strong", /\*/, 1); + } + + if (ch === "[") { + if (stream.match(/\d+\]/)) state.footCite = true; + return tokenStyles(state); + } + + if (ch === "(") { + var spec = stream.match(/^(r|tm|c)\)/); + if (spec) + return tokenStylesWith(state, TOKEN_STYLES.specialChar); + } + + if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) + return tokenStylesWith(state, TOKEN_STYLES.html); + + if (ch === "?" && stream.eat("?")) + return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); + + if (ch === "=" && stream.eat("=")) + return togglePhraseModifier(stream, state, "notextile", /==/, 2); + + if (ch === "-" && !stream.eat("-")) + return togglePhraseModifier(stream, state, "deletion", /-/, 1); + + if (ch === "+") + return togglePhraseModifier(stream, state, "addition", /\+/, 1); + + if (ch === "~") + return togglePhraseModifier(stream, state, "sub", /~/, 1); + + if (ch === "^") + return togglePhraseModifier(stream, state, "sup", /\^/, 1); + + if (ch === "%") + return togglePhraseModifier(stream, state, "span", /%/, 1); + + if (ch === "@") + return togglePhraseModifier(stream, state, "code", /@/, 1); + + if (ch === "!") { + var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); + stream.match(/^:\S+/); // optional Url portion + return type; + } + return tokenStyles(state); + } + + function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { + var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; + var charAfter = stream.peek(); + if (state[phraseModifier]) { + if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { + var type = tokenStyles(state); + state[phraseModifier] = false; + return type; + } + } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && + stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { + state[phraseModifier] = true; + state.mode = Modes.attributes; + } + return tokenStyles(state); + }; + + function tokenStyles(state) { + var disabled = textileDisabled(state); + if (disabled) return disabled; + + var styles = []; + if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); + + styles = styles.concat(activeStyles( + state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", + "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); + + if (state.layoutType === "header") + styles.push(TOKEN_STYLES.header + "-" + state.header); + + return styles.length ? styles.join(" ") : null; + } + + function textileDisabled(state) { + var type = state.layoutType; + + switch(type) { + case "notextile": + case "code": + case "pre": + return TOKEN_STYLES[type]; + default: + if (state.notextile) + return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); + return null; + } + } + + function tokenStylesWith(state, extraStyles) { + var disabled = textileDisabled(state); + if (disabled) return disabled; + + var type = tokenStyles(state); + if (extraStyles) + return type ? (type + " " + extraStyles) : extraStyles; + else + return type; + } + + function activeStyles(state) { + var styles = []; + for (var i = 1; i < arguments.length; ++i) { + if (state[arguments[i]]) + styles.push(TOKEN_STYLES[arguments[i]]); + } + return styles; + } + + function blankLine(state) { + var spanningLayout = state.spanningLayout, type = state.layoutType; + + for (var key in state) if (state.hasOwnProperty(key)) + delete state[key]; + + state.mode = Modes.newLayout; + if (spanningLayout) { + state.layoutType = type; + state.spanningLayout = true; + } + } + + var REs = { + cache: {}, + single: { + bc: "bc", + bq: "bq", + definitionList: /- [^(?::=)]+:=+/, + definitionListEnd: /.*=:\s*$/, + div: "div", + drawTable: /\|.*\|/, + foot: /fn\d+/, + header: /h[1-6]/, + html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, + link: /[^"]+":\S/, + linkDefinition: /\[[^\s\]]+\]\S+/, + list: /(?:#+|\*+)/, + notextile: "notextile", + para: "p", + pre: "pre", + table: "table", + tableCellAttributes: /[\/\\]\d+/, + tableHeading: /\|_\./, + tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, + text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ + }, + attributes: { + align: /(?:<>|<|>|=)/, + selector: /\([^\(][^\)]+\)/, + lang: /\[[^\[\]]+\]/, + pad: /(?:\(+|\)+){1,2}/, + css: /\{[^\}]+\}/ + }, + createRe: function(name) { + switch (name) { + case "drawTable": + return REs.makeRe("^", REs.single.drawTable, "$"); + case "html": + return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); + case "linkDefinition": + return REs.makeRe("^", REs.single.linkDefinition, "$"); + case "listLayout": + return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); + case "tableCellAttributes": + return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, + RE("allAttributes")), "+\\."); + case "type": + return REs.makeRe("^", RE("allTypes")); + case "typeLayout": + return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), + "*\\.\\.?", "(\\s+|$)"); + case "attributes": + return REs.makeRe("^", RE("allAttributes"), "+"); + + case "allTypes": + return REs.choiceRe(REs.single.div, REs.single.foot, + REs.single.header, REs.single.bc, REs.single.bq, + REs.single.notextile, REs.single.pre, REs.single.table, + REs.single.para); + + case "allAttributes": + return REs.choiceRe(REs.attributes.selector, REs.attributes.css, + REs.attributes.lang, REs.attributes.align, REs.attributes.pad); + + default: + return REs.makeRe("^", REs.single[name]); + } + }, + makeRe: function() { + var pattern = ""; + for (var i = 0; i < arguments.length; ++i) { + var arg = arguments[i]; + pattern += (typeof arg === "string") ? arg : arg.source; + } + return new RegExp(pattern); + }, + choiceRe: function() { + var parts = [arguments[0]]; + for (var i = 1; i < arguments.length; ++i) { + parts[i * 2 - 1] = "|"; + parts[i * 2] = arguments[i]; + } + + parts.unshift("(?:"); + parts.push(")"); + return REs.makeRe.apply(null, parts); + } + }; + + function RE(name) { + return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); + } + + var Modes = { + newLayout: function(stream, state) { + if (stream.match(RE("typeLayout"), false)) { + state.spanningLayout = false; + return (state.mode = Modes.blockType)(stream, state); + } + var newMode; + if (!textileDisabled(state)) { + if (stream.match(RE("listLayout"), false)) + newMode = Modes.list; + else if (stream.match(RE("drawTable"), false)) + newMode = Modes.table; + else if (stream.match(RE("linkDefinition"), false)) + newMode = Modes.linkDefinition; + else if (stream.match(RE("definitionList"))) + newMode = Modes.definitionList; + else if (stream.match(RE("html"), false)) + newMode = Modes.html; + } + return (state.mode = (newMode || Modes.text))(stream, state); + }, + + blockType: function(stream, state) { + var match, type; + state.layoutType = null; + + if (match = stream.match(RE("type"))) + type = match[0]; + else + return (state.mode = Modes.text)(stream, state); + + if (match = type.match(RE("header"))) { + state.layoutType = "header"; + state.header = parseInt(match[0][1]); + } else if (type.match(RE("bq"))) { + state.layoutType = "quote"; + } else if (type.match(RE("bc"))) { + state.layoutType = "code"; + } else if (type.match(RE("foot"))) { + state.layoutType = "footnote"; + } else if (type.match(RE("notextile"))) { + state.layoutType = "notextile"; + } else if (type.match(RE("pre"))) { + state.layoutType = "pre"; + } else if (type.match(RE("div"))) { + state.layoutType = "div"; + } else if (type.match(RE("table"))) { + state.layoutType = "table"; + } + + state.mode = Modes.attributes; + return tokenStyles(state); + }, + + text: function(stream, state) { + if (stream.match(RE("text"))) return tokenStyles(state); + + var ch = stream.next(); + if (ch === '"') + return (state.mode = Modes.link)(stream, state); + return handlePhraseModifier(stream, state, ch); + }, + + attributes: function(stream, state) { + state.mode = Modes.layoutLength; + + if (stream.match(RE("attributes"))) + return tokenStylesWith(state, TOKEN_STYLES.attributes); + else + return tokenStyles(state); + }, + + layoutLength: function(stream, state) { + if (stream.eat(".") && stream.eat(".")) + state.spanningLayout = true; + + state.mode = Modes.text; + return tokenStyles(state); + }, + + list: function(stream, state) { + var match = stream.match(RE("list")); + state.listDepth = match[0].length; + var listMod = (state.listDepth - 1) % 3; + if (!listMod) + state.layoutType = "list1"; + else if (listMod === 1) + state.layoutType = "list2"; + else + state.layoutType = "list3"; + + state.mode = Modes.attributes; + return tokenStyles(state); + }, + + link: function(stream, state) { + state.mode = Modes.text; + if (stream.match(RE("link"))) { + stream.match(/\S+/); + return tokenStylesWith(state, TOKEN_STYLES.link); + } + return tokenStyles(state); + }, + + linkDefinition: function(stream, state) { + stream.skipToEnd(); + return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); + }, + + definitionList: function(stream, state) { + stream.match(RE("definitionList")); + + state.layoutType = "definitionList"; + + if (stream.match(/\s*$/)) + state.spanningLayout = true; + else + state.mode = Modes.attributes; + + return tokenStyles(state); + }, + + html: function(stream, state) { + stream.skipToEnd(); + return tokenStylesWith(state, TOKEN_STYLES.html); + }, + + table: function(stream, state) { + state.layoutType = "table"; + return (state.mode = Modes.tableCell)(stream, state); + }, + + tableCell: function(stream, state) { + if (stream.match(RE("tableHeading"))) + state.tableHeading = true; + else + stream.eat("|"); + + state.mode = Modes.tableCellAttributes; + return tokenStyles(state); + }, + + tableCellAttributes: function(stream, state) { + state.mode = Modes.tableText; + + if (stream.match(RE("tableCellAttributes"))) + return tokenStylesWith(state, TOKEN_STYLES.attributes); + else + return tokenStyles(state); + }, + + tableText: function(stream, state) { + if (stream.match(RE("tableText"))) + return tokenStyles(state); + + if (stream.peek() === "|") { // end of cell + state.mode = Modes.tableCell; + return tokenStyles(state); + } + return handlePhraseModifier(stream, state, stream.next()); + } + }; + + CodeMirror.defineMode("textile", function() { + return { + startState: function() { + return { mode: Modes.newLayout }; + }, + token: function(stream, state) { + if (stream.sol()) startNewLine(stream, state); + return state.mode(stream, state); + }, + blankLine: blankLine + }; + }); + + CodeMirror.defineMIME("text/x-textile", "textile"); +}); diff --git a/libraries/codemirror/mode/tiddlywiki/index.html b/libraries/codemirror/mode/tiddlywiki/index.html new file mode 100644 index 0000000..77dd045 --- /dev/null +++ b/libraries/codemirror/mode/tiddlywiki/index.html @@ -0,0 +1,154 @@ + + +CodeMirror: TiddlyWiki mode + + + + + + + + + + + +
          +

          TiddlyWiki mode

          + + +
          + + + +

          TiddlyWiki mode supports a single configuration.

          + +

          MIME types defined: text/x-tiddlywiki.

          +
          diff --git a/libraries/codemirror/mode/tiddlywiki/tiddlywiki.css b/libraries/codemirror/mode/tiddlywiki/tiddlywiki.css new file mode 100644 index 0000000..9a69b63 --- /dev/null +++ b/libraries/codemirror/mode/tiddlywiki/tiddlywiki.css @@ -0,0 +1,14 @@ +span.cm-underlined { + text-decoration: underline; +} +span.cm-strikethrough { + text-decoration: line-through; +} +span.cm-brace { + color: #170; + font-weight: bold; +} +span.cm-table { + color: blue; + font-weight: bold; +} diff --git a/libraries/codemirror/mode/tiddlywiki/tiddlywiki.js b/libraries/codemirror/mode/tiddlywiki/tiddlywiki.js new file mode 100644 index 0000000..1df0164 --- /dev/null +++ b/libraries/codemirror/mode/tiddlywiki/tiddlywiki.js @@ -0,0 +1,358 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/*** + |''Name''|tiddlywiki.js| + |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| + |''Author''|PMario| + |''Version''|0.1.7| + |''Status''|''stable''| + |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| + |''Documentation''|http://codemirror.tiddlyspace.com/| + |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| + |''CoreVersion''|2.5.0| + |''Requires''|codemirror.js| + |''Keywords''|syntax highlighting color code mirror codemirror| + ! Info + CoreVersion parameter is needed for TiddlyWiki only! +***/ +//{{{ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("tiddlywiki", function () { + // Tokenizer + var textwords = {}; + + var keywords = function () { + function kw(type) { + return { type: type, style: "macro"}; + } + return { + "allTags": kw('allTags'), "closeAll": kw('closeAll'), "list": kw('list'), + "newJournal": kw('newJournal'), "newTiddler": kw('newTiddler'), + "permaview": kw('permaview'), "saveChanges": kw('saveChanges'), + "search": kw('search'), "slider": kw('slider'), "tabs": kw('tabs'), + "tag": kw('tag'), "tagging": kw('tagging'), "tags": kw('tags'), + "tiddler": kw('tiddler'), "timeline": kw('timeline'), + "today": kw('today'), "version": kw('version'), "option": kw('option'), + + "with": kw('with'), + "filter": kw('filter') + }; + }(); + + var isSpaceName = /[\w_\-]/i, + reHR = /^\-\-\-\-+$/, //
          + reWikiCommentStart = /^\/\*\*\*$/, // /*** + reWikiCommentStop = /^\*\*\*\/$/, // ***/ + reBlockQuote = /^<<<$/, + + reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start + reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop + reXmlCodeStart = /^$/, // xml block start + reXmlCodeStop = /^$/, // xml stop + + reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start + reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop + + reUntilCodeStop = /.*?\}\}\}/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function jsTokenBase(stream, state) { + var sol = stream.sol(), ch; + + state.block = false; // indicates the start of a code block. + + ch = stream.peek(); // don't eat, to make matching simpler + + // check start of blocks + if (sol && /[<\/\*{}\-]/.test(ch)) { + if (stream.match(reCodeBlockStart)) { + state.block = true; + return chain(stream, state, twTokenCode); + } + if (stream.match(reBlockQuote)) { + return 'quote'; + } + if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) { + return 'comment'; + } + if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) { + return 'comment'; + } + if (stream.match(reHR)) { + return 'hr'; + } + } // sol + ch = stream.next(); + + if (sol && /[\/\*!#;:>|]/.test(ch)) { + if (ch == "!") { // tw header + stream.skipToEnd(); + return "header"; + } + if (ch == "*") { // tw list + stream.eatWhile('*'); + return "comment"; + } + if (ch == "#") { // tw numbered list + stream.eatWhile('#'); + return "comment"; + } + if (ch == ";") { // definition list, term + stream.eatWhile(';'); + return "comment"; + } + if (ch == ":") { // definition list, description + stream.eatWhile(':'); + return "comment"; + } + if (ch == ">") { // single line quote + stream.eatWhile(">"); + return "quote"; + } + if (ch == '|') { + return 'header'; + } + } + + if (ch == '{' && stream.match(/\{\{/)) { + return chain(stream, state, twTokenCode); + } + + // rudimentary html:// file:// link matching. TW knows much more ... + if (/[hf]/i.test(ch)) { + if (/[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) { + return "link"; + } + } + // just a little string indicator, don't want to have the whole string covered + if (ch == '"') { + return 'string'; + } + if (ch == '~') { // _no_ CamelCase indicator should be bold + return 'brace'; + } + if (/[\[\]]/.test(ch)) { // check for [[..]] + if (stream.peek() == ch) { + stream.next(); + return 'brace'; + } + } + if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting + stream.eatWhile(isSpaceName); + return "link"; + } + if (/\d/.test(ch)) { // numbers + stream.eatWhile(/\d/); + return "number"; + } + if (ch == "/") { // tw invisible comment + if (stream.eat("%")) { + return chain(stream, state, twTokenComment); + } + else if (stream.eat("/")) { // + return chain(stream, state, twTokenEm); + } + } + if (ch == "_") { // tw underline + if (stream.eat("_")) { + return chain(stream, state, twTokenUnderline); + } + } + // strikethrough and mdash handling + if (ch == "-") { + if (stream.eat("-")) { + // if strikethrough looks ugly, change CSS. + if (stream.peek() != ' ') + return chain(stream, state, twTokenStrike); + // mdash + if (stream.peek() == ' ') + return 'brace'; + } + } + if (ch == "'") { // tw bold + if (stream.eat("'")) { + return chain(stream, state, twTokenStrong); + } + } + if (ch == "<") { // tw macro + if (stream.eat("<")) { + return chain(stream, state, twTokenMacro); + } + } + else { + return null; + } + + // core macro handling + stream.eatWhile(/[\w\$_]/); + var word = stream.current(), + known = textwords.propertyIsEnumerable(word) && textwords[word]; + + return known ? known.style : null; + } // jsTokenBase() + + // tw invisible comment + function twTokenComment(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "%"); + } + return "comment"; + } + + // tw strong / bold + function twTokenStrong(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "'" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "'"); + } + return "strong"; + } + + // tw code + function twTokenCode(stream, state) { + var sb = state.block; + + if (sb && stream.current()) { + return "comment"; + } + + if (!sb && stream.match(reUntilCodeStop)) { + state.tokenize = jsTokenBase; + return "comment"; + } + + if (sb && stream.sol() && stream.match(reCodeBlockStop)) { + state.tokenize = jsTokenBase; + return "comment"; + } + + stream.next(); + return "comment"; + } + + // tw em / italic + function twTokenEm(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "/"); + } + return "em"; + } + + // tw underlined text + function twTokenUnderline(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "_" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "_"); + } + return "underlined"; + } + + // tw strike through text looks ugly + // change CSS if needed + function twTokenStrike(stream, state) { + var maybeEnd = false, ch; + + while (ch = stream.next()) { + if (ch == "-" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "-"); + } + return "strikethrough"; + } + + // macro + function twTokenMacro(stream, state) { + var ch, word, known; + + if (stream.current() == '<<') { + return 'macro'; + } + + ch = stream.next(); + if (!ch) { + state.tokenize = jsTokenBase; + return null; + } + if (ch == ">") { + if (stream.peek() == '>') { + stream.next(); + state.tokenize = jsTokenBase; + return "macro"; + } + } + + stream.eatWhile(/[\w\$_]/); + word = stream.current(); + known = keywords.propertyIsEnumerable(word) && keywords[word]; + + if (known) { + return known.style, word; + } + else { + return null, word; + } + } + + // Interface + return { + startState: function () { + return { + tokenize: jsTokenBase, + indented: 0, + level: 0 + }; + }, + + token: function (stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + }, + + electricChars: "" + }; +}); + +CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); +}); + +//}}} diff --git a/libraries/codemirror/mode/tiki/index.html b/libraries/codemirror/mode/tiki/index.html new file mode 100644 index 0000000..091c5fb --- /dev/null +++ b/libraries/codemirror/mode/tiki/index.html @@ -0,0 +1,95 @@ + + +CodeMirror: Tiki wiki mode + + + + + + + + + + +
          +

          Tiki wiki mode

          + + +
          + + + +
          diff --git a/libraries/codemirror/mode/tiki/tiki.css b/libraries/codemirror/mode/tiki/tiki.css new file mode 100644 index 0000000..1d8704c --- /dev/null +++ b/libraries/codemirror/mode/tiki/tiki.css @@ -0,0 +1,26 @@ +.cm-tw-syntaxerror { + color: #FFF; + background-color: #900; +} + +.cm-tw-deleted { + text-decoration: line-through; +} + +.cm-tw-header5 { + font-weight: bold; +} +.cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ + padding-left: 10px; +} + +.cm-tw-box { + border-top-width: 0px !important; + border-style: solid; + border-width: 1px; + border-color: inherit; +} + +.cm-tw-underline { + text-decoration: underline; +} \ No newline at end of file diff --git a/libraries/codemirror/mode/tiki/tiki.js b/libraries/codemirror/mode/tiki/tiki.js new file mode 100644 index 0000000..5e05b1f --- /dev/null +++ b/libraries/codemirror/mode/tiki/tiki.js @@ -0,0 +1,312 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('tiki', function(config) { + function inBlock(style, terminator, returnTokenizer) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + + if (returnTokenizer) state.tokenize = returnTokenizer; + + return style; + }; + } + + function inLine(style) { + return function(stream, state) { + while(!stream.eol()) { + stream.next(); + } + state.tokenize = inText; + return style; + }; + } + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var sol = stream.sol(); + var ch = stream.next(); + + //non start of line + switch (ch) { //switch is generally much faster than if, so it is used here + case "{": //plugin + stream.eat("/"); + stream.eatSpace(); + stream.eatWhile(/[^\s\u00a0=\"\'\/?(}]/); + state.tokenize = inPlugin; + return "tag"; + case "_": //bold + if (stream.eat("_")) + return chain(inBlock("strong", "__", inText)); + break; + case "'": //italics + if (stream.eat("'")) + return chain(inBlock("em", "''", inText)); + break; + case "(":// Wiki Link + if (stream.eat("(")) + return chain(inBlock("variable-2", "))", inText)); + break; + case "[":// Weblink + return chain(inBlock("variable-3", "]", inText)); + break; + case "|": //table + if (stream.eat("|")) + return chain(inBlock("comment", "||")); + break; + case "-": + if (stream.eat("=")) {//titleBar + return chain(inBlock("header string", "=-", inText)); + } else if (stream.eat("-")) {//deleted + return chain(inBlock("error tw-deleted", "--", inText)); + } + break; + case "=": //underline + if (stream.match("==")) + return chain(inBlock("tw-underline", "===", inText)); + break; + case ":": + if (stream.eat(":")) + return chain(inBlock("comment", "::")); + break; + case "^": //box + return chain(inBlock("tw-box", "^")); + break; + case "~": //np + if (stream.match("np~")) + return chain(inBlock("meta", "~/np~")); + break; + } + + //start of line types + if (sol) { + switch (ch) { + case "!": //header at start of line + if (stream.match('!!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!')) { + return chain(inLine("header string")); + } else { + return chain(inLine("header string")); + } + break; + case "*": //unordered list line item, or
        • at start of line + case "#": //ordered list line item, or
        • at start of line + case "+": //ordered list line item, or
        • at start of line + return chain(inLine("tw-listitem bracket")); + break; + } + } + + //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki + return null; + } + + var indentUnit = config.indentUnit; + + // Return variables for tokenizers + var pluginName, type; + function inPlugin(stream, state) { + var ch = stream.next(); + var peek = stream.peek(); + + if (ch == "}") { + state.tokenize = inText; + //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin + return "tag"; + } else if (ch == "(" || ch == ")") { + return "bracket"; + } else if (ch == "=") { + type = "equals"; + + if (peek == ">") { + ch = stream.next(); + peek = stream.peek(); + } + + //here we detect values directly after equal character with no quotes + if (!/[\'\"]/.test(peek)) { + state.tokenize = inAttributeNoQuote(); + } + //end detect values + + return "operator"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); + return "keyword"; + } + } + + function inAttribute(quote) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inPlugin; + break; + } + } + return "string"; + }; + } + + function inAttributeNoQuote() { + return function(stream, state) { + while (!stream.eol()) { + var ch = stream.next(); + var peek = stream.peek(); + if (ch == " " || ch == "," || /[ )}]/.test(peek)) { + state.tokenize = inPlugin; + break; + } + } + return "string"; +}; + } + +var curState, setStyle; +function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); +} + +function cont() { + pass.apply(null, arguments); + return true; +} + +function pushContext(pluginName, startOfLine) { + var noIndent = curState.context && curState.context.noIndent; + curState.context = { + prev: curState.context, + pluginName: pluginName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; +} + +function popContext() { + if (curState.context) curState.context = curState.context.prev; +} + +function element(type) { + if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} + else if (type == "closePlugin") { + var err = false; + if (curState.context) { + err = curState.context.pluginName != pluginName; + popContext(); + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endcloseplugin(err)); + } + else if (type == "string") { + if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); + if (curState.tokenize == inText) popContext(); + return cont(); + } + else return cont(); +} + +function endplugin(startOfLine) { + return function(type) { + if ( + type == "selfclosePlugin" || + type == "endPlugin" + ) + return cont(); + if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} + return cont(); + }; +} + +function endcloseplugin(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endPlugin") return cont(); + return pass(); + }; +} + +function attributes(type) { + if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} + if (type == "equals") return cont(attvalue, attributes); + return pass(); +} +function attvalue(type) { + if (type == "keyword") {setStyle = "string"; return cont();} + if (type == "string") return cont(attvaluemaybe); + return pass(); +} +function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); +} +return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; + }, + token: function(stream, state) { + if (stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = pluginName = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + curState = state; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + return setStyle || style; + }, + indent: function(state, textAfter) { + var context = state.context; + if (context && context.noIndent) return 0; + if (context && /^{\//.test(textAfter)) + context = context.prev; + while (context && !context.startOfLine) + context = context.prev; + if (context) return context.indent + indentUnit; + else return 0; + }, + electricChars: "/" + }; +}); + +CodeMirror.defineMIME("text/tiki", "tiki"); + +}); diff --git a/libraries/codemirror/mode/toml/index.html b/libraries/codemirror/mode/toml/index.html new file mode 100644 index 0000000..90a2a02 --- /dev/null +++ b/libraries/codemirror/mode/toml/index.html @@ -0,0 +1,73 @@ + + +CodeMirror: TOML Mode + + + + + + + + + +
          +

          TOML Mode

          +
          + +

          The TOML Mode

          +

          Created by Forbes Lindesay.

          +

          MIME type defined: text/x-toml.

          +
          diff --git a/libraries/codemirror/mode/toml/toml.js b/libraries/codemirror/mode/toml/toml.js new file mode 100644 index 0000000..baeca15 --- /dev/null +++ b/libraries/codemirror/mode/toml/toml.js @@ -0,0 +1,88 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("toml", function () { + return { + startState: function () { + return { + inString: false, + stringType: "", + lhs: true, + inArray: 0 + }; + }, + token: function (stream, state) { + //check for state changes + if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.inString = true; // Update state + } + if (stream.sol() && state.inArray === 0) { + state.lhs = true; + } + //return state + if (state.inString) { + while (state.inString && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.inString = false; // Clear flag + } else if (stream.peek() === '\\') { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + } else if (state.inArray && stream.peek() === ']') { + stream.next(); + state.inArray--; + return 'bracket'; + } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { + stream.next();//skip closing ] + // array of objects has an extra open & close [] + if (stream.peek() === ']') stream.next(); + return "atom"; + } else if (stream.peek() === "#") { + stream.skipToEnd(); + return "comment"; + } else if (stream.eatSpace()) { + return null; + } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { + return "property"; + } else if (state.lhs && stream.peek() === "=") { + stream.next(); + state.lhs = false; + return null; + } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { + return 'atom'; //date + } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { + return 'atom'; + } else if (!state.lhs && stream.peek() === '[') { + state.inArray++; + stream.next(); + return 'bracket'; + } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { + return 'number'; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; +}); + +CodeMirror.defineMIME('text/x-toml', 'toml'); + +}); diff --git a/libraries/codemirror/mode/tornado/index.html b/libraries/codemirror/mode/tornado/index.html new file mode 100644 index 0000000..8ee7ef5 --- /dev/null +++ b/libraries/codemirror/mode/tornado/index.html @@ -0,0 +1,63 @@ + + +CodeMirror: Tornado template mode + + + + + + + + + + + + +
          +

          Tornado template mode

          +
          + + + +

          Mode for HTML with embedded Tornado template markup.

          + +

          MIME types defined: text/x-tornado

          +
          diff --git a/libraries/codemirror/mode/tornado/tornado.js b/libraries/codemirror/mode/tornado/tornado.js new file mode 100644 index 0000000..dbfbc34 --- /dev/null +++ b/libraries/codemirror/mode/tornado/tornado.js @@ -0,0 +1,68 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("tornado:inner", function() { + var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", + "continue","datetime","def","del","elif","else","end","escape","except", + "exec","extends","false","finally","for","from","global","if","import","in", + "include","is","json_encode","lambda","length","linkify","load","module", + "none","not","or","pass","print","put","raise","raw","return","self","set", + "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; + keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + stream.eatWhile(/[^\{]/); + var ch = stream.next(); + if (ch == "{") { + if (ch = stream.eat(/\{|%|#/)) { + state.tokenize = inTag(ch); + return "tag"; + } + } + } + function inTag (close) { + if (close == "{") { + close = "}"; + } + return function (stream, state) { + var ch = stream.next(); + if ((ch == close) && stream.eat("}")) { + state.tokenize = tokenBase; + return "tag"; + } + if (stream.match(keywords)) { + return "keyword"; + } + return close == "#" ? "comment" : "string"; + }; + } + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + } + }; + }); + + CodeMirror.defineMode("tornado", function(config) { + var htmlBase = CodeMirror.getMode(config, "text/html"); + var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); + return CodeMirror.overlayMode(htmlBase, tornadoInner); + }); + + CodeMirror.defineMIME("text/x-tornado", "tornado"); +}); diff --git a/libraries/codemirror/mode/troff/index.html b/libraries/codemirror/mode/troff/index.html new file mode 100644 index 0000000..7c5a54e --- /dev/null +++ b/libraries/codemirror/mode/troff/index.html @@ -0,0 +1,146 @@ + + +CodeMirror: troff mode + + + + + + + + + + +
          +

          troff

          + + + + + + +

          MIME types defined: troff.

          +
          diff --git a/libraries/codemirror/mode/troff/troff.js b/libraries/codemirror/mode/troff/troff.js new file mode 100644 index 0000000..beca778 --- /dev/null +++ b/libraries/codemirror/mode/troff/troff.js @@ -0,0 +1,82 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod); + else + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('troff', function() { + + var words = {}; + + function tokenBase(stream) { + if (stream.eatSpace()) return null; + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\\') { + if (stream.match('fB') || stream.match('fR') || stream.match('fI') || + stream.match('u') || stream.match('d') || + stream.match('%') || stream.match('&')) { + return 'string'; + } + if (stream.match('m[')) { + stream.skipTo(']'); + stream.next(); + return 'string'; + } + if (stream.match('s+') || stream.match('s-')) { + stream.eatWhile(/[\d-]/); + return 'string'; + } + if (stream.match('\(') || stream.match('*\(')) { + stream.eatWhile(/[\w-]/); + return 'string'; + } + return 'string'; + } + if (sol && (ch === '.' || ch === '\'')) { + if (stream.eat('\\') && stream.eat('\"')) { + stream.skipToEnd(); + return 'comment'; + } + } + if (sol && ch === '.') { + if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { + return 'attribute'; + } + if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { + stream.skipToEnd(); + return 'quote'; + } + if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { + return 'attribute'; + } + } + stream.eatWhile(/[\w-]/); + var cur = stream.current(); + return words.hasOwnProperty(cur) ? words[cur] : null; + } + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]};}, + token: function(stream, state) { + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME('troff', 'troff'); + +}); diff --git a/libraries/codemirror/mode/ttcn-cfg/index.html b/libraries/codemirror/mode/ttcn-cfg/index.html new file mode 100644 index 0000000..4a4cd45 --- /dev/null +++ b/libraries/codemirror/mode/ttcn-cfg/index.html @@ -0,0 +1,115 @@ + + +CodeMirror: TTCN-CFG mode + + + + + + + + +
          +

          TTCN-CFG example

          +
          + +
          + + +
          +

          Language: Testing and Test Control Notation - + Configuration files + (TTCN-CFG) +

          +

          MIME types defined: text/x-ttcn-cfg.

          + +
          +

          The development of this mode has been sponsored by Ericsson + .

          +

          Coded by Asmelash Tsegay Gebretsadkan

          +
          + diff --git a/libraries/codemirror/mode/ttcn-cfg/ttcn-cfg.js b/libraries/codemirror/mode/ttcn-cfg/ttcn-cfg.js new file mode 100644 index 0000000..e108051 --- /dev/null +++ b/libraries/codemirror/mode/ttcn-cfg/ttcn-cfg.js @@ -0,0 +1,214 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {}, + externalCommands = parserConfig.externalCommands || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[\|]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[:=]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "#"){ + stream.skipToEnd(); + return "comment"; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + if (ch == "["){ + stream.eatWhile(/[\w_\]]/); + return "number sectionTitle"; + } + + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (fileNCtrlMaskOptions.propertyIsEnumerable(cur)) + return "negative fileNCtrlMaskOptions"; + if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterNext = stream.peek(); + //look if the character if the quote is like the B in '10100010'B + if (afterNext){ + afterNext = afterNext.toLowerCase(); + if(afterNext == "b" || afterNext == "h" || afterNext == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") + && curPunc != ';') || (ctx.type == "statement" + && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + electricChars: "{}", + lineComment: "#", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) + obj[words[i]] = true; + return obj; + } + + CodeMirror.defineMIME("text/x-ttcn-cfg", { + name: "ttcn-cfg", + keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" + + " TimeStampFormat LogEventTypes SourceInfoFormat" + + " LogEntityName LogSourceInfo DiskFullAction" + + " LogFileNumber LogFileSize MatchingHints Detailed" + + " Compact SubCategories Stack Single None Seconds" + + " DateTime Time Stop Error Retry Delete TCPPort KillTimer" + + " NumHCs UnixSocketsEnabled LocalAddress"), + fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" + + " TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" + + " TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" + + " TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" + + " TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" + + " EXECUTOR ERROR WARNING PORTEVENT TIMEROP" + + " VERDICTOP DEFAULTOP TESTCASE ACTION USER" + + " FUNCTION STATISTICS PARALLEL MATCHING DEBUG" + + " LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" + + " DEBUG_ENCDEC DEBUG_TESTPORT" + + " DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" + + " DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" + + " DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" + + " EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" + + " EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" + + " EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" + + " FUNCTION_RND FUNCTION_UNQUALIFIED" + + " MATCHING_DONE MATCHING_MCSUCCESS" + + " MATCHING_MCUNSUCC MATCHING_MMSUCCESS" + + " MATCHING_MMUNSUCC MATCHING_PCSUCCESS" + + " MATCHING_PCUNSUCC MATCHING_PMSUCCESS" + + " MATCHING_PMUNSUCC MATCHING_PROBLEM" + + " MATCHING_TIMEOUT MATCHING_UNQUALIFIED" + + " PARALLEL_PORTCONN PARALLEL_PORTMAP" + + " PARALLEL_PTC PARALLEL_UNQUALIFIED" + + " PORTEVENT_DUALRECV PORTEVENT_DUALSEND" + + " PORTEVENT_MCRECV PORTEVENT_MCSEND" + + " PORTEVENT_MMRECV PORTEVENT_MMSEND" + + " PORTEVENT_MQUEUE PORTEVENT_PCIN" + + " PORTEVENT_PCOUT PORTEVENT_PMIN" + + " PORTEVENT_PMOUT PORTEVENT_PQUEUE" + + " PORTEVENT_STATE PORTEVENT_UNQUALIFIED" + + " STATISTICS_UNQUALIFIED STATISTICS_VERDICT" + + " TESTCASE_FINISH TESTCASE_START" + + " TESTCASE_UNQUALIFIED TIMEROP_GUARD" + + " TIMEROP_READ TIMEROP_START TIMEROP_STOP" + + " TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" + + " USER_UNQUALIFIED VERDICTOP_FINAL" + + " VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" + + " VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"), + externalCommands: words("BeginControlPart EndControlPart BeginTestCase" + + " EndTestCase"), + multiLineStrings: true + }); +}); \ No newline at end of file diff --git a/libraries/codemirror/mode/ttcn/index.html b/libraries/codemirror/mode/ttcn/index.html new file mode 100644 index 0000000..f1ef811 --- /dev/null +++ b/libraries/codemirror/mode/ttcn/index.html @@ -0,0 +1,118 @@ + + +CodeMirror: TTCN mode + + + + + + + + +
          +

          TTCN example

          +
          + +
          + + +
          +

          Language: Testing and Test Control Notation + (TTCN) +

          +

          MIME types defined: text/x-ttcn, + text/x-ttcn3, text/x-ttcnpp.

          +
          +

          The development of this mode has been sponsored by Ericsson + .

          +

          Coded by Asmelash Tsegay Gebretsadkan

          +
          + diff --git a/libraries/codemirror/mode/ttcn/ttcn.js b/libraries/codemirror/mode/ttcn/ttcn.js new file mode 100644 index 0000000..3051851 --- /dev/null +++ b/libraries/codemirror/mode/ttcn/ttcn.js @@ -0,0 +1,283 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ttcn", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + timerOps = parserConfig.timerOps || {}, + portOps = parserConfig.portOps || {}, + configOps = parserConfig.configOps || {}, + verdictOps = parserConfig.verdictOps || {}, + sutOps = parserConfig.sutOps || {}, + functionOps = parserConfig.functionOps || {}, + + verdictConsts = parserConfig.verdictConsts || {}, + booleanConsts = parserConfig.booleanConsts || {}, + otherConsts = parserConfig.otherConsts || {}, + + types = parserConfig.types || {}, + visibilityModifiers = parserConfig.visibilityModifiers || {}, + templateMatch = parserConfig.templateMatch || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[+\-*&@=<>!\/]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\\:\?\.]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "#"){ + stream.skipToEnd(); + return "atom preprocessor"; + } + if (ch == "%"){ + stream.eatWhile(/\b/); + return "atom ttcn3Macros"; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + if(ch == "@"){ + if(stream.match("try") || stream.match("catch") + || stream.match("lazy")){ + return "keyword"; + } + } + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (builtin.propertyIsEnumerable(cur)) return "builtin"; + + if (timerOps.propertyIsEnumerable(cur)) return "def timerOps"; + if (configOps.propertyIsEnumerable(cur)) return "def configOps"; + if (verdictOps.propertyIsEnumerable(cur)) return "def verdictOps"; + if (portOps.propertyIsEnumerable(cur)) return "def portOps"; + if (sutOps.propertyIsEnumerable(cur)) return "def sutOps"; + if (functionOps.propertyIsEnumerable(cur)) return "def functionOps"; + + if (verdictConsts.propertyIsEnumerable(cur)) return "string verdictConsts"; + if (booleanConsts.propertyIsEnumerable(cur)) return "string booleanConsts"; + if (otherConsts.propertyIsEnumerable(cur)) return "string otherConsts"; + + if (types.propertyIsEnumerable(cur)) return "builtin types"; + if (visibilityModifiers.propertyIsEnumerable(cur)) + return "builtin visibilityModifiers"; + if (templateMatch.propertyIsEnumerable(cur)) return "atom templateMatch"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterQuote = stream.peek(); + //look if the character after the quote is like the B in '10100010'B + if (afterQuote){ + afterQuote = afterQuote.toLowerCase(); + if(afterQuote == "b" || afterQuote == "h" || afterQuote == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && + (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || + (ctx.type == "statement" && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + + state.startOfLine = false; + + return style; + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function def(mimes, mode) { + if (typeof mimes == "string") mimes = [mimes]; + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + + add(mode.keywords); + add(mode.builtin); + add(mode.timerOps); + add(mode.portOps); + + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-ttcn", "text/x-ttcn3", "text/x-ttcnpp"], { + name: "ttcn", + keywords: words("activate address alive all alt altstep and and4b any" + + " break case component const continue control deactivate" + + " display do else encode enumerated except exception" + + " execute extends extension external for from function" + + " goto group if import in infinity inout interleave" + + " label language length log match message mixed mod" + + " modifies module modulepar mtc noblock not not4b nowait" + + " of on optional or or4b out override param pattern port" + + " procedure record recursive rem repeat return runs select" + + " self sender set signature system template testcase to" + + " type union value valueof var variant while with xor xor4b"), + builtin: words("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue" + + " decomp decvalue float2int float2str hex2bit hex2int" + + " hex2oct hex2str int2bit int2char int2float int2hex" + + " int2oct int2str int2unichar isbound ischosen ispresent" + + " isvalue lengthof log2str oct2bit oct2char oct2hex oct2int" + + " oct2str regexp replace rnd sizeof str2bit str2float" + + " str2hex str2int str2oct substr unichar2int unichar2char" + + " enum2int"), + types: words("anytype bitstring boolean char charstring default float" + + " hexstring integer objid octetstring universal verdicttype timer"), + timerOps: words("read running start stop timeout"), + portOps: words("call catch check clear getcall getreply halt raise receive" + + " reply send trigger"), + configOps: words("create connect disconnect done kill killed map unmap"), + verdictOps: words("getverdict setverdict"), + sutOps: words("action"), + functionOps: words("apply derefers refers"), + + verdictConsts: words("error fail inconc none pass"), + booleanConsts: words("true false"), + otherConsts: words("null NULL omit"), + + visibilityModifiers: words("private public friend"), + templateMatch: words("complement ifpresent subset superset permutation"), + multiLineStrings: true + }); +}); diff --git a/libraries/codemirror/mode/turtle/index.html b/libraries/codemirror/mode/turtle/index.html new file mode 100644 index 0000000..a4962b6 --- /dev/null +++ b/libraries/codemirror/mode/turtle/index.html @@ -0,0 +1,50 @@ + + +CodeMirror: Turtle mode + + + + + + + + + +
          +

          Turtle mode

          +
          + + +

          MIME types defined: text/turtle.

          + +
          diff --git a/libraries/codemirror/mode/turtle/turtle.js b/libraries/codemirror/mode/turtle/turtle.js new file mode 100644 index 0000000..0988f0a --- /dev/null +++ b/libraries/codemirror/mode/turtle/turtle.js @@ -0,0 +1,162 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("turtle", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp([]); + var keywords = wordRegexp(["@prefix", "@base", "a"]); + var operatorChars = /[*+\-<>=&|]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return null; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } + else if (ch == ":") { + return "operator"; + } else { + stream.eatWhile(/[_\w\d]/); + if(stream.peek() == ":") { + return "variable-3"; + } else { + var word = stream.current(); + + if(keywords.test(word)) { + return "meta"; + } + + if(ch >= "A" && ch <= "Z") { + return "comment"; + } else { + return "keyword"; + } + } + var word = stream.current(); + if (ops.test(word)) + return null; + else if (keywords.test(word)) + return "meta"; + else + return "variable"; + } + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) popContext(state); + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/turtle", "turtle"); + +}); diff --git a/libraries/codemirror/mode/twig/index.html b/libraries/codemirror/mode/twig/index.html new file mode 100644 index 0000000..02493a5 --- /dev/null +++ b/libraries/codemirror/mode/twig/index.html @@ -0,0 +1,45 @@ + + +CodeMirror: Twig mode + + + + + + + + + +
          +

          Twig mode

          +
          + +
          diff --git a/libraries/codemirror/mode/twig/twig.js b/libraries/codemirror/mode/twig/twig.js new file mode 100644 index 0000000..aa676dc --- /dev/null +++ b/libraries/codemirror/mode/twig/twig.js @@ -0,0 +1,132 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("twig", function() { + var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"], + operator = /^[+\-*&%=<>!?|~^]/, + sign = /^[:\[\(\{]/, + atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"], + number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; + + keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); + atom = new RegExp("((" + atom.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + var ch = stream.peek(); + + //Comment + if (state.incomment) { + if (!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Tag + } else if (state.intag) { + //After operator + if (state.operator) { + state.operator = false; + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + } + //After sign + if (state.sign) { + state.sign = false; + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + } + + if (state.instring) { + if (ch == state.instring) { + state.instring = false; + } + stream.next(); + return "string"; + } else if (ch == "'" || ch == '"') { + state.instring = ch; + stream.next(); + return "string"; + } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { + state.intag = false; + return "tag"; + } else if (stream.match(operator)) { + state.operator = true; + return "operator"; + } else if (stream.match(sign)) { + state.sign = true; + } else { + if (stream.eat(" ") || stream.sol()) { + if (stream.match(keywords)) { + return "keyword"; + } + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + if (stream.sol()) { + stream.next(); + } + } else { + stream.next(); + } + + } + return "variable"; + } else if (stream.eat("{")) { + if (ch = stream.eat("#")) { + state.incomment = true; + if (!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Open tag + } else if (ch = stream.eat(/\{|%/)) { + //Cache close tag + state.intag = ch; + if (ch == "{") { + state.intag = "}"; + } + stream.eat("-"); + return "tag"; + } + } + stream.next(); + }; + + return { + startState: function () { + return {}; + }, + token: function (stream, state) { + return tokenBase(stream, state); + } + }; + }); + + CodeMirror.defineMIME("text/x-twig", "twig"); +}); diff --git a/libraries/codemirror/mode/vb/index.html b/libraries/codemirror/mode/vb/index.html new file mode 100644 index 0000000..adcc44f --- /dev/null +++ b/libraries/codemirror/mode/vb/index.html @@ -0,0 +1,102 @@ + + +CodeMirror: VB.NET mode + + + + + + + + + + + +
          +

          VB.NET mode

          + + + +
          + +
          +
          
          +  

          MIME type defined: text/x-vb.

          + +
          diff --git a/libraries/codemirror/mode/vb/vb.js b/libraries/codemirror/mode/vb/vb.js new file mode 100644 index 0000000..d78f91f --- /dev/null +++ b/libraries/codemirror/mode/vb/vb.js @@ -0,0 +1,276 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("vb", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); + var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try']; + var middleKeywords = ['else','elseif','case', 'catch']; + var endKeywords = ['next','loop']; + + var operatorKeywords = ['and', 'or', 'not', 'xor', 'in']; + var wordOperators = wordRegexp(operatorKeywords); + var commonKeywords = ['as', 'dim', 'break', 'continue','optional', 'then', 'until', + 'goto', 'byval','byref','new','handles','property', 'return', + 'const','private', 'protected', 'friend', 'public', 'shared', 'static', 'true','false']; + var commontypes = ['integer','string','double','decimal','boolean','short','char', 'float','single']; + + var keywords = wordRegexp(commonKeywords); + var types = wordRegexp(commontypes); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + + var indentInfo = null; + + CodeMirror.registerHelper("hintWords", "vb", openingKeywords.concat(middleKeywords).concat(endKeywords) + .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)); + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + return 'keyword'; + } + if (stream.match(closing)) { + dedent(stream,state); + return 'keyword'; + } + + if (stream.match(types)) { + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + current = stream.current(); + if (style === 'variable') { + return 'variable'; + } else { + return ERRORCLASS; + } + } + + + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state ); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + }, + + lineComment: "'" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-vb", "vb"); + +}); diff --git a/libraries/codemirror/mode/vbscript/index.html b/libraries/codemirror/mode/vbscript/index.html new file mode 100644 index 0000000..ad7532d --- /dev/null +++ b/libraries/codemirror/mode/vbscript/index.html @@ -0,0 +1,55 @@ + + +CodeMirror: VBScript mode + + + + + + + + + +
          +

          VBScript mode

          + + +
          + + + +

          MIME types defined: text/vbscript.

          +
          diff --git a/libraries/codemirror/mode/vbscript/vbscript.js b/libraries/codemirror/mode/vbscript/vbscript.js new file mode 100644 index 0000000..b66df22 --- /dev/null +++ b/libraries/codemirror/mode/vbscript/vbscript.js @@ -0,0 +1,350 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/* +For extra ASP classic objects, initialize CodeMirror instance with this option: + isASP: true + +E.G.: + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + isASP: true + }); +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("vbscript", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); + var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); + var singleDelimiters = new RegExp('^[\\.,]'); + var brakets = new RegExp('^[\\(\\)]'); + var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; + var middleKeywords = ['else','elseif','case']; + var endKeywords = ['next','loop','wend']; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); + var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', + 'byval','byref','new','property', 'exit', 'in', + 'const','private', 'public', + 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; + + //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx + var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; + //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx + var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', + 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', + 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', + 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', + 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', + 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; + + //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx + var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', + 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', + 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', + 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', + 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', + 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', + 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; + //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx + var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; + var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; + var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; + + var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; + var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response + 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request + 'contents', 'staticobjects', //application + 'codepage', 'lcid', 'sessionid', 'timeout', //session + 'scripttimeout']; //server + var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response + 'binaryread', //request + 'remove', 'removeall', 'lock', 'unlock', //application + 'abandon', //session + 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server + + var knownWords = knownMethods.concat(knownProperties); + + builtinObjsWords = builtinObjsWords.concat(builtinConsts); + + if (conf.isASP){ + builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); + knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); + }; + + var keywords = wordRegexp(commonkeywords); + var atoms = wordRegexp(atomWords); + var builtinFuncs = wordRegexp(builtinFuncsWords); + var builtinObjs = wordRegexp(builtinObjsWords); + var known = wordRegexp(knownWords); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + var noIndentWords = wordRegexp(['on error resume next', 'exit']); + var comment = wordRegexp(['rem']); + + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return 'space'; + //return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + if (stream.match(comment)){ + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(brakets)) { + return "bracket"; + } + + if (stream.match(noIndentWords)) { + state.doInCurrentLine = true; + + return 'keyword'; + } + + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + + return 'keyword'; + } + if (stream.match(closing)) { + if (! state.doInCurrentLine) + dedent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(atoms)) { + return 'atom'; + } + + if (stream.match(known)) { + return 'variable-2'; + } + + if (stream.match(builtinFuncs)) { + return 'builtin'; + } + + if (stream.match(builtinObjs)){ + return 'variable-2'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + + current = stream.current(); + if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { + if (style === 'builtin' || style === 'keyword') style='variable'; + if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; + + return style; + } else { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false, + ignoreKeyword: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + if (style==='space') style=null; + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + } + + }; + return external; +}); + +CodeMirror.defineMIME("text/vbscript", "vbscript"); + +}); diff --git a/libraries/codemirror/mode/velocity/index.html b/libraries/codemirror/mode/velocity/index.html new file mode 100644 index 0000000..2747878 --- /dev/null +++ b/libraries/codemirror/mode/velocity/index.html @@ -0,0 +1,118 @@ + + +CodeMirror: Velocity mode + + + + + + + + + + +
          +

          Velocity mode

          +
          + + +

          MIME types defined: text/velocity.

          + +
          diff --git a/libraries/codemirror/mode/velocity/velocity.js b/libraries/codemirror/mode/velocity/velocity.js new file mode 100644 index 0000000..8fc4f95 --- /dev/null +++ b/libraries/codemirror/mode/velocity/velocity.js @@ -0,0 +1,201 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("velocity", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = parseWords("#end #else #break #stop #[[ #]] " + + "#{end} #{else} #{break} #{stop}"); + var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); + var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); + var isOperatorChar = /[+\-*&%=<>!?:\/|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + // start of unparsed string? + if ((ch == "'") && state.inParams) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenString(ch)); + } + // start of parsed string? + else if ((ch == '"')) { + state.lastTokenWasBuiltin = false; + if (state.inString) { + state.inString = false; + return "string"; + } + else if (state.inParams) + return chain(stream, state, tokenString(ch)); + } + // is it one of the special signs []{}().,;? Seperator? + else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) + state.inParams = true; + else if (ch == ")") { + state.inParams = false; + state.lastTokenWasBuiltin = true; + } + return null; + } + // start of a number value? + else if (/\d/.test(ch)) { + state.lastTokenWasBuiltin = false; + stream.eatWhile(/[\w\.]/); + return "number"; + } + // multi line comment? + else if (ch == "#" && stream.eat("*")) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenComment); + } + // unparsed content? + else if (ch == "#" && stream.match(/ *\[ *\[/)) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenUnparsed); + } + // single line comment? + else if (ch == "#" && stream.eat("#")) { + state.lastTokenWasBuiltin = false; + stream.skipToEnd(); + return "comment"; + } + // variable? + else if (ch == "$") { + stream.eatWhile(/[\w\d\$_\.{}]/); + // is it one of the specials? + if (specials && specials.propertyIsEnumerable(stream.current())) { + return "keyword"; + } + else { + state.lastTokenWasBuiltin = true; + state.beforeParams = true; + return "builtin"; + } + } + // is it a operator? + else if (isOperatorChar.test(ch)) { + state.lastTokenWasBuiltin = false; + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + // get the whole word + stream.eatWhile(/[\w\$_{}@]/); + var word = stream.current(); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + // is it one of the listed functions? + if (functions && functions.propertyIsEnumerable(word) || + (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && + !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { + state.beforeParams = true; + state.lastTokenWasBuiltin = false; + return "keyword"; + } + if (state.inString) { + state.lastTokenWasBuiltin = false; + return "string"; + } + if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) + return "builtin"; + // default: just a "word" + state.lastTokenWasBuiltin = false; + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if ((next == quote) && !escaped) { + end = true; + break; + } + if (quote=='"' && stream.peek() == '$' && !escaped) { + state.inString = true; + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + // Interface + + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false, + inString: false, + lastTokenWasBuiltin: false + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + blockCommentStart: "#*", + blockCommentEnd: "*#", + lineComment: "##", + fold: "velocity" + }; +}); + +CodeMirror.defineMIME("text/velocity", "velocity"); + +}); diff --git a/libraries/codemirror/mode/verilog/index.html b/libraries/codemirror/mode/verilog/index.html new file mode 100644 index 0000000..96b3d64 --- /dev/null +++ b/libraries/codemirror/mode/verilog/index.html @@ -0,0 +1,120 @@ + + +CodeMirror: Verilog/SystemVerilog mode + + + + + + + + + + +
          +

          SystemVerilog mode

          + +
          + + + +

          +Syntax highlighting and indentation for the Verilog and SystemVerilog languages (IEEE 1800). +

          Configuration options:

          +
            +
          • noIndentKeywords - List of keywords which should not cause identation to increase. E.g. ["package", "module"]. Default: None
          • +
          +

          + +

          MIME types defined: text/x-verilog and text/x-systemverilog.

          +
          diff --git a/libraries/codemirror/mode/verilog/test.js b/libraries/codemirror/mode/verilog/test.js new file mode 100644 index 0000000..9c8c094 --- /dev/null +++ b/libraries/codemirror/mode/verilog/test.js @@ -0,0 +1,273 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 4}, "verilog"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("binary_literals", + "[number 1'b0]", + "[number 1'b1]", + "[number 1'bx]", + "[number 1'bz]", + "[number 1'bX]", + "[number 1'bZ]", + "[number 1'B0]", + "[number 1'B1]", + "[number 1'Bx]", + "[number 1'Bz]", + "[number 1'BX]", + "[number 1'BZ]", + "[number 1'b0]", + "[number 1'b1]", + "[number 2'b01]", + "[number 2'bxz]", + "[number 2'b11]", + "[number 2'b10]", + "[number 2'b1Z]", + "[number 12'b0101_0101_0101]", + "[number 1'b 0]", + "[number 'b0101]" + ); + + MT("octal_literals", + "[number 3'o7]", + "[number 3'O7]", + "[number 3'so7]", + "[number 3'SO7]" + ); + + MT("decimal_literals", + "[number 0]", + "[number 1]", + "[number 7]", + "[number 123_456]", + "[number 'd33]", + "[number 8'd255]", + "[number 8'D255]", + "[number 8'sd255]", + "[number 8'SD255]", + "[number 32'd123]", + "[number 32 'd123]", + "[number 32 'd 123]" + ); + + MT("hex_literals", + "[number 4'h0]", + "[number 4'ha]", + "[number 4'hF]", + "[number 4'hx]", + "[number 4'hz]", + "[number 4'hX]", + "[number 4'hZ]", + "[number 32'hdc78]", + "[number 32'hDC78]", + "[number 32 'hDC78]", + "[number 32'h DC78]", + "[number 32 'h DC78]", + "[number 32'h44x7]", + "[number 32'hFFF?]" + ); + + MT("real_number_literals", + "[number 1.2]", + "[number 0.1]", + "[number 2394.26331]", + "[number 1.2E12]", + "[number 1.2e12]", + "[number 1.30e-2]", + "[number 0.1e-0]", + "[number 23E10]", + "[number 29E-2]", + "[number 236.123_763_e-12]" + ); + + MT("operators", + "[meta ^]" + ); + + MT("keywords", + "[keyword logic]", + "[keyword logic] [variable foo]", + "[keyword reg] [variable abc]" + ); + + MT("variables", + "[variable _leading_underscore]", + "[variable _if]", + "[number 12] [variable foo]", + "[variable foo] [number 14]" + ); + + MT("tick_defines", + "[def `FOO]", + "[def `foo]", + "[def `FOO_bar]" + ); + + MT("system_calls", + "[meta $display]", + "[meta $vpi_printf]" + ); + + MT("line_comment", "[comment // Hello world]"); + + // Alignment tests + MT("align_port_map_style1", + /** + * mod mod(.a(a), + * .b(b) + * ); + */ + "[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],", + " .[variable b][bracket (][variable b][bracket )]", + " [bracket )];", + "" + ); + + MT("align_port_map_style2", + /** + * mod mod( + * .a(a), + * .b(b) + * ); + */ + "[variable mod] [variable mod][bracket (]", + " .[variable a][bracket (][variable a][bracket )],", + " .[variable b][bracket (][variable b][bracket )]", + "[bracket )];", + "" + ); + + // Indentation tests + MT("indent_single_statement_if", + "[keyword if] [bracket (][variable foo][bracket )]", + " [keyword break];", + "" + ); + + MT("no_indent_after_single_line_if", + "[keyword if] [bracket (][variable foo][bracket )] [keyword break];", + "" + ); + + MT("indent_after_if_begin_same_line", + "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", + " [keyword break];", + " [keyword break];", + "[keyword end]", + "" + ); + + MT("indent_after_if_begin_next_line", + "[keyword if] [bracket (][variable foo][bracket )]", + " [keyword begin]", + " [keyword break];", + " [keyword break];", + " [keyword end]", + "" + ); + + MT("indent_single_statement_if_else", + "[keyword if] [bracket (][variable foo][bracket )]", + " [keyword break];", + "[keyword else]", + " [keyword break];", + "" + ); + + MT("indent_if_else_begin_same_line", + "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", + " [keyword break];", + " [keyword break];", + "[keyword end] [keyword else] [keyword begin]", + " [keyword break];", + " [keyword break];", + "[keyword end]", + "" + ); + + MT("indent_if_else_begin_next_line", + "[keyword if] [bracket (][variable foo][bracket )]", + " [keyword begin]", + " [keyword break];", + " [keyword break];", + " [keyword end]", + "[keyword else]", + " [keyword begin]", + " [keyword break];", + " [keyword break];", + " [keyword end]", + "" + ); + + MT("indent_if_nested_without_begin", + "[keyword if] [bracket (][variable foo][bracket )]", + " [keyword if] [bracket (][variable foo][bracket )]", + " [keyword if] [bracket (][variable foo][bracket )]", + " [keyword break];", + "" + ); + + MT("indent_case", + "[keyword case] [bracket (][variable state][bracket )]", + " [variable FOO]:", + " [keyword break];", + " [variable BAR]:", + " [keyword break];", + "[keyword endcase]", + "" + ); + + MT("unindent_after_end_with_preceding_text", + "[keyword begin]", + " [keyword break]; [keyword end]", + "" + ); + + MT("export_function_one_line_does_not_indent", + "[keyword export] [string \"DPI-C\"] [keyword function] [variable helloFromSV];", + "" + ); + + MT("export_task_one_line_does_not_indent", + "[keyword export] [string \"DPI-C\"] [keyword task] [variable helloFromSV];", + "" + ); + + MT("export_function_two_lines_indents_properly", + "[keyword export]", + " [string \"DPI-C\"] [keyword function] [variable helloFromSV];", + "" + ); + + MT("export_task_two_lines_indents_properly", + "[keyword export]", + " [string \"DPI-C\"] [keyword task] [variable helloFromSV];", + "" + ); + + MT("import_function_one_line_does_not_indent", + "[keyword import] [string \"DPI-C\"] [keyword function] [variable helloFromC];", + "" + ); + + MT("import_task_one_line_does_not_indent", + "[keyword import] [string \"DPI-C\"] [keyword task] [variable helloFromC];", + "" + ); + + MT("import_package_single_line_does_not_indent", + "[keyword import] [variable p]::[variable x];", + "[keyword import] [variable p]::[variable y];", + "" + ); + + MT("covergoup_with_function_indents_properly", + "[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];", + " [variable c] : [keyword coverpoint] [variable c];", + "[keyword endgroup]: [variable cg]", + "" + ); + +})(); diff --git a/libraries/codemirror/mode/verilog/verilog.js b/libraries/codemirror/mode/verilog/verilog.js new file mode 100644 index 0000000..9d2a4cd --- /dev/null +++ b/libraries/codemirror/mode/verilog/verilog.js @@ -0,0 +1,537 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("verilog", function(config, parserConfig) { + + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + noIndentKeywords = parserConfig.noIndentKeywords || [], + multiLineStrings = parserConfig.multiLineStrings, + hooks = parserConfig.hooks || {}; + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + /** + * Keywords from IEEE 1800-2012 + */ + var keywords = words( + "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); + + /** Operators from IEEE 1800-2012 + unary_operator ::= + + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ + binary_operator ::= + + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** + | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< + | -> | <-> + inc_or_dec_operator ::= ++ | -- + unary_module_path_operator ::= + ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ + binary_module_path_operator ::= + == | != | && | || | & | | | ^ | ^~ | ~^ + */ + var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/; + var isBracketChar = /[\[\]{}()]/; + + var unsignedNumber = /\d[0-9_]*/; + var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; + var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; + var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; + var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; + var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; + + var closingBracketOrWord = /^((\w+)|[)}\]])/; + var closingBracket = /[)}\]]/; + + var curPunc; + var curKeyword; + + // Block openings which are closed by a matching keyword in the form of ("end" + keyword) + // E.g. "task" => "endtask" + var blockKeywords = words( + "case checker class clocking config function generate interface module package" + + "primitive program property specify sequence table task" + ); + + // Opening/closing pairs + var openClose = {}; + for (var keyword in blockKeywords) { + openClose[keyword] = "end" + keyword; + } + openClose["begin"] = "end"; + openClose["casex"] = "endcase"; + openClose["casez"] = "endcase"; + openClose["do" ] = "while"; + openClose["fork" ] = "join;join_any;join_none"; + openClose["covergroup"] = "endgroup"; + + for (var i in noIndentKeywords) { + var keyword = noIndentKeywords[i]; + if (openClose[keyword]) { + openClose[keyword] = undefined; + } + } + + // Keywords which open statements that are ended with a semi-colon + var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while"); + + function tokenBase(stream, state) { + var ch = stream.peek(), style; + if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; + if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) + return style; + + if (/[,;:\.]/.test(ch)) { + curPunc = stream.next(); + return null; + } + if (isBracketChar.test(ch)) { + curPunc = stream.next(); + return "bracket"; + } + // Macros (tick-defines) + if (ch == '`') { + stream.next(); + if (stream.eatWhile(/[\w\$_]/)) { + return "def"; + } else { + return null; + } + } + // System calls + if (ch == '$') { + stream.next(); + if (stream.eatWhile(/[\w\$_]/)) { + return "meta"; + } else { + return null; + } + } + // Time literals + if (ch == '#') { + stream.next(); + stream.eatWhile(/[\d_.]/); + return "def"; + } + // Strings + if (ch == '"') { + stream.next(); + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + // Comments + if (ch == "/") { + stream.next(); + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + stream.backUp(1); + } + + // Numeric literals + if (stream.match(realLiteral) || + stream.match(decimalLiteral) || + stream.match(binaryLiteral) || + stream.match(octLiteral) || + stream.match(hexLiteral) || + stream.match(unsignedNumber) || + stream.match(realLiteral)) { + return "number"; + } + + // Operators + if (stream.eatWhile(isOperatorChar)) { + return "meta"; + } + + // Keywords / plain variables + if (stream.eatWhile(/[\w\$_]/)) { + var cur = stream.current(); + if (keywords[cur]) { + if (openClose[cur]) { + curPunc = "newblock"; + } + if (statementKeywords[cur]) { + curPunc = "newstatement"; + } + curKeyword = cur; + return "keyword"; + } + return "variable"; + } + + stream.next(); + return null; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + var c = new Context(indent, col, type, null, state.context); + return state.context = c; + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") { + state.indented = state.context.indented; + } + return state.context = state.context.prev; + } + + function isClosing(text, contextClosing) { + if (text == contextClosing) { + return true; + } else { + // contextClosing may be mulitple keywords separated by ; + var closingKeywords = contextClosing.split(";"); + for (var i in closingKeywords) { + if (text == closingKeywords[i]) { + return true; + } + } + return false; + } + } + + function buildElectricInputRegEx() { + // Reindentation should occur on any bracket char: {}()[] + // or on a match of any of the block closing keywords, at + // the end of a line + var allClosings = []; + for (var i in openClose) { + if (openClose[i]) { + var closings = openClose[i].split(";"); + for (var j in closings) { + allClosings.push(closings[j]); + } + } + } + var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); + return re; + } + + // Interface + return { + + // Regex to force current line to reindent + electricInput: buildElectricInputRegEx(), + + startState: function(basecolumn) { + var state = { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + if (hooks.startState) hooks.startState(state); + return state; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (hooks.token) hooks.token(stream, state); + if (stream.eatSpace()) return null; + curPunc = null; + curKeyword = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta" || style == "variable") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == ctx.type) { + popContext(state); + } else if ((curPunc == ";" && ctx.type == "statement") || + (ctx.type && isClosing(curKeyword, ctx.type))) { + ctx = popContext(state); + while (ctx && ctx.type == "statement") ctx = popContext(state); + } else if (curPunc == "{") { + pushContext(state, stream.column(), "}"); + } else if (curPunc == "[") { + pushContext(state, stream.column(), "]"); + } else if (curPunc == "(") { + pushContext(state, stream.column(), ")"); + } else if (ctx && ctx.type == "endcase" && curPunc == ":") { + pushContext(state, stream.column(), "statement"); + } else if (curPunc == "newstatement") { + pushContext(state, stream.column(), "statement"); + } else if (curPunc == "newblock") { + if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) { + // The 'function' keyword can appear in some other contexts where it actually does not + // indicate a function (import/export DPI and covergroup definitions). + // Do nothing in this case + } else if (curKeyword == "task" && ctx && ctx.type == "statement") { + // Same thing for task + } else { + var close = openClose[curKeyword]; + pushContext(state, stream.column(), close); + } + } + + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + if (hooks.indent) { + var fromHook = hooks.indent(state); + if (fromHook >= 0) return fromHook; + } + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = false; + var possibleClosing = textAfter.match(closingBracketOrWord); + if (possibleClosing) + closing = isClosing(possibleClosing[0], ctx.type); + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); + else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + + CodeMirror.defineMIME("text/x-verilog", { + name: "verilog" + }); + + CodeMirror.defineMIME("text/x-systemverilog", { + name: "verilog" + }); + + // TLVVerilog mode + + var tlvchScopePrefixes = { + ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier", + "@-": "variable-3", "@": "variable-3", "?": "qualifier" + }; + + function tlvGenIndent(stream, state) { + var tlvindentUnit = 2; + var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation(); + switch (state.tlvCurCtlFlowChar) { + case "\\": + curIndent = 0; + break; + case "|": + if (state.tlvPrevPrevCtlFlowChar == "@") { + indentUnitRq = -2; //-2 new pipe rq after cur pipe + break; + } + if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) + indentUnitRq = 1; // +1 new scope + break; + case "M": // m4 + if (state.tlvPrevPrevCtlFlowChar == "@") { + indentUnitRq = -2; //-2 new inst rq after pipe + break; + } + if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) + indentUnitRq = 1; // +1 new scope + break; + case "@": + if (state.tlvPrevCtlFlowChar == "S") + indentUnitRq = -1; // new pipe stage after stmts + if (state.tlvPrevCtlFlowChar == "|") + indentUnitRq = 1; // 1st pipe stage + break; + case "S": + if (state.tlvPrevCtlFlowChar == "@") + indentUnitRq = 1; // flow in pipe stage + if (tlvchScopePrefixes[state.tlvPrevCtlFlowChar]) + indentUnitRq = 1; // +1 new scope + break; + } + var statementIndentUnit = tlvindentUnit; + rtnIndent = curIndent + (indentUnitRq*statementIndentUnit); + return rtnIndent >= 0 ? rtnIndent : curIndent; + } + + CodeMirror.defineMIME("text/x-tlv", { + name: "verilog", + hooks: { + "\\": function(stream, state) { + var vxIndent = 0, style = false; + var curPunc = stream.string; + if ((stream.sol()) && ((/\\SV/.test(stream.string)) || (/\\TLV/.test(stream.string)))) { + curPunc = (/\\TLV_version/.test(stream.string)) + ? "\\TLV_version" : stream.string; + stream.skipToEnd(); + if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;}; + if ((/\\TLV/.test(curPunc) && !state.vxCodeActive) + || (curPunc=="\\TLV_version" && state.vxCodeActive)) {state.vxCodeActive = true;}; + style = "keyword"; + state.tlvCurCtlFlowChar = state.tlvPrevPrevCtlFlowChar + = state.tlvPrevCtlFlowChar = ""; + if (state.vxCodeActive == true) { + state.tlvCurCtlFlowChar = "\\"; + vxIndent = tlvGenIndent(stream, state); + } + state.vxIndentRq = vxIndent; + } + return style; + }, + tokenBase: function(stream, state) { + var vxIndent = 0, style = false; + var tlvisOperatorChar = /[\[\]=:]/; + var tlvkpScopePrefixs = { + "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable", + "^^":"attribute", "^":"attribute"}; + var ch = stream.peek(); + var vxCurCtlFlowCharValueAtStart = state.tlvCurCtlFlowChar; + if (state.vxCodeActive == true) { + if (/[\[\]{}\(\);\:]/.test(ch)) { + // bypass nesting and 1 char punc + style = "meta"; + stream.next(); + } else if (ch == "/") { + stream.next(); + if (stream.eat("/")) { + stream.skipToEnd(); + style = "comment"; + state.tlvCurCtlFlowChar = "S"; + } else { + stream.backUp(1); + } + } else if (ch == "@") { + // pipeline stage + style = tlvchScopePrefixes[ch]; + state.tlvCurCtlFlowChar = "@"; + stream.next(); + stream.eatWhile(/[\w\$_]/); + } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive) + // m4 pre proc + stream.skipTo("("); + style = "def"; + state.tlvCurCtlFlowChar = "M"; + } else if (ch == "!" && stream.sol()) { + // v stmt in tlv region + // state.tlvCurCtlFlowChar = "S"; + style = "comment"; + stream.next(); + } else if (tlvisOperatorChar.test(ch)) { + // operators + stream.eatWhile(tlvisOperatorChar); + style = "operator"; + } else if (ch == "#") { + // phy hier + state.tlvCurCtlFlowChar = (state.tlvCurCtlFlowChar == "") + ? ch : state.tlvCurCtlFlowChar; + stream.next(); + stream.eatWhile(/[+-]\d/); + style = "tag"; + } else if (tlvkpScopePrefixs.propertyIsEnumerable(ch)) { + // special TLV operators + style = tlvkpScopePrefixs[ch]; + state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? "S" : state.tlvCurCtlFlowChar; // stmt + stream.next(); + stream.match(/[a-zA-Z_0-9]+/); + } else if (style = tlvchScopePrefixes[ch] || false) { + // special TLV operators + state.tlvCurCtlFlowChar = state.tlvCurCtlFlowChar == "" ? ch : state.tlvCurCtlFlowChar; + stream.next(); + stream.match(/[a-zA-Z_0-9]+/); + } + if (state.tlvCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change + vxIndent = tlvGenIndent(stream, state); + state.vxIndentRq = vxIndent; + } + } + return style; + }, + token: function(stream, state) { + if (state.vxCodeActive == true && stream.sol() && state.tlvCurCtlFlowChar != "") { + state.tlvPrevPrevCtlFlowChar = state.tlvPrevCtlFlowChar; + state.tlvPrevCtlFlowChar = state.tlvCurCtlFlowChar; + state.tlvCurCtlFlowChar = ""; + } + }, + indent: function(state) { + return (state.vxCodeActive == true) ? state.vxIndentRq : -1; + }, + startState: function(state) { + state.tlvCurCtlFlowChar = ""; + state.tlvPrevCtlFlowChar = ""; + state.tlvPrevPrevCtlFlowChar = ""; + state.vxCodeActive = true; + state.vxIndentRq = 0; + } + } + }); +}); diff --git a/libraries/codemirror/mode/vhdl/index.html b/libraries/codemirror/mode/vhdl/index.html new file mode 100644 index 0000000..3051bc3 --- /dev/null +++ b/libraries/codemirror/mode/vhdl/index.html @@ -0,0 +1,95 @@ + + +CodeMirror: VHDL mode + + + + + + + + + + +
          +

          VHDL mode

          + +
          + + + +

          +Syntax highlighting and indentation for the VHDL language. +

          Configuration options:

          +
            +
          • atoms - List of atom words. Default: "null"
          • +
          • hooks - List of meta hooks. Default: ["`", "$"]
          • +
          • multiLineStrings - Whether multi-line strings are accepted. Default: false
          • +
          +

          + +

          MIME types defined: text/x-vhdl.

          +
          diff --git a/libraries/codemirror/mode/vhdl/vhdl.js b/libraries/codemirror/mode/vhdl/vhdl.js new file mode 100644 index 0000000..d3b555a --- /dev/null +++ b/libraries/codemirror/mode/vhdl/vhdl.js @@ -0,0 +1,189 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Originally written by Alf Nielsen, re-written by Michael Zhou +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function words(str) { + var obj = {}, words = str.split(","); + for (var i = 0; i < words.length; ++i) { + var allCaps = words[i].toUpperCase(); + var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1); + obj[words[i]] = true; + obj[allCaps] = true; + obj[firstCap] = true; + } + return obj; +} + +function metaHook(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; +} + +CodeMirror.defineMode("vhdl", function(config, parserConfig) { + var indentUnit = config.indentUnit, + atoms = parserConfig.atoms || words("null"), + hooks = parserConfig.hooks || {"`": metaHook, "$": metaHook}, + multiLineStrings = parserConfig.multiLineStrings; + + var keywords = words("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block," + + "body,buffer,bus,case,component,configuration,constant,disconnent,downto,else,elsif,end,end block,end case," + + "end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for," + + "function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage," + + "literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map," + + "postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal," + + "sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"); + + var blockKeywords = words("architecture,entity,begin,case,port,else,elsif,end,for,function,if"); + + var isOperatorChar = /[&|~> + +CodeMirror: Vue.js mode + + + + + + + + + + + + + + + + + + + + + +
          +

          Vue.js mode

          +
          + + +

          MIME types defined: text/x-vue

          + +
          diff --git a/libraries/codemirror/mode/vue/vue.js b/libraries/codemirror/mode/vue/vue.js new file mode 100644 index 0000000..d89a552 --- /dev/null +++ b/libraries/codemirror/mode/vue/vue.js @@ -0,0 +1,69 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function (mod) { + "use strict"; + if (typeof exports === "object" && typeof module === "object") {// CommonJS + mod(require("../../lib/codemirror"), + require("../../addon/mode/overlay"), + require("../xml/xml"), + require("../javascript/javascript"), + require("../coffeescript/coffeescript"), + require("../css/css"), + require("../sass/sass"), + require("../stylus/stylus"), + require("../jade/jade"), + require("../handlebars/handlebars")); + } else if (typeof define === "function" && define.amd) { // AMD + define(["../../lib/codemirror", + "../../addon/mode/overlay", + "../xml/xml", + "../javascript/javascript", + "../coffeescript/coffeescript", + "../css/css", + "../sass/sass", + "../stylus/stylus", + "../jade/jade", + "../handlebars/handlebars"], mod); + } else { // Plain browser env + mod(CodeMirror); + } +})(function (CodeMirror) { + var tagLanguages = { + script: [ + ["lang", /coffee(script)?/, "coffeescript"], + ["type", /^(?:text|application)\/(?:x-)?coffee(?:script)?$/, "coffeescript"] + ], + style: [ + ["lang", /^stylus$/i, "stylus"], + ["lang", /^sass$/i, "sass"], + ["type", /^(text\/)?(x-)?styl(us)?$/i, "stylus"], + ["type", /^text\/sass/i, "sass"] + ], + template: [ + ["lang", /^vue-template$/i, "vue"], + ["lang", /^jade$/i, "jade"], + ["lang", /^handlebars$/i, "handlebars"], + ["type", /^(text\/)?(x-)?jade$/i, "jade"], + ["type", /^text\/x-handlebars-template$/i, "handlebars"], + [null, null, "vue-template"] + ] + }; + + CodeMirror.defineMode("vue-template", function (config, parserConfig) { + var mustacheOverlay = { + token: function (stream) { + if (stream.match(/^\{\{.*?\}\}/)) return "meta mustache"; + while (stream.next() && !stream.match("{{", false)) {} + return null; + } + }; + return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay); + }); + + CodeMirror.defineMode("vue", function (config) { + return CodeMirror.getMode(config, {name: "htmlmixed", tags: tagLanguages}); + }, "htmlmixed", "xml", "javascript", "coffeescript", "css", "sass", "stylus", "jade", "handlebars"); + + CodeMirror.defineMIME("script/x-vue", "vue"); +}); diff --git a/libraries/codemirror/mode/xml/index.html b/libraries/codemirror/mode/xml/index.html new file mode 100644 index 0000000..7149f06 --- /dev/null +++ b/libraries/codemirror/mode/xml/index.html @@ -0,0 +1,57 @@ + + +CodeMirror: XML mode + + + + + + + + + +
          +

          XML mode

          +
          + +

          The XML mode supports two configuration parameters:

          +
          +
          htmlMode (boolean)
          +
          This switches the mode to parse HTML instead of XML. This + means attributes do not have to be quoted, and some elements + (such as br) do not require a closing tag.
          +
          alignCDATA (boolean)
          +
          Setting this to true will force the opening tag of CDATA + blocks to not be indented.
          +
          + +

          MIME types defined: application/xml, text/html.

          +
          diff --git a/libraries/codemirror/mode/xml/test.js b/libraries/codemirror/mode/xml/test.js new file mode 100644 index 0000000..f48156b --- /dev/null +++ b/libraries/codemirror/mode/xml/test.js @@ -0,0 +1,51 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function() { + var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } + + MT("matching", + "[tag&bracket <][tag top][tag&bracket >]", + " text", + " [tag&bracket <][tag inner][tag&bracket />]", + "[tag&bracket ]"); + + MT("nonmatching", + "[tag&bracket <][tag top][tag&bracket >]", + " [tag&bracket <][tag inner][tag&bracket />]", + " [tag&bracket ]"); + + MT("doctype", + "[meta ]", + "[tag&bracket <][tag top][tag&bracket />]"); + + MT("cdata", + "[tag&bracket <][tag top][tag&bracket >]", + " [atom ]", + "[tag&bracket ]"); + + // HTML tests + mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); + + MT("selfclose", + "[tag&bracket <][tag html][tag&bracket >]", + " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", + "[tag&bracket ]"); + + MT("list", + "[tag&bracket <][tag ol][tag&bracket >]", + " [tag&bracket <][tag li][tag&bracket >]one", + " [tag&bracket <][tag li][tag&bracket >]two", + "[tag&bracket ]"); + + MT("valueless", + "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); + + MT("pThenArticle", + "[tag&bracket <][tag p][tag&bracket >]", + " foo", + "[tag&bracket <][tag article][tag&bracket >]bar"); + +})(); diff --git a/libraries/codemirror/mode/xml/xml.js b/libraries/codemirror/mode/xml/xml.js new file mode 100644 index 0000000..014f7d8 --- /dev/null +++ b/libraries/codemirror/mode/xml/xml.js @@ -0,0 +1,394 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var htmlConfig = { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true, 'menuitem': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true, + caseFold: true +} + +var xmlConfig = { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false, + caseFold: false +} + +CodeMirror.defineMode("xml", function(editorConf, config_) { + var indentUnit = editorConf.indentUnit + var config = {} + var defaults = config_.htmlMode ? htmlConfig : xmlConfig + for (var prop in defaults) config[prop] = defaults[prop] + for (var prop in config_) config[prop] = config_[prop] + + // Return variables for tokenizers + var type, setStyle; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + type = stream.eat("/") ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag bracket"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + inText.isInText = true; + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag bracket"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + state.state = baseState; + state.tagName = state.tagStart = null; + var next = state.tokenize(stream, state); + return next ? next + " tag error" : "tag error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + function Context(state, tagName, startOfLine) { + this.prev = state.context; + this.tagName = tagName; + this.indent = state.indented; + this.startOfLine = startOfLine; + if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) + this.noIndent = true; + } + function popContext(state) { + if (state.context) state.context = state.context.prev; + } + function maybePopContext(state, nextTagName) { + var parentTagName; + while (true) { + if (!state.context) { + return; + } + parentTagName = state.context.tagName; + if (!config.contextGrabbers.hasOwnProperty(parentTagName) || + !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(state); + } + } + + function baseState(type, stream, state) { + if (type == "openTag") { + state.tagStart = stream.column(); + return tagNameState; + } else if (type == "closeTag") { + return closeTagNameState; + } else { + return baseState; + } + } + function tagNameState(type, stream, state) { + if (type == "word") { + state.tagName = stream.current(); + setStyle = "tag"; + return attrState; + } else { + setStyle = "error"; + return tagNameState; + } + } + function closeTagNameState(type, stream, state) { + if (type == "word") { + var tagName = stream.current(); + if (state.context && state.context.tagName != tagName && + config.implicitlyClosed.hasOwnProperty(state.context.tagName)) + popContext(state); + if (state.context && state.context.tagName == tagName) { + setStyle = "tag"; + return closeState; + } else { + setStyle = "tag error"; + return closeStateErr; + } + } else { + setStyle = "error"; + return closeStateErr; + } + } + + function closeState(type, _stream, state) { + if (type != "endTag") { + setStyle = "error"; + return closeState; + } + popContext(state); + return baseState; + } + function closeStateErr(type, stream, state) { + setStyle = "error"; + return closeState(type, stream, state); + } + + function attrState(type, _stream, state) { + if (type == "word") { + setStyle = "attribute"; + return attrEqState; + } else if (type == "endTag" || type == "selfcloseTag") { + var tagName = state.tagName, tagStart = state.tagStart; + state.tagName = state.tagStart = null; + if (type == "selfcloseTag" || + config.autoSelfClosers.hasOwnProperty(tagName)) { + maybePopContext(state, tagName); + } else { + maybePopContext(state, tagName); + state.context = new Context(state, tagName, tagStart == state.indented); + } + return baseState; + } + setStyle = "error"; + return attrState; + } + function attrEqState(type, stream, state) { + if (type == "equals") return attrValueState; + if (!config.allowMissing) setStyle = "error"; + return attrState(type, stream, state); + } + function attrValueState(type, stream, state) { + if (type == "string") return attrContinuedState; + if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} + setStyle = "error"; + return attrState(type, stream, state); + } + function attrContinuedState(type, stream, state) { + if (type == "string") return attrContinuedState; + return attrState(type, stream, state); + } + + return { + startState: function(baseIndent) { + var state = {tokenize: inText, + state: baseState, + indented: baseIndent || 0, + tagName: null, tagStart: null, + context: null} + if (baseIndent != null) state.baseIndent = baseIndent + return state + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) + state.indented = stream.indentation(); + + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + setStyle = null; + state.state = state.state(type || style, stream, state); + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + } + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + if (state.tagStart == state.indented) + return state.stringStartCol + 1; + else + return state.indented + indentUnit; + } + if (context && context.noIndent) return CodeMirror.Pass; + if (state.tokenize != inTag && state.tokenize != inText) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (config.multilineTagIndentPastTag !== false) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); + } + if (config.alignCDATA && /$/, + blockCommentStart: "", + + configuration: config.htmlMode ? "html" : "xml", + helperType: config.htmlMode ? "html" : "xml", + + skipAttribute: function(state) { + if (state.state == attrValueState) + state.state = attrState + } + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); + +}); diff --git a/libraries/codemirror/mode/xquery/index.html b/libraries/codemirror/mode/xquery/index.html new file mode 100644 index 0000000..7ac5aae --- /dev/null +++ b/libraries/codemirror/mode/xquery/index.html @@ -0,0 +1,210 @@ + + +CodeMirror: XQuery mode + + + + + + + + + + +
          +

          XQuery mode

          + + +
          + +
          + + + +

          MIME types defined: application/xquery.

          + +

          Development of the CodeMirror XQuery mode was sponsored by + MarkLogic and developed by + Mike Brevoort. +

          + +
          diff --git a/libraries/codemirror/mode/xquery/test.js b/libraries/codemirror/mode/xquery/test.js new file mode 100644 index 0000000..1f148cd --- /dev/null +++ b/libraries/codemirror/mode/xquery/test.js @@ -0,0 +1,67 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// Don't take these too seriously -- the expected results appear to be +// based on the results of actual runs without any serious manual +// verification. If a change you made causes them to fail, the test is +// as likely to wrong as the code. + +(function() { + var mode = CodeMirror.getMode({tabSize: 4}, "xquery"); + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } + + MT("eviltest", + "[keyword xquery] [keyword version] [variable "1][keyword .][atom 0][keyword -][variable ml"][def&variable ;] [comment (: this is : a \"comment\" :)]", + " [keyword let] [variable $let] [keyword :=] [variable <x] [variable attr][keyword =][variable "value">"test"<func>][def&variable ;function]() [variable $var] {[keyword function]()} {[variable $var]}[variable <][keyword /][variable func><][keyword /][variable x>]", + " [keyword let] [variable $joe][keyword :=][atom 1]", + " [keyword return] [keyword element] [variable element] {", + " [keyword attribute] [variable attribute] { [atom 1] },", + " [keyword element] [variable test] { [variable 'a'] }, [keyword attribute] [variable foo] { [variable "bar"] },", + " [def&variable fn:doc]()[[ [variable foo][keyword /][variable @bar] [keyword eq] [variable $let] ]],", + " [keyword //][variable x] } [comment (: a more 'evil' test :)]", + " [comment (: Modified Blakeley example (: with nested comment :) ... :)]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:declare]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:private]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:function]() {()}[variable ;]", + " [keyword declare] [keyword private] [keyword function] [def&variable local:local]() {()}[variable ;]", + " [keyword let] [variable $let] [keyword :=] [variable <let>let] [variable $let] [keyword :=] [variable "let"<][keyword /let][variable >]", + " [keyword return] [keyword element] [variable element] {", + " [keyword attribute] [variable attribute] { [keyword try] { [def&variable xdmp:version]() } [keyword catch]([variable $e]) { [def&variable xdmp:log]([variable $e]) } },", + " [keyword attribute] [variable fn:doc] { [variable "bar"] [variable castable] [keyword as] [atom xs:string] },", + " [keyword element] [variable text] { [keyword text] { [variable "text"] } },", + " [def&variable fn:doc]()[[ [qualifier child::][variable eq][keyword /]([variable @bar] [keyword |] [qualifier attribute::][variable attribute]) [keyword eq] [variable $let] ]],", + " [keyword //][variable fn:doc]", + " }"); + + MT("testEmptySequenceKeyword", + "[string \"foo\"] [keyword instance] [keyword of] [keyword empty-sequence]()"); + + MT("testMultiAttr", + "[tag

          ][variable hello] [variable world][tag

          ]"); + + MT("test namespaced variable", + "[keyword declare] [keyword namespace] [variable e] [keyword =] [string \"http://example.com/ANamespace\"][variable ;declare] [keyword variable] [variable $e:exampleComThisVarIsNotRecognized] [keyword as] [keyword element]([keyword *]) [variable external;]"); + + MT("test EQName variable", + "[keyword declare] [keyword variable] [variable $\"http://www.example.com/ns/my\":var] [keyword :=] [atom 12][variable ;]", + "[tag ]{[variable $\"http://www.example.com/ns/my\":var]}[tag ]"); + + MT("test EQName function", + "[keyword declare] [keyword function] [def&variable \"http://www.example.com/ns/my\":fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", + " [variable $a] [keyword +] [atom 2]", + "}[variable ;]", + "[tag ]{[def&variable \"http://www.example.com/ns/my\":fn]([atom 12])}[tag ]"); + + MT("test EQName function with single quotes", + "[keyword declare] [keyword function] [def&variable 'http://www.example.com/ns/my':fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", + " [variable $a] [keyword +] [atom 2]", + "}[variable ;]", + "[tag ]{[def&variable 'http://www.example.com/ns/my':fn]([atom 12])}[tag ]"); + + MT("testProcessingInstructions", + "[def&variable data]([comment&meta ]) [keyword instance] [keyword of] [atom xs:string]"); + + MT("testQuoteEscapeDouble", + "[keyword let] [variable $rootfolder] [keyword :=] [string \"c:\\builds\\winnt\\HEAD\\qa\\scripts\\\"]", + "[keyword let] [variable $keysfolder] [keyword :=] [def&variable concat]([variable $rootfolder], [string \"keys\\\"])"); +})(); diff --git a/libraries/codemirror/mode/xquery/xquery.js b/libraries/codemirror/mode/xquery/xquery.js new file mode 100644 index 0000000..c642ee5 --- /dev/null +++ b/libraries/codemirror/mode/xquery/xquery.js @@ -0,0 +1,437 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("xquery", function() { + + // The keywords object is set to the result of this self executing + // function. Each keyword is a property of the keywords object whose + // value is {type: atype, style: astyle} + var keywords = function(){ + // conveinence functions used to build keywords object + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a") + , B = kw("keyword b") + , C = kw("keyword c") + , operator = kw("operator") + , atom = {type: "atom", style: "atom"} + , punctuation = {type: "punctuation", style: null} + , qualifier = {type: "axis_specifier", style: "qualifier"}; + + // kwObj is what is return from this function at the end + var kwObj = { + 'if': A, 'switch': A, 'while': A, 'for': A, + 'else': B, 'then': B, 'try': B, 'finally': B, 'catch': B, + 'element': C, 'attribute': C, 'let': C, 'implements': C, 'import': C, 'module': C, 'namespace': C, + 'return': C, 'super': C, 'this': C, 'throws': C, 'where': C, 'private': C, + ',': punctuation, + 'null': atom, 'fn:false()': atom, 'fn:true()': atom + }; + + // a list of 'basic' keywords. For each add a property to kwObj with the value of + // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} + var basic = ['after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before', + 'by','case','cast','child','comment','declare','default','define','descendant','descendant-or-self', + 'descending','document','document-node','element','else','eq','every','except','external','following', + 'following-sibling','follows','for','function','if','import','in','instance','intersect','item', + 'let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding', + 'preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element', + 'self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where', + 'xquery', 'empty-sequence']; + for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; + + // a list of types. For each add a property to kwObj with the value of + // {type: "atom", style: "atom"} + var types = ['xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', + 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', + 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration']; + for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; + + // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} + var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; + for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; + + // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} + var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", + "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; + for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; + + return kwObj; + }(); + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + // the primary mode tokenizer + function tokenBase(stream, state) { + var ch = stream.next(), + mightBeFunction = false, + isEQName = isEQNameAhead(stream); + + // an XML tag (if not in some sub, chained tokenizer) + if (ch == "<") { + if(stream.match("!--", true)) + return chain(stream, state, tokenXMLComment); + + if(stream.match("![CDATA", false)) { + state.tokenize = tokenCDATA; + return "tag"; + } + + if(stream.match("?", false)) { + return chain(stream, state, tokenPreProcessing); + } + + var isclose = stream.eat("/"); + stream.eatSpace(); + var tagName = "", c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + + return chain(stream, state, tokenTag(tagName, isclose)); + } + // start code block + else if(ch == "{") { + pushStateStack(state,{ type: "codeblock"}); + return null; + } + // end code block + else if(ch == "}") { + popStateStack(state); + return null; + } + // if we're in an XML block + else if(isInXmlBlock(state)) { + if(ch == ">") + return "tag"; + else if(ch == "/" && stream.eat(">")) { + popStateStack(state); + return "tag"; + } + else + return "variable"; + } + // if a number + else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); + return "atom"; + } + // comment start + else if (ch === "(" && stream.eat(":")) { + pushStateStack(state, { type: "comment"}); + return chain(stream, state, tokenComment); + } + // quoted string + else if ( !isEQName && (ch === '"' || ch === "'")) + return chain(stream, state, tokenString(ch)); + // variable + else if(ch === "$") { + return chain(stream, state, tokenVariable); + } + // assignment + else if(ch ===":" && stream.eat("=")) { + return "keyword"; + } + // open paren + else if(ch === "(") { + pushStateStack(state, { type: "paren"}); + return null; + } + // close paren + else if(ch === ")") { + popStateStack(state); + return null; + } + // open paren + else if(ch === "[") { + pushStateStack(state, { type: "bracket"}); + return null; + } + // close paren + else if(ch === "]") { + popStateStack(state); + return null; + } + else { + var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; + + // if there's a EQName ahead, consume the rest of the string portion, it's likely a function + if(isEQName && ch === '\"') while(stream.next() !== '"'){} + if(isEQName && ch === '\'') while(stream.next() !== '\''){} + + // gobble up a word if the character is not known + if(!known) stream.eatWhile(/[\w\$_-]/); + + // gobble a colon in the case that is a lib func type call fn:doc + var foundColon = stream.eat(":"); + + // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier + // which should get matched as a keyword + if(!stream.eat(":") && foundColon) { + stream.eatWhile(/[\w\$_-]/); + } + // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) + if(stream.match(/^[ \t]*\(/, false)) { + mightBeFunction = true; + } + // is the word a keyword? + var word = stream.current(); + known = keywords.propertyIsEnumerable(word) && keywords[word]; + + // if we think it's a function call but not yet known, + // set style to variable for now for lack of something better + if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; + + // if the previous word was element, attribute, axis specifier, this word should be the name of that + if(isInXmlConstructor(state)) { + popStateStack(state); + return "variable"; + } + // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and + // push the stack so we know to look for it on the next word + if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); + + // if the word is known, return the details of that else just call this a generic 'word' + return known ? known.style : "variable"; + } + } + + // handle comments, including nested + function tokenComment(stream, state) { + var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + if(nestedCount > 0) + nestedCount--; + else { + popStateStack(state); + break; + } + } + else if(ch == ":" && maybeNested) { + nestedCount++; + } + maybeEnd = (ch == ":"); + maybeNested = (ch == "("); + } + + return "comment"; + } + + // tokenizer for string literals + // optionally pass a tokenizer function to set state.tokenize back to when finished + function tokenString(quote, f) { + return function(stream, state) { + var ch; + + if(isInString(state) && stream.current() == quote) { + popStateStack(state); + if(f) state.tokenize = f; + return "string"; + } + + pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); + + // if we're in a string and in an XML block, allow an embedded code block + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return "string"; + } + + + while (ch = stream.next()) { + if (ch == quote) { + popStateStack(state); + if(f) state.tokenize = f; + break; + } + else { + // if we're in a string and in an XML block, allow an embedded code block in an attribute + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return "string"; + } + + } + } + + return "string"; + }; + } + + // tokenizer for variables + function tokenVariable(stream, state) { + var isVariableChar = /[\w\$_-]/; + + // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote + if(stream.eat("\"")) { + while(stream.next() !== '\"'){}; + stream.eat(":"); + } else { + stream.eatWhile(isVariableChar); + if(!stream.match(":=", false)) stream.eat(":"); + } + stream.eatWhile(isVariableChar); + state.tokenize = tokenBase; + return "variable"; + } + + // tokenizer for XML tags + function tokenTag(name, isclose) { + return function(stream, state) { + stream.eatSpace(); + if(isclose && stream.eat(">")) { + popStateStack(state); + state.tokenize = tokenBase; + return "tag"; + } + // self closing tag without attributes? + if(!stream.eat("/")) + pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); + if(!stream.eat(">")) { + state.tokenize = tokenAttribute; + return "tag"; + } + else { + state.tokenize = tokenBase; + } + return "tag"; + }; + } + + // tokenizer for XML attributes + function tokenAttribute(stream, state) { + var ch = stream.next(); + + if(ch == "/" && stream.eat(">")) { + if(isInXmlAttributeBlock(state)) popStateStack(state); + if(isInXmlBlock(state)) popStateStack(state); + return "tag"; + } + if(ch == ">") { + if(isInXmlAttributeBlock(state)) popStateStack(state); + return "tag"; + } + if(ch == "=") + return null; + // quoted string + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch, tokenAttribute)); + + if(!isInXmlAttributeBlock(state)) + pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); + + stream.eat(/[a-zA-Z_:]/); + stream.eatWhile(/[-a-zA-Z0-9_:.]/); + stream.eatSpace(); + + // the case where the attribute has not value and the tag was closed + if(stream.match(">", false) || stream.match("/", false)) { + popStateStack(state); + state.tokenize = tokenBase; + } + + return "attribute"; + } + + // handle comments, including nested + function tokenXMLComment(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "-" && stream.match("->", true)) { + state.tokenize = tokenBase; + return "comment"; + } + } + } + + + // handle CDATA + function tokenCDATA(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "]" && stream.match("]", true)) { + state.tokenize = tokenBase; + return "comment"; + } + } + } + + // handle preprocessing instructions + function tokenPreProcessing(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "?" && stream.match(">", true)) { + state.tokenize = tokenBase; + return "comment meta"; + } + } + } + + + // functions to test the current context of the state + function isInXmlBlock(state) { return isIn(state, "tag"); } + function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } + function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } + function isInString(state) { return isIn(state, "string"); } + + function isEQNameAhead(stream) { + // assume we've already eaten a quote (") + if(stream.current() === '"') + return stream.match(/^[^\"]+\"\:/, false); + else if(stream.current() === '\'') + return stream.match(/^[^\"]+\'\:/, false); + else + return false; + } + + function isIn(state, type) { + return (state.stack.length && state.stack[state.stack.length - 1].type == type); + } + + function pushStateStack(state, newState) { + state.stack.push(newState); + } + + function popStateStack(state) { + state.stack.pop(); + var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; + state.tokenize = reinstateTokenize || tokenBase; + } + + // the interface for the mode API + return { + startState: function() { + return { + tokenize: tokenBase, + cc: [], + stack: [] + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + }, + + blockCommentStart: "(:", + blockCommentEnd: ":)" + + }; + +}); + +CodeMirror.defineMIME("application/xquery", "xquery"); + +}); diff --git a/libraries/codemirror/mode/yaml-frontmatter/index.html b/libraries/codemirror/mode/yaml-frontmatter/index.html new file mode 100644 index 0000000..30bed2f --- /dev/null +++ b/libraries/codemirror/mode/yaml-frontmatter/index.html @@ -0,0 +1,121 @@ + + +CodeMirror: YAML front matter mode + + + + + + + + + + + + + +
          +

          YAML front matter mode

          +
          + +

          Defines a mode that parses +a YAML frontmatter +at the start of a file, switching to a base mode at the end of that. +Takes a mode configuration option base to configure the +base mode, which defaults to "gfm".

          + + + +
          diff --git a/libraries/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js b/libraries/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js new file mode 100644 index 0000000..9f081b0 --- /dev/null +++ b/libraries/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js @@ -0,0 +1,68 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function (mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../yaml/yaml")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../yaml/yaml"], mod) + else // Plain browser env + mod(CodeMirror) +})(function (CodeMirror) { + + var START = 0, FRONTMATTER = 1, BODY = 2 + + // a mixed mode for Markdown text with an optional YAML front matter + CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) { + var yamlMode = CodeMirror.getMode(config, "yaml") + var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm") + + function curMode(state) { + return state.state == BODY ? innerMode : yamlMode + } + + return { + startState: function () { + return { + state: START, + inner: CodeMirror.startState(yamlMode) + } + }, + copyState: function (state) { + return { + state: state.state, + inner: CodeMirror.copyState(curMode(state), state.inner) + } + }, + token: function (stream, state) { + if (state.state == START) { + if (stream.match(/---/, false)) { + state.state = FRONTMATTER + return yamlMode.token(stream, state.inner) + } else { + state.state = BODY + state.inner = CodeMirror.startState(innerMode) + return innerMode.token(stream, state.inner) + } + } else if (state.state == FRONTMATTER) { + var end = stream.sol() && stream.match(/---/, false) + var style = yamlMode.token(stream, state.inner) + if (end) { + state.state = BODY + state.inner = CodeMirror.startState(innerMode) + } + return style + } else { + return innerMode.token(stream, state.inner) + } + }, + innerMode: function (state) { + return {mode: curMode(state), state: state.inner} + }, + blankLine: function (state) { + var mode = curMode(state) + if (mode.blankLine) return mode.blankLine(state.inner) + } + } + }) +}) diff --git a/libraries/codemirror/mode/yaml/index.html b/libraries/codemirror/mode/yaml/index.html new file mode 100644 index 0000000..be9b632 --- /dev/null +++ b/libraries/codemirror/mode/yaml/index.html @@ -0,0 +1,80 @@ + + +CodeMirror: YAML mode + + + + + + + + + +
          +

          YAML mode

          +
          + + +

          MIME types defined: text/x-yaml.

          + +
          diff --git a/libraries/codemirror/mode/yaml/yaml.js b/libraries/codemirror/mode/yaml/yaml.js new file mode 100644 index 0000000..b7015e5 --- /dev/null +++ b/libraries/codemirror/mode/yaml/yaml.js @@ -0,0 +1,117 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("yaml", function() { + + var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; + var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); + + return { + token: function(stream, state) { + var ch = stream.peek(); + var esc = state.escaped; + state.escaped = false; + /* comments */ + if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { + stream.skipToEnd(); + return "comment"; + } + + if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) + return "string"; + + if (state.literal && stream.indentation() > state.keyCol) { + stream.skipToEnd(); return "string"; + } else if (state.literal) { state.literal = false; } + if (stream.sol()) { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + /* document start */ + if(stream.match(/---/)) { return "def"; } + /* document end */ + if (stream.match(/\.\.\./)) { return "def"; } + /* array list item */ + if (stream.match(/\s*-\s+/)) { return 'meta'; } + } + /* inline pairs/lists */ + if (stream.match(/^(\{|\}|\[|\])/)) { + if (ch == '{') + state.inlinePairs++; + else if (ch == '}') + state.inlinePairs--; + else if (ch == '[') + state.inlineList++; + else + state.inlineList--; + return 'meta'; + } + + /* list seperator */ + if (state.inlineList > 0 && !esc && ch == ',') { + stream.next(); + return 'meta'; + } + /* pairs seperator */ + if (state.inlinePairs > 0 && !esc && ch == ',') { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + stream.next(); + return 'meta'; + } + + /* start of value of a pair */ + if (state.pairStart) { + /* block literals */ + if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; + /* references */ + if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } + /* numbers */ + if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } + if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } + /* keywords */ + if (stream.match(keywordRegex)) { return 'keyword'; } + } + + /* pairs (associative arrays) -> key */ + if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { + state.pair = true; + state.keyCol = stream.indentation(); + return "atom"; + } + if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } + + /* nothing found, continue */ + state.pairStart = false; + state.escaped = (ch == '\\'); + stream.next(); + return null; + }, + startState: function() { + return { + pair: false, + pairStart: false, + keyCol: 0, + inlinePairs: 0, + inlineList: 0, + literal: false, + escaped: false + }; + } + }; +}); + +CodeMirror.defineMIME("text/x-yaml", "yaml"); + +}); diff --git a/libraries/codemirror/mode/z80/index.html b/libraries/codemirror/mode/z80/index.html new file mode 100644 index 0000000..a41b747 --- /dev/null +++ b/libraries/codemirror/mode/z80/index.html @@ -0,0 +1,53 @@ + + +CodeMirror: Z80 assembly mode + + + + + + + + + +
          +

          Z80 assembly mode

          + + +
          + + + +

          MIME types defined: text/x-z80, text/x-ez80.

          +
          diff --git a/libraries/codemirror/mode/z80/z80.js b/libraries/codemirror/mode/z80/z80.js new file mode 100644 index 0000000..aae7021 --- /dev/null +++ b/libraries/codemirror/mode/z80/z80.js @@ -0,0 +1,116 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('z80', function(_config, parserConfig) { + var ez80 = parserConfig.ez80; + var keywords1, keywords2; + if (ez80) { + keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i; + keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i; + } else { + keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; + keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i; + } + + var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; + var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; + var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; + var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i; + + return { + startState: function() { + return { + context: 0 + }; + }, + token: function(stream, state) { + if (!stream.column()) + state.context = 0; + + if (stream.eatSpace()) + return null; + + var w; + + if (stream.eatWhile(/\w/)) { + if (ez80 && stream.eat('.')) { + stream.eatWhile(/\w/); + } + w = stream.current(); + + if (stream.indentation()) { + if ((state.context == 1 || state.context == 4) && variables1.test(w)) { + state.context = 4; + return 'var2'; + } + + if (state.context == 2 && variables2.test(w)) { + state.context = 4; + return 'var3'; + } + + if (keywords1.test(w)) { + state.context = 1; + return 'keyword'; + } else if (keywords2.test(w)) { + state.context = 2; + return 'keyword'; + } else if (state.context == 4 && numbers.test(w)) { + return 'number'; + } + + if (errors.test(w)) + return 'error'; + } else if (stream.match(numbers)) { + return 'number'; + } else { + return null; + } + } else if (stream.eat(';')) { + stream.skipToEnd(); + return 'comment'; + } else if (stream.eat('"')) { + while (w = stream.next()) { + if (w == '"') + break; + + if (w == '\\') + stream.next(); + } + return 'string'; + } else if (stream.eat('\'')) { + if (stream.match(/\\?.'/)) + return 'number'; + } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { + state.context = 5; + + if (stream.eatWhile(/\w/)) + return 'def'; + } else if (stream.eat('$')) { + if (stream.eatWhile(/[\da-f]/i)) + return 'number'; + } else if (stream.eat('%')) { + if (stream.eatWhile(/[01]/)) + return 'number'; + } else { + stream.next(); + } + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-z80", "z80"); +CodeMirror.defineMIME("text/x-ez80", { name: "z80", ez80: true }); + +}); diff --git a/libraries/codemirror/theme/3024-day.css b/libraries/codemirror/theme/3024-day.css new file mode 100644 index 0000000..7132655 --- /dev/null +++ b/libraries/codemirror/theme/3024-day.css @@ -0,0 +1,41 @@ +/* + + Name: 3024 day + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; } +.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; } + +.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; } +.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; } + +.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; } +.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } +.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; } + +.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; } + +.cm-s-3024-day span.cm-comment { color: #cdab53; } +.cm-s-3024-day span.cm-atom { color: #a16a94; } +.cm-s-3024-day span.cm-number { color: #a16a94; } + +.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; } +.cm-s-3024-day span.cm-keyword { color: #db2d20; } +.cm-s-3024-day span.cm-string { color: #fded02; } + +.cm-s-3024-day span.cm-variable { color: #01a252; } +.cm-s-3024-day span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-day span.cm-def { color: #e8bbd0; } +.cm-s-3024-day span.cm-bracket { color: #3a3432; } +.cm-s-3024-day span.cm-tag { color: #db2d20; } +.cm-s-3024-day span.cm-link { color: #a16a94; } +.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; } + +.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; } diff --git a/libraries/codemirror/theme/3024-night.css b/libraries/codemirror/theme/3024-night.css new file mode 100644 index 0000000..adc5900 --- /dev/null +++ b/libraries/codemirror/theme/3024-night.css @@ -0,0 +1,39 @@ +/* + + Name: 3024 night + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; } +.cm-s-3024-night div.CodeMirror-selected { background: #3a3432; } +.cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; } +.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } +.cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; } + +.cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; } + +.cm-s-3024-night span.cm-comment { color: #cdab53; } +.cm-s-3024-night span.cm-atom { color: #a16a94; } +.cm-s-3024-night span.cm-number { color: #a16a94; } + +.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; } +.cm-s-3024-night span.cm-keyword { color: #db2d20; } +.cm-s-3024-night span.cm-string { color: #fded02; } + +.cm-s-3024-night span.cm-variable { color: #01a252; } +.cm-s-3024-night span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-night span.cm-def { color: #e8bbd0; } +.cm-s-3024-night span.cm-bracket { color: #d6d5d4; } +.cm-s-3024-night span.cm-tag { color: #db2d20; } +.cm-s-3024-night span.cm-link { color: #a16a94; } +.cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; } + +.cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; } +.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/abcdef.css b/libraries/codemirror/theme/abcdef.css new file mode 100644 index 0000000..7f9d788 --- /dev/null +++ b/libraries/codemirror/theme/abcdef.css @@ -0,0 +1,32 @@ +.cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; } +.cm-s-abcdef div.CodeMirror-selected { background: #515151; } +.cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; } +.cm-s-abcdef .CodeMirror-guttermarker { color: #222; } +.cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; } +.cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; } +.cm-s-abcdef span.cm-atom { color: #77F; } +.cm-s-abcdef span.cm-number { color: violet; } +.cm-s-abcdef span.cm-def { color: #fffabc; } +.cm-s-abcdef span.cm-variable { color: #abcdef; } +.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } +.cm-s-abcdef span.cm-variable-3 { color: #def; } +.cm-s-abcdef span.cm-property { color: #fedcba; } +.cm-s-abcdef span.cm-operator { color: #ff0; } +.cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;} +.cm-s-abcdef span.cm-string { color: #2b4; } +.cm-s-abcdef span.cm-meta { color: #C9F; } +.cm-s-abcdef span.cm-qualifier { color: #FFF700; } +.cm-s-abcdef span.cm-builtin { color: #30aabc; } +.cm-s-abcdef span.cm-bracket { color: #8a8a8a; } +.cm-s-abcdef span.cm-tag { color: #FFDD44; } +.cm-s-abcdef span.cm-attribute { color: #DDFF00; } +.cm-s-abcdef span.cm-error { color: #FF0000; } +.cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; } +.cm-s-abcdef span.cm-link { color: blueviolet; } + +.cm-s-abcdef .CodeMirror-activeline-background { background: #314151; } diff --git a/libraries/codemirror/theme/ambiance-mobile.css b/libraries/codemirror/theme/ambiance-mobile.css new file mode 100644 index 0000000..88d332e --- /dev/null +++ b/libraries/codemirror/theme/ambiance-mobile.css @@ -0,0 +1,5 @@ +.cm-s-ambiance.CodeMirror { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} diff --git a/libraries/codemirror/theme/ambiance.css b/libraries/codemirror/theme/ambiance.css new file mode 100644 index 0000000..bce3446 --- /dev/null +++ b/libraries/codemirror/theme/ambiance.css @@ -0,0 +1,74 @@ +/* ambiance theme for codemirror */ + +/* Color scheme */ + +.cm-s-ambiance .cm-header { color: blue; } +.cm-s-ambiance .cm-quote { color: #24C2C7; } + +.cm-s-ambiance .cm-keyword { color: #cda869; } +.cm-s-ambiance .cm-atom { color: #CF7EA9; } +.cm-s-ambiance .cm-number { color: #78CF8A; } +.cm-s-ambiance .cm-def { color: #aac6e3; } +.cm-s-ambiance .cm-variable { color: #ffb795; } +.cm-s-ambiance .cm-variable-2 { color: #eed1b3; } +.cm-s-ambiance .cm-variable-3 { color: #faded3; } +.cm-s-ambiance .cm-property { color: #eed1b3; } +.cm-s-ambiance .cm-operator { color: #fa8d6a; } +.cm-s-ambiance .cm-comment { color: #555; font-style:italic; } +.cm-s-ambiance .cm-string { color: #8f9d6a; } +.cm-s-ambiance .cm-string-2 { color: #9d937c; } +.cm-s-ambiance .cm-meta { color: #D2A8A1; } +.cm-s-ambiance .cm-qualifier { color: yellow; } +.cm-s-ambiance .cm-builtin { color: #9999cc; } +.cm-s-ambiance .cm-bracket { color: #24C2C7; } +.cm-s-ambiance .cm-tag { color: #fee4ff; } +.cm-s-ambiance .cm-attribute { color: #9B859D; } +.cm-s-ambiance .cm-hr { color: pink; } +.cm-s-ambiance .cm-link { color: #F4C20B; } +.cm-s-ambiance .cm-special { color: #FF9D00; } +.cm-s-ambiance .cm-error { color: #AF2018; } + +.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } +.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } + +.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +/* Editor styling */ + +.cm-s-ambiance.CodeMirror { + line-height: 1.40em; + color: #E6E1DC; + background-color: #202020; + -webkit-box-shadow: inset 0 0 10px black; + -moz-box-shadow: inset 0 0 10px black; + box-shadow: inset 0 0 10px black; +} + +.cm-s-ambiance .CodeMirror-gutters { + background: #3D3D3D; + border-right: 1px solid #4D4D4D; + box-shadow: 0 10px 20px black; +} + +.cm-s-ambiance .CodeMirror-linenumber { + text-shadow: 0px 1px 1px #4d4d4d; + color: #111; + padding: 0 5px; +} + +.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } +.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } + +.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; } + +.cm-s-ambiance .CodeMirror-activeline-background { + background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); +} + +.cm-s-ambiance.CodeMirror, +.cm-s-ambiance .CodeMirror-gutters { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC"); +} diff --git a/libraries/codemirror/theme/base16-dark.css b/libraries/codemirror/theme/base16-dark.css new file mode 100644 index 0000000..026a816 --- /dev/null +++ b/libraries/codemirror/theme/base16-dark.css @@ -0,0 +1,38 @@ +/* + + Name: Base16 Default Dark + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; } +.cm-s-base16-dark div.CodeMirror-selected { background: #303030; } +.cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; } +.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } +.cm-s-base16-dark .CodeMirror-linenumber { color: #505050; } +.cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; } + +.cm-s-base16-dark span.cm-comment { color: #8f5536; } +.cm-s-base16-dark span.cm-atom { color: #aa759f; } +.cm-s-base16-dark span.cm-number { color: #aa759f; } + +.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; } +.cm-s-base16-dark span.cm-keyword { color: #ac4142; } +.cm-s-base16-dark span.cm-string { color: #f4bf75; } + +.cm-s-base16-dark span.cm-variable { color: #90a959; } +.cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-dark span.cm-def { color: #d28445; } +.cm-s-base16-dark span.cm-bracket { color: #e0e0e0; } +.cm-s-base16-dark span.cm-tag { color: #ac4142; } +.cm-s-base16-dark span.cm-link { color: #aa759f; } +.cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; } + +.cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; } +.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/base16-light.css b/libraries/codemirror/theme/base16-light.css new file mode 100644 index 0000000..474e0ca --- /dev/null +++ b/libraries/codemirror/theme/base16-light.css @@ -0,0 +1,38 @@ +/* + + Name: Base16 Default Light + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; } +.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; } +.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; } + +.cm-s-base16-light span.cm-comment { color: #8f5536; } +.cm-s-base16-light span.cm-atom { color: #aa759f; } +.cm-s-base16-light span.cm-number { color: #aa759f; } + +.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; } +.cm-s-base16-light span.cm-keyword { color: #ac4142; } +.cm-s-base16-light span.cm-string { color: #f4bf75; } + +.cm-s-base16-light span.cm-variable { color: #90a959; } +.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-light span.cm-def { color: #d28445; } +.cm-s-base16-light span.cm-bracket { color: #202020; } +.cm-s-base16-light span.cm-tag { color: #ac4142; } +.cm-s-base16-light span.cm-link { color: #aa759f; } +.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; } + +.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; } +.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/bespin.css b/libraries/codemirror/theme/bespin.css new file mode 100644 index 0000000..60913ba --- /dev/null +++ b/libraries/codemirror/theme/bespin.css @@ -0,0 +1,34 @@ +/* + + Name: Bespin + Author: Mozilla / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} +.cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} +.cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} +.cm-s-bespin .CodeMirror-linenumber {color: #666666;} +.cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} + +.cm-s-bespin span.cm-comment {color: #937121;} +.cm-s-bespin span.cm-atom {color: #9b859d;} +.cm-s-bespin span.cm-number {color: #9b859d;} + +.cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} +.cm-s-bespin span.cm-keyword {color: #cf6a4c;} +.cm-s-bespin span.cm-string {color: #f9ee98;} + +.cm-s-bespin span.cm-variable {color: #54be0d;} +.cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} +.cm-s-bespin span.cm-def {color: #cf7d34;} +.cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} +.cm-s-bespin span.cm-bracket {color: #9d9b97;} +.cm-s-bespin span.cm-tag {color: #cf6a4c;} +.cm-s-bespin span.cm-link {color: #9b859d;} + +.cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-bespin .CodeMirror-activeline-background { background: #404040; } diff --git a/libraries/codemirror/theme/blackboard.css b/libraries/codemirror/theme/blackboard.css new file mode 100644 index 0000000..b6eaedb --- /dev/null +++ b/libraries/codemirror/theme/blackboard.css @@ -0,0 +1,32 @@ +/* Port of TextMate's Blackboard theme */ + +.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } +.cm-s-blackboard div.CodeMirror-selected { background: #253B76; } +.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } +.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } +.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } +.cm-s-blackboard .CodeMirror-linenumber { color: #888; } +.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } + +.cm-s-blackboard .cm-keyword { color: #FBDE2D; } +.cm-s-blackboard .cm-atom { color: #D8FA3C; } +.cm-s-blackboard .cm-number { color: #D8FA3C; } +.cm-s-blackboard .cm-def { color: #8DA6CE; } +.cm-s-blackboard .cm-variable { color: #FF6400; } +.cm-s-blackboard .cm-operator { color: #FBDE2D; } +.cm-s-blackboard .cm-comment { color: #AEAEAE; } +.cm-s-blackboard .cm-string { color: #61CE3C; } +.cm-s-blackboard .cm-string-2 { color: #61CE3C; } +.cm-s-blackboard .cm-meta { color: #D8FA3C; } +.cm-s-blackboard .cm-builtin { color: #8DA6CE; } +.cm-s-blackboard .cm-tag { color: #8DA6CE; } +.cm-s-blackboard .cm-attribute { color: #8DA6CE; } +.cm-s-blackboard .cm-header { color: #FF6400; } +.cm-s-blackboard .cm-hr { color: #AEAEAE; } +.cm-s-blackboard .cm-link { color: #8DA6CE; } +.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } + +.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; } +.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/libraries/codemirror/theme/cobalt.css b/libraries/codemirror/theme/cobalt.css new file mode 100644 index 0000000..d88223e --- /dev/null +++ b/libraries/codemirror/theme/cobalt.css @@ -0,0 +1,25 @@ +.cm-s-cobalt.CodeMirror { background: #002240; color: white; } +.cm-s-cobalt div.CodeMirror-selected { background: #b36539; } +.cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } +.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-cobalt span.cm-comment { color: #08f; } +.cm-s-cobalt span.cm-atom { color: #845dc4; } +.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } +.cm-s-cobalt span.cm-keyword { color: #ffee80; } +.cm-s-cobalt span.cm-string { color: #3ad900; } +.cm-s-cobalt span.cm-meta { color: #ff9d00; } +.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } +.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } +.cm-s-cobalt span.cm-bracket { color: #d8d8d8; } +.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } +.cm-s-cobalt span.cm-link { color: #845dc4; } +.cm-s-cobalt span.cm-error { color: #9d1e15; } + +.cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; } +.cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/libraries/codemirror/theme/colorforth.css b/libraries/codemirror/theme/colorforth.css new file mode 100644 index 0000000..606899f --- /dev/null +++ b/libraries/codemirror/theme/colorforth.css @@ -0,0 +1,33 @@ +.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } +.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } +.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } +.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-colorforth span.cm-comment { color: #ededed; } +.cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } +.cm-s-colorforth span.cm-keyword { color: #ffd900; } +.cm-s-colorforth span.cm-builtin { color: #00d95a; } +.cm-s-colorforth span.cm-variable { color: #73ff00; } +.cm-s-colorforth span.cm-string { color: #007bff; } +.cm-s-colorforth span.cm-number { color: #00c4ff; } +.cm-s-colorforth span.cm-atom { color: #606060; } + +.cm-s-colorforth span.cm-variable-2 { color: #EEE; } +.cm-s-colorforth span.cm-variable-3 { color: #DDD; } +.cm-s-colorforth span.cm-property {} +.cm-s-colorforth span.cm-operator {} + +.cm-s-colorforth span.cm-meta { color: yellow; } +.cm-s-colorforth span.cm-qualifier { color: #FFF700; } +.cm-s-colorforth span.cm-bracket { color: #cc7; } +.cm-s-colorforth span.cm-tag { color: #FFBD40; } +.cm-s-colorforth span.cm-attribute { color: #FFF700; } +.cm-s-colorforth span.cm-error { color: #f00; } + +.cm-s-colorforth div.CodeMirror-selected { background: #333d53; } + +.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } + +.cm-s-colorforth .CodeMirror-activeline-background { background: #253540; } diff --git a/libraries/codemirror/theme/dracula.css b/libraries/codemirror/theme/dracula.css new file mode 100644 index 0000000..57f979a --- /dev/null +++ b/libraries/codemirror/theme/dracula.css @@ -0,0 +1,41 @@ +/* + + Name: dracula + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme) + +*/ + + +.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters { + background-color: #282a36 !important; + color: #f8f8f2 !important; + border: none; +} +.cm-s-dracula .CodeMirror-gutters { color: #282a36; } +.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-dracula.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula span.cm-comment { color: #6272a4; } +.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; } +.cm-s-dracula span.cm-number { color: #bd93f9; } +.cm-s-dracula span.cm-variable { color: #50fa7b; } +.cm-s-dracula span.cm-variable-2 { color: white; } +.cm-s-dracula span.cm-def { color: #ffb86c; } +.cm-s-dracula span.cm-keyword { color: #ff79c6; } +.cm-s-dracula span.cm-operator { color: #ff79c6; } +.cm-s-dracula span.cm-keyword { color: #ff79c6; } +.cm-s-dracula span.cm-atom { color: #bd93f9; } +.cm-s-dracula span.cm-meta { color: #f8f8f2; } +.cm-s-dracula span.cm-tag { color: #ff79c6; } +.cm-s-dracula span.cm-attribute { color: #50fa7b; } +.cm-s-dracula span.cm-qualifier { color: #50fa7b; } +.cm-s-dracula span.cm-property { color: #66d9ef; } +.cm-s-dracula span.cm-builtin { color: #50fa7b; } +.cm-s-dracula span.cm-variable-3 { color: #50fa7b; } + +.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); } +.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/eclipse.css b/libraries/codemirror/theme/eclipse.css new file mode 100644 index 0000000..1bde460 --- /dev/null +++ b/libraries/codemirror/theme/eclipse.css @@ -0,0 +1,23 @@ +.cm-s-eclipse span.cm-meta { color: #FF1717; } +.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } +.cm-s-eclipse span.cm-atom { color: #219; } +.cm-s-eclipse span.cm-number { color: #164; } +.cm-s-eclipse span.cm-def { color: #00f; } +.cm-s-eclipse span.cm-variable { color: black; } +.cm-s-eclipse span.cm-variable-2 { color: #0000C0; } +.cm-s-eclipse span.cm-variable-3 { color: #0000C0; } +.cm-s-eclipse span.cm-property { color: black; } +.cm-s-eclipse span.cm-operator { color: black; } +.cm-s-eclipse span.cm-comment { color: #3F7F5F; } +.cm-s-eclipse span.cm-string { color: #2A00FF; } +.cm-s-eclipse span.cm-string-2 { color: #f50; } +.cm-s-eclipse span.cm-qualifier { color: #555; } +.cm-s-eclipse span.cm-builtin { color: #30a; } +.cm-s-eclipse span.cm-bracket { color: #cc7; } +.cm-s-eclipse span.cm-tag { color: #170; } +.cm-s-eclipse span.cm-attribute { color: #00c; } +.cm-s-eclipse span.cm-link { color: #219; } +.cm-s-eclipse span.cm-error { color: #f00; } + +.cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/libraries/codemirror/theme/elegant.css b/libraries/codemirror/theme/elegant.css new file mode 100644 index 0000000..45b3ea6 --- /dev/null +++ b/libraries/codemirror/theme/elegant.css @@ -0,0 +1,13 @@ +.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } +.cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-variable { color: black; } +.cm-s-elegant span.cm-variable-2 { color: #b11; } +.cm-s-elegant span.cm-qualifier { color: #555; } +.cm-s-elegant span.cm-keyword { color: #730; } +.cm-s-elegant span.cm-builtin { color: #30a; } +.cm-s-elegant span.cm-link { color: #762; } +.cm-s-elegant span.cm-error { background-color: #fdd; } + +.cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/libraries/codemirror/theme/erlang-dark.css b/libraries/codemirror/theme/erlang-dark.css new file mode 100644 index 0000000..65fe481 --- /dev/null +++ b/libraries/codemirror/theme/erlang-dark.css @@ -0,0 +1,34 @@ +.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } +.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; } +.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } +.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-erlang-dark span.cm-quote { color: #ccc; } +.cm-s-erlang-dark span.cm-atom { color: #f133f1; } +.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } +.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } +.cm-s-erlang-dark span.cm-builtin { color: #eaa; } +.cm-s-erlang-dark span.cm-comment { color: #77f; } +.cm-s-erlang-dark span.cm-def { color: #e7a; } +.cm-s-erlang-dark span.cm-keyword { color: #ffee80; } +.cm-s-erlang-dark span.cm-meta { color: #50fefe; } +.cm-s-erlang-dark span.cm-number { color: #ffd0d0; } +.cm-s-erlang-dark span.cm-operator { color: #d55; } +.cm-s-erlang-dark span.cm-property { color: #ccc; } +.cm-s-erlang-dark span.cm-qualifier { color: #ccc; } +.cm-s-erlang-dark span.cm-special { color: #ffbbbb; } +.cm-s-erlang-dark span.cm-string { color: #3ad900; } +.cm-s-erlang-dark span.cm-string-2 { color: #ccc; } +.cm-s-erlang-dark span.cm-tag { color: #9effff; } +.cm-s-erlang-dark span.cm-variable { color: #50fe50; } +.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } +.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } +.cm-s-erlang-dark span.cm-error { color: #9d1e15; } + +.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; } +.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/hopscotch.css b/libraries/codemirror/theme/hopscotch.css new file mode 100644 index 0000000..7d05431 --- /dev/null +++ b/libraries/codemirror/theme/hopscotch.css @@ -0,0 +1,34 @@ +/* + + Name: Hopscotch + Author: Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} +.cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} +.cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} +.cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} +.cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} + +.cm-s-hopscotch span.cm-comment {color: #b33508;} +.cm-s-hopscotch span.cm-atom {color: #c85e7c;} +.cm-s-hopscotch span.cm-number {color: #c85e7c;} + +.cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} +.cm-s-hopscotch span.cm-keyword {color: #dd464c;} +.cm-s-hopscotch span.cm-string {color: #fdcc59;} + +.cm-s-hopscotch span.cm-variable {color: #8fc13e;} +.cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} +.cm-s-hopscotch span.cm-def {color: #fd8b19;} +.cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} +.cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} +.cm-s-hopscotch span.cm-tag {color: #dd464c;} +.cm-s-hopscotch span.cm-link {color: #c85e7c;} + +.cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } diff --git a/libraries/codemirror/theme/icecoder.css b/libraries/codemirror/theme/icecoder.css new file mode 100644 index 0000000..d70d26e --- /dev/null +++ b/libraries/codemirror/theme/icecoder.css @@ -0,0 +1,43 @@ +/* +ICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net +*/ + +.cm-s-icecoder { color: #666; background: #141612; } + +.cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; } /* off-white 1 */ +.cm-s-icecoder span.cm-atom { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-number { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-def { color: #b9ca4a; } /* green */ + +.cm-s-icecoder span.cm-variable { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; } /* pink */ +.cm-s-icecoder span.cm-variable-3 { color: #f9602c; } /* orange */ + +.cm-s-icecoder span.cm-property { color: #eee; } /* off-white 1 */ +.cm-s-icecoder span.cm-operator { color: #9179bb; } /* purple */ +.cm-s-icecoder span.cm-comment { color: #97a3aa; } /* grey-blue */ + +.cm-s-icecoder span.cm-string { color: #b9ca4a; } /* green */ +.cm-s-icecoder span.cm-string-2 { color: #6cb5d9; } /* blue */ + +.cm-s-icecoder span.cm-meta { color: #555; } /* grey */ + +.cm-s-icecoder span.cm-qualifier { color: #555; } /* grey */ +.cm-s-icecoder span.cm-builtin { color: #214e7b; } /* bright blue */ +.cm-s-icecoder span.cm-bracket { color: #cc7; } /* grey-yellow */ + +.cm-s-icecoder span.cm-tag { color: #e8e8e8; } /* off-white 2 */ +.cm-s-icecoder span.cm-attribute { color: #099; } /* teal */ + +.cm-s-icecoder span.cm-header { color: #6a0d6a; } /* purple-pink */ +.cm-s-icecoder span.cm-quote { color: #186718; } /* dark green */ +.cm-s-icecoder span.cm-hr { color: #888; } /* mid-grey */ +.cm-s-icecoder span.cm-link { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-error { color: #d00; } /* red */ + +.cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; } +.cm-s-icecoder .CodeMirror-gutters { background: #141612; min-width: 41px; border-right: 0; } +.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; } +.cm-s-icecoder .CodeMirror-matchingbracket { border: 1px solid grey; color: black !important; } +.cm-s-icecoder .CodeMirror-activeline-background { background: #000; } \ No newline at end of file diff --git a/libraries/codemirror/theme/isotope.css b/libraries/codemirror/theme/isotope.css new file mode 100644 index 0000000..d0d6263 --- /dev/null +++ b/libraries/codemirror/theme/isotope.css @@ -0,0 +1,34 @@ +/* + + Name: Isotope + Author: David Desandro / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} +.cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} +.cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} +.cm-s-isotope .CodeMirror-linenumber {color: #808080;} +.cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} + +.cm-s-isotope span.cm-comment {color: #3300ff;} +.cm-s-isotope span.cm-atom {color: #cc00ff;} +.cm-s-isotope span.cm-number {color: #cc00ff;} + +.cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} +.cm-s-isotope span.cm-keyword {color: #ff0000;} +.cm-s-isotope span.cm-string {color: #ff0099;} + +.cm-s-isotope span.cm-variable {color: #33ff00;} +.cm-s-isotope span.cm-variable-2 {color: #0066ff;} +.cm-s-isotope span.cm-def {color: #ff9900;} +.cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} +.cm-s-isotope span.cm-bracket {color: #e0e0e0;} +.cm-s-isotope span.cm-tag {color: #ff0000;} +.cm-s-isotope span.cm-link {color: #cc00ff;} + +.cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-isotope .CodeMirror-activeline-background { background: #202020; } diff --git a/libraries/codemirror/theme/lesser-dark.css b/libraries/codemirror/theme/lesser-dark.css new file mode 100644 index 0000000..690c183 --- /dev/null +++ b/libraries/codemirror/theme/lesser-dark.css @@ -0,0 +1,47 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } +.cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/ +.cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } +.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } +.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } + +.cm-s-lesser-dark span.cm-header { color: #a0a; } +.cm-s-lesser-dark span.cm-quote { color: #090; } +.cm-s-lesser-dark span.cm-keyword { color: #599eff; } +.cm-s-lesser-dark span.cm-atom { color: #C2B470; } +.cm-s-lesser-dark span.cm-number { color: #B35E4D; } +.cm-s-lesser-dark span.cm-def { color: white; } +.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } +.cm-s-lesser-dark span.cm-variable-2 { color: #669199; } +.cm-s-lesser-dark span.cm-variable-3 { color: white; } +.cm-s-lesser-dark span.cm-property { color: #92A75C; } +.cm-s-lesser-dark span.cm-operator { color: #92A75C; } +.cm-s-lesser-dark span.cm-comment { color: #666; } +.cm-s-lesser-dark span.cm-string { color: #BCD279; } +.cm-s-lesser-dark span.cm-string-2 { color: #f50; } +.cm-s-lesser-dark span.cm-meta { color: #738C73; } +.cm-s-lesser-dark span.cm-qualifier { color: #555; } +.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } +.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } +.cm-s-lesser-dark span.cm-tag { color: #669199; } +.cm-s-lesser-dark span.cm-attribute { color: #00c; } +.cm-s-lesser-dark span.cm-hr { color: #999; } +.cm-s-lesser-dark span.cm-link { color: #00c; } +.cm-s-lesser-dark span.cm-error { color: #9d1e15; } + +.cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; } +.cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/liquibyte.css b/libraries/codemirror/theme/liquibyte.css new file mode 100644 index 0000000..9db8bde --- /dev/null +++ b/libraries/codemirror/theme/liquibyte.css @@ -0,0 +1,95 @@ +.cm-s-liquibyte.CodeMirror { + background-color: #000; + color: #fff; + line-height: 1.2em; + font-size: 1em; +} +.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight { + text-decoration: underline; + text-decoration-color: #0f0; + text-decoration-style: wavy; +} +.cm-s-liquibyte .cm-trailingspace { + text-decoration: line-through; + text-decoration-color: #f00; + text-decoration-style: dotted; +} +.cm-s-liquibyte .cm-tab { + text-decoration: line-through; + text-decoration-color: #404040; + text-decoration-style: dotted; +} +.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; } +.cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; } +.cm-s-liquibyte .CodeMirror-guttermarker { } +.cm-s-liquibyte .CodeMirror-guttermarker-subtle { } +.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; } +.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; } + +.cm-s-liquibyte span.cm-comment { color: #008000; } +.cm-s-liquibyte span.cm-def { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-keyword { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-builtin { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-variable { color: #5967ff; font-weight: bold; } +.cm-s-liquibyte span.cm-string { color: #ff8000; } +.cm-s-liquibyte span.cm-number { color: #0f0; font-weight: bold; } +.cm-s-liquibyte span.cm-atom { color: #bf3030; font-weight: bold; } + +.cm-s-liquibyte span.cm-variable-2 { color: #007f7f; font-weight: bold; } +.cm-s-liquibyte span.cm-variable-3 { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-property { color: #999; font-weight: bold; } +.cm-s-liquibyte span.cm-operator { color: #fff; } + +.cm-s-liquibyte span.cm-meta { color: #0f0; } +.cm-s-liquibyte span.cm-qualifier { color: #fff700; font-weight: bold; } +.cm-s-liquibyte span.cm-bracket { color: #cc7; } +.cm-s-liquibyte span.cm-tag { color: #ff0; font-weight: bold; } +.cm-s-liquibyte span.cm-attribute { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-error { color: #f00; } + +.cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); } + +.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); } + +.cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); } + +/* Default styles for common addons */ +.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; } +.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; } +.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); } +/* Scrollbars */ +/* Simple */ +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, div.CodeMirror-simplescroll-vertical div:hover { + background-color: rgba(80, 80, 80, .7); +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, div.CodeMirror-simplescroll-vertical div { + background-color: rgba(80, 80, 80, .3); + border: 1px solid #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div { + border-left: 1px solid #404040; + border-right: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical { + background-color: #262626; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal { + background-color: #262626; + border-top: 1px solid #404040; +} +/* Overlay */ +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div { + background-color: #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div { + border: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div { + border: 1px solid #404040; +} diff --git a/libraries/codemirror/theme/material.css b/libraries/codemirror/theme/material.css new file mode 100644 index 0000000..91ed6ce --- /dev/null +++ b/libraries/codemirror/theme/material.css @@ -0,0 +1,53 @@ +/* + + Name: material + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original material color scheme by Mattia Astorino (https://github.com/equinusocio/material-theme) + +*/ + +.cm-s-material { + background-color: #263238; + color: rgba(233, 237, 237, 1); +} +.cm-s-material .CodeMirror-gutters { + background: #263238; + color: rgb(83,127,126); + border: none; +} +.cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { color: rgb(83,127,126); } +.cm-s-material .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } +.cm-s-material div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-material.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line > span::selection, .cm-s-material .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line > span::-moz-selection, .cm-s-material .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +.cm-s-material .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0); } +.cm-s-material .cm-keyword { color: rgba(199, 146, 234, 1); } +.cm-s-material .cm-operator { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-variable-2 { color: #80CBC4; } +.cm-s-material .cm-variable-3 { color: #82B1FF; } +.cm-s-material .cm-builtin { color: #DECB6B; } +.cm-s-material .cm-atom { color: #F77669; } +.cm-s-material .cm-number { color: #F77669; } +.cm-s-material .cm-def { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-string { color: #C3E88D; } +.cm-s-material .cm-string-2 { color: #80CBC4; } +.cm-s-material .cm-comment { color: #546E7A; } +.cm-s-material .cm-variable { color: #82B1FF; } +.cm-s-material .cm-tag { color: #80CBC4; } +.cm-s-material .cm-meta { color: #80CBC4; } +.cm-s-material .cm-attribute { color: #FFCB6B; } +.cm-s-material .cm-property { color: #80CBAE; } +.cm-s-material .cm-qualifier { color: #DECB6B; } +.cm-s-material .cm-variable-3 { color: #DECB6B; } +.cm-s-material .cm-tag { color: rgba(255, 83, 112, 1); } +.cm-s-material .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #EC5F67; +} +.cm-s-material .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/libraries/codemirror/theme/mbo.css b/libraries/codemirror/theme/mbo.css new file mode 100644 index 0000000..e164fcf --- /dev/null +++ b/libraries/codemirror/theme/mbo.css @@ -0,0 +1,37 @@ +/****************************************************************/ +/* Based on mbonaci's Brackets mbo theme */ +/* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ +/* Create your own: http://tmtheme-editor.herokuapp.com */ +/****************************************************************/ + +.cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; } +.cm-s-mbo div.CodeMirror-selected { background: #716C62; } +.cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; } +.cm-s-mbo .CodeMirror-guttermarker { color: white; } +.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } +.cm-s-mbo .CodeMirror-linenumber { color: #dadada; } +.cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; } + +.cm-s-mbo span.cm-comment { color: #95958a; } +.cm-s-mbo span.cm-atom { color: #00a8c6; } +.cm-s-mbo span.cm-number { color: #00a8c6; } + +.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; } +.cm-s-mbo span.cm-keyword { color: #ffb928; } +.cm-s-mbo span.cm-string { color: #ffcf6c; } +.cm-s-mbo span.cm-string.cm-property { color: #ffffec; } + +.cm-s-mbo span.cm-variable { color: #ffffec; } +.cm-s-mbo span.cm-variable-2 { color: #00a8c6; } +.cm-s-mbo span.cm-def { color: #ffffec; } +.cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; } +.cm-s-mbo span.cm-tag { color: #9ddfe9; } +.cm-s-mbo span.cm-link { color: #f54b07; } +.cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; } +.cm-s-mbo span.cm-qualifier { color: #ffffec; } + +.cm-s-mbo .CodeMirror-activeline-background { background: #494b41; } +.cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; } +.cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); } diff --git a/libraries/codemirror/theme/mdn-like.css b/libraries/codemirror/theme/mdn-like.css new file mode 100644 index 0000000..f325d45 --- /dev/null +++ b/libraries/codemirror/theme/mdn-like.css @@ -0,0 +1,46 @@ +/* + MDN-LIKE Theme - Mozilla + Ported to CodeMirror by Peter Kroon + Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues + GitHub: @peterkroon + + The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation + +*/ +.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } +.cm-s-mdn-like div.CodeMirror-selected { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; } + +.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } +.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; } +.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } + +.cm-s-mdn-like .cm-keyword { color: #6262FF; } +.cm-s-mdn-like .cm-atom { color: #F90; } +.cm-s-mdn-like .cm-number { color: #ca7841; } +.cm-s-mdn-like .cm-def { color: #8DA6CE; } +.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } +.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; } + +.cm-s-mdn-like .cm-variable { color: #07a; } +.cm-s-mdn-like .cm-property { color: #905; } +.cm-s-mdn-like .cm-qualifier { color: #690; } + +.cm-s-mdn-like .cm-operator { color: #cda869; } +.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } +.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } +.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-mdn-like .cm-meta { color: #000; } /*?*/ +.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ +.cm-s-mdn-like .cm-tag { color: #997643; } +.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-mdn-like .cm-header { color: #FF6400; } +.cm-s-mdn-like .cm-hr { color: #AEAEAE; } +.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } +.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } + +div.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; } +div.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; } + +.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); } diff --git a/libraries/codemirror/theme/midnight.css b/libraries/codemirror/theme/midnight.css new file mode 100644 index 0000000..e41f105 --- /dev/null +++ b/libraries/codemirror/theme/midnight.css @@ -0,0 +1,45 @@ +/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ + +/**/ +.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; } +.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } + +/**/ +.cm-s-midnight .CodeMirror-activeline-background { background: #253540; } + +.cm-s-midnight.CodeMirror { + background: #0F192A; + color: #D1EDFF; +} + +.cm-s-midnight.CodeMirror { border-top: 1px solid black; border-bottom: 1px solid black; } + +.cm-s-midnight div.CodeMirror-selected { background: #314D67; } +.cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; } +.cm-s-midnight .CodeMirror-guttermarker { color: white; } +.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; } +.cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; } + +.cm-s-midnight span.cm-comment { color: #428BDD; } +.cm-s-midnight span.cm-atom { color: #AE81FF; } +.cm-s-midnight span.cm-number { color: #D1EDFF; } + +.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; } +.cm-s-midnight span.cm-keyword { color: #E83737; } +.cm-s-midnight span.cm-string { color: #1DC116; } + +.cm-s-midnight span.cm-variable { color: #FFAA3E; } +.cm-s-midnight span.cm-variable-2 { color: #FFAA3E; } +.cm-s-midnight span.cm-def { color: #4DD; } +.cm-s-midnight span.cm-bracket { color: #D1EDFF; } +.cm-s-midnight span.cm-tag { color: #449; } +.cm-s-midnight span.cm-link { color: #AE81FF; } +.cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; } + +.cm-s-midnight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/libraries/codemirror/theme/monokai.css b/libraries/codemirror/theme/monokai.css new file mode 100644 index 0000000..7c8a4c5 --- /dev/null +++ b/libraries/codemirror/theme/monokai.css @@ -0,0 +1,36 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; } +.cm-s-monokai div.CodeMirror-selected { background: #49483E; } +.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; } +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-monokai span.cm-comment { color: #75715e; } +.cm-s-monokai span.cm-atom { color: #ae81ff; } +.cm-s-monokai span.cm-number { color: #ae81ff; } + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } +.cm-s-monokai span.cm-keyword { color: #f92672; } +.cm-s-monokai span.cm-builtin { color: #66d9ef; } +.cm-s-monokai span.cm-string { color: #e6db74; } + +.cm-s-monokai span.cm-variable { color: #f8f8f2; } +.cm-s-monokai span.cm-variable-2 { color: #9effff; } +.cm-s-monokai span.cm-variable-3 { color: #66d9ef; } +.cm-s-monokai span.cm-def { color: #fd971f; } +.cm-s-monokai span.cm-bracket { color: #f8f8f2; } +.cm-s-monokai span.cm-tag { color: #f92672; } +.cm-s-monokai span.cm-header { color: #ae81ff; } +.cm-s-monokai span.cm-link { color: #ae81ff; } +.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } + +.cm-s-monokai .CodeMirror-activeline-background { background: #373831; } +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/libraries/codemirror/theme/neat.css b/libraries/codemirror/theme/neat.css new file mode 100644 index 0000000..4267b1a --- /dev/null +++ b/libraries/codemirror/theme/neat.css @@ -0,0 +1,12 @@ +.cm-s-neat span.cm-comment { color: #a86; } +.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } +.cm-s-neat span.cm-string { color: #a22; } +.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } +.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } +.cm-s-neat span.cm-variable { color: black; } +.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } +.cm-s-neat span.cm-meta { color: #555; } +.cm-s-neat span.cm-link { color: #3a3; } + +.cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/libraries/codemirror/theme/neo.css b/libraries/codemirror/theme/neo.css new file mode 100644 index 0000000..b28d5c6 --- /dev/null +++ b/libraries/codemirror/theme/neo.css @@ -0,0 +1,43 @@ +/* neo theme for codemirror */ + +/* Color scheme */ + +.cm-s-neo.CodeMirror { + background-color:#ffffff; + color:#2e383c; + line-height:1.4375; +} +.cm-s-neo .cm-comment { color:#75787b; } +.cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } +.cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } +.cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } +.cm-s-neo .cm-string { color:#b35e14; } +.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } + + +/* Editor styling */ + +.cm-s-neo pre { + padding:0; +} + +.cm-s-neo .CodeMirror-gutters { + border:none; + border-right:10px solid transparent; + background-color:transparent; +} + +.cm-s-neo .CodeMirror-linenumber { + padding:0; + color:#e0e2e5; +} + +.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } +.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } + +.cm-s-neo .CodeMirror-cursor { + width: auto; + border: 0; + background: rgba(155,157,162,0.37); + z-index: 1; +} diff --git a/libraries/codemirror/theme/night.css b/libraries/codemirror/theme/night.css new file mode 100644 index 0000000..4dbb866 --- /dev/null +++ b/libraries/codemirror/theme/night.css @@ -0,0 +1,28 @@ +/* Loosely based on the Midnight Textmate theme */ + +.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-night div.CodeMirror-selected { background: #447; } +.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-night .CodeMirror-guttermarker { color: white; } +.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } +.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-night span.cm-comment { color: #6900a1; } +.cm-s-night span.cm-atom { color: #845dc4; } +.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } +.cm-s-night span.cm-keyword { color: #599eff; } +.cm-s-night span.cm-string { color: #37f14a; } +.cm-s-night span.cm-meta { color: #7678e2; } +.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } +.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } +.cm-s-night span.cm-bracket { color: #8da6ce; } +.cm-s-night span.cm-comment { color: #6900a1; } +.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } +.cm-s-night span.cm-link { color: #845dc4; } +.cm-s-night span.cm-error { color: #9d1e15; } + +.cm-s-night .CodeMirror-activeline-background { background: #1C005A; } +.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/paraiso-dark.css b/libraries/codemirror/theme/paraiso-dark.css new file mode 100644 index 0000000..aa9d207 --- /dev/null +++ b/libraries/codemirror/theme/paraiso-dark.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Dark) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; } +.cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; } +.cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; } +.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } +.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; } + +.cm-s-paraiso-dark span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-dark span.cm-atom { color: #815ba4; } +.cm-s-paraiso-dark span.cm-number { color: #815ba4; } + +.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; } +.cm-s-paraiso-dark span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-dark span.cm-string { color: #fec418; } + +.cm-s-paraiso-dark span.cm-variable { color: #48b685; } +.cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-dark span.cm-def { color: #f99b15; } +.cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; } +.cm-s-paraiso-dark span.cm-tag { color: #ef6155; } +.cm-s-paraiso-dark span.cm-link { color: #815ba4; } +.cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; } + +.cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; } +.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/paraiso-light.css b/libraries/codemirror/theme/paraiso-light.css new file mode 100644 index 0000000..ae0c755 --- /dev/null +++ b/libraries/codemirror/theme/paraiso-light.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Light) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; } +.cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; } +.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } +.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; } + +.cm-s-paraiso-light span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-light span.cm-atom { color: #815ba4; } +.cm-s-paraiso-light span.cm-number { color: #815ba4; } + +.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; } +.cm-s-paraiso-light span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-light span.cm-string { color: #fec418; } + +.cm-s-paraiso-light span.cm-variable { color: #48b685; } +.cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-light span.cm-def { color: #f99b15; } +.cm-s-paraiso-light span.cm-bracket { color: #41323f; } +.cm-s-paraiso-light span.cm-tag { color: #ef6155; } +.cm-s-paraiso-light span.cm-link { color: #815ba4; } +.cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; } + +.cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; } +.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/pastel-on-dark.css b/libraries/codemirror/theme/pastel-on-dark.css new file mode 100644 index 0000000..7197509 --- /dev/null +++ b/libraries/codemirror/theme/pastel-on-dark.css @@ -0,0 +1,53 @@ +/** + * Pastel On Dark theme ported from ACE editor + * @license MIT + * @copyright AtomicPages LLC 2014 + * @author Dennis Thompson, AtomicPages LLC + * @version 1.1 + * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme + */ + +.cm-s-pastel-on-dark.CodeMirror { + background: #2c2827; + color: #8F938F; + line-height: 1.5; + font-size: 14px; +} +.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); } + +.cm-s-pastel-on-dark .CodeMirror-gutters { + background: #34302f; + border-right: 0px; + padding: 0 3px; +} +.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } +.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } +.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } +.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } +.cm-s-pastel-on-dark span.cm-property { color: #8F938F; } +.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } +.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-string { color: #66A968; } +.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } +.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-def { color: #757aD8; } +.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } +.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } +.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-error { + background: #757aD8; + color: #f8f8f0; +} +.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); } +.cm-s-pastel-on-dark .CodeMirror-matchingbracket { + border: 1px solid rgba(255,255,255,0.25); + color: #8F938F !important; + margin: -1px -1px 0 -1px; +} diff --git a/libraries/codemirror/theme/railscasts.css b/libraries/codemirror/theme/railscasts.css new file mode 100644 index 0000000..aeff044 --- /dev/null +++ b/libraries/codemirror/theme/railscasts.css @@ -0,0 +1,34 @@ +/* + + Name: Railscasts + Author: Ryan Bates (http://railscasts.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} +.cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} +.cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} +.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} +.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} + +.cm-s-railscasts span.cm-comment {color: #bc9458;} +.cm-s-railscasts span.cm-atom {color: #b6b3eb;} +.cm-s-railscasts span.cm-number {color: #b6b3eb;} + +.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} +.cm-s-railscasts span.cm-keyword {color: #da4939;} +.cm-s-railscasts span.cm-string {color: #ffc66d;} + +.cm-s-railscasts span.cm-variable {color: #a5c261;} +.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} +.cm-s-railscasts span.cm-def {color: #cc7833;} +.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} +.cm-s-railscasts span.cm-bracket {color: #f4f1ed;} +.cm-s-railscasts span.cm-tag {color: #da4939;} +.cm-s-railscasts span.cm-link {color: #b6b3eb;} + +.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } diff --git a/libraries/codemirror/theme/rubyblue.css b/libraries/codemirror/theme/rubyblue.css new file mode 100644 index 0000000..76d33e7 --- /dev/null +++ b/libraries/codemirror/theme/rubyblue.css @@ -0,0 +1,25 @@ +.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } +.cm-s-rubyblue div.CodeMirror-selected { background: #38566F; } +.cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } +.cm-s-rubyblue .CodeMirror-guttermarker { color: white; } +.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } +.cm-s-rubyblue .CodeMirror-linenumber { color: white; } +.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } +.cm-s-rubyblue span.cm-atom { color: #F4C20B; } +.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } +.cm-s-rubyblue span.cm-keyword { color: #F0F; } +.cm-s-rubyblue span.cm-string { color: #F08047; } +.cm-s-rubyblue span.cm-meta { color: #F0F; } +.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } +.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } +.cm-s-rubyblue span.cm-bracket { color: #F0F; } +.cm-s-rubyblue span.cm-link { color: #F4C20B; } +.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } +.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } +.cm-s-rubyblue span.cm-error { color: #AF2018; } + +.cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; } diff --git a/libraries/codemirror/theme/seti.css b/libraries/codemirror/theme/seti.css new file mode 100644 index 0000000..6632d3f --- /dev/null +++ b/libraries/codemirror/theme/seti.css @@ -0,0 +1,44 @@ +/* + + Name: seti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax) + +*/ + + +.cm-s-seti.CodeMirror { + background-color: #151718 !important; + color: #CFD2D1 !important; + border: none; +} +.cm-s-seti .CodeMirror-gutters { + color: #404b53; + background-color: #0E1112; + border: none; +} +.cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-seti .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti span.cm-comment { color: #41535b; } +.cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; } +.cm-s-seti span.cm-number { color: #cd3f45; } +.cm-s-seti span.cm-variable { color: #55b5db; } +.cm-s-seti span.cm-variable-2 { color: #a074c4; } +.cm-s-seti span.cm-def { color: #55b5db; } +.cm-s-seti span.cm-keyword { color: #ff79c6; } +.cm-s-seti span.cm-operator { color: #9fca56; } +.cm-s-seti span.cm-keyword { color: #e6cd69; } +.cm-s-seti span.cm-atom { color: #cd3f45; } +.cm-s-seti span.cm-meta { color: #55b5db; } +.cm-s-seti span.cm-tag { color: #55b5db; } +.cm-s-seti span.cm-attribute { color: #9fca56; } +.cm-s-seti span.cm-qualifier { color: #9fca56; } +.cm-s-seti span.cm-property { color: #a074c4; } +.cm-s-seti span.cm-variable-3 { color: #9fca56; } +.cm-s-seti span.cm-builtin { color: #9fca56; } +.cm-s-seti .CodeMirror-activeline-background { background: #101213; } +.cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/solarized.css b/libraries/codemirror/theme/solarized.css new file mode 100644 index 0000000..7882c93 --- /dev/null +++ b/libraries/codemirror/theme/solarized.css @@ -0,0 +1,163 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color pallet +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + color-profile: sRGB; + rendering-intent: auto; +} +.cm-s-solarized.cm-s-dark { + color: #839496; + background-color: #002b36; + text-shadow: #002b36 0 1px; +} +.cm-s-solarized.cm-s-light { + background-color: #fdf6e3; + color: #657b83; + text-shadow: #eee8d5 0 1px; +} + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } + +.cm-s-solarized .cm-keyword { color: #cb4b16; } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #839496; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3 { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator { color: #6c71c4; } + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1; } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} +.cm-s-solarized .cm-strong { color: #eee; } +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} + +.cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; } +.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); } +.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); } + +.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-ligh .CodeMirror-line > span::-moz-selection, .cm-s-ligh .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; } + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + -moz-box-shadow: inset 7px 0 12px -6px #000; + -webkit-box-shadow: inset 7px 0 12px -6px #000; + box-shadow: inset 7px 0 12px -6px #000; +} + +/* Gutter border and some shadow from it */ +.cm-s-solarized .CodeMirror-gutters { + border-right: 1px solid; +} + +/* Gutter colors and line number styling based of color scheme (dark / light) */ + +/* Dark */ +.cm-s-solarized.cm-s-dark .CodeMirror-gutters { + background-color: #002b36; + border-color: #00232c; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-linenumber { + text-shadow: #021014 0 -1px; +} + +/* Light */ +.cm-s-solarized.cm-s-light .CodeMirror-gutters { + background-color: #fdf6e3; + border-color: #eee8d5; +} + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + color: #586e75; + padding: 0 5px; +} +.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } +.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } +.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } + +.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { + color: #586e75; +} + +.cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; } + +/* +Active line. Negative margin compensates left padding of the text in the +view-port +*/ +.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { + background: rgba(255, 255, 255, 0.10); +} +.cm-s-solarized.cm-s-light .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.10); +} diff --git a/libraries/codemirror/theme/the-matrix.css b/libraries/codemirror/theme/the-matrix.css new file mode 100644 index 0000000..3912a8d --- /dev/null +++ b/libraries/codemirror/theme/the-matrix.css @@ -0,0 +1,30 @@ +.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } +.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } +.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } +.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } +.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; } +.cm-s-the-matrix span.cm-atom { color: #3FF; } +.cm-s-the-matrix span.cm-number { color: #FFB94F; } +.cm-s-the-matrix span.cm-def { color: #99C; } +.cm-s-the-matrix span.cm-variable { color: #F6C; } +.cm-s-the-matrix span.cm-variable-2 { color: #C6F; } +.cm-s-the-matrix span.cm-variable-3 { color: #96F; } +.cm-s-the-matrix span.cm-property { color: #62FFA0; } +.cm-s-the-matrix span.cm-operator { color: #999; } +.cm-s-the-matrix span.cm-comment { color: #CCCCCC; } +.cm-s-the-matrix span.cm-string { color: #39C; } +.cm-s-the-matrix span.cm-meta { color: #C9F; } +.cm-s-the-matrix span.cm-qualifier { color: #FFF700; } +.cm-s-the-matrix span.cm-builtin { color: #30a; } +.cm-s-the-matrix span.cm-bracket { color: #cc7; } +.cm-s-the-matrix span.cm-tag { color: #FFBD40; } +.cm-s-the-matrix span.cm-attribute { color: #FFF700; } +.cm-s-the-matrix span.cm-error { color: #FF0000; } + +.cm-s-the-matrix .CodeMirror-activeline-background { background: #040; } diff --git a/libraries/codemirror/theme/tomorrow-night-bright.css b/libraries/codemirror/theme/tomorrow-night-bright.css new file mode 100644 index 0000000..b6dd4a9 --- /dev/null +++ b/libraries/codemirror/theme/tomorrow-night-bright.css @@ -0,0 +1,35 @@ +/* + + Name: Tomorrow Night - Bright + Author: Chris Kempson + + Port done by Gerard Braad + +*/ + +.cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; } +.cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; } + +.cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; } +.cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; } +.cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; } +.cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; } +.cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; } + +.cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; } +.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/tomorrow-night-eighties.css b/libraries/codemirror/theme/tomorrow-night-eighties.css new file mode 100644 index 0000000..2a9debc --- /dev/null +++ b/libraries/codemirror/theme/tomorrow-night-eighties.css @@ -0,0 +1,38 @@ +/* + + Name: Tomorrow Night - Eighties + Author: Chris Kempson + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; } +.cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; } +.cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; } + +.cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; } +.cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; } +.cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; } +.cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; } + +.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; } +.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/libraries/codemirror/theme/ttcn.css b/libraries/codemirror/theme/ttcn.css new file mode 100644 index 0000000..b3d4656 --- /dev/null +++ b/libraries/codemirror/theme/ttcn.css @@ -0,0 +1,64 @@ +.cm-s-ttcn .cm-quote { color: #090; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-link { text-decoration: underline; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-header { color: #00f; font-weight: bold; } + +.cm-s-ttcn .cm-atom { color: #219; } +.cm-s-ttcn .cm-attribute { color: #00c; } +.cm-s-ttcn .cm-bracket { color: #997; } +.cm-s-ttcn .cm-comment { color: #333333; } +.cm-s-ttcn .cm-def { color: #00f; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-error { color: #f00; } +.cm-s-ttcn .cm-hr { color: #999; } +.cm-s-ttcn .cm-invalidchar { color: #f00; } +.cm-s-ttcn .cm-keyword { font-weight:bold; } +.cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; } +.cm-s-ttcn .cm-meta { color: #555; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-qualifier { color: #555; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-string { color: #006400; } +.cm-s-ttcn .cm-string-2 { color: #f50; } +.cm-s-ttcn .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-tag { color: #170; } +.cm-s-ttcn .cm-variable { color: #8B2252; } +.cm-s-ttcn .cm-variable-2 { color: #05a; } +.cm-s-ttcn .cm-variable-3 { color: #085; } + +.cm-s-ttcn .cm-invalidchar { color: #f00; } + +/* ASN */ +.cm-s-ttcn .cm-accessTypes, +.cm-s-ttcn .cm-compareTypes { color: #27408B; } +.cm-s-ttcn .cm-cmipVerbs { color: #8B2252; } +.cm-s-ttcn .cm-modifier { color:#D2691E; } +.cm-s-ttcn .cm-status { color:#8B4545; } +.cm-s-ttcn .cm-storage { color:#A020F0; } +.cm-s-ttcn .cm-tags { color:#006400; } + +/* CFG */ +.cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; } +.cm-s-ttcn .cm-fileNCtrlMaskOptions, +.cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; } + +/* TTCN */ +.cm-s-ttcn .cm-booleanConsts, +.cm-s-ttcn .cm-otherConsts, +.cm-s-ttcn .cm-verdictConsts { color: #006400; } +.cm-s-ttcn .cm-configOps, +.cm-s-ttcn .cm-functionOps, +.cm-s-ttcn .cm-portOps, +.cm-s-ttcn .cm-sutOps, +.cm-s-ttcn .cm-timerOps, +.cm-s-ttcn .cm-verdictOps { color: #0000FF; } +.cm-s-ttcn .cm-preprocessor, +.cm-s-ttcn .cm-templateMatch, +.cm-s-ttcn .cm-ttcn3Macros { color: #27408B; } +.cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; } +.cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; } diff --git a/libraries/codemirror/theme/twilight.css b/libraries/codemirror/theme/twilight.css new file mode 100644 index 0000000..d342b89 --- /dev/null +++ b/libraries/codemirror/theme/twilight.css @@ -0,0 +1,32 @@ +.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ +.cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/ +.cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); } +.cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); } + +.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } +.cm-s-twilight .CodeMirror-guttermarker { color: white; } +.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } +.cm-s-twilight .CodeMirror-linenumber { color: #aaa; } +.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ +.cm-s-twilight .cm-atom { color: #FC0; } +.cm-s-twilight .cm-number { color: #ca7841; } /**/ +.cm-s-twilight .cm-def { color: #8DA6CE; } +.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ +.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ +.cm-s-twilight .cm-operator { color: #cda869; } /**/ +.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ +.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ +.cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ +.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ +.cm-s-twilight .cm-tag { color: #997643; } /**/ +.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-twilight .cm-header { color: #FF6400; } +.cm-s-twilight .cm-hr { color: #AEAEAE; } +.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ +.cm-s-twilight .cm-error { border-bottom: 1px solid red; } + +.cm-s-twilight .CodeMirror-activeline-background { background: #27282E; } +.cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/vibrant-ink.css b/libraries/codemirror/theme/vibrant-ink.css new file mode 100644 index 0000000..ac4ec6d --- /dev/null +++ b/libraries/codemirror/theme/vibrant-ink.css @@ -0,0 +1,34 @@ +/* Taken from the popular Visual Studio Vibrant Ink Schema */ + +.cm-s-vibrant-ink.CodeMirror { background: black; color: white; } +.cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; } +.cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); } +.cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); } + +.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } +.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-vibrant-ink .cm-keyword { color: #CC7832; } +.cm-s-vibrant-ink .cm-atom { color: #FC0; } +.cm-s-vibrant-ink .cm-number { color: #FFEE98; } +.cm-s-vibrant-ink .cm-def { color: #8DA6CE; } +.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; } +.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D; } +.cm-s-vibrant-ink .cm-operator { color: #888; } +.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } +.cm-s-vibrant-ink .cm-string { color: #A5C25C; } +.cm-s-vibrant-ink .cm-string-2 { color: red; } +.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } +.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-header { color: #FF6400; } +.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } +.cm-s-vibrant-ink .cm-link { color: blue; } +.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } + +.cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; } +.cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/xq-dark.css b/libraries/codemirror/theme/xq-dark.css new file mode 100644 index 0000000..e3bd960 --- /dev/null +++ b/libraries/codemirror/theme/xq-dark.css @@ -0,0 +1,53 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-xq-dark div.CodeMirror-selected { background: #27007A; } +.cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-xq-dark span.cm-keyword { color: #FFBD40; } +.cm-s-xq-dark span.cm-atom { color: #6C8CD5; } +.cm-s-xq-dark span.cm-number { color: #164; } +.cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; } +.cm-s-xq-dark span.cm-variable { color: #FFF; } +.cm-s-xq-dark span.cm-variable-2 { color: #EEE; } +.cm-s-xq-dark span.cm-variable-3 { color: #DDD; } +.cm-s-xq-dark span.cm-property {} +.cm-s-xq-dark span.cm-operator {} +.cm-s-xq-dark span.cm-comment { color: gray; } +.cm-s-xq-dark span.cm-string { color: #9FEE00; } +.cm-s-xq-dark span.cm-meta { color: yellow; } +.cm-s-xq-dark span.cm-qualifier { color: #FFF700; } +.cm-s-xq-dark span.cm-builtin { color: #30a; } +.cm-s-xq-dark span.cm-bracket { color: #cc7; } +.cm-s-xq-dark span.cm-tag { color: #FFBD40; } +.cm-s-xq-dark span.cm-attribute { color: #FFF700; } +.cm-s-xq-dark span.cm-error { color: #f00; } + +.cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; } +.cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/libraries/codemirror/theme/xq-light.css b/libraries/codemirror/theme/xq-light.css new file mode 100644 index 0000000..8d2fcb6 --- /dev/null +++ b/libraries/codemirror/theme/xq-light.css @@ -0,0 +1,43 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; } +.cm-s-xq-light span.cm-atom { color: #6C8CD5; } +.cm-s-xq-light span.cm-number { color: #164; } +.cm-s-xq-light span.cm-def { text-decoration:underline; } +.cm-s-xq-light span.cm-variable { color: black; } +.cm-s-xq-light span.cm-variable-2 { color:black; } +.cm-s-xq-light span.cm-variable-3 { color: black; } +.cm-s-xq-light span.cm-property {} +.cm-s-xq-light span.cm-operator {} +.cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; } +.cm-s-xq-light span.cm-string { color: red; } +.cm-s-xq-light span.cm-meta { color: yellow; } +.cm-s-xq-light span.cm-qualifier { color: grey; } +.cm-s-xq-light span.cm-builtin { color: #7EA656; } +.cm-s-xq-light span.cm-bracket { color: #cc7; } +.cm-s-xq-light span.cm-tag { color: #3F7F7F; } +.cm-s-xq-light span.cm-attribute { color: #7F007F; } +.cm-s-xq-light span.cm-error { color: #f00; } + +.cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; } diff --git a/libraries/codemirror/theme/yeti.css b/libraries/codemirror/theme/yeti.css new file mode 100644 index 0000000..c70d4d2 --- /dev/null +++ b/libraries/codemirror/theme/yeti.css @@ -0,0 +1,44 @@ +/* + + Name: yeti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax) + +*/ + + +.cm-s-yeti.CodeMirror { + background-color: #ECEAE8 !important; + color: #d1c9c0 !important; + border: none; +} + +.cm-s-yeti .CodeMirror-gutters { + color: #adaba6; + background-color: #E5E1DB; + border: none; +} +.cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; } +.cm-s-yeti .CodeMirror-linenumber { color: #adaba6; } +.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; } +.cm-s-yeti span.cm-comment { color: #d4c8be; } +.cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; } +.cm-s-yeti span.cm-number { color: #a074c4; } +.cm-s-yeti span.cm-variable { color: #55b5db; } +.cm-s-yeti span.cm-variable-2 { color: #a074c4; } +.cm-s-yeti span.cm-def { color: #55b5db; } +.cm-s-yeti span.cm-operator { color: #9fb96e; } +.cm-s-yeti span.cm-keyword { color: #9fb96e; } +.cm-s-yeti span.cm-atom { color: #a074c4; } +.cm-s-yeti span.cm-meta { color: #96c0d8; } +.cm-s-yeti span.cm-tag { color: #96c0d8; } +.cm-s-yeti span.cm-attribute { color: #9fb96e; } +.cm-s-yeti span.cm-qualifier { color: #96c0d8; } +.cm-s-yeti span.cm-property { color: #a074c4; } +.cm-s-yeti span.cm-builtin { color: #a074c4; } +.cm-s-yeti span.cm-variable-3 { color: #96c0d8; } +.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } +.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } diff --git a/libraries/codemirror/theme/zenburn.css b/libraries/codemirror/theme/zenburn.css new file mode 100644 index 0000000..781c40a --- /dev/null +++ b/libraries/codemirror/theme/zenburn.css @@ -0,0 +1,37 @@ +/** + * " + * Using Zenburn color palette from the Emacs Zenburn Theme + * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el + * + * Also using parts of https://github.com/xavi/coderay-lighttable-theme + * " + * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css + */ + +.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } +.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } +.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; } +.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } +.cm-s-zenburn span.cm-comment { color: #7f9f7f; } +.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } +.cm-s-zenburn span.cm-atom { color: #bfebbf; } +.cm-s-zenburn span.cm-def { color: #dcdccc; } +.cm-s-zenburn span.cm-variable { color: #dfaf8f; } +.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } +.cm-s-zenburn span.cm-string { color: #cc9393; } +.cm-s-zenburn span.cm-string-2 { color: #cc9393; } +.cm-s-zenburn span.cm-number { color: #dcdccc; } +.cm-s-zenburn span.cm-tag { color: #93e0e3; } +.cm-s-zenburn span.cm-property { color: #dfaf8f; } +.cm-s-zenburn span.cm-attribute { color: #dfaf8f; } +.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } +.cm-s-zenburn span.cm-meta { color: #f0dfaf; } +.cm-s-zenburn span.cm-header { color: #f0efd0; } +.cm-s-zenburn span.cm-operator { color: #f0efd0; } +.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } +.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } +.cm-s-zenburn .CodeMirror-activeline { background: #000000; } +.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } +.cm-s-zenburn div.CodeMirror-selected { background: #545454; } +.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; } diff --git a/libraries/easy-tabs/css/easy-responsive-tabs.css b/libraries/easy-tabs/css/easy-responsive-tabs.css new file mode 100644 index 0000000..01e8333 --- /dev/null +++ b/libraries/easy-tabs/css/easy-responsive-tabs.css @@ -0,0 +1,168 @@ +ul.resp-tabs-list, p { + margin: 0px; + padding: 0px; +} +.resp-tabs-list li { + font-weight: 600; + font-size: 13px; + display: inline-block; + padding: 7px 15px; + margin: 0 0 0 0; + list-style: none; + cursor: pointer; + float: left; + opacity: 0.6; +} +.resp-tabs-container { + padding: 0px; + background-color: #fff; + clear: left; +} +h2.resp-accordion { + cursor: pointer; + padding: 5px; + display: none; +} +.resp-tab-content { + display: none; + padding: 15px; +} +.resp-tab-active { + border: 1px solid #5AB1D0 !important; + border-bottom: none; + margin-bottom: -1px !important; + padding: 7px 14px !important; + border-top: 2px solid #5AB1D0 !important; + border-bottom: 1px #fff solid !important; + opacity: 1 !important; +} +.resp-tab-active { + border-bottom: none; + background-color: #fff; +} +.resp-content-active, .resp-accordion-active { + display: block; +} +.resp-tab-content { + border: 1px solid #c1c1c1; + border-top-color: #5AB1D0; +} +h2.resp-accordion { + font-size: 13px; + border: 1px solid #c1c1c1; + border-top: 0px solid #c1c1c1; + margin: 0px; + padding: 10px 15px; +} +h2.resp-tab-active { + border-bottom: 0px solid #c1c1c1 !important; + margin-bottom: 0px !important; + padding: 10px 15px !important; +} +h2.resp-tab-title:last-child { + border-bottom: 12px solid #c1c1c1 !important; + background: blue; +} +.resp-vtabs > ul.resp-tabs-list { + float: left; + width: 250px; + margin: 0 !important; +} +.resp-vtabs > .resp-tabs-list li { + display: block; + padding: 10px 15px !important; + margin: 0; + cursor: pointer; + float: none; +} +.resp-tabs-list li i { + margin-right: 10px; + font-size: 16px; + position: relative; + top: 1px; +} +.resp-vtabs > .resp-tabs-container { + padding: 0 15px; + background-color: #fff; + border: 1px solid #e5e5e5; + float: left; + width: calc( 100% - 250px ); + min-height: 250px; + clear: none; +} +.resp-vtabs .resp-tab-content { + border: none; + word-wrap: break-word; +} +.resp-vtabs li.resp-tab-active { + position: relative; + z-index: 1; + margin-right: -1px !important; + padding: 10px 15px !important; + border-top: 1px solid; + border: 1px solid #4186da !important; + border-left: 10px solid #4186da !important; + margin-bottom: 0 !important; + border-right: 1px #FFF solid !important; +} +.resp-arrow { + width: 0; + height: 0; + float: right; + margin-top: 3px; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 12px solid #c1c1c1; +} +h2.resp-tab-active span.resp-arrow { + border: none; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 12px solid #9B9797; +} +h2.resp-tab-active { + background: #DBDBDB;/* !important;*/ +} +.resp-easy-accordion h2.resp-accordion { + display: block; +} +.resp-easy-accordion .resp-tab-content { + border: 1px solid #c1c1c1; +} +.resp-easy-accordion .resp-tab-content:last-child { + border-bottom: 1px solid #c1c1c1;/* !important;*/ +} +.resp-jfit { + width: 100%; + margin: 0px; +} +.resp-tab-content-active { + display: block; +} +h2.resp-accordion:first-child { + border-top: 1px solid #c1c1c1;/* !important;*/ +} +@media only screen and (max-width: 768px) { + ul.resp-tabs-list { + display: none; + } + h2.resp-accordion { + display: block; + } + .resp-vtabs .resp-tab-content { + border: 1px solid #C1C1C1; + } + .resp-vtabs .resp-tabs-container { + border: none; + float: none; + width: 100%; + min-height: 100px; + clear: none; + } + .resp-accordion-closed { + display: none !important; + } + .resp-vtabs .resp-tab-content:last-child { + border-bottom: 1px solid #c1c1c1 !important; + } +} \ No newline at end of file diff --git a/libraries/easy-tabs/js/easyResponsiveTabs.js b/libraries/easy-tabs/js/easyResponsiveTabs.js new file mode 100644 index 0000000..56712b0 --- /dev/null +++ b/libraries/easy-tabs/js/easyResponsiveTabs.js @@ -0,0 +1,224 @@ +// Easy Responsive Tabs Plugin +// Author: Samson.Onna +(function ($) { + $.fn.extend({ + easyResponsiveTabs: function (options) { + //Set the default values, use comma to separate the settings, example: + var defaults = { + type: 'default', //default, vertical, accordion; + width: 'auto', + fit: true, + closed: false, + tabidentify: '', + activetab_bg: 'white', + inactive_bg: '#F5F5F5', + active_border_color: '', + active_content_border_color: '', + activate: function () { + } + } + //Variables + var options = $.extend(defaults, options); + var opt = options, jtype = opt.type, jfit = opt.fit, jwidth = opt.width, vtabs = 'vertical', accord = 'accordion'; + var hash = window.location.hash; + var historyApi = !!(window.history && history.replaceState); + + //Events + $(this).bind('tabactivate', function (e, currentTab) { + if (typeof options.activate === 'function') { + options.activate.call(currentTab, e) + } + }); + + //Main function + this.each(function () { + var $respTabs = $(this); + var $respTabsList = $respTabs.find('ul.resp-tabs-list.' + options.tabidentify); + var respTabsId = $respTabs.attr('id'); + $respTabs.find('ul.resp-tabs-list.' + options.tabidentify + ' li').addClass('resp-tab-item').addClass(options.tabidentify); + $respTabs.css({ + 'display': 'block', + 'width': jwidth + }); + + if (options.type == 'vertical') + $respTabsList.css('margin-top', '3px'); + + $respTabs.find('.resp-tabs-container.' + options.tabidentify).css('border-color', options.active_content_border_color); + $respTabs.find('.resp-tabs-container.' + options.tabidentify + ' > div').addClass('resp-tab-content').addClass(options.tabidentify); + jtab_options(); + //Properties Function + function jtab_options() { + if (jtype == vtabs) { + $respTabs.addClass('resp-vtabs').addClass(options.tabidentify); + } + if (jfit == true) { + $respTabs.css({ width: '100%', margin: '0px' }); + } + if (jtype == accord) { + $respTabs.addClass('resp-easy-accordion').addClass(options.tabidentify); + $respTabs.find('.resp-tabs-list').css('display', 'none'); + } + } + + //Assigning the h2 markup to accordion title + var $tabItemh2; + $respTabs.find('.resp-tab-content.' + options.tabidentify).before(""); + + $respTabs.find('.resp-tab-content.' + options.tabidentify).prev("h2").css({ + 'background-color': options.inactive_bg, + 'border-color': options.active_border_color + }); + + var itemCount = 0; + $respTabs.find('.resp-accordion').each(function () { + $tabItemh2 = $(this); + var $tabItem = $respTabs.find('.resp-tab-item:eq(' + itemCount + ')'); + var $accItem = $respTabs.find('.resp-accordion:eq(' + itemCount + ')'); + $accItem.append($tabItem.html()); + $accItem.data($tabItem.data()); + $tabItemh2.attr('aria-controls', options.tabidentify + '_tab_item-' + (itemCount)); + itemCount++; + }); + + //Assigning the 'aria-controls' to Tab items + var count = 0, + $tabContent; + $respTabs.find('.resp-tab-item').each(function () { + $tabItem = $(this); + $tabItem.attr('aria-controls', options.tabidentify + '_tab_item-' + (count)); + $tabItem.attr('role', 'tab'); + $tabItem.css({ + 'background-color': options.inactive_bg, + 'border-color': 'none' + }); + + //Assigning the 'aria-labelledby' attr to tab-content + var tabcount = 0; + $respTabs.find('.resp-tab-content.' + options.tabidentify).each(function () { + $tabContent = $(this); + $tabContent.attr('aria-labelledby', options.tabidentify + '_tab_item-' + (tabcount)).css({ + 'border-color': options.active_border_color + }); + tabcount++; + }); + count++; + }); + + // Show correct content area + var tabNum = 0; + if (hash != '') { + var matches = hash.match(new RegExp(respTabsId + "([0-9]+)")); + if (matches !== null && matches.length === 2) { + tabNum = parseInt(matches[1], 10) - 1; + if (tabNum > count) { + tabNum = 0; + } + } + } + + //Active correct tab + $($respTabs.find('.resp-tab-item.' + options.tabidentify)[tabNum]).addClass('resp-tab-active').css({ + 'background-color': options.activetab_bg, + 'border-color': options.active_border_color + }); + + //keep closed if option = 'closed' or option is 'accordion' and the element is in accordion mode + if (options.closed !== true && !(options.closed === 'accordion' && !$respTabsList.is(':visible')) && !(options.closed === 'tabs' && $respTabsList.is(':visible'))) { + $($respTabs.find('.resp-accordion.' + options.tabidentify)[tabNum]).addClass('resp-tab-active').css({ + 'background-color': options.activetab_bg + ' !important', + 'border-color': options.active_border_color, + 'background': 'none' + }); + + $($respTabs.find('.resp-tab-content.' + options.tabidentify)[tabNum]).addClass('resp-tab-content-active').addClass(options.tabidentify).attr('style', 'display:block'); + } + //assign proper classes for when tabs mode is activated before making a selection in accordion mode + else { + // $($respTabs.find('.resp-tab-content.' + options.tabidentify)[tabNum]).addClass('resp-accordion-closed'); //removed resp-tab-content-active + } + + //Tab Click action function + $respTabs.find("[role=tab]").each(function () { + + var $currentTab = $(this); + $currentTab.click(function () { + + var $currentTab = $(this); + var $tabAria = $currentTab.attr('aria-controls'); + + if ($currentTab.hasClass('resp-accordion') && $currentTab.hasClass('resp-tab-active')) { + $respTabs.find('.resp-tab-content-active.' + options.tabidentify).slideUp('', function () { + $(this).addClass('resp-accordion-closed'); + }); + $currentTab.removeClass('resp-tab-active').css({ + 'background-color': options.inactive_bg, + 'border-color': 'none' + }); + return false; + } + if (!$currentTab.hasClass('resp-tab-active') && $currentTab.hasClass('resp-accordion')) { + $respTabs.find('.resp-tab-active.' + options.tabidentify).removeClass('resp-tab-active').css({ + 'background-color': options.inactive_bg, + 'border-color': 'none' + }); + $respTabs.find('.resp-tab-content-active.' + options.tabidentify).slideUp().removeClass('resp-tab-content-active resp-accordion-closed'); + $respTabs.find("[aria-controls=" + $tabAria + "]").addClass('resp-tab-active').css({ + 'background-color': options.activetab_bg, + 'border-color': options.active_border_color + }); + + $respTabs.find('.resp-tab-content[aria-labelledby = ' + $tabAria + '].' + options.tabidentify).slideDown().addClass('resp-tab-content-active'); + } else { + console.log('here'); + $respTabs.find('.resp-tab-active.' + options.tabidentify).removeClass('resp-tab-active').css({ + 'background-color': options.inactive_bg, + 'border-color': 'none' + }); + + $respTabs.find('.resp-tab-content-active.' + options.tabidentify).removeAttr('style').removeClass('resp-tab-content-active').removeClass('resp-accordion-closed'); + + $respTabs.find("[aria-controls=" + $tabAria + "]").addClass('resp-tab-active').css({ + 'background-color': options.activetab_bg, + 'border-color': options.active_border_color + }); + + $respTabs.find('.resp-tab-content[aria-labelledby = ' + $tabAria + '].' + options.tabidentify).addClass('resp-tab-content-active').attr('style', 'display:block'); + } + //Trigger tab activation event + $currentTab.trigger('tabactivate', $currentTab); + + //Update Browser History + if (historyApi) { + var currentHash = window.location.hash; + var tabAriaParts = $tabAria.split('tab_item-'); + // var newHash = respTabsId + (parseInt($tabAria.substring(9), 10) + 1).toString(); + var newHash = respTabsId + (parseInt(tabAriaParts[1], 10) + 1).toString(); + if (currentHash != "") { + var re = new RegExp(respTabsId + "[0-9]+"); + if (currentHash.match(re) != null) { + newHash = currentHash.replace(re, newHash); + } + else { + newHash = currentHash + "|" + newHash; + } + } + else { + newHash = '#' + newHash; + } + + history.replaceState(null, null, newHash); + } + }); + + }); + + //Window resize function + $(window).resize(function () { + $respTabs.find('.resp-accordion-closed').removeAttr('style'); + }); + }); + } + }); +})(jQuery); + diff --git a/libraries/fancyBox/blank.gif b/libraries/fancyBox/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/libraries/fancyBox/blank.gif differ diff --git a/libraries/fancyBox/blank_1.gif b/libraries/fancyBox/blank_1.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/libraries/fancyBox/blank_1.gif differ diff --git a/libraries/fancyBox/fancybox_loading.gif b/libraries/fancyBox/fancybox_loading.gif new file mode 100644 index 0000000..a03a40c Binary files /dev/null and b/libraries/fancyBox/fancybox_loading.gif differ diff --git a/libraries/fancyBox/fancybox_loading@2x.gif b/libraries/fancyBox/fancybox_loading@2x.gif new file mode 100644 index 0000000..9205aeb Binary files /dev/null and b/libraries/fancyBox/fancybox_loading@2x.gif differ diff --git a/libraries/fancyBox/fancybox_loading@2x_1.gif b/libraries/fancyBox/fancybox_loading@2x_1.gif new file mode 100644 index 0000000..9205aeb Binary files /dev/null and b/libraries/fancyBox/fancybox_loading@2x_1.gif differ diff --git a/libraries/fancyBox/fancybox_overlay.png b/libraries/fancyBox/fancybox_overlay.png new file mode 100644 index 0000000..a439139 Binary files /dev/null and b/libraries/fancyBox/fancybox_overlay.png differ diff --git a/libraries/fancyBox/fancybox_sprite.png b/libraries/fancyBox/fancybox_sprite.png new file mode 100644 index 0000000..fd8d5ca Binary files /dev/null and b/libraries/fancyBox/fancybox_sprite.png differ diff --git a/libraries/fancyBox/fancybox_sprite@2x.png b/libraries/fancyBox/fancybox_sprite@2x.png new file mode 100644 index 0000000..d0e4779 Binary files /dev/null and b/libraries/fancyBox/fancybox_sprite@2x.png differ diff --git a/libraries/fancyBox/helpers/fancybox_buttons.png b/libraries/fancyBox/helpers/fancybox_buttons.png new file mode 100644 index 0000000..0787207 Binary files /dev/null and b/libraries/fancyBox/helpers/fancybox_buttons.png differ diff --git a/libraries/fancyBox/helpers/jquery.fancybox-buttons.css b/libraries/fancyBox/helpers/jquery.fancybox-buttons.css new file mode 100644 index 0000000..a26273a --- /dev/null +++ b/libraries/fancyBox/helpers/jquery.fancybox-buttons.css @@ -0,0 +1,97 @@ +#fancybox-buttons { + position: fixed; + left: 0; + width: 100%; + z-index: 8050; +} + +#fancybox-buttons.top { + top: 10px; +} + +#fancybox-buttons.bottom { + bottom: 10px; +} + +#fancybox-buttons ul { + display: block; + width: 166px; + height: 30px; + margin: 0 auto; + padding: 0; + list-style: none; + border: 1px solid #111; + border-radius: 3px; + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + background: rgb(50,50,50); + background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); + background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); +} + +#fancybox-buttons ul li { + float: left; + margin: 0; + padding: 0; +} + +#fancybox-buttons a { + display: block; + width: 30px; + height: 30px; + text-indent: -9999px; + background-color: transparent; + background-image: url('fancybox_buttons.png'); + background-repeat: no-repeat; + outline: none; + opacity: 0.8; +} + +#fancybox-buttons a:hover { + opacity: 1; +} + +#fancybox-buttons a.btnPrev { + background-position: 5px 0; +} + +#fancybox-buttons a.btnNext { + background-position: -33px 0; + border-right: 1px solid #3e3e3e; +} + +#fancybox-buttons a.btnPlay { + background-position: 0 -30px; +} + +#fancybox-buttons a.btnPlayOn { + background-position: -30px -30px; +} + +#fancybox-buttons a.btnToggle { + background-position: 3px -60px; + border-left: 1px solid #111; + border-right: 1px solid #3e3e3e; + width: 35px +} + +#fancybox-buttons a.btnToggleOn { + background-position: -27px -60px; +} + +#fancybox-buttons a.btnClose { + border-left: 1px solid #111; + width: 35px; + background-position: -56px 0px; +} + +#fancybox-buttons a.btnDisabled { + opacity : 0.4; + cursor: default; +} \ No newline at end of file diff --git a/libraries/fancyBox/helpers/jquery.fancybox-buttons.js b/libraries/fancyBox/helpers/jquery.fancybox-buttons.js new file mode 100644 index 0000000..fd8b955 --- /dev/null +++ b/libraries/fancyBox/helpers/jquery.fancybox-buttons.js @@ -0,0 +1,122 @@ + /*! + * Buttons helper for fancyBox + * version: 1.0.5 (Mon, 15 Oct 2012) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * buttons: { + * position : 'top' + * } + * } + * }); + * + */ +(function ($) { + //Shortcut for fancyBox object + var F = $.fancybox; + + //Add helper object + F.helpers.buttons = { + defaults : { + skipSingle : false, // disables if gallery contains single image + position : 'top', // 'top' or 'bottom' + tpl : '
          ' + }, + + list : null, + buttons: null, + + beforeLoad: function (opts, obj) { + //Remove self if gallery do not have at least two items + + if (opts.skipSingle && obj.group.length < 2) { + obj.helpers.buttons = false; + obj.closeBtn = true; + + return; + } + + //Increase top margin to give space for buttons + obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; + }, + + onPlayStart: function () { + if (this.buttons) { + this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); + } + }, + + onPlayEnd: function () { + if (this.buttons) { + this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); + } + }, + + afterShow: function (opts, obj) { + var buttons = this.buttons; + + if (!buttons) { + this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); + + buttons = { + prev : this.list.find('.btnPrev').click( F.prev ), + next : this.list.find('.btnNext').click( F.next ), + play : this.list.find('.btnPlay').click( F.play ), + toggle : this.list.find('.btnToggle').click( F.toggle ), + close : this.list.find('.btnClose').click( F.close ) + } + } + + //Prev + if (obj.index > 0 || obj.loop) { + buttons.prev.removeClass('btnDisabled'); + } else { + buttons.prev.addClass('btnDisabled'); + } + + //Next / Play + if (obj.loop || obj.index < obj.group.length - 1) { + buttons.next.removeClass('btnDisabled'); + buttons.play.removeClass('btnDisabled'); + + } else { + buttons.next.addClass('btnDisabled'); + buttons.play.addClass('btnDisabled'); + } + + this.buttons = buttons; + + this.onUpdate(opts, obj); + }, + + onUpdate: function (opts, obj) { + var toggle; + + if (!this.buttons) { + return; + } + + toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); + + //Size toggle button + if (obj.canShrink) { + toggle.addClass('btnToggleOn'); + + } else if (!obj.canExpand) { + toggle.addClass('btnDisabled'); + } + }, + + beforeClose: function () { + if (this.list) { + this.list.remove(); + } + + this.list = null; + this.buttons = null; + } + }; + +}(jQuery)); diff --git a/libraries/fancyBox/helpers/jquery.fancybox-media.js b/libraries/fancyBox/helpers/jquery.fancybox-media.js new file mode 100644 index 0000000..3584c8a --- /dev/null +++ b/libraries/fancyBox/helpers/jquery.fancybox-media.js @@ -0,0 +1,199 @@ +/*! + * Media helper for fancyBox + * version: 1.0.6 (Fri, 14 Jun 2013) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * media: true + * } + * }); + * + * Set custom URL parameters: + * $(".fancybox").fancybox({ + * helpers : { + * media: { + * youtube : { + * params : { + * autoplay : 0 + * } + * } + * } + * } + * }); + * + * Or: + * $(".fancybox").fancybox({, + * helpers : { + * media: true + * }, + * youtube : { + * autoplay: 0 + * } + * }); + * + * Supports: + * + * Youtube + * http://www.youtube.com/watch?v=opj24KnzrWo + * http://www.youtube.com/embed/opj24KnzrWo + * http://youtu.be/opj24KnzrWo + * http://www.youtube-nocookie.com/embed/opj24KnzrWo + * Vimeo + * http://vimeo.com/40648169 + * http://vimeo.com/channels/staffpicks/38843628 + * http://vimeo.com/groups/surrealism/videos/36516384 + * http://player.vimeo.com/video/45074303 + * Metacafe + * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/ + * http://www.metacafe.com/watch/7635964/ + * Dailymotion + * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people + * Twitvid + * http://twitvid.com/QY7MD + * Twitpic + * http://twitpic.com/7p93st + * Instagram + * http://instagr.am/p/IejkuUGxQn/ + * http://instagram.com/p/IejkuUGxQn/ + * Google maps + * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17 + * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 + * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 + */ +(function ($) { + "use strict"; + + //Shortcut for fancyBox object + var F = $.fancybox, + format = function( url, rez, params ) { + params = params || ''; + + if ( $.type( params ) === "object" ) { + params = $.param(params, true); + } + + $.each(rez, function(key, value) { + url = url.replace( '$' + key, value || '' ); + }); + + if (params.length) { + url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; + } + + return url; + }; + + //Add helper object + F.helpers.media = { + defaults : { + youtube : { + matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, + params : { + autoplay : 1, + autohide : 1, + fs : 1, + rel : 0, + hd : 1, + wmode : 'opaque', + enablejsapi : 1 + }, + type : 'iframe', + url : '//www.youtube.com/embed/$3' + }, + vimeo : { + matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, + params : { + autoplay : 1, + hd : 1, + show_title : 1, + show_byline : 1, + show_portrait : 0, + fullscreen : 1 + }, + type : 'iframe', + url : '//player.vimeo.com/video/$1' + }, + metacafe : { + matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, + params : { + autoPlay : 'yes' + }, + type : 'swf', + url : function( rez, params, obj ) { + obj.swf.flashVars = 'playerVars=' + $.param( params, true ); + + return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; + } + }, + dailymotion : { + matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, + params : { + additionalInfos : 0, + autoStart : 1 + }, + type : 'swf', + url : '//www.dailymotion.com/swf/video/$1' + }, + twitvid : { + matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, + params : { + autoplay : 0 + }, + type : 'iframe', + url : '//www.twitvid.com/embed.php?guid=$1' + }, + twitpic : { + matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, + type : 'image', + url : '//twitpic.com/show/full/$1/' + }, + instagram : { + matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, + type : 'image', + url : '//$1/p/$2/media/?size=l' + }, + google_maps : { + matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, + type : 'iframe', + url : function( rez ) { + return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); + } + } + }, + + beforeLoad : function(opts, obj) { + var url = obj.href || '', + type = false, + what, + item, + rez, + params; + + for (what in opts) { + if (opts.hasOwnProperty(what)) { + item = opts[ what ]; + rez = url.match( item.matcher ); + + if (rez) { + type = item.type; + params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); + + url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); + + break; + } + } + } + + if (type) { + obj.href = url; + obj.type = type; + + obj.autoHeight = false; + } + } + }; + +}(jQuery)); \ No newline at end of file diff --git a/libraries/fancyBox/helpers/jquery.fancybox-thumbs.css b/libraries/fancyBox/helpers/jquery.fancybox-thumbs.css new file mode 100644 index 0000000..63d2943 --- /dev/null +++ b/libraries/fancyBox/helpers/jquery.fancybox-thumbs.css @@ -0,0 +1,55 @@ +#fancybox-thumbs { + position: fixed; + left: 0; + width: 100%; + overflow: hidden; + z-index: 8050; +} + +#fancybox-thumbs.bottom { + bottom: 2px; +} + +#fancybox-thumbs.top { + top: 2px; +} + +#fancybox-thumbs ul { + position: relative; + list-style: none; + margin: 0; + padding: 0; +} + +#fancybox-thumbs ul li { + float: left; + padding: 1px; + opacity: 0.5; +} + +#fancybox-thumbs ul li.active { + opacity: 0.75; + padding: 0; + border: 1px solid #fff; +} + +#fancybox-thumbs ul li:hover { + opacity: 1; +} + +#fancybox-thumbs ul li a { + display: block; + position: relative; + overflow: hidden; + border: 1px solid #222; + background: #111; + outline: none; +} + +#fancybox-thumbs ul li img { + display: block; + position: relative; + border: 0; + padding: 0; + max-width: none; +} \ No newline at end of file diff --git a/libraries/fancyBox/helpers/jquery.fancybox-thumbs.js b/libraries/fancyBox/helpers/jquery.fancybox-thumbs.js new file mode 100644 index 0000000..5db3d4a --- /dev/null +++ b/libraries/fancyBox/helpers/jquery.fancybox-thumbs.js @@ -0,0 +1,162 @@ + /*! + * Thumbnail helper for fancyBox + * version: 1.0.7 (Mon, 01 Oct 2012) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * thumbs: { + * width : 50, + * height : 50 + * } + * } + * }); + * + */ +(function ($) { + //Shortcut for fancyBox object + var F = $.fancybox; + + //Add helper object + F.helpers.thumbs = { + defaults : { + width : 50, // thumbnail width + height : 50, // thumbnail height + position : 'bottom', // 'top' or 'bottom' + source : function ( item ) { // function to obtain the URL of the thumbnail image + var href; + + if (item.element) { + href = $(item.element).find('img').attr('src'); + } + + if (!href && item.type === 'image' && item.href) { + href = item.href; + } + + return href; + } + }, + + wrap : null, + list : null, + width : 0, + + init: function (opts, obj) { + var that = this, + list, + thumbWidth = opts.width, + thumbHeight = opts.height, + thumbSource = opts.source; + + //Build list structure + list = ''; + + for (var n = 0; n < obj.group.length; n++) { + list += '
        • '; + } + + this.wrap = $('
          ').addClass(opts.position).appendTo('body'); + this.list = $('
            ' + list + '
          ').appendTo(this.wrap); + + //Load each thumbnail + $.each(obj.group, function (i) { + var href = thumbSource( obj.group[ i ] ); + + if (!href) { + return; + } + + $("").load(function () { + var width = this.width, + height = this.height, + widthRatio, heightRatio, parent; + + if (!that.list || !width || !height) { + return; + } + + //Calculate thumbnail width/height and center it + widthRatio = width / thumbWidth; + heightRatio = height / thumbHeight; + + parent = that.list.children().eq(i).find('a'); + + if (widthRatio >= 1 && heightRatio >= 1) { + if (widthRatio > heightRatio) { + width = Math.floor(width / heightRatio); + height = thumbHeight; + + } else { + width = thumbWidth; + height = Math.floor(height / widthRatio); + } + } + + $(this).css({ + width : width, + height : height, + top : Math.floor(thumbHeight / 2 - height / 2), + left : Math.floor(thumbWidth / 2 - width / 2) + }); + + parent.width(thumbWidth).height(thumbHeight); + + $(this).hide().appendTo(parent).fadeIn(300); + + }).attr('src', href); + }); + + //Set initial width + this.width = this.list.children().eq(0).outerWidth(true); + + this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); + }, + + beforeLoad: function (opts, obj) { + //Remove self if gallery do not have at least two items + if (obj.group.length < 2) { + obj.helpers.thumbs = false; + + return; + } + + //Increase bottom margin to give space for thumbs + obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); + }, + + afterShow: function (opts, obj) { + //Check if exists and create or update list + if (this.list) { + this.onUpdate(opts, obj); + + } else { + this.init(opts, obj); + } + + //Set active element + this.list.children().removeClass('active').eq(obj.index).addClass('active'); + }, + + //Center list + onUpdate: function (opts, obj) { + if (this.list) { + this.list.stop(true).animate({ + 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) + }, 150); + } + }, + + beforeClose: function () { + if (this.wrap) { + this.wrap.remove(); + } + + this.wrap = null; + this.list = null; + this.width = 0; + } + } + +}(jQuery)); \ No newline at end of file diff --git a/libraries/fancyBox/jquery.fancybox.css b/libraries/fancyBox/jquery.fancybox.css new file mode 100644 index 0000000..367890a --- /dev/null +++ b/libraries/fancyBox/jquery.fancybox.css @@ -0,0 +1,274 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +.fancybox-wrap, +.fancybox-skin, +.fancybox-outer, +.fancybox-inner, +.fancybox-image, +.fancybox-wrap iframe, +.fancybox-wrap object, +.fancybox-nav, +.fancybox-nav span, +.fancybox-tmp +{ + padding: 0; + margin: 0; + border: 0; + outline: none; + vertical-align: top; +} + +.fancybox-wrap { + position: absolute; + top: 0; + left: 0; + z-index: 8020; +} + +.fancybox-skin { + position: relative; + background: #f9f9f9; + color: #444; + text-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.fancybox-opened { + z-index: 8030; +} + +.fancybox-opened .fancybox-skin { + -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); +} + +.fancybox-outer, .fancybox-inner { + position: relative; +} + +.fancybox-inner { + overflow: hidden; +} + +.fancybox-type-iframe .fancybox-inner { + -webkit-overflow-scrolling: touch; +} + +.fancybox-error { + color: #444; + font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + margin: 0; + padding: 15px; + white-space: nowrap; +} + +.fancybox-image, .fancybox-iframe { + display: block; + width: 100%; + height: 100%; +} + +.fancybox-image { + max-width: 100%; + max-height: 100%; +} + +#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('fancybox_sprite.png'); +} + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + margin-top: -22px; + margin-left: -22px; + background-position: 0 -108px; + opacity: 0.8; + cursor: pointer; + z-index: 8060; +} + +#fancybox-loading div { + width: 44px; + height: 44px; + background: url('fancybox_loading.gif') center center no-repeat; +} + +.fancybox-close { + position: absolute; + top: -18px; + right: -18px; + width: 36px; + height: 36px; + cursor: pointer; + z-index: 8040; +} + +.fancybox-nav { + position: absolute; + top: 0; + width: 40%; + height: 100%; + cursor: pointer; + text-decoration: none; + background: transparent url('blank.gif'); /* helps IE */ + -webkit-tap-highlight-color: rgba(0,0,0,0); + z-index: 8040; +} + +.fancybox-prev { + left: 0; +} + +.fancybox-next { + right: 0; +} + +.fancybox-nav span { + position: absolute; + top: 50%; + width: 36px; + height: 34px; + margin-top: -18px; + cursor: pointer; + z-index: 8040; + visibility: hidden; +} + +.fancybox-prev span { + left: 10px; + background-position: 0 -36px; +} + +.fancybox-next span { + right: 10px; + background-position: 0 -72px; +} + +.fancybox-nav:hover span { + visibility: visible; +} + +.fancybox-tmp { + position: absolute; + top: -99999px; + left: -99999px; + visibility: hidden; + max-width: 99999px; + max-height: 99999px; + overflow: visible !important; +} + +/* Overlay helper */ + +.fancybox-lock { + overflow: hidden !important; + width: auto; +} + +.fancybox-lock body { + overflow: hidden !important; +} + +.fancybox-lock-test { + overflow-y: hidden !important; +} + +.fancybox-overlay { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + display: none; + z-index: 8010; + background: url('fancybox_overlay.png'); +} + +.fancybox-overlay-fixed { + position: fixed; + bottom: 0; + right: 0; +} + +.fancybox-lock .fancybox-overlay { + overflow: auto; + overflow-y: scroll; +} + +/* Title helper */ + +.fancybox-title { + visibility: hidden; + font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + position: relative; + text-shadow: none; + z-index: 8050; +} + +.fancybox-opened .fancybox-title { + visibility: visible; +} + +.fancybox-title-float-wrap { + position: absolute; + bottom: 0; + right: 50%; + margin-bottom: -35px; + z-index: 8050; + text-align: center; +} + +.fancybox-title-float-wrap .child { + display: inline-block; + margin-right: -100%; + padding: 2px 20px; + background: transparent; /* Fallback for web browsers that doesn't support RGBa */ + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + text-shadow: 0 1px 2px #222; + color: #FFF; + font-weight: bold; + line-height: 24px; + white-space: nowrap; +} + +.fancybox-title-outside-wrap { + position: relative; + margin-top: 10px; + color: #fff; +} + +.fancybox-title-inside-wrap { + padding-top: 10px; +} + +.fancybox-title-over-wrap { + position: absolute; + bottom: 0; + left: 0; + color: #fff; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, .8); +} + +/*Retina graphics!*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5){ + + #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('fancybox_sprite@2x.png'); + background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ + } + + #fancybox-loading div { + background-image: url('fancybox_loading@2x.gif'); + background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ + } +} \ No newline at end of file diff --git a/libraries/fancyBox/jquery.fancybox.js b/libraries/fancyBox/jquery.fancybox.js new file mode 100644 index 0000000..e8e1987 --- /dev/null +++ b/libraries/fancyBox/jquery.fancybox.js @@ -0,0 +1,2020 @@ +/*! + * fancyBox - jQuery Plugin + * version: 2.1.5 (Fri, 14 Jun 2013) + * @requires jQuery v1.6 or later + * + * Examples at http://fancyapps.com/fancybox/ + * License: www.fancyapps.com/fancybox/#license + * + * Copyright 2012 Janis Skarnelis - janis@fancyapps.com + * + */ + +(function (window, document, $, undefined) { + "use strict"; + + var H = $("html"), + W = $(window), + D = $(document), + F = $.fancybox = function () { + F.open.apply( this, arguments ); + }, + IE = navigator.userAgent.match(/msie/i), + didUpdate = null, + isTouch = document.createTouch !== undefined, + + isQuery = function(obj) { + return obj && obj.hasOwnProperty && obj instanceof $; + }, + isString = function(str) { + return str && $.type(str) === "string"; + }, + isPercentage = function(str) { + return isString(str) && str.indexOf('%') > 0; + }, + isScrollable = function(el) { + return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); + }, + getScalar = function(orig, dim) { + var value = parseInt(orig, 10) || 0; + + if (dim && isPercentage(orig)) { + value = F.getViewport()[ dim ] / 100 * value; + } + + return Math.ceil(value); + }, + getValue = function(value, dim) { + return getScalar(value, dim) + 'px'; + }; + + $.extend(F, { + // The current version of fancyBox + version: '2.1.5', + + defaults: { + padding : 15, + margin : 20, + + width : 800, + height : 600, + minWidth : 100, + minHeight : 100, + maxWidth : 9999, + maxHeight : 9999, + pixelRatio: 1, // Set to 2 for retina display support + + autoSize : true, + autoHeight : false, + autoWidth : false, + + autoResize : true, + autoCenter : !isTouch, + fitToView : true, + aspectRatio : false, + topRatio : 0.5, + leftRatio : 0.5, + + scrolling : 'auto', // 'auto', 'yes' or 'no' + wrapCSS : '', + + arrows : true, + closeBtn : true, + closeClick : false, + nextClick : false, + mouseWheel : true, + autoPlay : false, + playSpeed : 3000, + preload : 3, + modal : false, + loop : true, + + ajax : { + dataType : 'html', + headers : { 'X-fancyBox': true } + }, + iframe : { + scrolling : 'auto', + preload : true + }, + swf : { + wmode: 'transparent', + allowfullscreen : 'true', + allowscriptaccess : 'always' + }, + + keys : { + next : { + 13 : 'left', // enter + 34 : 'up', // page down + 39 : 'left', // right arrow + 40 : 'up' // down arrow + }, + prev : { + 8 : 'right', // backspace + 33 : 'down', // page up + 37 : 'right', // left arrow + 38 : 'down' // up arrow + }, + close : [27], // escape key + play : [32], // space - start/stop slideshow + toggle : [70] // letter "f" - toggle fullscreen + }, + + direction : { + next : 'left', + prev : 'right' + }, + + scrollOutside : true, + + // Override some properties + index : 0, + type : null, + href : null, + content : null, + title : null, + + // HTML templates + tpl: { + wrap : '
          ', + image : '', + iframe : '', + error : '

          The requested content cannot be loaded.
          Please try again later.

          ', + closeBtn : '', + next : '', + prev : '' + }, + + // Properties for each animation type + // Opening fancyBox + openEffect : 'fade', // 'elastic', 'fade' or 'none' + openSpeed : 250, + openEasing : 'swing', + openOpacity : true, + openMethod : 'zoomIn', + + // Closing fancyBox + closeEffect : 'fade', // 'elastic', 'fade' or 'none' + closeSpeed : 250, + closeEasing : 'swing', + closeOpacity : true, + closeMethod : 'zoomOut', + + // Changing next gallery item + nextEffect : 'elastic', // 'elastic', 'fade' or 'none' + nextSpeed : 250, + nextEasing : 'swing', + nextMethod : 'changeIn', + + // Changing previous gallery item + prevEffect : 'elastic', // 'elastic', 'fade' or 'none' + prevSpeed : 250, + prevEasing : 'swing', + prevMethod : 'changeOut', + + // Enable default helpers + helpers : { + overlay : true, + title : true + }, + + // Callbacks + onCancel : $.noop, // If canceling + beforeLoad : $.noop, // Before loading + afterLoad : $.noop, // After loading + beforeShow : $.noop, // Before changing in current item + afterShow : $.noop, // After opening + beforeChange : $.noop, // Before changing gallery item + beforeClose : $.noop, // Before closing + afterClose : $.noop // After closing + }, + + //Current state + group : {}, // Selected group + opts : {}, // Group options + previous : null, // Previous element + coming : null, // Element being loaded + current : null, // Currently loaded element + isActive : false, // Is activated + isOpen : false, // Is currently open + isOpened : false, // Have been fully opened at least once + + wrap : null, + skin : null, + outer : null, + inner : null, + + player : { + timer : null, + isActive : false + }, + + // Loaders + ajaxLoad : null, + imgPreload : null, + + // Some collections + transitions : {}, + helpers : {}, + + /* + * Static methods + */ + + open: function (group, opts) { + if (!group) { + return; + } + + if (!$.isPlainObject(opts)) { + opts = {}; + } + + // Close if already active + if (false === F.close(true)) { + return; + } + + // Normalize group + if (!$.isArray(group)) { + group = isQuery(group) ? $(group).get() : [group]; + } + + // Recheck if the type of each element is `object` and set content type (image, ajax, etc) + $.each(group, function(i, element) { + var obj = {}, + href, + title, + content, + type, + rez, + hrefParts, + selector; + + if ($.type(element) === "object") { + // Check if is DOM element + if (element.nodeType) { + element = $(element); + } + + if (isQuery(element)) { + obj = { + href : element.data('fancybox-href') || element.attr('href'), + title : element.data('fancybox-title') || element.attr('title'), + isDom : true, + element : element + }; + + if ($.metadata) { + $.extend(true, obj, element.metadata()); + } + + } else { + obj = element; + } + } + + href = opts.href || obj.href || (isString(element) ? element : null); + title = opts.title !== undefined ? opts.title : obj.title || ''; + + content = opts.content || obj.content; + type = content ? 'html' : (opts.type || obj.type); + + if (!type && obj.isDom) { + type = element.data('fancybox-type'); + + if (!type) { + rez = element.prop('class').match(/fancybox\.(\w+)/); + type = rez ? rez[1] : null; + } + } + + if (isString(href)) { + // Try to guess the content type + if (!type) { + if (F.isImage(href)) { + type = 'image'; + + } else if (F.isSWF(href)) { + type = 'swf'; + + } else if (href.charAt(0) === '#') { + type = 'inline'; + + } else if (isString(element)) { + type = 'html'; + content = element; + } + } + + // Split url into two pieces with source url and content selector, e.g, + // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" + if (type === 'ajax') { + hrefParts = href.split(/\s+/, 2); + href = hrefParts.shift(); + selector = hrefParts.shift(); + } + } + + if (!content) { + if (type === 'inline') { + if (href) { + content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 + + } else if (obj.isDom) { + content = element; + } + + } else if (type === 'html') { + content = href; + + } else if (!type && !href && obj.isDom) { + type = 'inline'; + content = element; + } + } + + $.extend(obj, { + href : href, + type : type, + content : content, + title : title, + selector : selector + }); + + group[ i ] = obj; + }); + + // Extend the defaults + F.opts = $.extend(true, {}, F.defaults, opts); + + // All options are merged recursive except keys + if (opts.keys !== undefined) { + F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; + } + + F.group = group; + + return F._start(F.opts.index); + }, + + // Cancel image loading or abort ajax request + cancel: function () { + var coming = F.coming; + + if (!coming || false === F.trigger('onCancel')) { + return; + } + + F.hideLoading(); + + if (F.ajaxLoad) { + F.ajaxLoad.abort(); + } + + F.ajaxLoad = null; + + if (F.imgPreload) { + F.imgPreload.onload = F.imgPreload.onerror = null; + } + + if (coming.wrap) { + coming.wrap.stop(true, true).trigger('onReset').remove(); + } + + F.coming = null; + + // If the first item has been canceled, then clear everything + if (!F.current) { + F._afterZoomOut( coming ); + } + }, + + // Start closing animation if is open; remove immediately if opening/closing + close: function (event) { + F.cancel(); + + if (false === F.trigger('beforeClose')) { + return; + } + + F.unbindEvents(); + + if (!F.isActive) { + return; + } + + if (!F.isOpen || event === true) { + $('.fancybox-wrap').stop(true).trigger('onReset').remove(); + + F._afterZoomOut(); + + } else { + F.isOpen = F.isOpened = false; + F.isClosing = true; + + $('.fancybox-item, .fancybox-nav').remove(); + + F.wrap.stop(true, true).removeClass('fancybox-opened'); + + F.transitions[ F.current.closeMethod ](); + } + }, + + // Manage slideshow: + // $.fancybox.play(); - toggle slideshow + // $.fancybox.play( true ); - start + // $.fancybox.play( false ); - stop + play: function ( action ) { + var clear = function () { + clearTimeout(F.player.timer); + }, + set = function () { + clear(); + + if (F.current && F.player.isActive) { + F.player.timer = setTimeout(F.next, F.current.playSpeed); + } + }, + stop = function () { + clear(); + + D.unbind('.player'); + + F.player.isActive = false; + + F.trigger('onPlayEnd'); + }, + start = function () { + if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { + F.player.isActive = true; + + D.bind({ + 'onCancel.player beforeClose.player' : stop, + 'onUpdate.player' : set, + 'beforeLoad.player' : clear + }); + + set(); + + F.trigger('onPlayStart'); + } + }; + + if (action === true || (!F.player.isActive && action !== false)) { + start(); + } else { + stop(); + } + }, + + // Navigate to next gallery item + next: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.next; + } + + F.jumpto(current.index + 1, direction, 'next'); + } + }, + + // Navigate to previous gallery item + prev: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.prev; + } + + F.jumpto(current.index - 1, direction, 'prev'); + } + }, + + // Navigate to gallery item by index + jumpto: function ( index, direction, router ) { + var current = F.current; + + if (!current) { + return; + } + + index = getScalar(index); + + F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; + F.router = router || 'jumpto'; + + if (current.loop) { + if (index < 0) { + index = current.group.length + (index % current.group.length); + } + + index = index % current.group.length; + } + + if (current.group[ index ] !== undefined) { + F.cancel(); + + F._start(index); + } + }, + + // Center inside viewport and toggle position type to fixed or absolute if needed + reposition: function (e, onlyAbsolute) { + var current = F.current, + wrap = current ? current.wrap : null, + pos; + + if (wrap) { + pos = F._getPosition(onlyAbsolute); + + if (e && e.type === 'scroll') { + delete pos.position; + + wrap.stop(true, true).animate(pos, 200); + + } else { + wrap.css(pos); + + current.pos = $.extend({}, current.dim, pos); + } + } + }, + + update: function (e) { + var type = (e && e.type), + anyway = !type || type === 'orientationchange'; + + if (anyway) { + clearTimeout(didUpdate); + + didUpdate = null; + } + + if (!F.isOpen || didUpdate) { + return; + } + + didUpdate = setTimeout(function() { + var current = F.current; + + if (!current || F.isClosing) { + return; + } + + F.wrap.removeClass('fancybox-tmp'); + + if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { + F._setDimension(); + } + + if (!(type === 'scroll' && current.canShrink)) { + F.reposition(e); + } + + F.trigger('onUpdate'); + + didUpdate = null; + + }, (anyway && !isTouch ? 0 : 300)); + }, + + // Shrink content to fit inside viewport or restore if resized + toggle: function ( action ) { + if (F.isOpen) { + F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; + + // Help browser to restore document dimensions + if (isTouch) { + F.wrap.removeAttr('style').addClass('fancybox-tmp'); + + F.trigger('onUpdate'); + } + + F.update(); + } + }, + + hideLoading: function () { + D.unbind('.loading'); + + $('#fancybox-loading').remove(); + }, + + showLoading: function () { + var el, viewport; + + F.hideLoading(); + + el = $('
          ').click(F.cancel).appendTo('body'); + + // If user will press the escape-button, the request will be canceled + D.bind('keydown.loading', function(e) { + if ((e.which || e.keyCode) === 27) { + e.preventDefault(); + + F.cancel(); + } + }); + + if (!F.defaults.fixed) { + viewport = F.getViewport(); + + el.css({ + position : 'absolute', + top : (viewport.h * 0.5) + viewport.y, + left : (viewport.w * 0.5) + viewport.x + }); + } + }, + + getViewport: function () { + var locked = (F.current && F.current.locked) || false, + rez = { + x: W.scrollLeft(), + y: W.scrollTop() + }; + + if (locked) { + rez.w = locked[0].clientWidth; + rez.h = locked[0].clientHeight; + + } else { + // See http://bugs.jquery.com/ticket/6724 + rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); + rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); + } + + return rez; + }, + + // Unbind the keyboard / clicking actions + unbindEvents: function () { + if (F.wrap && isQuery(F.wrap)) { + F.wrap.unbind('.fb'); + } + + D.unbind('.fb'); + W.unbind('.fb'); + }, + + bindEvents: function () { + var current = F.current, + keys; + + if (!current) { + return; + } + + // Changing document height on iOS devices triggers a 'resize' event, + // that can change document height... repeating infinitely + W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); + + keys = current.keys; + + if (keys) { + D.bind('keydown.fb', function (e) { + var code = e.which || e.keyCode, + target = e.target || e.srcElement; + + // Skip esc key if loading, because showLoading will cancel preloading + if (code === 27 && F.coming) { + return false; + } + + // Ignore key combinations and key events within form elements + if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { + $.each(keys, function(i, val) { + if (current.group.length > 1 && val[ code ] !== undefined) { + F[ i ]( val[ code ] ); + + e.preventDefault(); + return false; + } + + if ($.inArray(code, val) > -1) { + F[ i ] (); + + e.preventDefault(); + return false; + } + }); + } + }); + } + + if ($.fn.mousewheel && current.mouseWheel) { + F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { + var target = e.target || null, + parent = $(target), + canScroll = false; + + while (parent.length) { + if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { + break; + } + + canScroll = isScrollable( parent[0] ); + parent = $(parent).parent(); + } + + if (delta !== 0 && !canScroll) { + if (F.group.length > 1 && !current.canShrink) { + if (deltaY > 0 || deltaX > 0) { + F.prev( deltaY > 0 ? 'down' : 'left' ); + + } else if (deltaY < 0 || deltaX < 0) { + F.next( deltaY < 0 ? 'up' : 'right' ); + } + + e.preventDefault(); + } + } + }); + } + }, + + trigger: function (event, o) { + var ret, obj = o || F.coming || F.current; + + if (!obj) { + return; + } + + if ($.isFunction( obj[event] )) { + ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); + } + + if (ret === false) { + return false; + } + + if (obj.helpers) { + $.each(obj.helpers, function (helper, opts) { + if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { + F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); + } + }); + } + + D.trigger(event); + }, + + isImage: function (str) { + return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); + }, + + isSWF: function (str) { + return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); + }, + + _start: function (index) { + var coming = {}, + obj, + href, + type, + margin, + padding; + + index = getScalar( index ); + obj = F.group[ index ] || null; + + if (!obj) { + return false; + } + + coming = $.extend(true, {}, F.opts, obj); + + // Convert margin and padding properties to array - top, right, bottom, left + margin = coming.margin; + padding = coming.padding; + + if ($.type(margin) === 'number') { + coming.margin = [margin, margin, margin, margin]; + } + + if ($.type(padding) === 'number') { + coming.padding = [padding, padding, padding, padding]; + } + + // 'modal' propery is just a shortcut + if (coming.modal) { + $.extend(true, coming, { + closeBtn : false, + closeClick : false, + nextClick : false, + arrows : false, + mouseWheel : false, + keys : null, + helpers: { + overlay : { + closeClick : false + } + } + }); + } + + // 'autoSize' property is a shortcut, too + if (coming.autoSize) { + coming.autoWidth = coming.autoHeight = true; + } + + if (coming.width === 'auto') { + coming.autoWidth = true; + } + + if (coming.height === 'auto') { + coming.autoHeight = true; + } + + /* + * Add reference to the group, so it`s possible to access from callbacks, example: + * afterLoad : function() { + * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); + * } + */ + + coming.group = F.group; + coming.index = index; + + // Give a chance for callback or helpers to update coming item (type, title, etc) + F.coming = coming; + + if (false === F.trigger('beforeLoad')) { + F.coming = null; + + return; + } + + type = coming.type; + href = coming.href; + + if (!type) { + F.coming = null; + + //If we can not determine content type then drop silently or display next/prev item if looping through gallery + if (F.current && F.router && F.router !== 'jumpto') { + F.current.index = index; + + return F[ F.router ]( F.direction ); + } + + return false; + } + + F.isActive = true; + + if (type === 'image' || type === 'swf') { + coming.autoHeight = coming.autoWidth = false; + coming.scrolling = 'visible'; + } + + if (type === 'image') { + coming.aspectRatio = true; + } + + if (type === 'iframe' && isTouch) { + coming.scrolling = 'scroll'; + } + + // Build the neccessary markup + coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); + + $.extend(coming, { + skin : $('.fancybox-skin', coming.wrap), + outer : $('.fancybox-outer', coming.wrap), + inner : $('.fancybox-inner', coming.wrap) + }); + + $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { + coming.skin.css('padding' + v, getValue(coming.padding[ i ])); + }); + + F.trigger('onReady'); + + // Check before try to load; 'inline' and 'html' types need content, others - href + if (type === 'inline' || type === 'html') { + if (!coming.content || !coming.content.length) { + return F._error( 'content' ); + } + + } else if (!href) { + return F._error( 'href' ); + } + + if (type === 'image') { + F._loadImage(); + + } else if (type === 'ajax') { + F._loadAjax(); + + } else if (type === 'iframe') { + F._loadIframe(); + + } else { + F._afterLoad(); + } + }, + + _error: function ( type ) { + $.extend(F.coming, { + type : 'html', + autoWidth : true, + autoHeight : true, + minWidth : 0, + minHeight : 0, + scrolling : 'no', + hasError : type, + content : F.coming.tpl.error + }); + + F._afterLoad(); + }, + + _loadImage: function () { + // Reset preload image so it is later possible to check "complete" property + var img = F.imgPreload = new Image(); + + img.onload = function () { + this.onload = this.onerror = null; + + F.coming.width = this.width / F.opts.pixelRatio; + F.coming.height = this.height / F.opts.pixelRatio; + + F._afterLoad(); + }; + + img.onerror = function () { + this.onload = this.onerror = null; + + F._error( 'image' ); + }; + + img.src = F.coming.href; + + if (img.complete !== true) { + F.showLoading(); + } + }, + + _loadAjax: function () { + var coming = F.coming; + + F.showLoading(); + + F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { + url: coming.href, + error: function (jqXHR, textStatus) { + if (F.coming && textStatus !== 'abort') { + F._error( 'ajax', jqXHR ); + + } else { + F.hideLoading(); + } + }, + success: function (data, textStatus) { + if (textStatus === 'success') { + coming.content = data; + + F._afterLoad(); + } + } + })); + }, + + _loadIframe: function() { + var coming = F.coming, + iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) + .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) + .attr('src', coming.href); + + // This helps IE + $(coming.wrap).bind('onReset', function () { + try { + $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); + } catch (e) {} + }); + + if (coming.iframe.preload) { + F.showLoading(); + + iframe.one('load', function() { + $(this).data('ready', 1); + + // iOS will lose scrolling if we resize + if (!isTouch) { + $(this).bind('load.fb', F.update); + } + + // Without this trick: + // - iframe won't scroll on iOS devices + // - IE7 sometimes displays empty iframe + $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); + + F._afterLoad(); + }); + } + + coming.content = iframe.appendTo( coming.inner ); + + if (!coming.iframe.preload) { + F._afterLoad(); + } + }, + + _preloadImages: function() { + var group = F.group, + current = F.current, + len = group.length, + cnt = current.preload ? Math.min(current.preload, len - 1) : 0, + item, + i; + + for (i = 1; i <= cnt; i += 1) { + item = group[ (current.index + i ) % len ]; + + if (item.type === 'image' && item.href) { + new Image().src = item.href; + } + } + }, + + _afterLoad: function () { + var coming = F.coming, + previous = F.current, + placeholder = 'fancybox-placeholder', + current, + content, + type, + scrolling, + href, + embed; + + F.hideLoading(); + + if (!coming || F.isActive === false) { + return; + } + + if (false === F.trigger('afterLoad', coming, previous)) { + coming.wrap.stop(true).trigger('onReset').remove(); + + F.coming = null; + + return; + } + + if (previous) { + F.trigger('beforeChange', previous); + + previous.wrap.stop(true).removeClass('fancybox-opened') + .find('.fancybox-item, .fancybox-nav') + .remove(); + } + + F.unbindEvents(); + + current = coming; + content = coming.content; + type = coming.type; + scrolling = coming.scrolling; + + $.extend(F, { + wrap : current.wrap, + skin : current.skin, + outer : current.outer, + inner : current.inner, + current : current, + previous : previous + }); + + href = current.href; + + switch (type) { + case 'inline': + case 'ajax': + case 'html': + if (current.selector) { + content = $('
          ').html(content).find(current.selector); + + } else if (isQuery(content)) { + if (!content.data(placeholder)) { + content.data(placeholder, $('
          ').insertAfter( content ).hide() ); + } + + content = content.show().detach(); + + current.wrap.bind('onReset', function () { + if ($(this).find(content).length) { + content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); + } + }); + } + break; + + case 'image': + content = current.tpl.image.replace('{href}', href); + break; + + case 'swf': + content = ''; + embed = ''; + + $.each(current.swf, function(name, val) { + content += ''; + embed += ' ' + name + '="' + val + '"'; + }); + + content += ''; + break; + } + + if (!(isQuery(content) && content.parent().is(current.inner))) { + current.inner.append( content ); + } + + // Give a chance for helpers or callbacks to update elements + F.trigger('beforeShow'); + + // Set scrolling before calculating dimensions + current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); + + // Set initial dimensions and start position + F._setDimension(); + + F.reposition(); + + F.isOpen = false; + F.coming = null; + + F.bindEvents(); + + if (!F.isOpened) { + $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); + + } else if (previous.prevMethod) { + F.transitions[ previous.prevMethod ](); + } + + F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); + + F._preloadImages(); + }, + + _setDimension: function () { + var viewport = F.getViewport(), + steps = 0, + canShrink = false, + canExpand = false, + wrap = F.wrap, + skin = F.skin, + inner = F.inner, + current = F.current, + width = current.width, + height = current.height, + minWidth = current.minWidth, + minHeight = current.minHeight, + maxWidth = current.maxWidth, + maxHeight = current.maxHeight, + scrolling = current.scrolling, + scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, + margin = current.margin, + wMargin = getScalar(margin[1] + margin[3]), + hMargin = getScalar(margin[0] + margin[2]), + wPadding, + hPadding, + wSpace, + hSpace, + origWidth, + origHeight, + origMaxWidth, + origMaxHeight, + ratio, + width_, + height_, + maxWidth_, + maxHeight_, + iframe, + body; + + // Reset dimensions so we could re-check actual size + wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); + + wPadding = getScalar(skin.outerWidth(true) - skin.width()); + hPadding = getScalar(skin.outerHeight(true) - skin.height()); + + // Any space between content and viewport (margin, padding, border, title) + wSpace = wMargin + wPadding; + hSpace = hMargin + hPadding; + + origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; + origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; + + if (current.type === 'iframe') { + iframe = current.content; + + if (current.autoHeight && iframe.data('ready') === 1) { + try { + if (iframe[0].contentWindow.document.location) { + inner.width( origWidth ).height(9999); + + body = iframe.contents().find('body'); + + if (scrollOut) { + body.css('overflow-x', 'hidden'); + } + + origHeight = body.outerHeight(true); + } + + } catch (e) {} + } + + } else if (current.autoWidth || current.autoHeight) { + inner.addClass( 'fancybox-tmp' ); + + // Set width or height in case we need to calculate only one dimension + if (!current.autoWidth) { + inner.width( origWidth ); + } + + if (!current.autoHeight) { + inner.height( origHeight ); + } + + if (current.autoWidth) { + origWidth = inner.width(); + } + + if (current.autoHeight) { + origHeight = inner.height(); + } + + inner.removeClass( 'fancybox-tmp' ); + } + + width = getScalar( origWidth ); + height = getScalar( origHeight ); + + ratio = origWidth / origHeight; + + // Calculations for the content + minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); + maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); + + minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); + maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); + + // These will be used to determine if wrap can fit in the viewport + origMaxWidth = maxWidth; + origMaxHeight = maxHeight; + + if (current.fitToView) { + maxWidth = Math.min(viewport.w - wSpace, maxWidth); + maxHeight = Math.min(viewport.h - hSpace, maxHeight); + } + + maxWidth_ = viewport.w - wMargin; + maxHeight_ = viewport.h - hMargin; + + if (current.aspectRatio) { + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + if (height > maxHeight) { + height = maxHeight; + width = getScalar(height * ratio); + } + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (height < minHeight) { + height = minHeight; + width = getScalar(height * ratio); + } + + } else { + width = Math.max(minWidth, Math.min(width, maxWidth)); + + if (current.autoHeight && current.type !== 'iframe') { + inner.width( width ); + + height = inner.height(); + } + + height = Math.max(minHeight, Math.min(height, maxHeight)); + } + + // Try to fit inside viewport (including the title) + if (current.fitToView) { + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + // Real wrap dimensions + width_ = wrap.width(); + height_ = wrap.height(); + + if (current.aspectRatio) { + while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { + if (steps++ > 19) { + break; + } + + height = Math.max(minHeight, Math.min(maxHeight, height - 10)); + width = getScalar(height * ratio); + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + } + + } else { + width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); + height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); + } + } + + if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { + width += scrollOut; + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + + canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; + canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); + + $.extend(current, { + dim : { + width : getValue( width_ ), + height : getValue( height_ ) + }, + origWidth : origWidth, + origHeight : origHeight, + canShrink : canShrink, + canExpand : canExpand, + wPadding : wPadding, + hPadding : hPadding, + wrapSpace : height_ - skin.outerHeight(true), + skinSpace : skin.height() - height + }); + + if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { + inner.height('auto'); + } + }, + + _getPosition: function (onlyAbsolute) { + var current = F.current, + viewport = F.getViewport(), + margin = current.margin, + width = F.wrap.width() + margin[1] + margin[3], + height = F.wrap.height() + margin[0] + margin[2], + rez = { + position: 'absolute', + top : margin[0], + left : margin[3] + }; + + if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { + rez.position = 'fixed'; + + } else if (!current.locked) { + rez.top += viewport.y; + rez.left += viewport.x; + } + + rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); + rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); + + return rez; + }, + + _afterZoomIn: function () { + var current = F.current; + + if (!current) { + return; + } + + F.isOpen = F.isOpened = true; + + F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); + + F.update(); + + // Assign a click event + if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { + F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { + if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { + e.preventDefault(); + + F[ current.closeClick ? 'close' : 'next' ](); + } + }); + } + + // Create a close button + if (current.closeBtn) { + $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { + e.preventDefault(); + + F.close(); + }); + } + + // Create navigation arrows + if (current.arrows && F.group.length > 1) { + if (current.loop || current.index > 0) { + $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); + } + + if (current.loop || current.index < F.group.length - 1) { + $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); + } + } + + F.trigger('afterShow'); + + // Stop the slideshow if this is the last item + if (!current.loop && current.index === current.group.length - 1) { + F.play( false ); + + } else if (F.opts.autoPlay && !F.player.isActive) { + F.opts.autoPlay = false; + + F.play(); + } + }, + + _afterZoomOut: function ( obj ) { + obj = obj || F.current; + + $('.fancybox-wrap').trigger('onReset').remove(); + + $.extend(F, { + group : {}, + opts : {}, + router : false, + current : null, + isActive : false, + isOpened : false, + isOpen : false, + isClosing : false, + wrap : null, + skin : null, + outer : null, + inner : null + }); + + F.trigger('afterClose', obj); + } + }); + + /* + * Default transitions + */ + + F.transitions = { + getOrigPosition: function () { + var current = F.current, + element = current.element, + orig = current.orig, + pos = {}, + width = 50, + height = 50, + hPadding = current.hPadding, + wPadding = current.wPadding, + viewport = F.getViewport(); + + if (!orig && current.isDom && element.is(':visible')) { + orig = element.find('img:first'); + + if (!orig.length) { + orig = element; + } + } + + if (isQuery(orig)) { + pos = orig.offset(); + + if (orig.is('img')) { + width = orig.outerWidth(); + height = orig.outerHeight(); + } + + } else { + pos.top = viewport.y + (viewport.h - height) * current.topRatio; + pos.left = viewport.x + (viewport.w - width) * current.leftRatio; + } + + if (F.wrap.css('position') === 'fixed' || current.locked) { + pos.top -= viewport.y; + pos.left -= viewport.x; + } + + pos = { + top : getValue(pos.top - hPadding * current.topRatio), + left : getValue(pos.left - wPadding * current.leftRatio), + width : getValue(width + wPadding), + height : getValue(height + hPadding) + }; + + return pos; + }, + + step: function (now, fx) { + var ratio, + padding, + value, + prop = fx.prop, + current = F.current, + wrapSpace = current.wrapSpace, + skinSpace = current.skinSpace; + + if (prop === 'width' || prop === 'height') { + ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); + + if (F.isClosing) { + ratio = 1 - ratio; + } + + padding = prop === 'width' ? current.wPadding : current.hPadding; + value = now - padding; + + F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); + F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); + } + }, + + zoomIn: function () { + var current = F.current, + startPos = current.pos, + effect = current.openEffect, + elastic = effect === 'elastic', + endPos = $.extend({opacity : 1}, startPos); + + // Remove "position" property that breaks older IE + delete endPos.position; + + if (elastic) { + startPos = this.getOrigPosition(); + + if (current.openOpacity) { + startPos.opacity = 0.1; + } + + } else if (effect === 'fade') { + startPos.opacity = 0.1; + } + + F.wrap.css(startPos).animate(endPos, { + duration : effect === 'none' ? 0 : current.openSpeed, + easing : current.openEasing, + step : elastic ? this.step : null, + complete : F._afterZoomIn + }); + }, + + zoomOut: function () { + var current = F.current, + effect = current.closeEffect, + elastic = effect === 'elastic', + endPos = {opacity : 0.1}; + + if (elastic) { + endPos = this.getOrigPosition(); + + if (current.closeOpacity) { + endPos.opacity = 0.1; + } + } + + F.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : current.closeSpeed, + easing : current.closeEasing, + step : elastic ? this.step : null, + complete : F._afterZoomOut + }); + }, + + changeIn: function () { + var current = F.current, + effect = current.nextEffect, + startPos = current.pos, + endPos = { opacity : 1 }, + direction = F.direction, + distance = 200, + field; + + startPos.opacity = 0.1; + + if (effect === 'elastic') { + field = direction === 'down' || direction === 'up' ? 'top' : 'left'; + + if (direction === 'down' || direction === 'right') { + startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); + endPos[ field ] = '+=' + distance + 'px'; + + } else { + startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); + endPos[ field ] = '-=' + distance + 'px'; + } + } + + // Workaround for http://bugs.jquery.com/ticket/12273 + if (effect === 'none') { + F._afterZoomIn(); + + } else { + F.wrap.css(startPos).animate(endPos, { + duration : current.nextSpeed, + easing : current.nextEasing, + complete : F._afterZoomIn + }); + } + }, + + changeOut: function () { + var previous = F.previous, + effect = previous.prevEffect, + endPos = { opacity : 0.1 }, + direction = F.direction, + distance = 200; + + if (effect === 'elastic') { + endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; + } + + previous.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : previous.prevSpeed, + easing : previous.prevEasing, + complete : function () { + $(this).trigger('onReset').remove(); + } + }); + } + }; + + /* + * Overlay helper + */ + + F.helpers.overlay = { + defaults : { + closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay + speedOut : 200, // duration of fadeOut animation + showEarly : true, // indicates if should be opened immediately or wait until the content is ready + css : {}, // custom CSS properties + locked : !isTouch, // if true, the content will be locked into overlay + fixed : true // if false, the overlay CSS position property will not be set to "fixed" + }, + + overlay : null, // current handle + fixed : false, // indicates if the overlay has position "fixed" + el : $('html'), // element that contains "the lock" + + // Public methods + create : function(opts) { + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.close(); + } + + this.overlay = $('
          ').appendTo( F.coming ? F.coming.parent : opts.parent ); + this.fixed = false; + + if (opts.fixed && F.defaults.fixed) { + this.overlay.addClass('fancybox-overlay-fixed'); + + this.fixed = true; + } + }, + + open : function(opts) { + var that = this; + + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.overlay.unbind('.overlay').width('auto').height('auto'); + + } else { + this.create(opts); + } + + if (!this.fixed) { + W.bind('resize.overlay', $.proxy( this.update, this) ); + + this.update(); + } + + if (opts.closeClick) { + this.overlay.bind('click.overlay', function(e) { + if ($(e.target).hasClass('fancybox-overlay')) { + if (F.isActive) { + F.close(); + } else { + that.close(); + } + + return false; + } + }); + } + + this.overlay.css( opts.css ).show(); + }, + + close : function() { + var scrollV, scrollH; + + W.unbind('resize.overlay'); + + if (this.el.hasClass('fancybox-lock')) { + $('.fancybox-margin').removeClass('fancybox-margin'); + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.removeClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + $('.fancybox-overlay').remove().hide(); + + $.extend(this, { + overlay : null, + fixed : false + }); + }, + + // Private, callbacks + + update : function () { + var width = '100%', offsetWidth; + + // Reset width/height so it will not mess + this.overlay.width(width).height('100%'); + + // jQuery does not return reliable result for IE + if (IE) { + offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); + + if (D.width() > offsetWidth) { + width = D.width(); + } + + } else if (D.width() > W.width()) { + width = D.width(); + } + + this.overlay.width(width).height(D.height()); + }, + + // This is where we can manipulate DOM, because later it would cause iframes to reload + onReady : function (opts, obj) { + var overlay = this.overlay; + + $('.fancybox-overlay').stop(true, true); + + if (!overlay) { + this.create(opts); + } + + if (opts.locked && this.fixed && obj.fixed) { + if (!overlay) { + this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false; + } + + obj.locked = this.overlay.append( obj.wrap ); + obj.fixed = false; + } + + if (opts.showEarly === true) { + this.beforeShow.apply(this, arguments); + } + }, + + beforeShow : function(opts, obj) { + var scrollV, scrollH; + + if (obj.locked) { + if (this.margin !== false) { + $('*').filter(function(){ + return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); + }).addClass('fancybox-margin'); + + this.el.addClass('fancybox-margin'); + } + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.addClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + this.open(opts); + }, + + onUpdate : function() { + if (!this.fixed) { + this.update(); + } + }, + + afterClose: function (opts) { + // Remove overlay if exists and fancyBox is not opening + // (e.g., it is not being open using afterClose callback) + //if (this.overlay && !F.isActive) { + if (this.overlay && !F.coming) { + this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); + } + } + }; + + /* + * Title helper + */ + + F.helpers.title = { + defaults : { + type : 'float', // 'float', 'inside', 'outside' or 'over', + position : 'bottom' // 'top' or 'bottom' + }, + + beforeShow: function (opts) { + var current = F.current, + text = current.title, + type = opts.type, + title, + target; + + if ($.isFunction(text)) { + text = text.call(current.element, current); + } + + if (!isString(text) || $.trim(text) === '') { + return; + } + + title = $('
          ' + text + '
          '); + + switch (type) { + case 'inside': + target = F.skin; + break; + + case 'outside': + target = F.wrap; + break; + + case 'over': + target = F.inner; + break; + + default: // 'float' + target = F.skin; + + title.appendTo('body'); + + if (IE) { + title.width( title.width() ); + } + + title.wrapInner(''); + + //Increase bottom margin so this title will also fit into viewport + F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); + break; + } + + title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); + } + }; + + // jQuery plugin initialization + $.fn.fancybox = function (options) { + var index, + that = $(this), + selector = this.selector || '', + run = function(e) { + var what = $(this).blur(), idx = index, relType, relVal; + + if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { + relType = options.groupAttr || 'data-fancybox-group'; + relVal = what.attr(relType); + + if (!relVal) { + relType = 'rel'; + relVal = what.get(0)[ relType ]; + } + + if (relVal && relVal !== '' && relVal !== 'nofollow') { + what = selector.length ? $(selector) : that; + what = what.filter('[' + relType + '="' + relVal + '"]'); + idx = what.index(this); + } + + options.index = idx; + + // Stop an event from bubbling if everything is fine + if (F.open(what, options) !== false) { + e.preventDefault(); + } + } + }; + + options = options || {}; + index = options.index || 0; + + if (!selector || options.live === false) { + that.unbind('click.fb-start').bind('click.fb-start', run); + + } else { + D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); + } + + this.filter('[data-fancybox-start=1]').trigger('click'); + + return this; + }; + + // Tests that need a body at doc ready + D.ready(function() { + var w1, w2; + + if ( $.scrollbarWidth === undefined ) { + // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth + $.scrollbarWidth = function() { + var parent = $('
          ').appendTo('body'), + child = parent.children(), + width = child.innerWidth() - child.height( 99 ).innerWidth(); + + parent.remove(); + + return width; + }; + } + + if ( $.support.fixedPosition === undefined ) { + $.support.fixedPosition = (function() { + var elem = $('
          ').appendTo('body'), + fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); + + elem.remove(); + + return fixed; + }()); + } + + $.extend(F.defaults, { + scrollbarWidth : $.scrollbarWidth(), + fixed : $.support.fixedPosition, + parent : $('body') + }); + + //Get real width of page scroll-bar + w1 = $(window).width(); + + H.addClass('fancybox-lock-test'); + + w2 = $(window).width(); + + H.removeClass('fancybox-lock-test'); + + $("").appendTo("head"); + }); + +}(window, document, jQuery)); \ No newline at end of file diff --git a/libraries/fancyBox/jquery.fancybox.pack.js b/libraries/fancyBox/jquery.fancybox.pack.js new file mode 100644 index 0000000..73f7578 --- /dev/null +++ b/libraries/fancyBox/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
          ',image:'',iframe:'",error:'

          The requested content cannot be loaded.
          Please try again later.

          ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
          ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
          ").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
          ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
          ').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
          '+e+"
          ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
          ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
          ').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/UploadHandler.php b/libraries/filemanager-9.14.1/UploadHandler.php new file mode 100644 index 0000000..a45ea14 --- /dev/null +++ b/libraries/filemanager-9.14.1/UploadHandler.php @@ -0,0 +1,1595 @@ + 'The uploaded file exceeds the upload_max_filesize directive in php.ini', + 2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', + 3 => 'The uploaded file was only partially uploaded', + 4 => 'No file was uploaded', + 6 => 'Missing a temporary folder', + 7 => 'Failed to write file to disk', + 8 => 'A PHP extension stopped the file upload', + 'post_max_size' => 'The uploaded file exceeds the post_max_size directive in php.ini', + 'max_file_size' => 'File is too big', + 'min_file_size' => 'File is too small', + 'accept_file_types' => 'Filetype not allowed', + 'max_number_of_files' => 'Maximum number of files exceeded', + 'max_width' => 'Image exceeds maximum width', + 'min_width' => 'Image requires a minimum width', + 'max_height' => 'Image exceeds maximum height', + 'min_height' => 'Image requires a minimum height', + 'abort' => 'File upload aborted', + 'image_resize' => 'Failed to resize image' + ); + + const IMAGETYPE_GIF = 1; + const IMAGETYPE_JPEG = 2; + const IMAGETYPE_PNG = 3; + + protected $image_objects = array(); + + public function __construct($options = null, $initialize = true, $error_messages = null) { + $this->response = array(); + $this->options = array( + 'script_url' => $this->get_full_url().'/'.$this->basename($this->get_server_var('SCRIPT_NAME')), + 'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/', + 'upload_url' => $this->get_full_url().'/files/', + 'input_stream' => 'php://input', + 'user_dirs' => false, + 'mkdir_mode' => 0755, + 'param_name' => 'files', + // Set the following option to 'POST', if your server does not support + // DELETE requests. This is a parameter sent to the client: + 'delete_type' => 'DELETE', + 'access_control_allow_origin' => '*', + 'access_control_allow_credentials' => false, + 'access_control_allow_methods' => array( + 'OPTIONS', + 'HEAD', + 'GET', + 'POST', + 'PUT', + 'PATCH', + 'DELETE' + ), + 'access_control_allow_headers' => array( + 'Content-Type', + 'Content-Range', + 'Content-Disposition' + ), + // By default, allow redirects to the referer protocol+host: + 'redirect_allow_target' => '/^'.preg_quote( + parse_url($this->get_server_var('HTTP_REFERER'), PHP_URL_SCHEME) + .'://' + .parse_url($this->get_server_var('HTTP_REFERER'), PHP_URL_HOST) + .'/', // Trailing slash to not match subdomains by mistake + '/' // preg_quote delimiter param + ).'/', + // Enable to provide file downloads via GET requests to the PHP script: + // 1. Set to 1 to download files via readfile method through PHP + // 2. Set to 2 to send a X-Sendfile header for lighttpd/Apache + // 3. Set to 3 to send a X-Accel-Redirect header for nginx + // If set to 2 or 3, adjust the upload_url option to the base path of + // the redirect parameter, e.g. '/files/'. + 'download_via_php' => false, + // Read files in chunks to avoid memory limits when download_via_php + // is enabled, set to 0 to disable chunked reading of files: + 'readfile_chunk_size' => 10 * 1024 * 1024, // 10 MiB + // Defines which files can be displayed inline when downloaded: + 'inline_file_types' => '/\.(gif|jpe?g|png)$/i', + // Defines which files (based on their names) are accepted for upload. + // By default, only allows file uploads with image file extensions. + // Only change this setting after making sure that any allowed file + // types cannot be executed by the webserver in the files directory, + // e.g. PHP scripts, nor executed by the browser when downloaded, + // e.g. HTML files with embedded JavaScript code. + // Please also read the SECURITY.md document in this repository. + 'accept_file_types' => '/\.(gif|jpe?g|png)$/i', + // Replaces dots in filenames with the given string. + // Can be disabled by setting it to false or an empty string. + // Note that this is a security feature for servers that support + // multiple file extensions, e.g. the Apache AddHandler Directive: + // https://httpd.apache.org/docs/current/mod/mod_mime.html#addhandler + // Before disabling it, make sure that files uploaded with multiple + // extensions cannot be executed by the webserver, e.g. + // "example.php.png" with embedded PHP code, nor executed by the + // browser when downloaded, e.g. "example.html.gif" with embedded + // JavaScript code. + 'replace_dots_in_filenames' => '-', + // The php.ini settings upload_max_filesize and post_max_size + // take precedence over the following max_file_size setting: + 'max_file_size' => null, + 'min_file_size' => 1, + // The maximum number of files for the upload directory: + 'max_number_of_files' => null, + // Reads first file bytes to identify and correct file extensions: + 'correct_image_extensions' => false, + // Image resolution restrictions: + 'max_width' => null, + 'max_height' => null, + 'min_width' => 1, + 'min_height' => 1, + // Set the following option to false to enable resumable uploads: + 'discard_aborted_uploads' => true, + // Set to 0 to use the GD library to scale and orient images, + // set to 1 to use imagick (if installed, falls back to GD), + // set to 2 to use the ImageMagick convert binary directly: + 'image_library' => 1, + // Uncomment the following to define an array of resource limits + // for imagick: + /* + 'imagick_resource_limits' => array( + imagick::RESOURCETYPE_MAP => 32, + imagick::RESOURCETYPE_MEMORY => 32 + ), + */ + // Command or path for to the ImageMagick convert binary: + 'convert_bin' => 'convert', + // Uncomment the following to add parameters in front of each + // ImageMagick convert call (the limit constraints seem only + // to have an effect if put in front): + /* + 'convert_params' => '-limit memory 32MiB -limit map 32MiB', + */ + // Command or path for to the ImageMagick identify binary: + 'identify_bin' => 'identify', + 'image_versions' => array( + // The empty image version key defines options for the original image. + // Keep in mind: these image manipulations are inherited by all other image versions from this point onwards. + // Also note that the property 'no_cache' is not inherited, since it's not a manipulation. + '' => array( + // Automatically rotate images based on EXIF meta data: + 'auto_orient' => true + ), + // You can add arrays to generate different versions. + // The name of the key is the name of the version (example: 'medium'). + // the array contains the options to apply. + /* + 'medium' => array( + 'max_width' => 800, + 'max_height' => 600 + ), + */ + //'thumbnail' => array( + // Uncomment the following to use a defined directory for the thumbnails + // instead of a subdirectory based on the version identifier. + // Make sure that this directory doesn't allow execution of files if you + // don't pose any restrictions on the type of uploaded files, e.g. by + // copying the .htaccess file from the files directory for Apache: + //'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/thumb/', + //'upload_url' => $this->get_full_url().'/thumb/', + // Uncomment the following to force the max + // dimensions and e.g. create square thumbnails: + // 'auto_orient' => true, + // 'crop' => true, + // 'jpeg_quality' => 70, + // 'no_cache' => true, (there's a caching option, but this remembers thumbnail sizes from a previous action!) + // 'strip' => true, (this strips EXIF tags, such as geolocation) + // 'max_width' => 80, // either specify width, or set to 0. Then width is automatically adjusted - keeping aspect ratio to a specified max_height. + // 'max_height' => 80 // either specify height, or set to 0. Then height is automatically adjusted - keeping aspect ratio to a specified max_width. + // ) + ), + 'print_response' => true + ); + if ($options) { + $this->options = $options + $this->options; + } + if ($error_messages) { + $this->error_messages = $error_messages + $this->error_messages; + } + if ($initialize) { + $this->initialize(); + } + } + + protected function initialize() { + switch ($this->get_server_var('REQUEST_METHOD')) { + case 'OPTIONS': + case 'HEAD': + $this->head(); + break; + case 'GET': + $this->get($this->options['print_response']); + break; + case 'PATCH': + case 'PUT': + case 'POST': + $this->post($this->options['print_response']); + break; + case 'DELETE': + $this->delete($this->options['print_response']); + break; + default: + $this->header('HTTP/1.1 405 Method Not Allowed'); + } + } + + protected function get_full_url() { + $https = !empty($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'on') === 0 || + !empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && + strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') === 0; + return + ($https ? 'https://' : 'http://'). + (!empty($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : ''). + (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME']. + ($https && $_SERVER['SERVER_PORT'] === 443 || + $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))). + substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/')); + } + + protected function get_user_id() { + @session_start(); + return session_id(); + } + + protected function get_user_path() { + if ($this->options['user_dirs']) { + return $this->get_user_id().'/'; + } + return ''; + } + + protected function get_upload_path($file_name = null, $version = null) { + $file_name = $file_name ? $file_name : ''; + if (empty($version)) { + $version_path = ''; + } else { + $version_dir = @$this->options['image_versions'][$version]['upload_dir']; + if ($version_dir) { + return $version_dir.$this->get_user_path().$file_name; + } + $version_path = $version.'/'; + } + return $this->options['upload_dir'].$this->get_user_path() + .$version_path.$file_name; + } + + protected function get_query_separator($url) { + return strpos($url, '?') === false ? '?' : '&'; + } + + protected function get_download_url($file_name, $version = null, $direct = false) { + if (!$direct && $this->options['download_via_php']) { + $url = $this->options['script_url'] + .$this->get_query_separator($this->options['script_url']) + .$this->get_singular_param_name() + .'='.rawurlencode($file_name); + if ($version) { + $url .= '&version='.rawurlencode($version); + } + return $url.'&download=1'; + } + if (empty($version)) { + $version_path = ''; + } else { + $version_url = @$this->options['image_versions'][$version]['upload_url']; + if ($version_url) { + return $version_url.$this->get_user_path().rawurlencode($file_name); + } + $version_path = rawurlencode($version).'/'; + } + return $this->options['upload_url'].$this->get_user_path() + .$version_path.rawurlencode($file_name); + } + + protected function set_additional_file_properties($file) { + $file->deleteUrl = $this->options['script_url'] + .$this->get_query_separator($this->options['script_url']) + .$this->get_singular_param_name() + .'='.rawurlencode($file->name); + $file->deleteType = $this->options['delete_type']; + if ($file->deleteType !== 'DELETE') { + $file->deleteUrl .= '&_method=DELETE'; + } + if ($this->options['access_control_allow_credentials']) { + $file->deleteWithCredentials = true; + } + } + + // Fix for overflowing signed 32 bit integers, + // works for sizes up to 2^32-1 bytes (4 GiB - 1): + protected function fix_integer_overflow($size) { + if ($size < 0) { + $size += 2.0 * (PHP_INT_MAX + 1); + } + return $size; + } + + protected function get_file_size($file_path, $clear_stat_cache = false) { + if ($clear_stat_cache) { + if (version_compare(PHP_VERSION, '5.3.0') >= 0) { + clearstatcache(true, $file_path); + } else { + clearstatcache(); + } + } + return $this->fix_integer_overflow(filesize($file_path)); + } + + protected function is_valid_file_object($file_name) { + $file_path = $this->get_upload_path($file_name); + if (is_file($file_path) && $file_name[0] !== '.') { + return true; + } + return false; + } + + protected function get_file_object($file_name) { + if ($this->is_valid_file_object($file_name)) { + $file = new \stdClass(); + $file->name = $file_name; + $file->size = $this->get_file_size( + $this->get_upload_path($file_name) + ); + $file->url = $this->get_download_url($file->name); + foreach ($this->options['image_versions'] as $version => $options) { + if (!empty($version)) { + if (is_file($this->get_upload_path($file_name, $version))) { + $file->{$version.'Url'} = $this->get_download_url( + $file->name, + $version + ); + } + } + } + $this->set_additional_file_properties($file); + return $file; + } + return null; + } + + protected function get_file_objects($iteration_method = 'get_file_object') { + $upload_dir = $this->get_upload_path(); + if (!is_dir($upload_dir)) { + return array(); + } + return array_values(array_filter(array_map( + array($this, $iteration_method), + scandir($upload_dir) + ))); + } + + protected function count_file_objects() { + return count($this->get_file_objects('is_valid_file_object')); + } + + protected function get_error_message($error) { + return isset($this->error_messages[$error]) ? + $this->error_messages[$error] : $error; + } + + public function get_config_bytes($val) { + $val = trim($val); + $last = strtolower($val[strlen($val)-1]); + $val = (int)$val; + switch ($last) { + case 'g': + $val *= 1024; + case 'm': + $val *= 1024; + case 'k': + $val *= 1024; + } + return $this->fix_integer_overflow($val); + } + + protected function validate($uploaded_file, $file, $error, $index) { + if ($error) { + $file->error = $this->get_error_message($error); + return false; + } + $content_length = $this->fix_integer_overflow( + (int)$this->get_server_var('CONTENT_LENGTH') + ); + $post_max_size = $this->get_config_bytes(ini_get('post_max_size')); + if ($post_max_size && ($content_length > $post_max_size)) { + $file->error = $this->get_error_message('post_max_size'); + return false; + } + if (!preg_match($this->options['accept_file_types'], $file->name)) { + $file->error = $this->get_error_message('accept_file_types'); + return false; + } + if ($uploaded_file && is_uploaded_file($uploaded_file)) { + $file_size = $this->get_file_size($uploaded_file); + } else { + $file_size = $content_length; + } + if ($this->options['max_file_size'] && ( + $file_size > $this->options['max_file_size'] || + $file->size > $this->options['max_file_size']) + ) { + $file->error = $this->get_error_message('max_file_size'); + return false; + } + if ($this->options['min_file_size'] && + $file_size < $this->options['min_file_size']) { + $file->error = $this->get_error_message('min_file_size'); + return false; + } + if (is_int($this->options['max_number_of_files']) && + ($this->count_file_objects() >= $this->options['max_number_of_files']) && + // Ignore additional chunks of existing files: + !is_file($this->get_upload_path($file->name))) { + $file->error = $this->get_error_message('max_number_of_files'); + return false; + } + $max_width = @$this->options['max_width']; + $max_height = @$this->options['max_height']; + $min_width = @$this->options['min_width']; + $min_height = @$this->options['min_height']; + if (($max_width || $max_height || $min_width || $min_height) + && $this->is_valid_image_file($uploaded_file)) { + list($img_width, $img_height) = $this->get_image_size($uploaded_file); + // If we are auto rotating the image by default, do the checks on + // the correct orientation + if ( + @$this->options['image_versions']['']['auto_orient'] && + function_exists('exif_read_data') && + ($exif = @exif_read_data($uploaded_file)) && + (((int) @$exif['Orientation']) >= 5) + ) { + $tmp = $img_width; + $img_width = $img_height; + $img_height = $tmp; + unset($tmp); + } + } + if (!empty($img_width)) { + if ($max_width && $img_width > $max_width) { + $file->error = $this->get_error_message('max_width'); + return false; + } + if ($max_height && $img_height > $max_height) { + $file->error = $this->get_error_message('max_height'); + return false; + } + if ($min_width && $img_width < $min_width) { + $file->error = $this->get_error_message('min_width'); + return false; + } + if ($min_height && $img_height < $min_height) { + $file->error = $this->get_error_message('min_height'); + return false; + } + } + return true; + } + + protected function upcount_name_callback($matches) { + $index = isset($matches[1]) ? ((int)$matches[1]) + 1 : 1; + $ext = isset($matches[2]) ? $matches[2] : ''; + return ' ('.$index.')'.$ext; + } + + protected function upcount_name($name) { + return preg_replace_callback( + '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/', + array($this, 'upcount_name_callback'), + $name, + 1 + ); + } + + protected function get_unique_filename($file_path, $name, $size, $type, $error, + $index, $content_range) { + while(is_dir($this->get_upload_path($name))) { + $name = $this->upcount_name($name); + } + // Keep an existing filename if this is part of a chunked upload: + $uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]); + while (is_file($this->get_upload_path($name))) { + if ($uploaded_bytes === $this->get_file_size( + $this->get_upload_path($name))) { + break; + } + $name = $this->upcount_name($name); + } + return $name; + } + + protected function fix_file_extension($file_path, $name, $size, $type, $error, + $index, $content_range) { + // Add missing file extension for known image types: + if (strpos($name, '.') === false && + preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) { + $name .= '.'.$matches[1]; + } + if ($this->options['correct_image_extensions']) { + switch ($this->imagetype($file_path)) { + case self::IMAGETYPE_JPEG: + $extensions = array('jpg', 'jpeg'); + break; + case self::IMAGETYPE_PNG: + $extensions = array('png'); + break; + case self::IMAGETYPE_GIF: + $extensions = array('gif'); + break; + } + // Adjust incorrect image file extensions: + if (!empty($extensions)) { + $parts = explode('.', $name); + $extIndex = count($parts) - 1; + $ext = strtolower(@$parts[$extIndex]); + if (!in_array($ext, $extensions)) { + $parts[$extIndex] = $extensions[0]; + $name = implode('.', $parts); + } + } + } + return $name; + } + + protected function trim_file_name($file_path, $name, $size, $type, $error, + $index, $content_range) { + // Remove path information and dots around the filename, to prevent uploading + // into different directories or replacing hidden system files. + // Also remove control characters and spaces (\x00..\x20) around the filename: + $name = trim($this->basename(stripslashes($name)), ".\x00..\x20"); + // Replace dots in filenames to avoid security issues with servers + // that interpret multiple file extensions, e.g. "example.php.png": + $replacement = $this->options['replace_dots_in_filenames']; + if (!empty($replacement)) { + $parts = explode('.', $name); + if (count($parts) > 2) { + $ext = array_pop($parts); + $name = implode($replacement, $parts).'.'.$ext; + } + } + // Use a timestamp for empty filenames: + if (!$name) { + $name = str_replace('.', '-', microtime(true)); + } + return $name; + } + + protected function get_file_name($file_path, $name, $size, $type, $error, + $index, $content_range) { + $name = $this->trim_file_name($file_path, $name, $size, $type, $error, + $index, $content_range); + return $this->get_unique_filename( + $file_path, + $this->fix_file_extension($file_path, $name, $size, $type, $error, + $index, $content_range), + $size, + $type, + $error, + $index, + $content_range + ); + } + + protected function get_scaled_image_file_paths($file_name, $version) { + $file_path = $this->get_upload_path($file_name); + if (!empty($version)) { + $version_dir = $this->get_upload_path(null, $version); + if (!is_dir($version_dir)) { + mkdir($version_dir, $this->options['mkdir_mode'], true); + } + $new_file_path = $version_dir.'/'.$file_name; + } else { + $new_file_path = $file_path; + } + return array($file_path, $new_file_path); + } + + protected function gd_get_image_object($file_path, $func, $no_cache = false) { + if (empty($this->image_objects[$file_path]) || $no_cache) { + $this->gd_destroy_image_object($file_path); + $this->image_objects[$file_path] = $func($file_path); + } + return $this->image_objects[$file_path]; + } + + protected function gd_set_image_object($file_path, $image) { + $this->gd_destroy_image_object($file_path); + $this->image_objects[$file_path] = $image; + } + + protected function gd_destroy_image_object($file_path) { + $image = (isset($this->image_objects[$file_path])) ? $this->image_objects[$file_path] : null ; + return $image && imagedestroy($image); + } + + protected function gd_imageflip($image, $mode) { + if (function_exists('imageflip')) { + return imageflip($image, $mode); + } + $new_width = $src_width = imagesx($image); + $new_height = $src_height = imagesy($image); + $new_img = imagecreatetruecolor($new_width, $new_height); + $src_x = 0; + $src_y = 0; + switch ($mode) { + case '1': // flip on the horizontal axis + $src_y = $new_height - 1; + $src_height = -$new_height; + break; + case '2': // flip on the vertical axis + $src_x = $new_width - 1; + $src_width = -$new_width; + break; + case '3': // flip on both axes + $src_y = $new_height - 1; + $src_height = -$new_height; + $src_x = $new_width - 1; + $src_width = -$new_width; + break; + default: + return $image; + } + imagecopyresampled( + $new_img, + $image, + 0, + 0, + $src_x, + $src_y, + $new_width, + $new_height, + $src_width, + $src_height + ); + return $new_img; + } + + protected function gd_orient_image($file_path, $src_img) { + if (!function_exists('exif_read_data')) { + return false; + } + $exif = @exif_read_data($file_path); + if ($exif === false) { + return false; + } + $orientation = (int)@$exif['Orientation']; + if ($orientation < 2 || $orientation > 8) { + return false; + } + switch ($orientation) { + case 2: + $new_img = $this->gd_imageflip( + $src_img, + defined('IMG_FLIP_VERTICAL') ? IMG_FLIP_VERTICAL : 2 + ); + break; + case 3: + $new_img = imagerotate($src_img, 180, 0); + break; + case 4: + $new_img = $this->gd_imageflip( + $src_img, + defined('IMG_FLIP_HORIZONTAL') ? IMG_FLIP_HORIZONTAL : 1 + ); + break; + case 5: + $tmp_img = $this->gd_imageflip( + $src_img, + defined('IMG_FLIP_HORIZONTAL') ? IMG_FLIP_HORIZONTAL : 1 + ); + $new_img = imagerotate($tmp_img, 270, 0); + imagedestroy($tmp_img); + break; + case 6: + $new_img = imagerotate($src_img, 270, 0); + break; + case 7: + $tmp_img = $this->gd_imageflip( + $src_img, + defined('IMG_FLIP_VERTICAL') ? IMG_FLIP_VERTICAL : 2 + ); + $new_img = imagerotate($tmp_img, 270, 0); + imagedestroy($tmp_img); + break; + case 8: + $new_img = imagerotate($src_img, 90, 0); + break; + default: + return false; + } + $this->gd_set_image_object($file_path, $new_img); + return true; + } + + protected function gd_create_scaled_image($file_name, $version, $options) { + if (!function_exists('imagecreatetruecolor')) { + error_log('Function not found: imagecreatetruecolor'); + return false; + } + list($file_path, $new_file_path) = + $this->get_scaled_image_file_paths($file_name, $version); + $type = strtolower(substr(strrchr($file_name, '.'), 1)); + switch ($type) { + case 'jpg': + case 'jpeg': + $src_func = 'imagecreatefromjpeg'; + $write_func = 'imagejpeg'; + $image_quality = isset($options['jpeg_quality']) ? + $options['jpeg_quality'] : 75; + break; + case 'gif': + $src_func = 'imagecreatefromgif'; + $write_func = 'imagegif'; + $image_quality = null; + break; + case 'png': + $src_func = 'imagecreatefrompng'; + $write_func = 'imagepng'; + $image_quality = isset($options['png_quality']) ? + $options['png_quality'] : 9; + break; + default: + return false; + } + $src_img = $this->gd_get_image_object( + $file_path, + $src_func, + !empty($options['no_cache']) + ); + $image_oriented = false; + if (!empty($options['auto_orient']) && $this->gd_orient_image( + $file_path, + $src_img + )) { + $image_oriented = true; + $src_img = $this->gd_get_image_object( + $file_path, + $src_func + ); + } + $max_width = $img_width = imagesx($src_img); + $max_height = $img_height = imagesy($src_img); + if (!empty($options['max_width'])) { + $max_width = $options['max_width']; + } + if (!empty($options['max_height'])) { + $max_height = $options['max_height']; + } + $scale = min( + $max_width / $img_width, + $max_height / $img_height + ); + if ($scale >= 1) { + if ($image_oriented) { + return $write_func($src_img, $new_file_path, $image_quality); + } + if ($file_path !== $new_file_path) { + return copy($file_path, $new_file_path); + } + return true; + } + if (empty($options['crop'])) { + $new_width = $img_width * $scale; + $new_height = $img_height * $scale; + $dst_x = 0; + $dst_y = 0; + $new_img = imagecreatetruecolor($new_width, $new_height); + } else { + if (($img_width / $img_height) >= ($max_width / $max_height)) { + $new_width = $img_width / ($img_height / $max_height); + $new_height = $max_height; + } else { + $new_width = $max_width; + $new_height = $img_height / ($img_width / $max_width); + } + $dst_x = 0 - ($new_width - $max_width) / 2; + $dst_y = 0 - ($new_height - $max_height) / 2; + $new_img = imagecreatetruecolor($max_width, $max_height); + } + // Handle transparency in GIF and PNG images: + switch ($type) { + case 'gif': + case 'png': + imagecolortransparent($new_img, imagecolorallocate($new_img, 0, 0, 0)); + case 'png': + imagealphablending($new_img, false); + imagesavealpha($new_img, true); + break; + } + $success = imagecopyresampled( + $new_img, + $src_img, + $dst_x, + $dst_y, + 0, + 0, + $new_width, + $new_height, + $img_width, + $img_height + ) && $write_func($new_img, $new_file_path, $image_quality); + $this->gd_set_image_object($file_path, $new_img); + return $success; + } + + protected function imagick_get_image_object($file_path, $no_cache = false) { + if (empty($this->image_objects[$file_path]) || $no_cache) { + $this->imagick_destroy_image_object($file_path); + $image = new \Imagick(); + if (!empty($this->options['imagick_resource_limits'])) { + foreach ($this->options['imagick_resource_limits'] as $type => $limit) { + $image->setResourceLimit($type, $limit); + } + } + $image->readImage($file_path); + $this->image_objects[$file_path] = $image; + } + return $this->image_objects[$file_path]; + } + + protected function imagick_set_image_object($file_path, $image) { + $this->imagick_destroy_image_object($file_path); + $this->image_objects[$file_path] = $image; + } + + protected function imagick_destroy_image_object($file_path) { + $image = (isset($this->image_objects[$file_path])) ? $this->image_objects[$file_path] : null ; + return $image && $image->destroy(); + } + + protected function imagick_orient_image($image) { + $orientation = $image->getImageOrientation(); + $background = new \ImagickPixel('none'); + switch ($orientation) { + case \imagick::ORIENTATION_TOPRIGHT: // 2 + $image->flopImage(); // horizontal flop around y-axis + break; + case \imagick::ORIENTATION_BOTTOMRIGHT: // 3 + $image->rotateImage($background, 180); + break; + case \imagick::ORIENTATION_BOTTOMLEFT: // 4 + $image->flipImage(); // vertical flip around x-axis + break; + case \imagick::ORIENTATION_LEFTTOP: // 5 + $image->flopImage(); // horizontal flop around y-axis + $image->rotateImage($background, 270); + break; + case \imagick::ORIENTATION_RIGHTTOP: // 6 + $image->rotateImage($background, 90); + break; + case \imagick::ORIENTATION_RIGHTBOTTOM: // 7 + $image->flipImage(); // vertical flip around x-axis + $image->rotateImage($background, 270); + break; + case \imagick::ORIENTATION_LEFTBOTTOM: // 8 + $image->rotateImage($background, 270); + break; + default: + return false; + } + $image->setImageOrientation(\imagick::ORIENTATION_TOPLEFT); // 1 + return true; + } + + protected function imagick_create_scaled_image($file_name, $version, $options) { + list($file_path, $new_file_path) = + $this->get_scaled_image_file_paths($file_name, $version); + $image = $this->imagick_get_image_object( + $file_path, + !empty($options['crop']) || !empty($options['no_cache']) + ); + if ($image->getImageFormat() === 'GIF') { + // Handle animated GIFs: + $images = $image->coalesceImages(); + foreach ($images as $frame) { + $image = $frame; + $this->imagick_set_image_object($file_name, $image); + break; + } + } + $image_oriented = false; + if (!empty($options['auto_orient'])) { + $image_oriented = $this->imagick_orient_image($image); + } + + $image_resize = false; + $new_width = $max_width = $img_width = $image->getImageWidth(); + $new_height = $max_height = $img_height = $image->getImageHeight(); + + // use isset(). User might be setting max_width = 0 (auto in regular resizing). Value 0 would be considered empty when you use empty() + if (isset($options['max_width'])) { + $image_resize = true; + $new_width = $max_width = $options['max_width']; + } + if (isset($options['max_height'])) { + $image_resize = true; + $new_height = $max_height = $options['max_height']; + } + + $image_strip = (isset($options['strip']) ? $options['strip'] : false); + + if ( !$image_oriented && ($max_width >= $img_width) && ($max_height >= $img_height) && !$image_strip && empty($options["jpeg_quality"]) ) { + if ($file_path !== $new_file_path) { + return copy($file_path, $new_file_path); + } + return true; + } + $crop = (isset($options['crop']) ? $options['crop'] : false); + + if ($crop) { + $x = 0; + $y = 0; + if (($img_width / $img_height) >= ($max_width / $max_height)) { + $new_width = 0; // Enables proportional scaling based on max_height + $x = ($img_width / ($img_height / $max_height) - $max_width) / 2; + } else { + $new_height = 0; // Enables proportional scaling based on max_width + $y = ($img_height / ($img_width / $max_width) - $max_height) / 2; + } + } + $success = $image->resizeImage( + $new_width, + $new_height, + isset($options['filter']) ? $options['filter'] : \imagick::FILTER_LANCZOS, + isset($options['blur']) ? $options['blur'] : 1, + $new_width && $new_height // fit image into constraints if not to be cropped + ); + if ($success && $crop) { + $success = $image->cropImage( + $max_width, + $max_height, + $x, + $y + ); + if ($success) { + $success = $image->setImagePage($max_width, $max_height, 0, 0); + } + } + $type = strtolower(substr(strrchr($file_name, '.'), 1)); + switch ($type) { + case 'jpg': + case 'jpeg': + if (!empty($options['jpeg_quality'])) { + $image->setImageCompression(\imagick::COMPRESSION_JPEG); + $image->setImageCompressionQuality($options['jpeg_quality']); + } + break; + } + if ( $image_strip ) { + $image->stripImage(); + } + return $success && $image->writeImage($new_file_path); + } + + protected function imagemagick_create_scaled_image($file_name, $version, $options) { + list($file_path, $new_file_path) = + $this->get_scaled_image_file_paths($file_name, $version); + $resize = @$options['max_width'] + .(empty($options['max_height']) ? '' : 'X'.$options['max_height']); + if (!$resize && empty($options['auto_orient'])) { + if ($file_path !== $new_file_path) { + return copy($file_path, $new_file_path); + } + return true; + } + $cmd = $this->options['convert_bin']; + if (!empty($this->options['convert_params'])) { + $cmd .= ' '.$this->options['convert_params']; + } + $cmd .= ' '.escapeshellarg($file_path); + if (!empty($options['auto_orient'])) { + $cmd .= ' -auto-orient'; + } + if ($resize) { + // Handle animated GIFs: + $cmd .= ' -coalesce'; + if (empty($options['crop'])) { + $cmd .= ' -resize '.escapeshellarg($resize.'>'); + } else { + $cmd .= ' -resize '.escapeshellarg($resize.'^'); + $cmd .= ' -gravity center'; + $cmd .= ' -crop '.escapeshellarg($resize.'+0+0'); + } + // Make sure the page dimensions are correct (fixes offsets of animated GIFs): + $cmd .= ' +repage'; + } + if (!empty($options['convert_params'])) { + $cmd .= ' '.$options['convert_params']; + } + $cmd .= ' '.escapeshellarg($new_file_path); + exec($cmd, $output, $error); + if ($error) { + error_log(implode('\n', $output)); + return false; + } + return true; + } + + protected function get_image_size($file_path) { + if ($this->options['image_library']) { + if (extension_loaded('imagick')) { + $image = new \Imagick(); + try { + if (@$image->pingImage($file_path)) { + $dimensions = array($image->getImageWidth(), $image->getImageHeight()); + $image->destroy(); + return $dimensions; + } + return false; + } catch (\Exception $e) { + error_log($e->getMessage()); + } + } + if ($this->options['image_library'] === 2) { + $cmd = $this->options['identify_bin']; + $cmd .= ' -ping '.escapeshellarg($file_path); + exec($cmd, $output, $error); + if (!$error && !empty($output)) { + // image.jpg JPEG 1920x1080 1920x1080+0+0 8-bit sRGB 465KB 0.000u 0:00.000 + $infos = preg_split('/\s+/', substr($output[0], strlen($file_path))); + $dimensions = preg_split('/x/', $infos[2]); + return $dimensions; + } + return false; + } + } + if (!function_exists('getimagesize')) { + error_log('Function not found: getimagesize'); + return false; + } + return @getimagesize($file_path); + } + + protected function create_scaled_image($file_name, $version, $options) { + try { + if ($this->options['image_library'] === 2) { + return $this->imagemagick_create_scaled_image($file_name, $version, $options); + } + if ($this->options['image_library'] && extension_loaded('imagick')) { + return $this->imagick_create_scaled_image($file_name, $version, $options); + } + return $this->gd_create_scaled_image($file_name, $version, $options); + } catch (\Exception $e) { + error_log($e->getMessage()); + return false; + } + } + + protected function destroy_image_object($file_path) { + if ($this->options['image_library'] && extension_loaded('imagick')) { + return $this->imagick_destroy_image_object($file_path); + } + } + + protected function imagetype($file_path) { + $fp = fopen($file_path, 'r'); + $data = fread($fp, 4); + fclose($fp); + // GIF: 47 49 46 38 + if ($data === 'GIF8') { + return self::IMAGETYPE_GIF; + } + // JPG: FF D8 FF + if (bin2hex(substr($data, 0, 3)) === 'ffd8ff') { + return self::IMAGETYPE_JPEG; + } + // PNG: 89 50 4E 47 + if (bin2hex(@$data[0]).substr($data, 1, 4) === '89PNG') { + return self::IMAGETYPE_PNG; + } + return false; + } + + protected function is_valid_image_file($file_path) { + if (!preg_match('/\.(gif|jpe?g|png)$/i', $file_path)) { + return false; + } + return !!$this->imagetype($file_path); + } + + protected function handle_image_file($file_path, $file) { + $failed_versions = array(); + foreach ($this->options['image_versions'] as $version => $options) { + if ($this->create_scaled_image($file->name, $version, $options)) { + if (!empty($version)) { + $file->{$version.'Url'} = $this->get_download_url( + $file->name, + $version + ); + } else { + $file->size = $this->get_file_size($file_path, true); + } + } else { + $failed_versions[] = $version ? $version : 'original'; + } + } + if (count($failed_versions)) { + $file->error = $this->get_error_message('image_resize') + .' ('.implode($failed_versions, ', ').')'; + } + // Free memory: + $this->destroy_image_object($file_path); + } + + protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, + $index = null, $content_range = null) { + $file = new \stdClass(); + $file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error, + $index, $content_range); + $file->size = $this->fix_integer_overflow((int)$size); + $file->type = $type; + if ($this->validate($uploaded_file, $file, $error, $index)) { + $this->handle_form_data($file, $index); + $upload_dir = $this->get_upload_path(); + if (!is_dir($upload_dir)) { + mkdir($upload_dir, $this->options['mkdir_mode'], true); + } + $file_path = $this->get_upload_path($file->name); + $append_file = $content_range && is_file($file_path) && + $file->size > $this->get_file_size($file_path); + if ($uploaded_file && is_uploaded_file($uploaded_file)) { + // multipart/formdata uploads (POST method uploads) + if ($append_file) { + file_put_contents( + $file_path, + fopen($uploaded_file, 'r'), + FILE_APPEND + ); + } else { + move_uploaded_file($uploaded_file, $file_path); + } + } else { + // Non-multipart uploads (PUT method support) + file_put_contents( + $file_path, + fopen($this->options['input_stream'], 'r'), + $append_file ? FILE_APPEND : 0 + ); + } + $file_size = $this->get_file_size($file_path, $append_file); + if ($file_size === $file->size) { + $file->url = $this->get_download_url($file->name); + if ($this->is_valid_image_file($file_path)) { + $this->handle_image_file($file_path, $file); + } + } else { + $file->size = $file_size; + if (!$content_range && $this->options['discard_aborted_uploads']) { + unlink($file_path); + $file->error = $this->get_error_message('abort'); + } + } + $this->set_additional_file_properties($file); + } + return $file; + } + + protected function readfile($file_path) { + $file_size = $this->get_file_size($file_path); + $chunk_size = $this->options['readfile_chunk_size']; + if ($chunk_size && $file_size > $chunk_size) { + $handle = fopen($file_path, 'rb'); + while (!feof($handle)) { + echo fread($handle, $chunk_size); + @ob_flush(); + @flush(); + } + fclose($handle); + return $file_size; + } + return readfile($file_path); + } + + protected function body($str) { + echo $str; + } + + protected function header($str) { + header($str); + } + + protected function get_upload_data($id) { + return @$_FILES[$id]; + } + + protected function get_post_param($id) { + return @$_POST[$id]; + } + + protected function get_query_param($id) { + return @$_GET[$id]; + } + + protected function get_server_var($id) { + return @$_SERVER[$id]; + } + + protected function handle_form_data($file, $index) { + // Handle form data, e.g. $_POST['description'][$index] + } + + protected function get_version_param() { + return $this->basename(stripslashes($this->get_query_param('version'))); + } + + protected function get_singular_param_name() { + return substr($this->options['param_name'], 0, -1); + } + + protected function get_file_name_param() { + $name = $this->get_singular_param_name(); + return $this->basename(stripslashes($this->get_query_param($name))); + } + + protected function get_file_names_params() { + $params = $this->get_query_param($this->options['param_name']); + if (!$params) { + return null; + } + foreach ($params as $key => $value) { + $params[$key] = $this->basename(stripslashes($value)); + } + return $params; + } + + protected function get_file_type($file_path) { + switch (strtolower(pathinfo($file_path, PATHINFO_EXTENSION))) { + case 'jpeg': + case 'jpg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'gif': + return 'image/gif'; + default: + return ''; + } + } + + protected function download() { + switch ($this->options['download_via_php']) { + case 1: + $redirect_header = null; + break; + case 2: + $redirect_header = 'X-Sendfile'; + break; + case 3: + $redirect_header = 'X-Accel-Redirect'; + break; + default: + return $this->header('HTTP/1.1 403 Forbidden'); + } + $file_name = $this->get_file_name_param(); + if (!$this->is_valid_file_object($file_name)) { + return $this->header('HTTP/1.1 404 Not Found'); + } + if ($redirect_header) { + return $this->header( + $redirect_header.': '.$this->get_download_url( + $file_name, + $this->get_version_param(), + true + ) + ); + } + $file_path = $this->get_upload_path($file_name, $this->get_version_param()); + // Prevent browsers from MIME-sniffing the content-type: + $this->header('X-Content-Type-Options: nosniff'); + if (!preg_match($this->options['inline_file_types'], $file_name)) { + $this->header('Content-Type: application/octet-stream'); + $this->header('Content-Disposition: attachment; filename="'.$file_name.'"'); + } else { + $this->header('Content-Type: '.$this->get_file_type($file_path)); + $this->header('Content-Disposition: inline; filename="'.$file_name.'"'); + } + $this->header('Content-Length: '.$this->get_file_size($file_path)); + $this->header('Last-Modified: '.gmdate('D, d M Y H:i:s T', filemtime($file_path))); + $this->readfile($file_path); + } + + protected function send_content_type_header() { + $this->header('Vary: Accept'); + if (strpos($this->get_server_var('HTTP_ACCEPT'), 'application/json') !== false) { + $this->header('Content-type: application/json'); + } else { + $this->header('Content-type: text/plain'); + } + } + + protected function send_access_control_headers() { + $this->header('Access-Control-Allow-Origin: '.$this->options['access_control_allow_origin']); + $this->header('Access-Control-Allow-Credentials: ' + .($this->options['access_control_allow_credentials'] ? 'true' : 'false')); + $this->header('Access-Control-Allow-Methods: ' + .implode(', ', $this->options['access_control_allow_methods'])); + $this->header('Access-Control-Allow-Headers: ' + .implode(', ', $this->options['access_control_allow_headers'])); + } + + public function generate_response($content, $print_response = true) { + $this->response = $content; + if ($print_response) { + $json = json_encode($content); + $redirect = stripslashes($this->get_post_param('redirect')); + if ($redirect && preg_match($this->options['redirect_allow_target'], $redirect)) { + $this->header('Location: '.sprintf($redirect, rawurlencode($json))); + return; + } + $this->head(); + if ($this->get_server_var('HTTP_CONTENT_RANGE')) { + $files = isset($content[$this->options['param_name']]) ? + $content[$this->options['param_name']] : null; + if ($files && is_array($files) && is_object($files[0]) && $files[0]->size) { + $this->header('Range: 0-'.( + $this->fix_integer_overflow((int)$files[0]->size) - 1 + )); + } + } + $this->body($json); + } + return $content; + } + + public function get_response () { + return $this->response; + } + + public function head() { + $this->header('Pragma: no-cache'); + $this->header('Cache-Control: no-store, no-cache, must-revalidate'); + $this->header('Content-Disposition: inline; filename="files.json"'); + // Prevent Internet Explorer from MIME-sniffing the content-type: + $this->header('X-Content-Type-Options: nosniff'); + if ($this->options['access_control_allow_origin']) { + $this->send_access_control_headers(); + } + $this->send_content_type_header(); + } + + public function get($print_response = true) { + if ($print_response && $this->get_query_param('download')) { + return $this->download(); + } + $file_name = $this->get_file_name_param(); + if ($file_name) { + $response = array( + $this->get_singular_param_name() => $this->get_file_object($file_name) + ); + } else { + $response = array( + $this->options['param_name'] => $this->get_file_objects() + ); + } + return $this->generate_response($response, $print_response); + } + + public function post($print_response = true) { + if ($this->get_query_param('_method') === 'DELETE') { + return $this->delete($print_response); + } + $upload = $this->get_upload_data($this->options['param_name']); + // Parse the Content-Disposition header, if available: + $content_disposition_header = $this->get_server_var('HTTP_CONTENT_DISPOSITION'); + $file_name = $content_disposition_header ? + rawurldecode(preg_replace( + '/(^[^"]+")|("$)/', + '', + $content_disposition_header + )) : null; + // Parse the Content-Range header, which has the following form: + // Content-Range: bytes 0-524287/2000000 + $content_range_header = $this->get_server_var('HTTP_CONTENT_RANGE'); + $content_range = $content_range_header ? + preg_split('/[^0-9]+/', $content_range_header) : null; + $size = $content_range ? $content_range[3] : null; + $files = array(); + if ($upload) { + if (is_array($upload['tmp_name'])) { + // param_name is an array identifier like "files[]", + // $upload is a multi-dimensional array: + foreach ($upload['tmp_name'] as $index => $value) { + $files[] = $this->handle_file_upload( + $upload['tmp_name'][$index], + $file_name ? $file_name : $upload['name'][$index], + $size ? $size : $upload['size'][$index], + $upload['type'][$index], + isset($upload['error']) ? $upload['error'][$index] : null, + $index, + $content_range + ); + } + } else { + // param_name is a single object identifier like "file", + // $upload is a one-dimensional array: + $files[] = $this->handle_file_upload( + isset($upload['tmp_name']) ? $upload['tmp_name'] : null, + $file_name ? $file_name : (isset($upload['name']) ? + $upload['name'] : null), + $size ? $size : (isset($upload['size']) ? + $upload['size'] : $this->get_server_var('CONTENT_LENGTH')), + isset($upload['type']) ? + $upload['type'] : $this->get_server_var('CONTENT_TYPE'), + isset($upload['error']) ? $upload['error'] : null, + null, + $content_range + ); + } + } + $response = array($this->options['param_name'] => $files); + $name = $file_name ? $file_name : $upload['name'][0]; + $res = $this->generate_response($response, $print_response); + if(is_file($this->get_upload_path($name))){ + $uploaded_bytes = $this->fix_integer_overflow((int)$content_range[1]); + $totalSize = $this->get_file_size($this->get_upload_path($name)); + if ($totalSize - $uploaded_bytes - $this->options['readfile_chunk_size'] < 0) { + $this->onUploadEnd($res); + }else{ + $this->head(); + $this->body(json_encode($res)); + } + }else{ + $this->head(); + $this->body(json_encode($res)); + } + return $res; + } + + public function onUploadEnd ($res){ + $targetPath = $this->options['storeFolder']; + $targetPathThumb = $this->options['storeFolderThumb']; + + if(!$this->options['ftp']){ + $targetFile = $targetPath. $res['files'][0]->name; + $targetFileThumb = $targetPathThumb. $res['files'][0]->name; + if (!is_dir($targetPathThumb)) { + mkdir($targetPathThumb, $this->options['mkdir_mode'], true); + } + if(is_file($targetFile)) { + chmod($targetFile, $this->options['config']['filePermission']); + }elseif(is_dir($targetFile)){ + chmod($targetFile, $this->options['config']['folderPermission']); + } + }else{ + $targetFile = $this->options['config']['ftp_temp_folder'].$res['files'][0]->name; + $targetFileThumb = $this->options['config']['ftp_temp_folder']."thumbs/". $res['files'][0]->name; + } + + //check if image (and supported) + $is_img = FALSE; + if ($this->is_valid_image_file($targetFile)){ + $is_img = TRUE; + } + + if ($is_img) + { + if(isset($this->options['config']['image_watermark']) && $this->options['config']['image_watermark']){ + require_once('include/php_image_magician.php'); + + $magicianObj = new imageLib($targetFile); + $magicianObj -> addWatermark($this->options['config']['image_watermark'], $this->options['config']['image_watermark_position'], $this->options['config']['image_watermark_padding']); + + $magicianObj -> saveImage($targetFile); + } + + + + $thumbResult = create_img($targetFile, $targetFileThumb, 122, 91); + + if ( $thumbResult!==true) + { + if($thumbResult === false){ + $res['files'][0]->error = trans("Not enough Memory"); + }else{ + $res['files'][0]->error = $thumbResult; + } + } + else + { + if( !$this->options['ftp'] && ! new_thumbnails_creation($targetPath,$targetFile,$_FILES['files']['name'][0],$this->options['config']['current_path'],$this->options['config'])) + { + $res['files'][0]->error = trans("Not enough Memory"); + } + else + { + $imginfo = getimagesize($targetFile); + $srcWidth = $imginfo[0]; + $srcHeight = $imginfo[1]; + + // resize images if set + if ($this->options['config']['image_resizing']) + { + if ($this->options['config']['image_resizing_width'] == 0) // if width not set + { + if ($this->options['config']['image_resizing_height'] == 0) + { + $this->options['config']['image_resizing_width'] = $srcWidth; + $this->options['config']['image_resizing_height'] = $srcHeight; + } + else + { + $this->options['config']['image_resizing_width'] = $this->options['config']['image_resizing_height']*$srcWidth/$srcHeight; + } + } + elseif ($this->options['config']['image_resizing_height'] == 0) // if height not set + { + $this->options['config']['image_resizing_height'] = $this->options['config']['image_resizing_width']*$srcHeight/$srcWidth; + } + + // new dims and create + $srcWidth = $this->options['config']['image_resizing_width']; + $srcHeight = $this->options['config']['image_resizing_height']; + create_img($targetFile, $targetFile, $this->options['config']['image_resizing_width'], $this->options['config']['image_resizing_height'], $this->options['config']['image_resizing_mode']); + } + + //max resizing limit control + $resize = FALSE; + if ($this->options['config']['image_max_width'] != 0 && $srcWidth > $this->options['config']['image_max_width'] && $this->options['config']['image_resizing_override'] === FALSE) + { + $resize = TRUE; + $srcWidth = $this->options['config']['image_max_width']; + + if ($this->options['config']['image_max_height'] == 0) $srcHeight = $this->options['config']['image_max_width']*$srcHeight/$srcWidth; + } + + if ($this->options['config']['image_max_height'] != 0 && $srcHeight > $this->options['config']['image_max_height'] && $this->options['config']['image_resizing_override'] === FALSE){ + $resize = TRUE; + $srcHeight = $this->options['config']['image_max_height']; + + if ($this->options['config']['image_max_width'] == 0) $srcWidth = $this->options['config']['image_max_height']*$srcWidth/$srcHeight; + } + + if ($resize){ create_img($targetFile, $targetFile, $srcWidth, $srcHeight, $this->options['config']['image_max_mode']); } + } + } + } + + if($this->options['ftp']){ + + $this->options['ftp']->put($targetPath. $res['files'][0]->name, $targetFile, FTP_BINARY); + unlink($targetFile); + if ($is_img) + { + $this->options['ftp']->put($targetPathThumb. $res['files'][0]->name, $targetFileThumb, FTP_BINARY); + unlink($targetFileThumb); + } + } + $this->head(); + $this->body(json_encode($res)); + } + + public function delete($print_response = true) { + $file_names = $this->get_file_names_params(); + if (empty($file_names)) { + $file_names = array($this->get_file_name_param()); + } + $response = array(); + foreach ($file_names as $file_name) { + $file_path = $this->get_upload_path($file_name); + $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path); + if ($success) { + foreach ($this->options['image_versions'] as $version => $options) { + if (!empty($version)) { + $file = $this->get_upload_path($file_name, $version); + if (is_file($file)) { + unlink($file); + } + } + } + } + $response[$file_name] = $success; + } + return $this->generate_response($response, $print_response); + } + + protected function basename($filepath, $suffix = null) { + $splited = preg_split('/\//', rtrim ($filepath, '/ ')); + return substr(basename('X'.$splited[count($splited)-1], $suffix), 1); + } +} diff --git a/libraries/filemanager-9.14.1/ajax_calls.php b/libraries/filemanager-9.14.1/ajax_calls.php new file mode 100644 index 0000000..e514186 --- /dev/null +++ b/libraries/filemanager-9.14.1/ajax_calls.php @@ -0,0 +1,653 @@ +send(); + exit; +} +$languages = include 'lang/languages.php'; + +if (isset($_SESSION['RF']['language']) && file_exists('lang/' . basename($_SESSION['RF']['language']) . '.php')) { + if (array_key_exists($_SESSION['RF']['language'], $languages)) { + include 'lang/' . basename($_SESSION['RF']['language']) . '.php'; + } else { + response(trans('Lang_Not_Found').AddErrorLocation())->send(); + exit; + } +} else { + response(trans('Lang_Not_Found').AddErrorLocation())->send(); + exit; +} + + +//check $_GET['file'] +if (isset($_GET['file']) && !checkRelativePath($_GET['file'])) { + response(trans('wrong path').AddErrorLocation())->send(); + exit; +} + +//check $_POST['file'] +if(isset($_POST['path']) && !checkRelativePath($_POST['path'])) { + response(trans('wrong path').AddErrorLocation())->send(); + exit; +} + + +$ftp = ftp_con($config); + +if (isset($_GET['action'])) { + switch ($_GET['action']) { + case 'new_file_form': + echo trans('Filename') . ':

          '; + break; + + case 'view': + if (isset($_GET['type'])) { + $_SESSION['RF']["view_type"] = $_GET['type']; + } else { + response(trans('view type number missing').AddErrorLocation())->send(); + exit; + } + break; + + case 'filter': + if (isset($_GET['type'])) { + if (isset($config['remember_text_filter']) && $config['remember_text_filter']) { + $_SESSION['RF']["filter"] = $_GET['type']; + } + } else { + response(trans('view type number missing').AddErrorLocation())->send(); + exit; + } + break; + + case 'sort': + if (isset($_GET['sort_by'])) { + $_SESSION['RF']["sort_by"] = $_GET['sort_by']; + } + + if (isset($_GET['descending'])) + { + $_SESSION['RF']["descending"] = $_GET['descending']; + } + break; + case 'save_img': + $info = pathinfo($_POST['name']); + $image_data = $_POST['url']; + + if (preg_match('/^data:image\/(\w+);base64,/', $image_data, $type)) { + $image_data = substr($image_data, strpos($image_data, ',') + 1); + $type = strtolower($type[1]); // jpg, png, gif + + $image_data = base64_decode($image_data); + + if ($image_data === false) { + response(trans('TUI_Decode_Failed').AddErrorLocation())->send(); + exit; + } + } else { + response(trans('').AddErrorLocation())->send(); + exit; + } + + if ($image_data === false) { + response(trans('').AddErrorLocation())->send(); + exit; + } + + if (!checkresultingsize(strlen($image_data))) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send(); + exit; + } + if ($ftp) { + $temp = tempnam('/tmp', 'RF'); + unlink($temp); + $temp .=".".substr(strrchr($_POST['url'], '.'), 1); + file_put_contents($temp, $image_data); + + $ftp->put($config['ftp_base_folder'].$config['upload_dir'] . $_POST['path'] . $_POST['name'], $temp, FTP_BINARY); + + create_img($temp, $temp, 122, 91); + $ftp->put($config['ftp_base_folder'].$config['ftp_thumbs_dir']. $_POST['path'] . $_POST['name'], $temp, FTP_BINARY); + + unlink($temp); + } else { + file_put_contents($config['current_path'] . $_POST['path'] . $_POST['name'], $image_data); + create_img($config['current_path'] . $_POST['path'] . $_POST['name'], $config['thumbs_base_path'].$_POST['path'].$_POST['name'], 122, 91); + // TODO something with this function cause its blowing my mind + new_thumbnails_creation( + $config['current_path'].$_POST['path'], + $config['current_path'].$_POST['path'].$_POST['name'], + $_POST['name'], + $config['current_path'], + $config + ); + } + break; + + case 'extract': + if (!$config['extract_files']) { + response(trans('wrong action').AddErrorLocation())->send(); + } + if ($ftp) { + $path = $config['ftp_base_url'].$config['upload_dir'] . $_POST['path']; + $base_folder = $config['ftp_base_url'].$config['upload_dir'] . fix_dirname($_POST['path']) . "/"; + } else { + $path = $config['current_path'] . $_POST['path']; + $base_folder = $config['current_path'] . fix_dirname($_POST['path']) . "/"; + } + + $info = pathinfo($path); + + if ($ftp) { + $tempDir = tempdir(); + $temp = tempnam($tempDir, 'RF'); + unlink($temp); + $temp .= "." . $info['extension']; + $handle = fopen($temp, "w"); + fwrite($handle, file_get_contents($path)); + fclose($handle); + $path = $temp; + $base_folder = $tempDir . "/"; + } + + $info = pathinfo($path); + + switch ($info['extension']) { + case "zip": + $zip = new ZipArchive; + if ($zip->open($path) === true) { + //get total size + $sizeTotalFinal = 0; + for ($i = 0; $i < $zip->numFiles; $i++) { + $aStat = $zip->statIndex($i); + $sizeTotalFinal += $aStat['size']; + } + if (!checkresultingsize($sizeTotalFinal)) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send(); + exit; + } + + //make all the folders and unzip into the folders + for ($i = 0; $i < $zip->numFiles; $i++) { + $FullFileName = $zip->statIndex($i); + + if (checkRelativePath($FullFileName['name'])) { + if (substr($FullFileName['name'], -1, 1) == "/") { + create_folder($base_folder . $FullFileName['name']); + } + + if (! (substr($FullFileName['name'], -1, 1) == "/")) { + $fileinfo = pathinfo($FullFileName['name']); + if (in_array(strtolower($fileinfo['extension']), $config['ext'])) { + copy('zip://' . $path . '#' . $FullFileName['name'], $base_folder . $FullFileName['name']); + } + } + } + } + $zip->close(); + } else { + response(trans('Zip_No_Extract').AddErrorLocation())->send(); + exit; + } + + break; + + case "gz": + // No resulting size pre-control available + $p = new PharData($path); + $p->decompress(); // creates files.tar + break; + + case "tar": + // No resulting size pre-control available + // unarchive from the tar + $phar = new PharData($path); + $phar->decompressFiles(); + $files = array(); + check_files_extensions_on_phar($phar, $files, '', $config); + $phar->extractTo($base_folder, $files, true); + break; + + default: + response(trans('Zip_Invalid').AddErrorLocation())->send(); + exit; + } + + if ($ftp) { + unlink($path); + $ftp->putAll($base_folder, "/".$config['ftp_base_folder'] . $config['upload_dir'] . fix_dirname($_POST['path']), FTP_BINARY); + deleteDir($base_folder); + } + + + break; + case 'media_preview': + if(isset($_GET['file'])){ + $_GET['file'] = sanitize($_GET['file']); + } + if(isset($_GET['title'])){ + $_GET['title'] = sanitize($_GET['title']); + } + if($ftp){ + $preview_file = $config['ftp_base_url'].$config['upload_dir'] . $_GET['file']; + }else{ + $preview_file = $config['current_path'] . $_GET["file"]; + } + $info = pathinfo($preview_file); + ob_start(); + ?> + + + + + + + + + + send(); + exit; + + break; + case 'copy_cut': + if ($_POST['sub_action'] != 'copy' && $_POST['sub_action'] != 'cut') { + response(trans('wrong sub-action').AddErrorLocation())->send(); + exit; + } + + if (trim($_POST['path']) == '') { + response(trans('no path').AddErrorLocation())->send(); + exit; + } + + $msg_sub_action = ($_POST['sub_action'] == 'copy' ? trans('Copy') : trans('Cut')); + $path = $config['current_path'] . $_POST['path']; + + if (is_dir($path)) { + // can't copy/cut dirs + if ($config['copy_cut_dirs'] === false) { + response(sprintf(trans('Copy_Cut_Not_Allowed'), $msg_sub_action, trans('Folders')).AddErrorLocation())->send(); + exit; + } + + list($sizeFolderToCopy, $fileNum, $foldersCount) = folder_info($path, false); + // size over limit + if ($config['copy_cut_max_size'] !== false && is_int($config['copy_cut_max_size'])) { + if (($config['copy_cut_max_size'] * 1024 * 1024) < $sizeFolderToCopy) { + response(sprintf(trans('Copy_Cut_Size_Limit'), $msg_sub_action, $config['copy_cut_max_size']).AddErrorLocation())->send(); + exit; + } + } + + // file count over limit + if ($config['copy_cut_max_count'] !== false && is_int($config['copy_cut_max_count'])) { + if ($config['copy_cut_max_count'] < $fileNum) { + response(sprintf(trans('Copy_Cut_Count_Limit'), $msg_sub_action, $config['copy_cut_max_count']).AddErrorLocation())->send(); + exit; + } + } + + if (!checkresultingsize($sizeFolderToCopy)) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send(); + exit; + } + } else { + // can't copy/cut files + if ($config['copy_cut_files'] === false) { + response(sprintf(trans('Copy_Cut_Not_Allowed'), $msg_sub_action, trans('Files')).AddErrorLocation())->send(); + exit; + } + } + + $_SESSION['RF']['clipboard']['path'] = $_POST['path']; + $_SESSION['RF']['clipboard_action'] = $_POST['sub_action']; + break; + case 'clear_clipboard': + $_SESSION['RF']['clipboard'] = null; + $_SESSION['RF']['clipboard_action'] = null; + break; + case 'chmod': + if ($ftp) { + $path = $config['ftp_base_url'] . $config['upload_dir'] . $_POST['path']; + if ( + ($_POST['folder']==1 && $config['chmod_dirs'] === false) + || ($_POST['folder']==0 && $config['chmod_files'] === false) + || (is_function_callable("chmod") === false)) { + response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? trans('Folders') : trans('Files')), 403).AddErrorLocation())->send(); + exit; + } + $info = $_POST['permissions']; + } else { + $path = $config['current_path'] . $_POST['path']; + if ( + (is_dir($path) && $config['chmod_dirs'] === false) + || (is_file($path) && $config['chmod_files'] === false) + || (is_function_callable("chmod") === false)) { + response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? trans('Folders') : trans('Files')), 403).AddErrorLocation())->send(); + exit; + } + + $perms = fileperms($path) & 0777; + + $info = '-'; + + // Owner + $info .= (($perms & 0x0100) ? 'r' : '-'); + $info .= (($perms & 0x0080) ? 'w' : '-'); + $info .= (($perms & 0x0040) ? + (($perms & 0x0800) ? 's' : 'x') : + (($perms & 0x0800) ? 'S' : '-')); + + // Group + $info .= (($perms & 0x0020) ? 'r' : '-'); + $info .= (($perms & 0x0010) ? 'w' : '-'); + $info .= (($perms & 0x0008) ? + (($perms & 0x0400) ? 's' : 'x') : + (($perms & 0x0400) ? 'S' : '-')); + + // World + $info .= (($perms & 0x0004) ? 'r' : '-'); + $info .= (($perms & 0x0002) ? 'w' : '-'); + $info .= (($perms & 0x0001) ? + (($perms & 0x0200) ? 't' : 'x') : + (($perms & 0x0200) ? 'T' : '-')); + } + + + $ret = '
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          r  w  x  
          '.trans('User').'
          '.trans('Group').'
          '.trans('All').'
          '; + + if ((!$ftp && is_dir($path))) { + $ret .= '
          '.trans('File_Permission_Recursive').'

          +
            +
          • +
          • +
          • +
          • +
          +
          '; + } + + $ret .= '
          '; + + response($ret)->send(); + exit; + + break; + case 'get_lang': + if (! file_exists('lang/languages.php')) { + response(trans('Lang_Not_Found').AddErrorLocation())->send(); + exit; + } + + $languages = include 'lang/languages.php'; + if (! isset($languages) || ! is_array($languages)) { + response(trans('Lang_Not_Found').AddErrorLocation())->send(); + exit; + } + + $curr = $_SESSION['RF']['language']; + + $ret = ''; + + response($ret)->send(); + exit; + + break; + case 'change_lang': + $choosen_lang = (!empty($_POST['choosen_lang']))? $_POST['choosen_lang']:"en_EN"; + + if (array_key_exists($choosen_lang, $languages)) { + if (! file_exists('lang/' . $choosen_lang . '.php')) { + response(trans('Lang_Not_Found').AddErrorLocation())->send(); + exit; + } else { + $_SESSION['RF']['language'] = $choosen_lang; + } + } + + break; + case 'cad_preview': + if ($ftp) { + $selected_file = $config['ftp_base_url'].$config['upload_dir'] . $_GET['file']; + } else { + $selected_file = $config['current_path'] . $_GET['file']; + + if (! file_exists($selected_file)) { + response(trans('File_Not_Found').AddErrorLocation())->send(); + exit; + } + } + if ($ftp) { + $url_file = $selected_file; + } else { + $url_file = $config['base_url'] . $config['upload_dir'] . str_replace($config['current_path'], '', $_GET["file"]); + } + + $cad_url = urlencode($url_file); + $cad_html = ""; + $ret = $cad_html; + response($ret)->send(); + break; + case 'get_file': // preview or edit + $sub_action = $_GET['sub_action']; + $preview_mode = $_GET["preview_mode"]; + + if ($sub_action != 'preview' && $sub_action != 'edit') { + response(trans('wrong action').AddErrorLocation())->send(); + exit; + } + + if ($ftp) { + $selected_file = ($sub_action == 'preview' ? $config['ftp_base_url'].$config['upload_dir'] . $_GET['file'] : $config['ftp_base_url'].$config['upload_dir'] . $_POST['path']); + } else { + $selected_file = ($sub_action == 'preview' ? $config['current_path'] . $_GET['file'] : $config['current_path'] . $_POST['path']); + + if (! file_exists($selected_file)) { + response(trans('File_Not_Found').AddErrorLocation())->send(); + exit; + } + } + + $info = pathinfo($selected_file); + + if ($preview_mode == 'text') { + $is_allowed = ($sub_action == 'preview' ? $config['preview_text_files'] : $config['edit_text_files']); + $allowed_file_exts = ($sub_action == 'preview' ? $config['previewable_text_file_exts'] : $config['editable_text_file_exts']); + } elseif ($preview_mode == 'google') { + $is_allowed = $config['googledoc_enabled']; + $allowed_file_exts = $config['googledoc_file_exts']; + } + + if (! isset($allowed_file_exts) || ! is_array($allowed_file_exts)) { + $allowed_file_exts = array(); + } + + if (!isset($info['extension'])) { + $info['extension']=''; + } + if (! in_array($info['extension'], $allowed_file_exts) + || ! isset($is_allowed) + || $is_allowed === false + || (!$ftp && ! is_readable($selected_file)) + ) { + response(sprintf(trans('File_Open_Edit_Not_Allowed'), ($sub_action == 'preview' ? strtolower(trans('Open')) : strtolower(trans('Edit')))).AddErrorLocation())->send(); + exit; + } + if ($sub_action == 'preview') { + if ($preview_mode == 'text') { + // get and sanities + $data = file_get_contents($selected_file); + $data = htmlspecialchars(htmlspecialchars_decode($data)); + $ret = ''; + + $ret .= ''; + $ret .= '
          '.$data.'
          '; + } elseif ($preview_mode == 'google') { + if ($ftp) { + $url_file = $selected_file; + } else { + $url_file = $config['base_url'] . $config['upload_dir'] . str_replace($config['current_path'], '', $_GET["file"]); + } + + $googledoc_url = urlencode($url_file); + $ret = ""; + } + }else{ + $data = stripslashes(htmlspecialchars(file_get_contents($selected_file))); + if(in_array($info['extension'],array('html','html'))){ + $ret = ''; + }else{ + $ret = ''; + } + + } + + response($ret)->send(); + exit; + + break; + default: + response(trans('no action passed').AddErrorLocation())->send(); + exit; + } +} else { + response(trans('no action passed').AddErrorLocation())->send(); + exit; +} diff --git a/libraries/filemanager-9.14.1/config/.htaccess b/libraries/filemanager-9.14.1/config/.htaccess new file mode 100644 index 0000000..14249c5 --- /dev/null +++ b/libraries/filemanager-9.14.1/config/.htaccess @@ -0,0 +1 @@ +Deny from all \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/config/config.php b/libraries/filemanager-9.14.1/config/config.php new file mode 100644 index 0000000..7e60523 --- /dev/null +++ b/libraries/filemanager-9.14.1/config/config.php @@ -0,0 +1,619 @@ + +| in tinymce a new parameter added: filemanager_access_key:"myPrivateKey" +| example tinymce config: +| +| tiny init ... +| external_filemanager_path:"../filemanager/", +| filemanager_title:"Filemanager" , +| filemanager_access_key:"myPrivateKey" , +| ... +| +*/ + +define('USE_ACCESS_KEYS', false); // TRUE or FALSE + +/* +|-------------------------------------------------------------------------- +| DON'T COPY THIS VARIABLES IN FOLDERS config.php FILES +|-------------------------------------------------------------------------- +*/ + +define('DEBUG_ERROR_MESSAGE', false); // TRUE or FALSE + +/* +|-------------------------------------------------------------------------- +| Path configuration +|-------------------------------------------------------------------------- +| In this configuration the folder tree is +| root +| |- source <- upload folder +| |- thumbs <- thumbnail folder [must have write permission (755)] +| |- filemanager +| |- js +| | |- tinymce +| | | |- plugins +| | | | |- responsivefilemanager +| | | | | |- plugin.min.js +*/ + +$config = array( + + /* + |-------------------------------------------------------------------------- + | DON'T TOUCH (base url (only domain) of site). + |-------------------------------------------------------------------------- + | + | without final / (DON'T TOUCH) + | + */ + 'base_url' => '', + /* + |-------------------------------------------------------------------------- + | path from base_url to base of upload folder + |-------------------------------------------------------------------------- + | + | with start and final / + | + */ + 'upload_dir' => '/upload/filemanager/', + /* + |-------------------------------------------------------------------------- + | relative path from filemanager folder to upload folder + |-------------------------------------------------------------------------- + | + | with final / + | + */ + 'current_path' => '../../upload/filemanager/', + + /* + |-------------------------------------------------------------------------- + | relative path from filemanager folder to thumbs folder + |-------------------------------------------------------------------------- + | + | with final / + | DO NOT put inside upload folder + | + */ + 'thumbs_base_path' => '../../temp/', + + /* + |-------------------------------------------------------------------------- + | path from base_url to base of thumbs folder + |-------------------------------------------------------------------------- + | + | with final / + | DO NOT put inside upload folder + | + */ + 'thumbs_upload_dir' => '/thumbs/', + + + /* + |-------------------------------------------------------------------------- + | mime file control to define files extensions + |-------------------------------------------------------------------------- + | + | If you want to be forced to assign the extension starting from the mime type + | + */ + 'mime_extension_rename' => true, + + + /* + |-------------------------------------------------------------------------- + | FTP configuration BETA VERSION + |-------------------------------------------------------------------------- + | + | If you want enable ftp use write these parametres otherwise leave empty + | Remember to set base_url properly to point in the ftp server domain and + | upload dir will be ftp_base_folder + upload_dir so without final / + | + */ + 'ftp_host' => false, //put the FTP host + 'ftp_user' => "user", + 'ftp_pass' => "pass", + 'ftp_base_folder' => "base_folder", + 'ftp_base_url' => "http://site to ftp root", + // Directory where place files before to send to FTP with final / + 'ftp_temp_folder' => "../temp/", + /* + |--------------------------------------------------------------------------- + | path from ftp_base_folder to base of thumbs folder with start and final / + |--------------------------------------------------------------------------- + */ + 'ftp_thumbs_dir' => '/thumbs/', + 'ftp_ssl' => false, + 'ftp_port' => 21, + + /* EXAMPLE + 'ftp_host' => "host.com", + 'ftp_user' => "test@host.com", + 'ftp_pass' => "pass.1", + 'ftp_base_folder' => "", + 'ftp_base_url' => "http://host.com/testFTP", + */ + + /* + |-------------------------------------------------------------------------- + | Multiple files selection + |-------------------------------------------------------------------------- + | The user can delete multiple files, select all files , deselect all files + */ + 'multiple_selection' => true, + + /* + | + | The user can have a select button that pass a json to external input or pass the first file selected to editor + | If you use responsivefilemanager tinymce extension can copy into editor multiple object like images, videos, audios, links in the same time + | + */ + 'multiple_selection_action_button' => true, + + /* + |-------------------------------------------------------------------------- + | Access keys + |-------------------------------------------------------------------------- + | + | add access keys eg: array('myPrivateKey', 'someoneElseKey'); + | keys should only containt (a-z A-Z 0-9 \ . _ -) characters + | if you are integrating lets say to a cms for admins, i recommend making keys randomized something like this: + | $username = 'Admin'; + | $salt = 'dsflFWR9u2xQa' (a hard coded string) + | $akey = md5($username.$salt); + | DO NOT use 'key' as access key! + | Keys are CASE SENSITIVE! + | + */ + + 'access_keys' => array(), + + //-------------------------------------------------------------------------------------------------------- + // YOU CAN COPY AND CHANGE THESE VARIABLES INTO FOLDERS config.php FILES TO CUSTOMIZE EACH FOLDER OPTIONS + //-------------------------------------------------------------------------------------------------------- + + /* + |-------------------------------------------------------------------------- + | Maximum size of all files in source folder + |-------------------------------------------------------------------------- + | + | in Megabytes + | + */ + 'MaxSizeTotal' => false, + + /* + |-------------------------------------------------------------------------- + | Maximum upload size + |-------------------------------------------------------------------------- + | + | in Megabytes + | + */ + 'MaxSizeUpload' => 1000, + + /* + |-------------------------------------------------------------------------- + | File and Folder permission + |-------------------------------------------------------------------------- + | + */ + 'filePermission' => 0755, + 'folderPermission' => 0777, + + + /* + |-------------------------------------------------------------------------- + | default language file name + |-------------------------------------------------------------------------- + */ + 'default_language' => "pl", + + /* + |-------------------------------------------------------------------------- + | Icon theme + |-------------------------------------------------------------------------- + | + | Default available: ico and ico_dark + | Can be set to custom icon inside filemanager/img + | + */ + 'icon_theme' => "ico", + + + //Show or not total size in filemanager (is possible to greatly increase the calculations) + 'show_total_size' => true, + //Show or not show folder size in list view feature in filemanager (is possible, if there is a large folder, to greatly increase the calculations) + 'show_folder_size' => true, + //Show or not show sorting feature in filemanager + 'show_sorting_bar' => true, + //Show or not show filters button in filemanager + 'show_filter_buttons' => true, + //Show or not language selection feature in filemanager + 'show_language_selection' => true, + //active or deactive the transliteration (mean convert all strange characters in A..Za..z0..9 characters) + 'transliteration' => true, + //convert all spaces on files name and folders name with $replace_with variable + 'convert_spaces' => true, + //convert all spaces on files name and folders name this value + 'replace_with' => "-", + //convert to lowercase the files and folders name + 'lower_case' => false, + + //Add ?484899493349 (time value) to returned images to prevent cache + 'add_time_to_img' => false, + + + //******************************************* + //Images limit and resizing configuration + //******************************************* + + // set maximum pixel width and/or maximum pixel height for all images + // If you set a maximum width or height, oversized images are converted to those limits. Images smaller than the limit(s) are unaffected + // if you don't need a limit set both to 0 + 'image_max_width' => 1920, + 'image_max_height' => 1080, + 'image_max_mode' => 'auto', + /* + # $option: 0 / exact = defined size; + # 1 / portrait = keep aspect set height; + # 2 / landscape = keep aspect set width; + # 3 / auto = auto; + # 4 / crop= resize and crop; + */ + + //Automatic resizing // + // If you set $image_resizing to TRUE the script converts all uploaded images exactly to image_resizing_width x image_resizing_height dimension + // If you set width or height to 0 the script automatically calculates the other dimension + // Is possible that if you upload very big images the script not work to overcome this increase the php configuration of memory and time limit + 'image_resizing' => false, + 'image_resizing_width' => 0, + 'image_resizing_height' => 0, + 'image_resizing_mode' => 'auto', // same as $image_max_mode + 'image_resizing_override' => false, + // If set to TRUE then you can specify bigger images than $image_max_width & height otherwise if image_resizing is + // bigger than $image_max_width or height then it will be converted to those values + + + //****************** + // + // WATERMARK IMAGE + // + //Watermark path or false + 'image_watermark' => false,//"../watermark.png", + # Could be a pre-determined position such as: + # tl = top left, + # t = top (middle), + # tr = top right, + # l = left, + # m = middle, + # r = right, + # bl = bottom left, + # b = bottom (middle), + # br = bottom right + # Or, it could be a co-ordinate position such as: 50x100 + 'image_watermark_position' => 'br', + # padding: If using a pre-determined position you can + # adjust the padding from the edges by passing an amount + # in pixels. If using co-ordinates, this value is ignored. + 'image_watermark_padding' => 10, + + //****************** + // Default layout setting + // + // 0 => boxes + // 1 => detailed list (1 column) + // 2 => columns list (multiple columns depending on the width of the page) + // YOU CAN ALSO PASS THIS PARAMETERS USING SESSION VAR => $_SESSION['RF']["VIEW"]= + // + //****************** + 'default_view' => 0, + + //set if the filename is truncated when overflow first row + 'ellipsis_title_after_first_row' => true, + + //************************* + //Permissions configuration + //****************** + 'delete_files' => true, + 'create_folders' => true, + 'delete_folders' => true, + 'upload_files' => true, + 'rename_files' => true, + 'rename_folders' => true, + 'duplicate_files' => true, + 'extract_files' => true, + 'copy_cut_files' => true, // for copy/cut files + 'copy_cut_dirs' => true, // for copy/cut directories + 'chmod_files' => true, // change file permissions + 'chmod_dirs' => true, // change folder permissions + 'preview_text_files' => true, // eg.: txt, log etc. + 'edit_text_files' => true, // eg.: txt, log etc. + 'create_text_files' => true, // only create files with exts. defined in $config['editable_text_file_exts'] + 'download_files' => true, // allow download files or just preview + + // you can preview these type of files if $preview_text_files is true + 'previewable_text_file_exts' => array( "bsh", "c","css", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html", "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh", "xhtml", "xml","xsl",'txt', 'log','' ), + + // you can edit these type of files if $edit_text_files is true (only text based files) + // you can create these type of files if $config['create_text_files'] is true (only text based files) + // if you want you can add html,css etc. + // but for security reasons it's NOT RECOMMENDED! + 'editable_text_file_exts' => array( 'txt', 'log', 'xml', 'html', 'css', 'htm', 'js','' ), + + 'jplayer_exts' => array("mp4","flv","webmv","webma","webm","m4a","m4v","ogv","oga","mp3","midi","mid","ogg","wav"), + + 'cad_exts' => array('dwg', 'dxf', 'hpgl', 'plt', 'spl', 'step', 'stp', 'iges', 'igs', 'sat', 'cgm', 'svg'), + + // Preview with Google Documents + 'googledoc_enabled' => true, + 'googledoc_file_exts' => array( 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' , 'pdf', 'odt', 'odp', 'ods'), + + // defines size limit for paste in MB / operation + // set 'FALSE' for no limit + 'copy_cut_max_size' => 100, + // defines file count limit for paste / operation + // set 'FALSE' for no limit + 'copy_cut_max_count' => 200, + //IF any of these limits reached, operation won't start and generate warning + + //********************** + //Allowed extensions (lowercase insert) + //********************** + 'ext_img' => array( 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'ico', 'webp' ), //Images + 'ext_file' => array( 'doc', 'docx', 'rtf', 'pdf', 'xls', 'xlsx', 'txt', 'csv', 'html', 'xhtml', 'psd', 'sql', 'log', 'fla', 'xml', 'ade', 'adp', 'mdb', 'accdb', 'ppt', 'pptx', 'odt', 'ots', 'ott', 'odb', 'odg', 'otp', 'otg', 'odf', 'ods', 'odp', 'css', 'ai', 'kmz','dwg', 'dxf', 'hpgl', 'plt', 'spl', 'step', 'stp', 'iges', 'igs', 'sat', 'cgm', 'tiff',''), //Files + 'ext_video' => array( 'mov', 'mpeg', 'm4v', 'mp4', 'avi', 'mpg', 'wma', "flv", "webm" ), //Video + 'ext_music' => array( 'mp3', 'mpga', 'm4a', 'ac3', 'aiff', 'mid', 'ogg', 'wav' ), //Audio + 'ext_misc' => array( 'zip', 'rar', 'gz', 'tar', 'iso', 'dmg' ), //Archives + + + //********************* + // If you insert an extensions blacklist array the filemanager don't check any extensions but simply block the extensions in the list + // otherwise check Allowed extensions configuration + //********************* + 'ext_blacklist' => false,//['exe','bat','jpg'], + + + //Empty filename permits like .htaccess, .env, ... + 'empty_filename' => false, + + /* + |-------------------------------------------------------------------------- + | accept files without extension + |-------------------------------------------------------------------------- + | + | If you want to accept files without extension, remember to add '' extension on allowed extension + | + */ + 'files_without_extension' => false, + + /****************** + * TUI Image Editor config + *******************/ + // Add or modify the options below as needed - they will be json encoded when added to the configuration so arrays can be utilized as needed + 'tui_active' => true, + 'tui_position' => 'bottom', + // 'common.bi.image' => "../assets/images/logo.png", + // 'common.bisize.width' => '70px', + // 'common.bisize.height' => '25px', + 'common.backgroundImage' => 'none', + 'common.backgroundColor' => '#ececec', + 'common.border' => '1px solid #E6E7E8', + + // header + 'header.backgroundImage' => 'none', + 'header.backgroundColor' => '#ececec', + 'header.border' => '0px', + + // main icons + 'menu.normalIcon.path' => 'svg/icon-d.svg', + 'menu.normalIcon.name' => 'icon-d', + 'menu.activeIcon.path' => 'svg/icon-b.svg', + 'menu.activeIcon.name' => 'icon-b', + 'menu.disabledIcon.path' => 'svg/icon-a.svg', + 'menu.disabledIcon.name' => 'icon-a', + 'menu.hoverIcon.path' => 'svg/icon-c.svg', + 'menu.hoverIcon.name' => 'icon-c', + 'menu.iconSize.width' => '24px', + 'menu.iconSize.height' => '24px', + + // submenu primary color + 'submenu.backgroundColor' => '#ececec', + 'submenu.partition.color' => '#000000', + + // submenu icons + 'submenu.normalIcon.path' => 'svg/icon-d.svg', + 'submenu.normalIcon.name' => 'icon-d', + 'submenu.activeIcon.path' => 'svg/icon-b.svg', + 'submenu.activeIcon.name' => 'icon-b', + 'submenu.iconSize.width' => '32px', + 'submenu.iconSize.height' => '32px', + + // submenu labels + 'submenu.normalLabel.color' => '#000', + 'submenu.normalLabel.fontWeight' => 'normal', + 'submenu.activeLabel.color' => '#000', + 'submenu.activeLabel.fontWeight' => 'normal', + + // checkbox style + 'checkbox.border' => '1px solid #E6E7E8', + 'checkbox.backgroundColor' => '#000', + + // rango style + 'range.pointer.color' => '#333', + 'range.bar.color' => '#ccc', + 'range.subbar.color' => '#606060', + + 'range.disabledPointer.color' => '#d3d3d3', + 'range.disabledBar.color' => 'rgba(85,85,85,0.06)', + 'range.disabledSubbar.color' => 'rgba(51,51,51,0.2)', + + 'range.value.color' => '#000', + 'range.value.fontWeight' => 'normal', + 'range.value.fontSize' => '11px', + 'range.value.border' => '0', + 'range.value.backgroundColor' => '#f5f5f5', + 'range.title.color' => '#000', + 'range.title.fontWeight' => 'lighter', + + // colorpicker style + 'colorpicker.button.border' => '0px', + 'colorpicker.title.color' => '#000', + + + //The filter and sorter are managed through both javascript and php scripts because if you have a lot of + //file in a folder the javascript script can't sort all or filter all, so the filemanager switch to php script. + //The plugin automatic swich javascript to php when the current folder exceeds the below limit of files number + 'file_number_limit_js' => 500, + + //********************** + // Hidden files and folders + //********************** + // set the names of any folders you want hidden (eg "hidden_folder1", "hidden_folder2" ) Remember all folders with these names will be hidden (you can set any exceptions in config.php files on folders) + 'hidden_folders' => array(), + // set the names of any files you want hidden. Remember these names will be hidden in all folders (eg "this_document.pdf", "that_image.jpg" ) + 'hidden_files' => array( 'config.php' ), + + /******************* + * URL upload + *******************/ + 'url_upload' => true, + + + //************************************ + //Thumbnail for external use creation + //************************************ + + + // New image resized creation with fixed path from filemanager folder after uploading (thumbnails in fixed mode) + // If you want create images resized out of upload folder for use with external script you can choose this method, + // You can create also more than one image at a time just simply add a value in the array + // Remember than the image creation respect the folder hierarchy so if you are inside source/test/test1/ the new image will create at + // path_from_filemanager/test/test1/ + // PS if there isn't write permission in your destination folder you must set it + // + 'fixed_image_creation' => false, //activate or not the creation of one or more image resized with fixed path from filemanager folder + 'fixed_path_from_filemanager' => array( '../test/', '../test1/' ), //fixed path of the image folder from the current position on upload folder + 'fixed_image_creation_name_to_prepend' => array( '', 'test_' ), //name to prepend on filename + 'fixed_image_creation_to_append' => array( '_test', '' ), //name to appendon filename + 'fixed_image_creation_width' => array( 300, 400 ), //width of image + 'fixed_image_creation_height' => array( 200, 300 ), //height of image + /* + # $option: 0 / exact = defined size; + # 1 / portrait = keep aspect set height; + # 2 / landscape = keep aspect set width; + # 3 / auto = auto; + # 4 / crop= resize and crop; + */ + 'fixed_image_creation_option' => array( 'crop', 'auto' ), //set the type of the crop + + + // New image resized creation with relative path inside to upload folder after uploading (thumbnails in relative mode) + // With Responsive filemanager you can create automatically resized image inside the upload folder, also more than one at a time + // just simply add a value in the array + // The image creation path is always relative so if i'm inside source/test/test1 and I upload an image, the path start from here + // + 'relative_image_creation' => false, //activate or not the creation of one or more image resized with relative path from upload folder + 'relative_path_from_current_pos' => array( './', './' ), //relative path of the image folder from the current position on upload folder + 'relative_image_creation_name_to_prepend' => array( '', '' ), //name to prepend on filename + 'relative_image_creation_name_to_append' => array( '_thumb', '_thumb1' ), //name to append on filename + 'relative_image_creation_width' => array( 300, 400 ), //width of image + 'relative_image_creation_height' => array( 200, 300 ), //height of image + /* + * $option: 0 / exact = defined size; + * 1 / portrait = keep aspect set height; + * 2 / landscape = keep aspect set width; + * 3 / auto = auto; + * 4 / crop= resize and crop; + */ + 'relative_image_creation_option' => array( 'crop', 'crop' ), //set the type of the crop + + + // Remember text filter after close filemanager for future session + 'remember_text_filter' => false, + +); + +return array_merge( + $config, + array( + 'ext' => array_merge( + $config['ext_img'], + $config['ext_file'], + $config['ext_misc'], + $config['ext_video'], + $config['ext_music'] + ), + 'tui_defaults_config' => array( + //'common.bi.image' => $config['common.bi.image'], + //'common.bisize.width' => $config['common.bisize.width'], + //'common.bisize.height' => $config['common.bisize.height'], + 'common.backgroundImage' => $config['common.backgroundImage'], + 'common.backgroundColor' => $config['common.backgroundColor'], + 'common.border' => $config['common.border'], + 'header.backgroundImage' => $config['header.backgroundImage'], + 'header.backgroundColor' => $config['header.backgroundColor'], + 'header.border' => $config['header.border'], + 'menu.normalIcon.path' => $config['menu.normalIcon.path'], + 'menu.normalIcon.name' => $config['menu.normalIcon.name'], + 'menu.activeIcon.path' => $config['menu.activeIcon.path'], + 'menu.activeIcon.name' => $config['menu.activeIcon.name'], + 'menu.disabledIcon.path' => $config['menu.disabledIcon.path'], + 'menu.disabledIcon.name' => $config['menu.disabledIcon.name'], + 'menu.hoverIcon.path' => $config['menu.hoverIcon.path'], + 'menu.hoverIcon.name' => $config['menu.hoverIcon.name'], + 'menu.iconSize.width' => $config['menu.iconSize.width'], + 'menu.iconSize.height' => $config['menu.iconSize.height'], + 'submenu.backgroundColor' => $config['submenu.backgroundColor'], + 'submenu.partition.color' => $config['submenu.partition.color'], + 'submenu.normalIcon.path' => $config['submenu.normalIcon.path'], + 'submenu.normalIcon.name' => $config['submenu.normalIcon.name'], + 'submenu.activeIcon.path' => $config['submenu.activeIcon.path'], + 'submenu.activeIcon.name' => $config['submenu.activeIcon.name'], + 'submenu.iconSize.width' => $config['submenu.iconSize.width'], + 'submenu.iconSize.height' => $config['submenu.iconSize.height'], + 'submenu.normalLabel.color' => $config['submenu.normalLabel.color'], + 'submenu.normalLabel.fontWeight' => $config['submenu.normalLabel.fontWeight'], + 'submenu.activeLabel.color' => $config['submenu.activeLabel.color'], + //'submenu.activeLabel.fontWeight' => $config['submenu.activeLabel.fontWeightcommon.bi.image'], + 'checkbox.border' => $config['checkbox.border'], + 'checkbox.backgroundColor' => $config['checkbox.backgroundColor'], + 'range.pointer.color' => $config['range.pointer.color'], + 'range.bar.color' => $config['range.bar.color'], + 'range.subbar.color' => $config['range.subbar.color'], + 'range.disabledPointer.color' => $config['range.disabledPointer.color'], + 'range.disabledBar.color' => $config['range.disabledBar.color'], + 'range.disabledSubbar.color' => $config['range.disabledSubbar.color'], + 'range.value.color' => $config['range.value.color'], + 'range.value.fontWeight' => $config['range.value.fontWeight'], + 'range.value.fontSize' => $config['range.value.fontSize'], + 'range.value.border' => $config['range.value.border'], + 'range.value.backgroundColor' => $config['range.value.backgroundColor'], + 'range.title.color' => $config['range.title.color'], + 'range.title.fontWeight' => $config['range.title.fontWeight'], + 'colorpicker.button.border' => $config['colorpicker.button.border'], + 'colorpicker.title.color' => $config['colorpicker.title.color'] + ), + ) +); diff --git a/libraries/filemanager-9.14.1/css/jquery.fileupload-noscript.css b/libraries/filemanager-9.14.1/css/jquery.fileupload-noscript.css new file mode 100644 index 0000000..2409bfb --- /dev/null +++ b/libraries/filemanager-9.14.1/css/jquery.fileupload-noscript.css @@ -0,0 +1,22 @@ +@charset "UTF-8"; +/* + * jQuery File Upload Plugin NoScript CSS + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +.fileinput-button input { + position: static; + opacity: 1; + filter: none; + font-size: inherit !important; + direction: inherit; +} +.fileinput-button span { + display: none; +} diff --git a/libraries/filemanager-9.14.1/css/jquery.fileupload-ui-noscript.css b/libraries/filemanager-9.14.1/css/jquery.fileupload-ui-noscript.css new file mode 100644 index 0000000..30651ac --- /dev/null +++ b/libraries/filemanager-9.14.1/css/jquery.fileupload-ui-noscript.css @@ -0,0 +1,17 @@ +@charset "UTF-8"; +/* + * jQuery File Upload UI Plugin NoScript CSS + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +.fileinput-button i, +.fileupload-buttonbar .delete, +.fileupload-buttonbar .toggle { + display: none; +} diff --git a/libraries/filemanager-9.14.1/css/jquery.fileupload-ui.css b/libraries/filemanager-9.14.1/css/jquery.fileupload-ui.css new file mode 100644 index 0000000..5bb9e42 --- /dev/null +++ b/libraries/filemanager-9.14.1/css/jquery.fileupload-ui.css @@ -0,0 +1,53 @@ +@charset "UTF-8"; +/* + * jQuery File Upload UI Plugin CSS + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +.fileupload-buttonbar .btn, +.fileupload-buttonbar .toggle { + margin-bottom: 5px; +} + +.fileupload-process { + float: right; + display: none; +} +.fileupload-processing .fileupload-process, +.files .processing .preview { + display: block; + width: 32px; + height: 32px; + background: url("../img/loading.gif") center no-repeat; + background-size: contain; +} +.files audio, +.files video { + max-width: 300px; +} + +@media (max-width: 767px) { + .fileupload-buttonbar .toggle, + .files .toggle, + .files .btn span { + display: none; + } + .files .name { + width: 80px; + word-wrap: break-word; + } + .files audio, + .files video { + max-width: 80px; + } + .files img, + .files canvas { + max-width: 100%; + } +} diff --git a/libraries/filemanager-9.14.1/css/jquery.fileupload.css b/libraries/filemanager-9.14.1/css/jquery.fileupload.css new file mode 100644 index 0000000..8ae3b09 --- /dev/null +++ b/libraries/filemanager-9.14.1/css/jquery.fileupload.css @@ -0,0 +1,37 @@ +@charset "UTF-8"; +/* + * jQuery File Upload Plugin CSS + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +.fileinput-button { + position: relative; + overflow: hidden; + display: inline-block; +} +.fileinput-button input { + position: absolute; + top: 0; + right: 0; + margin: 0; + opacity: 0; + -ms-filter: 'alpha(opacity=0)'; + font-size: 200px !important; + direction: ltr; + cursor: pointer; +} + +/* Fixes for IE < 8 */ +@media screen\9 { + .fileinput-button input { + filter: alpha(opacity=0); + font-size: 100%; + height: 100%; + } +} diff --git a/libraries/filemanager-9.14.1/css/rtl-style.css b/libraries/filemanager-9.14.1/css/rtl-style.css new file mode 100644 index 0000000..eb67f80 Binary files /dev/null and b/libraries/filemanager-9.14.1/css/rtl-style.css differ diff --git a/libraries/filemanager-9.14.1/css/style.css b/libraries/filemanager-9.14.1/css/style.css new file mode 100644 index 0000000..64d6512 --- /dev/null +++ b/libraries/filemanager-9.14.1/css/style.css @@ -0,0 +1,35 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:active,a:hover{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button,input[type=button],input[type=checkbox],input[type=radio],input[type=reset],input[type=submit],label,select{cursor:pointer}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:focus,a:hover{color:#005580;text-decoration:underline}.img-rounded{border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.1)}.img-circle{border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:after,.row:before{display:table;line-height:0;content:""}.row:after{clear:both}[class*=span]{float:left;min-height:1px;margin-left:20px}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container,.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:after,.row-fluid:before{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;box-sizing:border-box}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .controls-row [class*=span]+[class*=span]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}.row-fluid [class*=span].hide,[class*=span].hide{display:none}.row-fluid [class*=span].pull-right,[class*=span].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:after,.container:before{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:after,.container-fluid:before{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:700}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:focus,a.muted:hover{color:gray}.text-warning{color:#c09853}a.text-warning:focus,a.text-warning:hover{color:#a47e3c}.text-error{color:#b94a48}a.text-error:focus,a.text-error:hover{color:#953b39}.text-info{color:#3a87ad}a.text-info:focus,a.text-info:hover{color:#2d6987}.text-success{color:#468847}a.text-success:focus,a.text-success:hover{color:#356635}.text-left{text-align:left}.text-right{text-align:right}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:700;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small,h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ol,ul{padding:0;margin:0 0 10px 25px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}li{line-height:20px}ol.inline,ol.unstyled,ul.inline,ul.unstyled{margin-left:0;list-style:none}ol.inline>li,ul.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dd,dt{line-height:20px}dt{font-weight:700}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:after,.dl-horizontal:before{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:"\2014 \00A0"}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:""}blockquote.pull-right small:after{content:"\00A0 \2014"}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,Courier New,monospace;font-size:12px;color:#333;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{margin:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}button,input,label,select,textarea{font-size:14px;font-weight:400;line-height:20px}button,input,select,textarea{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;border-radius:4px}.uneditable-input,input,textarea{width:206px}textarea{height:auto}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border .2s linear,box-shadow .2s linear}.uneditable-input:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,textarea:focus{border-color:rgba(82,168,236,.8);outline:0;outline:thin dotted\9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;*margin-top:0;line-height:normal}input[type=button],input[type=checkbox],input[type=file],input[type=image],input[type=radio],input[type=reset],input[type=submit]{width:auto}input[type=file],select{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;box-shadow:inset 0 1px 2px rgba(0,0,0,.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.checkbox,.radio{min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.radio input[type=radio]{float:left;margin-left:-20px}.controls>.checkbox:first-child,.controls>.radio:first-child{padding-top:5px}.checkbox.inline,.radio.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.checkbox.inline+.checkbox.inline,.radio.inline+.radio.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.uneditable-input[class*=span],input[class*=span],select[class*=span],textarea[class*=span]{float:none;margin-left:0}.input-append .uneditable-input[class*=span],.input-append input[class*=span],.input-prepend .uneditable-input[class*=span],.input-prepend input[class*=span],.row-fluid .input-append [class*=span],.row-fluid .input-prepend [class*=span],.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span]{display:inline-block}.uneditable-input,input,textarea{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}.uneditable-input.span12,input.span12,textarea.span12{width:926px}.uneditable-input.span11,input.span11,textarea.span11{width:846px}.uneditable-input.span10,input.span10,textarea.span10{width:766px}.uneditable-input.span9,input.span9,textarea.span9{width:686px}.uneditable-input.span8,input.span8,textarea.span8{width:606px}.uneditable-input.span7,input.span7,textarea.span7{width:526px}.uneditable-input.span6,input.span6,textarea.span6{width:446px}.uneditable-input.span5,input.span5,textarea.span5{width:366px}.uneditable-input.span4,input.span4,textarea.span4{width:286px}.uneditable-input.span3,input.span3,textarea.span3{width:206px}.uneditable-input.span2,input.span2,textarea.span2{width:126px}.uneditable-input.span1,input.span1,textarea.span1{width:46px}.controls-row{*zoom:1}.controls-row:after,.controls-row:before{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*=span],.row-fluid .controls-row [class*=span]{float:left}.controls-row .checkbox[class*=span],.controls-row .radio[class*=span]{padding-top:5px}input[disabled],input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.control-group.warning .checkbox,.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}.control-group.warning .input-append .add-on,.control-group.warning .input-prepend .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .checkbox,.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.control-group.error .input-append .add-on,.control-group.error .input-prepend .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .checkbox,.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}.control-group.success .input-append .add-on,.control-group.success .input-prepend .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .checkbox,.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7ab5d3}.control-group.info .input-append .add-on,.control-group.info .input-prepend .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e9322d;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:after,.form-actions:before{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append .dropdown-menu,.input-append .popover,.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .dropdown-menu,.input-prepend .popover,.input-prepend .uneditable-input,.input-prepend input,.input-prepend select{font-size:14px}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .uneditable-input,.input-prepend input,.input-prepend select{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;border-radius:0 4px 4px 0}.input-append .uneditable-input:focus,.input-append input:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-prepend input:focus,.input-prepend select:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-append .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .add-on,.input-prepend .btn,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:4px 0 0 4px}.input-append .uneditable-input+.btn-group .btn:last-child,.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child{border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn-group:last-child>.dropdown-toggle,.input-append .btn:last-child{border-radius:0 4px 4px 0}.input-prepend.input-append .uneditable-input,.input-prepend.input-append input,.input-prepend.input-append select{border-radius:0}.input-prepend.input-append .uneditable-input+.btn-group .btn,.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn{border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px\9;padding-left:14px;padding-left:4px\9;margin-bottom:0;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0}.form-search .input-append .search-query{border-radius:14px 0 0 14px}.form-search .input-append .btn,.form-search .input-prepend .search-query{border-radius:0 14px 14px 0}.form-search .input-prepend .btn{border-radius:14px 0 0 14px}.form-horizontal .help-inline,.form-horizontal .input-append,.form-horizontal .input-prepend,.form-horizontal .uneditable-input,.form-horizontal input,.form-horizontal select,.form-horizontal textarea,.form-inline .help-inline,.form-inline .input-append,.form-inline .input-prepend,.form-inline .uneditable-input,.form-inline input,.form-inline select,.form-inline textarea,.form-search .help-inline,.form-search .input-append,.form-search .input-prepend,.form-search .uneditable-input,.form-search input,.form-search select,.form-search textarea{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-horizontal .hide,.form-inline .hide,.form-search .hide{display:none}.form-inline .btn-group,.form-inline label,.form-search .btn-group,.form-search label{display:inline-block}.form-inline .input-append,.form-inline .input-prepend,.form-search .input-append,.form-search .input-prepend{margin-bottom:0}.form-inline .checkbox,.form-inline .radio,.form-search .checkbox,.form-search .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.form-search .checkbox input[type=checkbox],.form-search .radio input[type=radio]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:after,.form-horizontal .control-group:before{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal .input-append+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:700}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child td,.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child td,.table thead:first-child tr:first-child th{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed td,.table-condensed th{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;border-radius:4px}.table-bordered td,.table-bordered th{border-left:1px solid #ddd}.table-bordered caption+tbody tr:first-child td,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+thead tr:first-child th,.table-bordered tbody:first-child tr:first-child td,.table-bordered tbody:first-child tr:first-child th,.table-bordered thead:first-child tr:first-child th{border-top:0}.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child,.table-bordered thead:first-child tr:first-child>th:first-child{border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child,.table-bordered thead:first-child tr:first-child>th:last-child{border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child,.table-bordered thead:last-child tr:last-child>th:first-child{border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child,.table-bordered thead:last-child tr:last-child>th:last-child{border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered caption+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child{border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered caption+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child{border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}.row-fluid table td[class*=span],.row-fluid table th[class*=span],table td[class*=span],table th[class*=span]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class*=" icon-"],[class^=icon-]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat}.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-menu>.active>a>[class^=icon-],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>li>a:focus>[class^=icon-],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^=icon-],.dropdown-submenu:focus>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class^=icon-],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^=icon-],.icon-white,.nav-list>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^=icon-],.nav-pills>.active>a>[class*=" icon-"],.nav-pills>.active>a>[class^=icon-],.navbar-inverse .nav>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^=icon-]{background-image:url(../img/glyphicons-halflings-white.png)}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropdown,.dropup{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:linear-gradient(180deg,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff0088cc",endColorstr="#ff0077b3",GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-large{padding:24px;border-radius:6px}.well-small{padding:9px;border-radius:3px}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:700;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px hsla(0,0%,100%,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:linear-gradient(180deg,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffffff",endColorstr="#ffe6e6e6",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn.active,.btn:active{background-color:#ccc\9}.btn:first-child{*margin-left:0}.btn:focus,.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;border-radius:6px}.btn-large [class*=" icon-"],.btn-large [class^=icon-]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;border-radius:3px}.btn-small [class*=" icon-"],.btn-small [class^=icon-]{margin-top:0}.btn-mini [class*=" icon-"],.btn-mini [class^=icon-]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-danger.active,.btn-info.active,.btn-inverse.active,.btn-primary.active,.btn-success.active,.btn-warning.active{color:hsla(0,0%,100%,.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;*background-color:#04c;background-image:linear-gradient(180deg,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff0088cc",endColorstr="#ff0044cc",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary.active,.btn-primary:active{background-color:#039\9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;*background-color:#f89406;background-image:linear-gradient(180deg,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffbb450",endColorstr="#fff89406",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning.active,.btn-warning:active{background-color:#c67605\9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;*background-color:#bd362f;background-image:linear-gradient(180deg,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffee5f5b",endColorstr="#ffbd362f",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger.active,.btn-danger:active{background-color:#942a25\9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;*background-color:#51a351;background-image:linear-gradient(180deg,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff62c462",endColorstr="#ff51a351",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:focus,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success.active,.btn-success:active{background-color:#408140\9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;*background-color:#2f96b4;background-image:linear-gradient(180deg,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff5bc0de",endColorstr="#ff2f96b4",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:focus,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info.active,.btn-info:active{background-color:#24748c\9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;*background-color:#222;background-image:linear-gradient(180deg,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff444444",endColorstr="#ff222222",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse.active,.btn-inverse:active{background-color:#080808\9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;border-radius:0}.btn-link:focus,.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn{margin-left:5px}.btn-group>.btn{position:relative;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{border-top-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;border-bottom-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{border-top-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding:5px 8px;box-shadow:inset 1px 0 0 hsla(0,0%,100%,.125),inset 0 1px 0 hsla(0,0%,100%,.2),0 1px 2px rgba(0,0,0,.05)}.btn-group>.btn-mini+.dropdown-toggle{padding:2px 5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding:7px 12px}.btn-group.open .dropdown-toggle{background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px;border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-danger .caret,.btn-info .caret,.btn-inverse .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{border-radius:0 0 6px 6px}.alert{margin-bottom:20px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{background-color:#d9edf7;border-color:#bce8f1}.alert-info,.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:700;line-height:20px;color:#999;text-shadow:0 1px 0 hsla(0,0%,100%,.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list .nav-header,.nav-list>li>a{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:focus,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.2);background-color:#08c}.nav-list [class*=" icon-"],.nav-list [class^=icon-]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-pills,.nav-tabs{*zoom:1}.nav-pills:after,.nav-pills:before,.nav-tabs:after,.nav-tabs:before{display:table;line-height:0;content:""}.nav-pills:after,.nav-tabs:after{clear:both}.nav-pills>li,.nav-tabs>li{float:left}.nav-pills>li>a,.nav-tabs>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:focus,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:focus,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{border-top-right-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:focus,.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:focus .caret,.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:focus,.nav>.dropdown.active>a:hover{cursor:pointer}.nav-pills .open .dropdown-toggle,.nav-tabs .open .dropdown-toggle,.nav>li.dropdown.open.active>a:focus,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open.active .caret,.nav li.dropdown.open .caret,.nav li.dropdown.open a:focus .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:focus,.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:after,.tabbable:before{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.pill-content>.pill-pane,.tab-content>.tab-pane{display:none}.pill-content>.active,.tab-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:focus,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:focus,.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:focus,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:focus,.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:focus,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:focus,.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:linear-gradient(180deg,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffffff",endColorstr="#fff2f2f2",GradientType=0);*zoom:1;box-shadow:0 1px 4px rgba(0,0,0,.065)}.navbar-inner:after,.navbar-inner:before{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:focus,.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:focus,.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-append .btn,.navbar .input-append .btn-group,.navbar .input-prepend .btn,.navbar .input-prepend .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:after,.navbar-form:before{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form .checkbox,.navbar-form .radio,.navbar-form input,.navbar-form select{margin-top:5px}.navbar-form .btn,.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type=checkbox],.navbar-form input[type=image],.navbar-form input[type=radio]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;line-height:1;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner{padding-right:0;padding-left:0;border-radius:0}.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:focus,.navbar .nav>.active>a:hover{color:#555;text-decoration:none;background-color:#e5e5e5;box-shadow:inset 0 3px 8px rgba(0,0,0,.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#ededed;*background-color:#e5e5e5;background-image:linear-gradient(180deg,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fff2f2f2",endColorstr="#ffe5e5e5",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.075)}.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar:active,.navbar .btn-navbar:focus,.navbar .btn-navbar:hover,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar.active,.navbar .btn-navbar:active{background-color:#ccc\9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;border-radius:1px;box-shadow:0 1px 0 rgba(0,0,0,.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2);content:""}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:""}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:focus .caret,.navbar .nav li.dropdown>a:hover .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle,.navbar .nav li.dropdown.open>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav>li>.dropdown-menu.pull-right,.navbar .pull-right>li>.dropdown-menu{right:0;left:auto}.navbar .nav>li>.dropdown-menu.pull-right:before,.navbar .pull-right>li>.dropdown-menu:before{right:12px;left:auto}.navbar .nav>li>.dropdown-menu.pull-right:after,.navbar .pull-right>li>.dropdown-menu:after{right:13px;left:auto}.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu,.navbar .pull-right>li>.dropdown-menu .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:linear-gradient(180deg,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff222222",endColorstr="#ff111111",GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-inverse .brand:focus,.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .brand,.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:focus,.navbar-inverse .nav .active>a:hover{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:focus,.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:focus .caret,.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 hsla(0,0%,100%,.15);transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query.focused,.navbar-inverse .navbar-search .search-query:focus{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e0e0e;*background-color:#040404;background-image:linear-gradient(180deg,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff151515",endColorstr="#ff040404",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar:active{background-color:#000\9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;border-radius:4px;*zoom:1;box-shadow:0 1px 2px rgba(0,0,0,.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>.active>a,.pagination ul>.active>span,.pagination ul>li>a:focus,.pagination ul>li>a:hover{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>a,.pagination ul>.disabled>a:focus,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>a,.pagination-small ul>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>a,.pagination-small ul>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:after,.pager:before{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);*border:1px solid #999;border-radius:6px;outline:none;box-shadow:0 3px 7px rgba(0,0,0,.3);background-clip:padding-box}.modal.fade{top:-25%;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-footer,.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;border-radius:0 0 6px 6px;*zoom:1;box-shadow:inset 0 1px 0 #fff}.modal-footer:after,.modal-footer:before{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:after,.thumbnails:before{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.055);transition:all .2s ease-in-out}a.thumbnail:focus,a.thumbnail:hover{border-color:#08c;box-shadow:0 1px 4px rgba(0,105,214,.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.badge,.label{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:700;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{border-radius:3px}.badge{padding-right:9px;padding-left:9px;border-radius:9px}.badge:empty,.label:empty{display:none}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.badge-important,.label-important{background-color:#b94a48}.badge-important[href],.label-important[href]{background-color:#953b39}.badge-warning,.label-warning{background-color:#f89406}.badge-warning[href],.label-warning[href]{background-color:#c67605}.badge-success,.label-success{background-color:#468847}.badge-success[href],.label-success[href]{background-color:#356635}.badge-info,.label-info{background-color:#3a87ad}.badge-info[href],.label-info[href]{background-color:#2d6987}.badge-inverse,.label-inverse{background-color:#333}.badge-inverse[href],.label-inverse[href]{background-color:#1a1a1a}.btn .badge,.btn .label{position:relative;top:-1px}.btn-mini .badge,.btn-mini .label{top:0}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:linear-gradient(180deg,#f5f5f5,#f9f9f9);border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fff5f5f5",endColorstr="#fff9f9f9",GradientType=0);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress,.progress .bar{background-repeat:repeat-x}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:linear-gradient(180deg,#149bdf,#0480be);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff149bdf",endColorstr="#ff0480be",GradientType=0);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-sizing:border-box;transition:width .6s ease}.progress .bar+.bar{box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:40px 40px}.progress.active .bar{animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:linear-gradient(180deg,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffee5f5b",endColorstr="#ffc43c35",GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:linear-gradient(180deg,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff62c462",endColorstr="#ff57a957",GradientType=0)}.progress-striped .bar-success,.progress-success.progress-striped .bar{background-color:#62c462;background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:linear-gradient(180deg,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff5bc0de",endColorstr="#ff339bb9",GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:linear-gradient(180deg,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffbb450",endColorstr="#fff89406",GradientType=0)}.progress-striped .bar-warning,.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:left .6s ease-in-out}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:hsla(0,0%,100%,.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} + +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.hidden-desktop,.visible-phone,.visible-tablet{display:none!important}.visible-desktop{display:inherit!important}@media (min-width:768px) and (max-width:839px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media (max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:after,.row:before{display:table;line-height:0;content:""}.row:after{clear:both}[class*=span]{float:left;min-height:1px;margin-left:30px}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container,.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:after,.row-fluid:before{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;box-sizing:border-box}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .controls-row [class*=span]+[class*=span]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}.uneditable-input,input,textarea{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:30px}.uneditable-input.span12,input.span12,textarea.span12{width:1156px}.uneditable-input.span11,input.span11,textarea.span11{width:1056px}.uneditable-input.span10,input.span10,textarea.span10{width:956px}.uneditable-input.span9,input.span9,textarea.span9{width:856px}.uneditable-input.span8,input.span8,textarea.span8{width:756px}.uneditable-input.span7,input.span7,textarea.span7{width:656px}.uneditable-input.span6,input.span6,textarea.span6{width:556px}.uneditable-input.span5,input.span5,textarea.span5{width:456px}.uneditable-input.span4,input.span4,textarea.span4{width:356px}.uneditable-input.span3,input.span3,textarea.span3{width:256px}.uneditable-input.span2,input.span2,textarea.span2{width:156px}.uneditable-input.span1,input.span1,textarea.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media (min-width:768px) and (max-width:839px){.row{margin-left:-20px;*zoom:1}.row:after,.row:before{display:table;line-height:0;content:""}.row:after{clear:both}[class*=span]{float:left;min-height:1px;margin-left:20px}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container,.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:after,.row-fluid:before{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;box-sizing:border-box}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .controls-row [class*=span]+[class*=span]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}.uneditable-input,input,textarea{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}.uneditable-input.span12,input.span12,textarea.span12{width:710px}.uneditable-input.span11,input.span11,textarea.span11{width:648px}.uneditable-input.span10,input.span10,textarea.span10{width:586px}.uneditable-input.span9,input.span9,textarea.span9{width:524px}.uneditable-input.span8,input.span8,textarea.span8{width:462px}.uneditable-input.span7,input.span7,textarea.span7{width:400px}.uneditable-input.span6,input.span6,textarea.span6{width:338px}.uneditable-input.span5,input.span5,textarea.span5{width:276px}.uneditable-input.span4,input.span4,textarea.span4{width:214px}.uneditable-input.span3,input.span3,textarea.span3{width:152px}.uneditable-input.span2,input.span2,textarea.span2{width:90px}.uneditable-input.span1,input.span1,textarea.span1{width:28px}}@media (max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}.row-fluid [class*=span],.uneditable-input[class*=span],[class*=span]{display:block;float:none;width:100%;margin-left:0;box-sizing:border-box}.row-fluid .span12,.span12{width:100%;box-sizing:border-box}.row-fluid [class*=offset]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,.uneditable-input,input[class*=span],select[class*=span],textarea[class*=span]{display:block;width:100%;min-height:30px;box-sizing:border-box}.input-append input,.input-append input[class*=span],.input-prepend input,.input-prepend input[class*=span]{display:inline-block;width:auto}.controls-row [class*=span]+[class*=span]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media (max-width:480px){.nav-collapse{-webkit-transform:translateZ(0)}.page-header h1 small{display:block;line-height:20px}input[type=checkbox],input[type=radio]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media (max-width:839px){body{padding-top:0}.navbar-fixed-bottom,.navbar-fixed-top{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .dropdown-menu a,.nav-collapse .nav>li>a{padding:9px 15px;font-weight:700;color:#777;border-radius:3px}.nav-collapse .btn{padding:4px 10px;font-weight:400;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .dropdown-menu a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .nav>li>a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .dropdown-menu a,.navbar-inverse .nav-collapse .nav>li>a{color:#999}.navbar-inverse .nav-collapse .dropdown-menu a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .nav>li>a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:none;border-radius:0;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu .divider,.nav-collapse .dropdown-menu:after,.nav-collapse .dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after,.nav-collapse .nav>li>.dropdown-menu:before{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media (min-width:840px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}html.with-featherlight{overflow:hidden}.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:transparent}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:"";display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight link.featherlight-inner,.featherlight script.featherlight-inner,.featherlight style.featherlight-inner{display:none}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:hsla(0,0%,100%,.3);color:#000;border:none;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch}.featherlight iframe{border:none}.featherlight *{box-sizing:border-box}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}@media print{html.with-featherlight>*>:not(.featherlight){display:none}} + +/*! + * jQuery contextMenu - Plugin for simple contextMenu handling + * + * Version: v1.10.3 + * + * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://swisnl.github.io/jQuery-contextMenu/ + * + * Copyright (c) 2011-2015 SWIS BV and contributors + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + + * Date: 2015-12-03T20:12:18.263Z + */.context-menu-list{position:absolute;display:inline-block;min-width:120px;max-width:250px;padding:0;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;list-style-type:none;background:#eee;border:1px solid #ddd;box-shadow:0 2px 5px rgba(0,0,0,.5)}.context-menu-item{padding:2px 2px 2px 24px;-moz-user-select:none;background-color:#eee}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.hover{cursor:pointer;background-color:#39f}.context-menu-item.disabled{color:#666}.context-menu-submenu:after{position:absolute;top:0;right:3px;z-index:1;color:#666;content:">"}.context-menu-item.icon{min-height:18px;list-style-type:none;background-repeat:no-repeat;background-position:4px 2px}.context-menu-item.icon-edit{background-image:url(images/page_white_edit.png)}.context-menu-item.icon-cut{background-image:url(images/cut.png)}.context-menu-item.icon-copy{background-image:url(images/page_white_copy.png)}.context-menu-item.icon-paste{background-image:url(images/page_white_paste.png)}.context-menu-item.icon-delete{background-image:url(images/page_white_delete.png)}.context-menu-item.icon-add{background-image:url(images/page_white_add.png)}.context-menu-item.icon-quit{background-image:url(images/door.png)}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{margin-left:-17px}.context-menu-input>label>span{margin-left:5px}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{display:block;width:100%;box-sizing:border-box}.context-menu-input>label>textarea{height:100px}.context-menu-item>.context-menu-list{top:5px;right:-5px;display:none}.context-menu-item.visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline}*,:after,:before{box-sizing:border-box}body,html{font-family:Open Sans,sans-serif;font-size:100%;padding:0;margin:0;height:100%}body{padding-top:32px;font-weight:200;background:#ececec;overflow:-moz-scrollbars-vertical}.btn{background-image:none!important;text-shadow:none!important;border-color:none!important;box-shadow:none!important}.btn:focus{outline:none}.btn-inverse{background-image:none!important;background:#333}pre.no-prettify,pre.prettyprint{height:300px;margin:0!important;width:100%!important;overflow:scroll;border-radius:0!important}.input-append .add-on:last-child,.input-append .btn-group:last-child>.dropdown-toggle,.input-append .btn:last-child{border-radius:0!important}[class*=" rficon-"],[class^=rficon-]{display:inline-block;width:16px;height:16px;margin-top:1px;*margin-right:.3em;line-height:16px;vertical-align:text-top;background-position:0 0;background-repeat:no-repeat}.rficon-clipboard-apply{background-image:url(../img/clipboard_apply.png)}.rficon-clipboard-clear{background-image:url(../img/clipboard_clear.png)}.rficon-upload{background-image:url(../img/upload.png)}.btn{border-radius:0}.container-fluid{padding-right:0!important;margin-top:10px!important}.img-precontainer{width:100%;background:#fff}.img-container,.img-precontainer{margin:auto;text-align:center;border:none}.img-container{height:91px;width:122px;padding:0;overflow:hidden;display:table-cell;vertical-align:middle;background-image:url(../img/trans.jpg);background-size:13px}.img-container img{max-width:122px;max-height:91px}ul.breadcrumb{margin-bottom:5px;border-radius:0;padding-bottom:4px;padding-top:6px;background:#f0f0f0;box-shadow:0 1px 4px rgba(0,0,0,.065);border-bottom:1px solid #bbb}ul.breadcrumb .pull-left i{margin-top:2px}ul.breadcrumb li.multiple{margin-top:-4px;padding-right:20px}.alert{padding:8px 35px 8px 14px;margin-bottom:2px;border:1px solid #aaa;color:#666;font-weight:200;font-size:13px;border-radius:0;background:#fff}.img-container *,.img-container-mini *{vertical-align:middle}#help{display:none}.text-center{text-align:center}iframe{overflow:auto;-webkit-overflow-scrolling:touch}.uploader{position:fixed;top:6px;left:6px;right:6px;bottom:6px;z-index:9999;background:#eee;border:1px solid #ccc;display:none;box-shadow:0 0 10px 0 rgba(1,1,1,.5)}.uploader .flex{padding:10px;position:relative}.uploader .container1,.uploader .container2,.uploader .flex{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%}.uploader .upload-help{font-size:11px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff;text-align:center}.uploader .upload-tabbable{padding:2px;height:100%;overflow:hidden}.uploader .upload-tabbable .nav{margin:0}.uploader .upload-tabbable .nav li a{font-size:13px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.uploader .upload-tabbable #urlUpload{padding:5px 10px}.uploader .upload-tabbable .tab-content{padding:5px;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #ddd;background:#fff;-ms-flex-positive:2;flex-grow:2;position:relative}.uploader .upload-tabbable .tab-content .tab-pane{position:absolute;top:0;bottom:0;left:0;right:0;padding:5px}.uploader .upload-tabbable .tab-content form{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%}.uploader .upload-tabbable .tab-content form #filesTable{-ms-flex-positive:2;flex-grow:2;overflow-y:scroll;background:#fff;font-size:.95em}.uploader .upload-tabbable .tab-content form #filesTable .progress{margin-bottom:4px}input#filter-input{margin:0 0 2px;width:84px;height:26px;vertical-align:bottom;border-radius:0;font-size:12px;font-weight:200;position:relative;left:1px}.qq-uploader .span9{margin-left:14px!important;width:690px!important}.space10{clear:both;height:10px}h4{font-size:12px;text-align:center;padding:0;margin:6px 0 0;line-height:18px}h3,h4{font-weight:200}h3{font-size:14px}.boxes{border:1px solid #ccc;word-wrap:break-word;background:#fff;box-shadow:1px 1px 2px 0 rgba(0,0,0,.2);min-height:115px;text-align:center}.container-fluid{padding:0 10px!important}body .avpw .avpw_primary_button,body .avpw .avpw_primary_button:active,body .avpw .avpw_primary_button:link,body .avpw .avpw_primary_button:visited{color:#fff;background:#999;border:none}body .avpw .avpw_primary_button:hover{border:none;background:#666}.download-form{margin-bottom:25px}.grid li i{margin-left:2px;margin-right:2px;z-index:0}.box,.boxx{word-wrap:break-word;vertical-align:top;text-align:left;position:relative;z-index:100;padding:4px}.box,.box .btn,.boxx{border:none;box-shadow:none}.box .btn{width:100%;background:none;z-index:200}.navbar{margin-bottom:0;border-bottom:1px solid #bbb}.navbar .navbar-inner{border:none;min-height:35px;border-radius:0;padding-bottom:2px;margin:0;padding-right:8px;padding-left:8px}.navbar .navbar-inner .container-fluid{margin:0;margin-top:0!important;padding:0}.navbar .navbar-inner .container-fluid .brand{display:none}.navbar .navbar-inner .container-fluid .filters span{margin-top:0;font-size:13px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}ul.sorting{position:absolute;left:-25px;top:20px;min-width:0;background:#eee}ul.sorting li a:hover{background:#aaa}.btn-group .dropdown-toggle.sorting-btn{position:relative;top:-5px;font-size:13px}.btn-group .dropdown-toggle.sorting-btn,.btn-group .dropdown-toggle.sorting-btn:hover{background:none;border:none;box-shadow:none;-webkit-box-shadow:none}ul.sorting.dropdown-menu>li>a{font-size:12px;text-shadow:none}ul.sorting.dropdown-menu>li>a.descending{background-image:url(../img/down.png);background-repeat:no-repeat;background-position:6px 8px}ul.sorting.dropdown-menu>li>a.ascending{background-image:url(../img/up.png);background-repeat:no-repeat;background-position:6px 8px}.sorter-container{margin-top:5px;margin-bottom:0;border-radius:0;padding-bottom:4px;padding-top:6px;box-shadow:0 1px 4px rgba(0,0,0,.065);background-color:#f5f5f5;position:relative;border-bottom:1px solid #bbb;height:24px}.sorter-container a.sorter{color:#000}.sorter-container a.descending{padding-left:9px;background-image:url(../img/down.png);background-repeat:no-repeat;background-position:0 3px}.sorter-container a.ascending{padding-left:9px;background-image:url(../img/up.png);background-repeat:no-repeat;background-position:0 4px}.sorter-container .file-date,.sorter-container .file-extension,.sorter-container .file-name,.sorter-container .file-operations,.sorter-container .file-size,.sorter-container .img-dimension{display:block;position:absolute;top:0;z-index:100;box-shadow:none;text-align:left;font-size:13px;margin-top:1px;color:#999}.sorter-container .file-operations{width:110px;right:0}.sorter-container .img-dimension{width:65px;right:123px}.sorter-container .file-date{width:70px;right:188px}.sorter-container .file-size{width:55px;right:258px}.sorter-container .file-extension{width:40px;right:313px}.sorter-container .file-name{width:50px;left:52px}.file-date,.file-extension,.file-name,.file-operations,.file-size,.img-dimension{font-size:12px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff;display:none}.view-controller{text-align:left}.view-controller .btn-group>.btn:first-child,.view-controller .btn-group>.btn:last-child{border-radius:0}.navbar .filters .btn{margin-bottom:2px;padding:2px 5px;margin-top:5px}.filters .types{text-align:right}.fileupload-buttonbar{margin-bottom:10px}.fileupload-buttonbar .progress{margin:0}@media (max-width:780px){#view2{display:none}}@media (min-width:840px){.mobile-inline-visible{display:none!important}}@media (max-width:839px){body{padding-top:0!important}.mobile-inline-visible{display:inline!important}.filters .types{text-align:left}.navbar .navbar-inner .container-fluid .brand{display:block}.navbar .navbar-inner{padding-bottom:4px}.filters div.span2.half,.filters div.span3.half,.filters div.span4.half{float:left;width:auto;margin-right:10px}.filters div.entire{float:none;width:100%;clear:both}.container-fluid{margin:0!important;padding:0}#qLbar{height:50px!important}}@media (min-width:400px) and (max-width:839px){.filters .row-fluid .half{width:48.61878453038674%;*width:48.56559304102504%;float:left}}.tooltip.in{opacity:1;filter:alpha(opacity=1)}.tooltip,.tooltip.in{z-index:10000;font-weight:700}.grid{padding:0;margin:0 auto;list-style:none;-webkit-overflow-scrolling:touch}.ui-draggable-helper{z-index:10}.grid li{display:inline-block;width:124px;border:none;margin:4px;margin-bottom:8px;padding:0;vertical-align:top}.grid figure{margin:0;position:relative;display:block;width:122px;margin:auto}.grid figure:hover{background:#e0e0e0!important}.list-view1.grid li,.list-view1.grid li figure{width:100%}.grid figcaption{text-align:center;padding:2px;padding-top:8px;color:#fff;height:30px;width:122px;margin-left:0;margin-right:0;position:absolute;top:auto;bottom:0;box-shadow:inset 0 0 8px 0 rgba(41,41,41,.5)}.grid figcaption a{margin:0;padding:3px}.grid figcaption h3{margin:0;padding:0;color:#fff}.grid h4{text-align:center;color:#000;padding:0;margin-bottom:4px;margin-top:4px}.grid figure .box{box-sizing:content-box;cursor:pointer}.list-view0.grid figure .box,.list-view1.grid figure .box,.list-view2.grid figure .box{max-width:100%;display:block;position:relative;overflow:hidden;z-index:1}.list-view0.grid figure .box h4.ellipsis,.list-view1.grid figure .box h4.ellipsis,.list-view2.grid figure .box h4.ellipsis{height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.list-view0.grid figure .box h4,.list-view0.grid figure .box h4 a,.list-view1.grid figure .box h4,.list-view1.grid figure .box h4 a,.list-view2.grid figure .box h4,.list-view2.grid figure .box h4 a{z-index:1}.no-touch .list-view0 figure .box{z-index:1;transition:transform .3s}.list-view0.grid .ui-state-highlight .img-precontainer{background:grey!important}.list-view0.grid .ui-state-highlight .img-precontainer .img-container{background:repeating-linear-gradient(45deg,transparent,transparent 5px,hsla(0,0%,100%,.4) 0,hsla(0,0%,100%,.3) 10px);border:none;overflow:hidden}.list-view0.grid .ui-state-hover .img-precontainer .img-container{background:#666}.list-view1.grid .ui-state-highlight:nth-child(odd) figure,.list-view2.grid .ui-state-highlight:nth-child(odd) figure{background:#ddd!important;border-bottom-color:#444!important}.list-view1.grid .ui-state-highlight:nth-child(2n) figure,.list-view2.grid .ui-state-highlight:nth-child(2n) figure{background:#ccc!important;border-bottom-color:#aaa!important}.list-view1.grid .ui-state-highlight.ui-state-hover figure,.list-view2.grid .ui-state-highlight.ui-state-hover figure{background-color:#aaa!important}.no-touch .list-view0 figure.cs-hover .box,.no-touch .list-view0 figure:hover .box{box-shadow:0 0 4px 0 rgba(1,1,1,.5);transform:translateY(-26px)}.list-view0 figure.cs-hover .box.no-effect,.list-view0 figure:hover .box.no-effect,.no-effect{box-shadow:none;transform:none}.list-view0 .img-precontainer-mini{display:none;background:none}a,a:hover{color:#000;text-decoration:none}.back-directory .box,.back-directory .img-precontainer,.back-directory .img-precontainer-mini{background:none}form{margin:0;padding:0}.google-iframe,.viewer-iframe{width:100%;height:500px;border:none}.modal{width:60%;margin-left:-30%}.modal-body{padding:6px}.modal-body form,.modal-body input,.modal-body textarea{margin:0;border-radius:0}.modal-body .text-center{padding-bottom:6px}.modal-footer{padding:7px}.modal-header{padding:7px 8px!important}.modal-header h3{font-weight:300;font-size:20px}.list-view1.sorter-container{display:block}.list-view0.sorter-container,.list-view2.sorter-container{display:none}.selector{z-index:1}.selector .cont{display:block;position:relative;padding-left:35px;margin-bottom:12px;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.selector .cont input{position:absolute;opacity:0;cursor:pointer}.selector .cont input:checked~.checkmark{background-color:#2196f3}.selector .cont .checkmark{position:absolute;top:0;left:0;height:18px;width:18px;background-color:#fff;border:1px solid #ddd;transition:background-color .5s ease;-webkit-transition:background-color .5s ease-out;-moz-transition:background-color .5s ease-out;-o-transition:background-color .5s ease-out}.selector .cont .checkmark:after{content:"";position:absolute;display:none;left:5px;top:1px;width:6px;height:12px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.selector .cont:hover input~.checkmark{background-color:#ddd}.selector .cont input:checked~.checkmark:after{display:block}.list-view0.grid .selector{position:absolute;top:2px;left:2px;width:18px;height:22px}.list-view0.grid .img-precontainer .img-container img{max-width:122px!important;max-height:91px!important}.list-view0.grid .img-precontainer .img-container img.icon{width:122px;margin-top:0}.list-view0.grid .img-precontainer .filetype{position:absolute;top:0;width:122px;text-align:center;color:#fff;font-size:13px;line-height:22px}.list-view0.grid .cover{background:hsla(0,0%,100%,.25);width:122px;position:absolute;top:22px;right:0;height:69px}.list-view0.grid .box{background:#fff}.list-view0.grid .directory{background:#ddd}.list-view0.grid figure.back-directory .directory{background:#bbb}.list-view0.grid figcaption{background:#fff}.list-view0.grid .selected figure{border:none;height:126px}.list-view0.grid .selected figure .box,.list-view0.grid .selected figure>a,.list-view0.grid .selected figure figcaption{display:none}.list-view1.grid li,.list-view2.grid li{margin:0}.list-view1.grid li.back figure.back-directory,.list-view2.grid li.back figure.back-directory{height:34px}.list-view1.grid li.no-selector .img-container-mini,.list-view2.grid li.no-selector .img-container-mini{padding-left:0}.list-view1.grid li.no-selector figure .box,.list-view2.grid li.no-selector figure .box{margin-left:48px}.list-view1.grid li:nth-child(odd) figure,.list-view2.grid li:nth-child(odd) figure{background:#f9f9f9}.list-view1.grid li:nth-child(odd) figure.directory,.list-view2.grid li:nth-child(odd) figure.directory{background:#eaeaea}.list-view1.grid li figure,.list-view2.grid li figure{border-bottom:1px solid #aaa;background:#fff}.list-view1.grid li figure.back-directory,.list-view2.grid li figure.back-directory{background:#bbb}.list-view1.grid li figure.back-directory .box,.list-view2.grid li figure.back-directory .box{background:none}.list-view1.grid li figure.directory,.list-view2.grid li figure.directory{background:#efefef}.list-view1.grid li figure.directory box,.list-view2.grid li figure.directory box{padding:0;min-height:10px}.list-view1.grid li figure .box,.list-view2.grid li figure .box{margin-left:70px;transition:none}.list-view1.grid li figure .box h4,.list-view2.grid li figure .box h4{padding-top:1px;font-size:13px;text-align:left}.list-view1.grid .img-precontainer-mini,.list-view2.grid .img-precontainer-mini{display:block;position:absolute;width:45px;left:22px;height:34px;overflow:hidden;text-align:center}.list-view1.grid .img-precontainer-mini img,.list-view2.grid .img-precontainer-mini img{max-width:45px;width:45px}.list-view1.grid .img-precontainer-mini .filetype,.list-view2.grid .img-precontainer-mini .filetype{position:absolute;top:1px;left:0;text-align:center;padding:1px 2px;font-size:13px;line-height:32px;width:45px;height:32px;color:#fff;background:#333}.list-view1.grid .cover,.list-view2.grid .cover{display:none}.list-view1.grid .selector,.list-view2.grid .selector{top:8px;left:2px;position:relative}.list-view1.grid .selector .cont,.list-view2.grid .selector .cont{margin:0}.list-view1.grid .img-container-mini,.list-view2.grid .img-container-mini{width:45px;height:34px;border:none;overflow:hidden;text-align:center;vertical-align:middle;margin:auto;left:24px}.list-view1.grid .img-precontainer-mini.original-thumb,.list-view2.grid .img-precontainer-mini.original-thumb{padding:0}.list-view1.grid .img-precontainer-mini.original-thumb img,.list-view2.grid .img-precontainer-mini.original-thumb img{width:auto;max-height:32px}.list-view1.grid .img-precontainer-mini.original-thumb img.original,.list-view2.grid .img-precontainer-mini.original-thumb img.original{width:auto;height:auto}.list-view1.grid .img-precontainer,.list-view2.grid .img-precontainer{display:none}.list-view1.grid figcaption,.list-view2.grid figcaption{background:none;width:120px;position:absolute;right:0;top:0;z-index:1;bottom:0;box-shadow:none;text-align:right}.list-view1.grid .selected figure,.list-view2.grid .selected figure{background:#ccc!important}.list-view1.grid .file-date,.list-view1.grid .file-extension,.list-view1.grid .file-size,.list-view1.grid .img-dimension{overflow:hidden;display:block;position:absolute;top:0;z-index:1;box-shadow:none;text-align:left;margin-top:7px}.list-view1.grid .img-dimension{width:65px;right:120px}.list-view1.grid .file-date{width:70px;right:185px}.list-view1.grid .file-size{width:55px;right:255px}.list-view1.grid .file-extension{width:40px;right:310px}.list-view1.grid figure .box{padding-right:352px}.list-view2.grid figure .box{padding-right:115px}@media (max-width:610px){.list-view1.grid figure .box{padding-right:312px}.list-view1.grid figure .file-extension,.sorter-container .file-extension{display:none}}@media (max-width:565px){.list-view1.grid figure .box{padding-right:257px}.list-view1.grid figure .file-size,.sorter-container .file-size{display:none}}@media (max-width:495px){.list-view1.grid figure .box{padding-right:187px}.list-view1.grid figure .file-date,.sorter-container .file-date{display:none}}@media (max-width:430px){.list-view1.grid figure .box{padding-right:115px}.list-view1.grid figure .img-dimension,.sorter-container .img-dimension{display:none}.breadcrumb{margin-left:0;margin-right:0}}.list-view1.grid .img-precontainer-mini .filetype.pdf,.list-view2.grid .img-precontainer-mini .filetype.pdf{background:#cb0011}.list-view1.grid .img-precontainer-mini .filetype.css,.list-view2.grid .img-precontainer-mini .filetype.css{background:#d10698}.list-view1.grid .img-precontainer-mini .filetype.ai,.list-view2.grid .img-precontainer-mini .filetype.ai{background:#d6772f}.list-view1.grid .img-precontainer-mini .filetype.psd,.list-view2.grid .img-precontainer-mini .filetype.psd{background:#0960a4}.list-view1.grid .img-precontainer-mini .filetype.html,.list-view1.grid .img-precontainer-mini .filetype.xhtml,.list-view2.grid .img-precontainer-mini .filetype.html,.list-view2.grid .img-precontainer-mini .filetype.xhtml{background:#035bc4}.list-view1.grid .img-precontainer-mini .filetype.fla,.list-view1.grid .img-precontainer-mini .filetype.flv,.list-view2.grid .img-precontainer-mini .filetype.fla,.list-view2.grid .img-precontainer-mini .filetype.flv{background:#cf302e}.list-view1.grid .img-precontainer-mini .filetype.ppt,.list-view1.grid .img-precontainer-mini .filetype.pptx,.list-view2.grid .img-precontainer-mini .filetype.ppt,.list-view2.grid .img-precontainer-mini .filetype.pptx{background:#da5b00}.list-view1.grid .img-precontainer-mini .filetype.css,.list-view1.grid .img-precontainer-mini .filetype.xls,.list-view1.grid .img-precontainer-mini .filetype.xlsx,.list-view2.grid .img-precontainer-mini .filetype.css,.list-view2.grid .img-precontainer-mini .filetype.xls,.list-view2.grid .img-precontainer-mini .filetype.xlsx{background:#1a712c}.list-view1.grid .img-precontainer-mini .filetype.doc,.list-view1.grid .img-precontainer-mini .filetype.docx,.list-view1.grid .img-precontainer-mini .filetype.rts,.list-view2.grid .img-precontainer-mini .filetype.doc,.list-view2.grid .img-precontainer-mini .filetype.docx,.list-view2.grid .img-precontainer-mini .filetype.rts{background:#002093}.list-view1.grid .img-precontainer-mini .filetype.gzip,.list-view1.grid .img-precontainer-mini .filetype.rar,.list-view1.grid .img-precontainer-mini .filetype.zip,.list-view2.grid .img-precontainer-mini .filetype.gzip,.list-view2.grid .img-precontainer-mini .filetype.rar,.list-view2.grid .img-precontainer-mini .filetype.zip{background:#fe9221}.list-view1.grid .img-precontainer-mini .filetype.avi,.list-view1.grid .img-precontainer-mini .filetype.mov,.list-view1.grid .img-precontainer-mini .filetype.mp4,.list-view1.grid .img-precontainer-mini .filetype.mpeg,.list-view1.grid .img-precontainer-mini .filetype.mpg,.list-view1.grid .img-precontainer-mini .filetype.webm,.list-view1.grid .img-precontainer-mini .filetype.wma,.list-view2.grid .img-precontainer-mini .filetype.avi,.list-view2.grid .img-precontainer-mini .filetype.mov,.list-view2.grid .img-precontainer-mini .filetype.mp4,.list-view2.grid .img-precontainer-mini .filetype.mpeg,.list-view2.grid .img-precontainer-mini .filetype.mpg,.list-view2.grid .img-precontainer-mini .filetype.webm,.list-view2.grid .img-precontainer-mini .filetype.wma{background:#31231e}.list-view1.grid .img-precontainer-mini .filetype.ac3,.list-view1.grid .img-precontainer-mini .filetype.aiff,.list-view1.grid .img-precontainer-mini .filetype.m4a,.list-view1.grid .img-precontainer-mini .filetype.mid,.list-view1.grid .img-precontainer-mini .filetype.mp3,.list-view1.grid .img-precontainer-mini .filetype.ogg,.list-view1.grid .img-precontainer-mini .filetype.wav,.list-view2.grid .img-precontainer-mini .filetype.ac3,.list-view2.grid .img-precontainer-mini .filetype.aiff,.list-view2.grid .img-precontainer-mini .filetype.m4a,.list-view2.grid .img-precontainer-mini .filetype.mid,.list-view2.grid .img-precontainer-mini .filetype.mp3,.list-view2.grid .img-precontainer-mini .filetype.ogg,.list-view2.grid .img-precontainer-mini .filetype.wav{background:#9f008b}.list-view1.grid .img-precontainer-mini .filetype.odb,.list-view1.grid .img-precontainer-mini .filetype.odf,.list-view1.grid .img-precontainer-mini .filetype.odg,.list-view1.grid .img-precontainer-mini .filetype.odp,.list-view1.grid .img-precontainer-mini .filetype.ods,.list-view1.grid .img-precontainer-mini .filetype.odt,.list-view1.grid .img-precontainer-mini .filetype.otg,.list-view1.grid .img-precontainer-mini .filetype.otp,.list-view1.grid .img-precontainer-mini .filetype.ots,.list-view1.grid .img-precontainer-mini .filetype.ott,.list-view2.grid .img-precontainer-mini .filetype.odb,.list-view2.grid .img-precontainer-mini .filetype.odf,.list-view2.grid .img-precontainer-mini .filetype.odg,.list-view2.grid .img-precontainer-mini .filetype.odp,.list-view2.grid .img-precontainer-mini .filetype.ods,.list-view2.grid .img-precontainer-mini .filetype.odt,.list-view2.grid .img-precontainer-mini .filetype.otg,.list-view2.grid .img-precontainer-mini .filetype.otp,.list-view2.grid .img-precontainer-mini .filetype.ots,.list-view2.grid .img-precontainer-mini .filetype.ott{background:#367bbe}.list-view1.grid .img-precontainer-mini .filetype.bmp,.list-view1.grid .img-precontainer-mini .filetype.gif,.list-view1.grid .img-precontainer-mini .filetype.jpeg,.list-view1.grid .img-precontainer-mini .filetype.jpg,.list-view1.grid .img-precontainer-mini .filetype.png,.list-view1.grid .img-precontainer-mini .filetype.svg,.list-view1.grid .img-precontainer-mini .filetype.tiff,.list-view2.grid .img-precontainer-mini .filetype.bmp,.list-view2.grid .img-precontainer-mini .filetype.gif,.list-view2.grid .img-precontainer-mini .filetype.jpeg,.list-view2.grid .img-precontainer-mini .filetype.jpg,.list-view2.grid .img-precontainer-mini .filetype.png,.list-view2.grid .img-precontainer-mini .filetype.svg,.list-view2.grid .img-precontainer-mini .filetype.tiff{background:#cfa554}.list-view1.grid .img-precontainer-mini .filetype.dmg,.list-view1.grid .img-precontainer-mini .filetype.iso,.list-view1.grid .img-precontainer-mini .filetype.log,.list-view1.grid .img-precontainer-mini .filetype.sql,.list-view1.grid .img-precontainer-mini .filetype.txt,.list-view1.grid .img-precontainer-mini .filetype.xml,.list-view2.grid .img-precontainer-mini .filetype.dmg,.list-view2.grid .img-precontainer-mini .filetype.iso,.list-view2.grid .img-precontainer-mini .filetype.log,.list-view2.grid .img-precontainer-mini .filetype.sql,.list-view2.grid .img-precontainer-mini .filetype.txt,.list-view2.grid .img-precontainer-mini .filetype.xml{background:#cacaca}.list-view1.grid .img-precontainer-mini .filetype.accdb,.list-view1.grid .img-precontainer-mini .filetype.ade,.list-view1.grid .img-precontainer-mini .filetype.adp,.list-view1.grid .img-precontainer-mini .filetype.mdb,.list-view2.grid .img-precontainer-mini .filetype.accdb,.list-view2.grid .img-precontainer-mini .filetype.ade,.list-view2.grid .img-precontainer-mini .filetype.adp,.list-view2.grid .img-precontainer-mini .filetype.mdb{background:#b61c19}.lightbox-content{overflow:hidden;padding:0;background:none;box-shadow:none;border-radius:0;border:0}.context-menu-list{font-family:Open Sans,sans-serif;width:200px;background:#fff;font-size:12px;margin:0;padding:5px}.context-menu-item{background-color:#fff;position:relative;height:auto;word-wrap:break-word;-webkit-user-select:none;-moz-user-select:0;-ms-user-select:none;user-select:none;padding:5px 5px 5px 30px}.context-menu-item:last-child{border:none}.context-menu-separator{padding-bottom:0;border-bottom:1px solid #ddd}.context-menu-item.hover{background-color:#ddd}.context-menu-input.hover,.context-menu-item.disabled.hover{cursor:default;background-color:#eee}.context-menu-item.icon{vertical-align:middle;background-position:4px 5px;width:auto;display:list-item}.context-menu-item.icon-edit{background-image:url(../img/file_edit.png)}.context-menu-item.icon-cut{background-image:url(../img/cut.png)}.context-menu-item.icon-copy{background-image:url(../img/copy.png)}.context-menu-item.icon-rename{background-image:url(../img/rename.png)}.context-menu-item.icon-preview{background-image:url(../img/preview.png)}.context-menu-item.icon-dimension{background-image:url(../img/dimension.png)}.context-menu-item.icon-date{background-image:url(../img/date.png)}.context-menu-item.icon-label{background-image:url(../img/label.png)}.context-menu-item.icon-size{background-image:url(../img/size.png)}.context-menu-item.icon-download{background-image:url(../img/download.png)}.context-menu-item.icon-paste{background-image:url(../img/page_white_paste.png)}.context-menu-item.icon-clipboard-apply{background-image:url(../img/clipboard_apply.png)}.context-menu-item.icon-delete{background-image:url(../img/page_white_delete.png)}.context-menu-item.icon-add{background-image:url(../img/page_white_add.png)}.context-menu-item.icon-quit{background-image:url(../img/door.png)}.context-menu-item.icon-info{background-image:url(../img/info.png)}.context-menu-item.icon-extract{background-image:url(../img/zip.png)}.context-menu-item.icon-url{background-image:url(../img/url.png)}.context-menu-item.icon-edit_img{background-image:url(../img/edit_img.png)}.context-menu-item.icon-duplicate{background-image:url(../img/duplicate.png)}.context-menu-item.icon-key{background-image:url(../img/key.png)}.dropzone{border:1px solid rgba(0,0,0,.03);min-height:360px;border-radius:3px;background:rgba(0,0,0,.03);padding:23px}.dropzone .dz-success *{cursor:pointer!important}.dropzone .dz-default.dz-message{opacity:1;-ms-filter:none;filter:none;transition:opacity .3s ease-in-out;background-repeat:no-repeat;background-position:0 0;position:absolute;width:428px;height:123px;margin-left:-214px;margin-top:-61.5px;top:50%;left:50%}.btn-primary,.btn-primary.disabled,.btn-primary[disabled]{background-color:#333}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover{background-color:#222}.tui-image-editor-container{position:fixed;top:0;left:0;z-index:99999} \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/dialog.php b/libraries/filemanager-9.14.1/dialog.php new file mode 100644 index 0000000..e4d780e --- /dev/null +++ b/libraries/filemanager-9.14.1/dialog.php @@ -0,0 +1,1389 @@ +isDir($config['ftp_base_folder'] . $config['upload_dir'] . $rfm_subfolder . $subdir)) || (!$ftp && !file_exists($config['current_path'] . $rfm_subfolder . $subdir))) { + $subdir = ''; + $rfm_subfolder = ""; +} + + +$cur_dir = $config['upload_dir'].$rfm_subfolder.$subdir; +$cur_dir_thumb = $config['thumbs_upload_dir'].$rfm_subfolder.$subdir; +$thumbs_path = $config['thumbs_base_path'].$rfm_subfolder.$subdir; +$parent = $rfm_subfolder.$subdir; + +if ($ftp) { + $cur_dir = $config['ftp_base_folder'] . $cur_dir; + $cur_dir_thumb = $config['ftp_base_folder'] . $cur_dir_thumb; + $thumbs_path = str_replace(array('/..', '..'), '', $cur_dir_thumb); + $parent = $config['ftp_base_folder'] . $parent; +} + +if (!$ftp) { + $cycle = TRUE; + $max_cycles = 50; + $i = 0; + while ($cycle && $i < $max_cycles) { + $i++; + + if ($parent == "./") { + $parent = ""; + } + + if (file_exists($config['current_path'] . $parent . "config.php")) { + $configTemp = include $config['current_path'] . $parent . 'config.php'; + $config = array_merge($config, $configTemp); + $cycle = FALSE; + } + + if ($parent == "") { + $cycle = FALSE; + } else { + $parent = fix_dirname($parent) . "/"; + } + } + + if (!is_dir($thumbs_path)) { + create_folder(FALSE, $thumbs_path, $ftp, $config); + } +} + +$multiple = null; + +if (isset($_GET['multiple'])) { + if ($_GET['multiple'] == 1) { + $multiple = 1; + $config['multiple_selection'] = true; + $config['multiple_selection_action_button'] = true; + } elseif ($_GET['multiple'] == 0) { + $multiple = 0; + $config['multiple_selection'] = false; + $config['multiple_selection_action_button'] = false; + } +} + +if (isset($_GET['callback'])) { + $callback = strip_tags($_GET['callback']); + $_SESSION['RF']["callback"] = $callback; +} else { + $callback = 0; + + if (isset($_SESSION['RF']["callback"])) { + $callback = $_SESSION['RF']["callback"]; + } +} + +$popup = isset($_GET['popup']) ? strip_tags($_GET['popup']) : 0; +//Sanitize popup +$popup = !!$popup; + +$crossdomain = isset($_GET['crossdomain']) ? strip_tags($_GET['crossdomain']) : 0; +//Sanitize crossdomain +$crossdomain=!!$crossdomain; + +//view type +if(!isset($_SESSION['RF']["view_type"])) +{ + $view = $config['default_view']; + $_SESSION['RF']["view_type"] = $view; +} + +if (isset($_GET['view'])) +{ + $view = fix_get_params($_GET['view']); + $_SESSION['RF']["view_type"] = $view; +} + +$view = $_SESSION['RF']["view_type"]; + +//filter +$filter = ""; +if(isset($_SESSION['RF']["filter"])) +{ + $filter = $_SESSION['RF']["filter"]; +} + +if(isset($_GET["filter"])) +{ + $filter = fix_get_params($_GET["filter"]); +} + +if (!isset($_SESSION['RF']['sort_by'])) +{ + $_SESSION['RF']['sort_by'] = 'name'; +} + +if (isset($_GET["sort_by"])) { + $sort_by = $_SESSION['RF']['sort_by'] = fix_get_params($_GET["sort_by"]); +} else { + $sort_by = $_SESSION['RF']['sort_by']; +} + + +if (!isset($_SESSION['RF']['descending'])) { + $_SESSION['RF']['descending'] = TRUE; +} + +if (isset($_GET["descending"])) { + $descending = $_SESSION['RF']['descending'] = fix_get_params($_GET["descending"]) == 1; +} else { + $descending = $_SESSION['RF']['descending']; +} + +$boolarray = array(false => 'false', true => 'true'); + +$return_relative_url = isset($_GET['relative_url']) && $_GET['relative_url'] == "1" ? true : false; + +if (!isset($_GET['type'])) { + $_GET['type'] = 0; +} + +$extensions = null; +if (isset($_GET['extensions'])) { + $extensions = json_decode(urldecode($_GET['extensions'])); + $ext_tmp = array(); + foreach ($extensions as $extension) { + $extension = fix_strtolower($extension); + if (check_file_extension($extension, $config)) { + $ext_tmp[] = $extension; + } + } + if ($extensions) { + $ext = $ext_tmp; + $config['ext'] = $ext_tmp; + $config['show_filter_buttons'] = false; + } +} + +if (isset($_GET['editor'])) { + $editor = strip_tags($_GET['editor']); +} else { + $editor = $_GET['type'] == 0 ? null : 'tinymce'; +} + +$field_id = isset($_GET['field_id']) ? fix_get_params($_GET['field_id']) : null; +$type_param = fix_get_params($_GET['type']); +$apply = null; + +if ($multiple) { + $apply = 'apply_multiple'; +} + +if ($type_param == 1) { + $apply_type = 'apply_img'; +} elseif ($type_param == 2) { + $apply_type = 'apply_link'; +} elseif ($type_param == 0 && !$field_id) { + $apply_type = 'apply_none'; +} elseif ($type_param == 3) { + $apply_type = 'apply_video'; +} else { + $apply_type = 'apply'; +} + +if(!$apply){ + $apply = $apply_type; +} + +$get_params = array( + 'editor' => $editor, + 'type' => $type_param, + 'lang' => $lang, + 'popup' => $popup, + 'crossdomain' => $crossdomain, + 'extensions' => ($extensions) ? urlencode(json_encode($extensions)) : null , + 'field_id' => $field_id, + 'multiple' => $multiple, + 'relative_url' => $return_relative_url, + 'akey' => (isset($_GET['akey']) && $_GET['akey'] != '' ? $_GET['akey'] : 'key') +); +if (isset($_GET['CKEditorFuncNum'])) { + $get_params['CKEditorFuncNum'] = $_GET['CKEditorFuncNum']; + $get_params['CKEditor'] = (isset($_GET['CKEditor']) ? $_GET['CKEditor'] : ''); +} +$get_params['fldr'] =''; + +$get_params = http_build_query($get_params); +?> + + + + + + + + Responsive FileManager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " /> + " /> + " /> + " /> + + + + +
          +
          +
          + +
          +
          +
          +
          + +
          +
          + +
          +
          +
          + +
          + +
          +
          +
          + +
          +
          +
          + + + + + + + + + +
          +
          + +
          + +
          +
          +
          +
          + + + + +
          + +
          +
          +
          +
          + +
          + +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          +
          +
          +
          + + + +
          + +scanDir($config['ftp_base_folder'] . $config['upload_dir'] . $rfm_subfolder . $subdir); + if (!$ftp->isDir($config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $rfm_subfolder . $subdir)) { + create_folder(false, $config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $rfm_subfolder . $subdir, $ftp, $config); + } + } catch (FtpClient\FtpException $e) { + echo "Error: "; + echo $e->getMessage(); + echo "
          Please check configurations"; + die(); + } +} else { + $files = scandir($config['current_path'] . $rfm_subfolder . $subdir); +} + +$n_files = count($files); + +//php sorting +$sorted = array(); +//$current_folder=array(); +//$prev_folder=array(); +$current_files_number = 0; +$current_folders_number = 0; + +foreach ($files as $k => $file) { + if ($ftp) { + $date = strtotime($file['day'] . " " . $file['month'] . " " . date('Y') . " " . $file['time']); + $size = $file['size']; + if ($file['type'] == 'file') { + $current_files_number++; + $file_ext = substr(strrchr($file['name'], '.'), 1); + $is_dir = false; + } else { + $current_folders_number++; + $file_ext = trans('Type_dir'); + $is_dir = true; + } + $sorted[$k] = array( + 'is_dir' => $is_dir, + 'file' => $file['name'], + 'file_lcase' => strtolower($file['name']), + 'date' => $date, + 'size' => $size, + 'permissions' => $file['permissions'], + 'extension' => fix_strtolower($file_ext) + ); + } else { + + + if ($file != "." && $file != "..") { + if (is_dir($config['current_path'] . $rfm_subfolder . $subdir . $file)) { + $date = filemtime($config['current_path'] . $rfm_subfolder . $subdir . $file); + $current_folders_number++; + if ($config['show_folder_size']) { + list($size, $nfiles, $nfolders) = folder_info($config['current_path'] . $rfm_subfolder . $subdir . $file, false); + } else { + $size = 0; + } + $file_ext = trans('Type_dir'); + $sorted[$k] = array( + 'is_dir' => true, + 'file' => $file, + 'file_lcase' => strtolower($file), + 'date' => $date, + 'size' => $size, + 'permissions' => '', + 'extension' => fix_strtolower($file_ext) + ); + + if ($config['show_folder_size']) { + $sorted[$k]['nfiles'] = $nfiles; + $sorted[$k]['nfolders'] = $nfolders; + } + } else { + $current_files_number++; + $file_path = $config['current_path'] . $rfm_subfolder . $subdir . $file; + $date = filemtime($file_path); + $size = filesize($file_path); + $file_ext = substr(strrchr($file, '.'), 1); + $sorted[$k] = array( + 'is_dir' => false, + 'file' => $file, + 'file_lcase' => strtolower($file), + 'date' => $date, + 'size' => $size, + 'permissions' => '', + 'extension' => strtolower($file_ext) + ); + } + } + } +} + +function filenameSort($x, $y) +{ + global $descending; + + if ($x['is_dir'] !== $y['is_dir']) { + return $y['is_dir']; + } else { + return ($descending) + ? $x['file_lcase'] < $y['file_lcase'] + : $x['file_lcase'] >= $y['file_lcase']; + } +} + +function dateSort($x, $y) +{ + global $descending; + + if ($x['is_dir'] !== $y['is_dir']) { + return $y['is_dir']; + } else { + return ($descending) + ? $x['date'] < $y['date'] + : $x['date'] >= $y['date']; + } +} + +function sizeSort($x, $y) +{ + global $descending; + + if ($x['is_dir'] !== $y['is_dir']) { + return $y['is_dir']; + } else { + return ($descending) + ? $x['size'] < $y['size'] + : $x['size'] >= $y['size']; + } +} + +function extensionSort($x, $y) +{ + global $descending; + + if ($x['is_dir'] !== $y['is_dir']) { + return $y['is_dir']; + } else { + return ($descending) + ? $x['extension'] < $y['extension'] + : $x['extension'] >= $y['extension']; + } +} + +switch ($sort_by) { + case 'date': + usort($sorted, 'dateSort'); + break; + case 'size': + usort($sorted, 'sizeSort'); + break; + case 'extension': + usort($sorted, 'extensionSort'); + break; + default: + usort($sorted, 'filenameSort'); + break; +} + +if ($subdir != "") { + $sorted = array_merge(array(array('file' => '..')), $sorted); +} + +$files = $sorted; +?> + + + + + + + +
          + + +
          + +
          +
          + isDir($config['ftp_base_folder'].$config['upload_dir'].$rfm_subfolder.$subdir)) || (!$ftp && @opendir($config['current_path'].$rfm_subfolder.$subdir)===FALSE)){ ?> +
          +
          There is an error! The upload folder there isn't. Check your config.php file.
          + +

          + +
          + + + + + + + + +
            " id="main-item-container"> + $config['file_number_limit_js'] && $file!=".." && stripos($file,$filter)===false)){ + continue; + } + $new_name=fix_filename($file,$config); + if($ftp && $file!='..' && $file!=$new_name){ + //rename + rename_folder($config['current_path'].$subdir.$file,$new_name,$ftp,$config); + $file=$new_name; + } + //add in thumbs folder if not exist + if($file!='..'){ + if(!$ftp && !file_exists($thumbs_path.$file)){ + create_folder(false,$thumbs_path.$file,$ftp,$config); + } + } + + $class_ext = 3; + if($file=='..' && trim($subdir) != '' ){ + $src = explode("/",$subdir); + unset($src[count($src)-2]); + $src=implode("/",$src); + if($src=='') $src="/"; + } + elseif ($file!='..') { + $src = $subdir . $file."/"; + } + + ?> + + $file_array) { + $file=$file_array['file']; + + if($file == '.' || $file == '..' || $file_array['extension']==fix_strtolower(trans('Type_dir')) || !check_extension($file_array['extension'],$config) || ($filter!='' && $n_files>$config['file_number_limit_js'] && stripos($file,$filter)===false)) + continue; + foreach ( $config['hidden_files'] as $hidden_file ) { + if ( fnmatch($hidden_file, $file, FNM_PATHNAME) ) { + continue 2; + } + } + $filename=substr($file, 0, '-' . (strlen($file_array['extension']) + 1)); + if(strlen($file_array['extension'])===0){ + $filename = $file; + } + if(!$ftp){ + $file_path=$config['current_path'].$rfm_subfolder.$subdir.$file; + //check if file have illegal caracter + + if($file!=fix_filename($file,$config)){ + $file1=fix_filename($file,$config); + $file_path1=($config['current_path'].$rfm_subfolder.$subdir.$file1); + if(file_exists($file_path1)){ + $i = 1; + $info=pathinfo($file1); + while(file_exists($config['current_path'].$rfm_subfolder.$subdir.$info['filename'].".[".$i."].".$info['extension'])) { + $i++; + } + $file1=$info['filename'].".[".$i."].".$info['extension']; + $file_path1=($config['current_path'].$rfm_subfolder.$subdir.$file1); + } + + $filename=substr($file1, 0, '-' . (strlen($file_array['extension']) + 1)); + if(strlen($file_array['extension'])===0){ + $filename = $file1; + } + rename_file($file_path,fix_filename($filename,$config),$ftp,$config); + $file=$file1; + $file_array['extension']=fix_filename($file_array['extension'],$config); + $file_path=$file_path1; + } + }else{ + $file_path = $config['ftp_base_url'].$config['upload_dir'].$rfm_subfolder.$subdir.$file; + } + + $is_img=false; + $is_video=false; + $is_audio=false; + $show_original=false; + $show_original_mini=false; + $mini_src=""; + $src_thumb=""; + if( in_array($file_array['extension'], $config['ext_img'])){ + $src = $file_path; + $is_img=true; + + $img_width = $img_height = ""; + if($ftp){ + $mini_src = $src_thumb = $config['ftp_base_url'].$config['ftp_thumbs_dir'].$subdir. $file; + $creation_thumb_path = "/".$config['ftp_base_folder'].$config['ftp_thumbs_dir'].$subdir. $file; + } + else + { + $creation_thumb_path = $mini_src = $src_thumb = $thumbs_path. $file; + + if ( $file_array['extension'] != 'webp' and !file_exists( $src_thumb ) ) + { + if ( !create_img( $file_path, $creation_thumb_path, 122, 91, 'crop', $config ) ) + { + $src_thumb = $mini_src = ""; + } + } + + //check if is smaller than thumb + list($img_width, $img_height, $img_type, $attr)=@getimagesize($file_path); + if($img_width<122 && $img_height<91){ + $src_thumb=$file_path; + $show_original=true; + } + + if($img_width<45 && $img_height<38){ + $mini_src=$config['current_path'].$rfm_subfolder.$subdir.$file; + $show_original_mini=true; + } + + if ( $file_array['extension'] == 'webp' ) + { + $src_thumb = $file_path; + $show_original=true; + } + } + } + $is_icon_thumb=false; + $is_icon_thumb_mini=false; + $no_thumb=false; + if($src_thumb==""){ + $no_thumb=true; + if(file_exists('img/'.$config['icon_theme'].'/'.$file_array['extension'].".jpg")){ + $src_thumb ='img/'.$config['icon_theme'].'/'.$file_array['extension'].".jpg"; + }else{ + $src_thumb = "img/".$config['icon_theme']."/default.jpg"; + } + $is_icon_thumb=true; + } + if($mini_src==""){ + $is_icon_thumb_mini=false; + } + + $class_ext=0; + if (in_array($file_array['extension'], $config['ext_video'])) { + $class_ext = 4; + $is_video=true; + }elseif (in_array($file_array['extension'], $config['ext_img'])) { + $class_ext = 2; + }elseif (in_array($file_array['extension'], $config['ext_music'])) { + $class_ext = 5; + $is_audio=true; + }elseif (in_array($file_array['extension'], $config['ext_misc'])) { + $class_ext = 3; + }else{ + $class_ext = 1; + } + if((!($_GET['type']==1 && !$is_img) && !(($_GET['type']==3 && !$is_video) && ($_GET['type']==3 && !$is_audio))) && $class_ext>0){ +?> + +
          + + +
          +
          +
          + + + + + + + + + + + + + +
          + +
          + + + + + + + + diff --git a/libraries/filemanager-9.14.1/execute.php b/libraries/filemanager-9.14.1/execute.php new file mode 100644 index 0000000..0321bfa --- /dev/null +++ b/libraries/filemanager-9.14.1/execute.php @@ -0,0 +1,505 @@ +send(); + exit; +} + +if (!checkRelativePath($_POST['path'])) { + response(trans('wrong path') . AddErrorLocation())->send(); + exit; +} + +if (isset($_SESSION['RF']['language']) && file_exists('lang/' . basename($_SESSION['RF']['language']) . '.php')) { + $languages = include 'lang/languages.php'; + if (array_key_exists($_SESSION['RF']['language'], $languages)) { + include 'lang/' . basename($_SESSION['RF']['language']) . '.php'; + } else { + response(trans('Lang_Not_Found') . AddErrorLocation())->send(); + exit; + } +} else { + response(trans('Lang_Not_Found') . AddErrorLocation())->send(); + exit; +} + +$ftp = ftp_con($config); + +$base = $config['current_path']; +$path = $base . $_POST['path']; +$cycle = true; +$max_cycles = 50; +$i = 0; + +while ($cycle && $i < $max_cycles) { + $i++; + if ($path == $base) { + $cycle = false; + } + + if (file_exists($path . "config.php")) { + require_once $path . "config.php"; + $cycle = false; + } + $path = fix_dirname($path) . "/"; +} + +function returnPaths($_path, $_name, $config) +{ + global $ftp; + $path = $config['current_path'] . $_path; + $path_thumb = $config['thumbs_base_path'] . $_path; + $name = null; + if ($ftp) { + $path = $config['ftp_base_folder'] . $config['upload_dir'] . $_path; + $path_thumb = $config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $_path; + } + if ($_name) { + $name = fix_filename($_name, $config); + if (strpos($name, '../') !== false || strpos($name, '..\\') !== false) { + response(trans('wrong name') . AddErrorLocation())->send(); + exit; + } + } + return array($path, $path_thumb, $name); +} + +if(isset($_POST['paths'])){ + $paths = $paths_thumb = $names = array(); + foreach ($_POST['paths'] as $key => $path) { + if (!checkRelativePath($path)) + { + response(trans('wrong path').AddErrorLocation())->send(); + exit; + } + $name = null; + if(isset($_POST['names'][$key])){ + $name = $_POST['names'][$key]; + } + list($path,$path_thumb,$name) = returnPaths($path,$name,$config); + $paths[] = $path; + $paths_thumb[] = $path_thumb; + $names = $name; + } +} else { + $name = null; + if(isset($_POST['name'])){ + $name = $_POST['name']; + } + list($path,$path_thumb,$name) = returnPaths($_POST['path'],$name,$config); + +} + +$info = pathinfo($path); +if (isset($info['extension']) && !(isset($_GET['action']) && $_GET['action'] == 'delete_folder') && + !check_extension($info['extension'], $config) + && $_GET['action'] != 'create_file') { + response(trans('wrong extension') . AddErrorLocation())->send(); + exit; +} + +if (isset($_GET['action'])) { + switch ($_GET['action']) { + case 'delete_file': + + deleteFile($path, $path_thumb, $config); + + break; + + case 'delete_files': + foreach ($paths as $key => $p) { + deleteFile($p, $paths_thumb[$key], $config); + } + + break; + case 'delete_folder': + if ($config['delete_folders']){ + + if($ftp){ + deleteDir($path,$ftp,$config); + deleteDir($path_thumb,$ftp,$config); + }else{ + if (is_dir($path_thumb)) + { + deleteDir($path_thumb,NULL,$config); + } + + if (is_dir($path)) + { + deleteDir($path,NULL,$config); + if ($config['fixed_image_creation']) + { + foreach($config['fixed_path_from_filemanager'] as $k=>$paths){ + if ($paths!="" && $paths[strlen($paths)-1] != "/") $paths.="/"; + + $base_dir=$paths.substr_replace($path, '', 0, strlen($config['current_path'])); + if (is_dir($base_dir)) deleteDir($base_dir,NULL,$config); + } + } + } + } + } + break; + case 'create_folder': + if ($config['create_folders']) + { + + $name = fix_filename($_POST['name'],$config); + $path .= $name; + $path_thumb .= $name; + $res = create_folder(fix_path($path,$config),fix_path($path_thumb,$config),$ftp,$config); + if(!$res){ + response(trans('Rename_existing_folder').AddErrorLocation())->send(); + } + } + break; + case 'rename_folder': + if ($config['rename_folders']){ + if(!is_dir($path)) { + response(trans('wrong path').AddErrorLocation())->send(); + exit; + } + $name = fix_filename($name, $config); + $name = str_replace('.', '', $name); + + if (!empty($name)) { + if (!rename_folder($path, $name, $ftp, $config)) { + response(trans('Rename_existing_folder') . AddErrorLocation())->send(); + exit; + } + rename_folder($path_thumb, $name, $ftp, $config); + if (!$ftp && $config['fixed_image_creation']) { + foreach ($config['fixed_path_from_filemanager'] as $k => $paths) { + if ($paths != "" && $paths[strlen($paths) - 1] != "/") { + $paths .= "/"; + } + + $base_dir = $paths . substr_replace($path, '', 0, strlen($config['current_path'])); + rename_folder($base_dir, $name, $ftp, $config); + } + } + } else { + response(trans('Empty_name') . AddErrorLocation())->send(); + exit; + } + } + break; + + case 'create_file': + if ($config['create_text_files'] === false) { + response(sprintf(trans('File_Open_Edit_Not_Allowed'), strtolower(trans('Edit'))) . AddErrorLocation())->send(); + exit; + } + + if (!isset($config['editable_text_file_exts']) || !is_array($config['editable_text_file_exts'])) { + $config['editable_text_file_exts'] = array(); + } + + // check if user supplied extension + if (strpos($name, '.') === false) { + response(trans('No_Extension') . ' ' . sprintf(trans('Valid_Extensions'), implode(', ', $config['editable_text_file_exts'])) . AddErrorLocation())->send(); + exit; + } + + // correct name + $old_name = $name; + $name = fix_filename($name, $config); + if (empty($name)) { + response(trans('Empty_name') . AddErrorLocation())->send(); + exit; + } + + // check extension + $parts = explode('.', $name); + if (!in_array(end($parts), $config['editable_text_file_exts'])) { + response(trans('Error_extension') . ' ' . sprintf(trans('Valid_Extensions'), implode(', ', $config['editable_text_file_exts'])) . AddErrorLocation(), 400)->send(); + exit; + } + + $content = $_POST['new_content']; + + if ($ftp) { + $temp = tempnam('/tmp', 'RF'); + file_put_contents($temp, $content); + $ftp->put("/" . $path . $name, $temp, FTP_BINARY); + unlink($temp); + response(trans('File_Save_OK'))->send(); + } else { + if (!checkresultingsize(strlen($content))) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send(); + exit; + } + // file already exists + if (file_exists($path . $name)) { + response(trans('Rename_existing_file') . AddErrorLocation())->send(); + exit; + } + + if (@file_put_contents($path . $name, $content) === false) { + response(trans('File_Save_Error') . AddErrorLocation())->send(); + exit; + } else { + if (is_function_callable('chmod') !== false) { + chmod($path . $name, 0644); + } + response(trans('File_Save_OK'))->send(); + exit; + } + } + + break; + + case 'rename_file': + if ($config['rename_files']) { + $name = fix_filename($name, $config); + if (!empty($name)) { + if (!rename_file($path, $name, $ftp, $config)) { + response(trans('Rename_existing_file') . AddErrorLocation())->send(); + exit; + } + + rename_file($path_thumb, $name, $ftp, $config); + + if ($config['fixed_image_creation']) { + $info = pathinfo($path); + + foreach ($config['fixed_path_from_filemanager'] as $k => $paths) { + if ($paths != "" && $paths[strlen($paths) - 1] != "/") { + $paths .= "/"; + } + + $base_dir = $paths . substr_replace($info['dirname'] . "/", '', 0, strlen($config['current_path'])); + if (file_exists($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'])) { + rename_file($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'], $config['fixed_image_creation_name_to_prepend'][$k] . $name . $config['fixed_image_creation_to_append'][$k], $ftp, $config); + } + } + } + } else { + response(trans('Empty_name') . AddErrorLocation())->send(); + exit; + } + } + break; + + case 'duplicate_file': + if ($config['duplicate_files']) { + $name = fix_filename($name, $config); + if (!empty($name)) { + if (!$ftp && !checkresultingsize(filesize($path))) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send(); + exit; + } + if (!duplicate_file($path, $name, $ftp, $config)) { + response(trans('Rename_existing_file') . AddErrorLocation())->send(); + exit; + } + + duplicate_file($path_thumb, $name, $ftp, $config); + + if (!$ftp && $config['fixed_image_creation']) { + $info = pathinfo($path); + foreach ($config['fixed_path_from_filemanager'] as $k => $paths) { + if ($paths != "" && $paths[strlen($paths) - 1] != "/") { + $paths .= "/"; + } + + $base_dir = $paths . substr_replace($info['dirname'] . "/", '', 0, strlen($config['current_path'])); + + if (file_exists($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'])) { + duplicate_file($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'], $config['fixed_image_creation_name_to_prepend'][$k] . $name . $config['fixed_image_creation_to_append'][$k]); + } + } + } + } else { + response(trans('Empty_name') . AddErrorLocation())->send(); + exit; + } + } + break; + + case 'paste_clipboard': + if (!isset($_SESSION['RF']['clipboard_action'], $_SESSION['RF']['clipboard']['path']) + || $_SESSION['RF']['clipboard_action'] == '' + || $_SESSION['RF']['clipboard']['path'] == '') { + response()->send(); + exit; + } + + $action = $_SESSION['RF']['clipboard_action']; + $data = $_SESSION['RF']['clipboard']; + + + if ($ftp) { + if ($_POST['path'] != "") { + $path .= DIRECTORY_SEPARATOR; + $path_thumb .= DIRECTORY_SEPARATOR; + } + $path_thumb .= basename($data['path']); + $path .= basename($data['path']); + $data['path_thumb'] = DIRECTORY_SEPARATOR . $config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $data['path']; + $data['path'] = DIRECTORY_SEPARATOR . $config['ftp_base_folder'] . $config['upload_dir'] . $data['path']; + } else { + $data['path_thumb'] = $config['thumbs_base_path'] . $data['path']; + $data['path'] = $config['current_path'] . $data['path']; + } + + $pinfo = pathinfo($data['path']); + + // user wants to paste to the same dir. nothing to do here... + if ($pinfo['dirname'] == rtrim($path, DIRECTORY_SEPARATOR)) { + response()->send(); + exit; + } + + // user wants to paste folder to it's own sub folder.. baaaah. + if (is_dir($data['path']) && strpos($path, $data['path']) !== false) { + response()->send(); + exit; + } + + // something terribly gone wrong + if ($action != 'copy' && $action != 'cut') { + response(trans('wrong action') . AddErrorLocation())->send(); + exit; + } + if ($ftp) { + if ($action == 'copy') { + $tmp = time() . basename($data['path']); + $ftp->get($tmp, $data['path'], FTP_BINARY); + $ftp->put(DIRECTORY_SEPARATOR . $path, $tmp, FTP_BINARY); + unlink($tmp); + + if (url_exists($data['path_thumb'])) { + $tmp = time() . basename($data['path_thumb']); + @$ftp->get($tmp, $data['path_thumb'], FTP_BINARY); + @$ftp->put(DIRECTORY_SEPARATOR . $path_thumb, $tmp, FTP_BINARY); + unlink($tmp); + } + } elseif ($action == 'cut') { + $ftp->rename($data['path'], DIRECTORY_SEPARATOR . $path); + if (url_exists($data['path_thumb'])) { + @$ftp->rename($data['path_thumb'], DIRECTORY_SEPARATOR . $path_thumb); + } + } + } else { + // check for writability + if (is_really_writable($path) === false || is_really_writable($path_thumb) === false) { + response(trans('Dir_No_Write') . '
          ' . str_replace('../', '', $path) . '
          ' . str_replace('../', '', $path_thumb) . AddErrorLocation())->send(); + exit; + } + + // check if server disables copy or rename + if (is_function_callable(($action == 'copy' ? 'copy' : 'rename')) === false) { + response(sprintf(trans('Function_Disabled'), ($action == 'copy' ? (trans('Copy')) : (trans('Cut')))) . AddErrorLocation())->send(); + exit; + } + if ($action == 'copy') { + list($sizeFolderToCopy, $fileNum, $foldersCount) = folder_info($path, false); + if (!checkresultingsize($sizeFolderToCopy)) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send(); + exit; + } + rcopy($data['path'], $path); + rcopy($data['path_thumb'], $path_thumb); + } elseif ($action == 'cut') { + rrename($data['path'], $path); + rrename($data['path_thumb'], $path_thumb); + + // cleanup + if (is_dir($data['path']) === TRUE){ + rrename_after_cleaner($data['path']); + rrename_after_cleaner($data['path_thumb']); + } + } + } + + // cleanup + $_SESSION['RF']['clipboard']['path'] = null; + $_SESSION['RF']['clipboard_action'] = null; + + break; + + case 'chmod': + $mode = $_POST['new_mode']; + $rec_option = $_POST['is_recursive']; + $valid_options = array('none', 'files', 'folders', 'both'); + $chmod_perm = ($_POST['folder'] ? $config['chmod_dirs'] : $config['chmod_files']); + + // check perm + if ($chmod_perm === false) { + response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? (trans('Folders')) : (trans('Files')))) . AddErrorLocation())->send(); + exit; + } + // check mode + if (!preg_match("/^[0-7]{3}$/", $mode)) { + response(trans('File_Permission_Wrong_Mode') . AddErrorLocation())->send(); + exit; + } + // check recursive option + if (!in_array($rec_option, $valid_options)) { + response(trans("wrong option") . AddErrorLocation())->send(); + exit; + } + // check if server disabled chmod + if (!$ftp && is_function_callable('chmod') === false) { + response(sprintf(trans('Function_Disabled'), 'chmod') . AddErrorLocation())->send(); + exit; + } + + $mode = "0" . $mode; + $mode = octdec($mode); + if ($ftp) { + $ftp->chmod($mode, "/" . $path); + } else { + rchmod($path, $mode, $rec_option); + } + + break; + + case 'save_text_file': + $content = $_POST['new_content']; + // $content = htmlspecialchars($content); not needed + // $content = stripslashes($content); + + if ($ftp) { + $tmp = time(); + file_put_contents($tmp, $content); + $ftp->put("/" . $path, $tmp, FTP_BINARY); + unlink($tmp); + response(trans('File_Save_OK'))->send(); + } else { + // no file + if (!file_exists($path)) { + response(trans('File_Not_Found') . AddErrorLocation())->send(); + exit; + } + + // not writable or edit not allowed + if (!is_writable($path) || $config['edit_text_files'] === false) { + response(sprintf(trans('File_Open_Edit_Not_Allowed'), strtolower(trans('Edit'))) . AddErrorLocation())->send(); + exit; + } + + if (!checkresultingsize(strlen($content))) { + response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send(); + exit; + } + if (@file_put_contents($path, $content) === false) { + response(trans('File_Save_Error') . AddErrorLocation())->send(); + exit; + } else { + response(trans('File_Save_OK'))->send(); + exit; + } + } + + break; + + default: + response(trans('wrong action') . AddErrorLocation())->send(); + exit; + } +} diff --git a/libraries/filemanager-9.14.1/force_download.php b/libraries/filemanager-9.14.1/force_download.php new file mode 100644 index 0000000..42f1666 --- /dev/null +++ b/libraries/filemanager-9.14.1/force_download.php @@ -0,0 +1,127 @@ +send(); + exit; +} + +if (!checkRelativePath($_POST['path']) || strpos($_POST['path'], '/') === 0) { + response(trans('wrong path') . AddErrorLocation(), 400)->send(); + exit; +} + +if (strpos($_POST['name'], '/') !== false) { + response(trans('wrong path') . AddErrorLocation(), 400)->send(); + exit; +} + +$ftp = ftp_con($config); + +if ($ftp) { + $path = $config['ftp_base_url'] . $config['upload_dir'] . $_POST['path']; +} else { + $path = $config['current_path'] . $_POST['path']; +} + +$name = $_POST['name']; +$info = pathinfo($name); + +if (!check_extension($info['extension'], $config)) { + response(trans('wrong extension') . AddErrorLocation(), 400)->send(); + exit; +} + +$file_name = $info['basename']; +$file_ext = $info['extension']; +$file_path = $path . $name; + + +// make sure the file exists +if ($ftp) { + header('Content-Type: application/octet-stream'); + header("Content-Transfer-Encoding: Binary"); + header("Content-disposition: attachment; filename=\"" . $file_name . "\""); + readfile($file_path); +} elseif (is_file($file_path) && is_readable($file_path)) { + if (!file_exists($path . $name)) { + response(trans('File_Not_Found') . AddErrorLocation(), 404)->send(); + exit; + } + + $size = filesize($file_path); + $file_name = rawurldecode($file_name); + + + if (function_exists('mime_content_type')) { + $mime_type = mime_content_type($file_path); + } elseif (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime_type = finfo_file($finfo, $file_path); + } else { + $mime_type = get_file_mime_type($file_path); + } + + + @ob_end_clean(); + if (ini_get('zlib.output_compression')) { + ini_set('zlib.output_compression', 'Off'); + } + header('Content-Type: ' . $mime_type); + header('Content-Disposition: attachment; filename="' . $file_name . '"'); + header("Content-Transfer-Encoding: binary"); + header('Accept-Ranges: bytes'); + + if (isset($_SERVER['HTTP_RANGE'])) { + list($a, $range) = explode("=", $_SERVER['HTTP_RANGE'], 2); + list($range) = explode(",", $range, 2); + list($range, $range_end) = explode("-", $range); + $range = intval($range); + if (!$range_end) { + $range_end = $size - 1; + } else { + $range_end = intval($range_end); + } + + $new_length = $range_end - $range + 1; + header("HTTP/1.1 206 Partial Content"); + header("Content-Length: $new_length"); + header("Content-Range: bytes $range-$range_end/$size"); + } else { + $new_length = $size; + header("Content-Length: " . $size); + } + + $chunksize = 1 * (1024 * 1024); + $bytes_send = 0; + + if ($file = fopen($file_path, 'r')) { + if (isset($_SERVER['HTTP_RANGE'])) { + fseek($file, $range); + } + + while (!feof($file) && + (!connection_aborted()) && + ($bytes_send < $new_length) + ) { + $buffer = fread($file, $chunksize); + echo $buffer; + flush(); + $bytes_send += strlen($buffer); + } + fclose($file); + } else { + die('Error - can not open file.'); + } + + die(); +} else { + // file does not exist + header("HTTP/1.0 404 Not Found"); +} + +exit; diff --git a/libraries/filemanager-9.14.1/img/clipboard_apply.png b/libraries/filemanager-9.14.1/img/clipboard_apply.png new file mode 100644 index 0000000..d470c44 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/clipboard_apply.png differ diff --git a/libraries/filemanager-9.14.1/img/clipboard_clear.png b/libraries/filemanager-9.14.1/img/clipboard_clear.png new file mode 100644 index 0000000..e7fb903 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/clipboard_clear.png differ diff --git a/libraries/filemanager-9.14.1/img/copy.png b/libraries/filemanager-9.14.1/img/copy.png new file mode 100644 index 0000000..e1d8911 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/copy.png differ diff --git a/libraries/filemanager-9.14.1/img/cut.png b/libraries/filemanager-9.14.1/img/cut.png new file mode 100644 index 0000000..a139267 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/cut.png differ diff --git a/libraries/filemanager-9.14.1/img/date.png b/libraries/filemanager-9.14.1/img/date.png new file mode 100644 index 0000000..ef310f4 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/date.png differ diff --git a/libraries/filemanager-9.14.1/img/dimension.png b/libraries/filemanager-9.14.1/img/dimension.png new file mode 100644 index 0000000..43dcc10 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/dimension.png differ diff --git a/libraries/filemanager-9.14.1/img/down.png b/libraries/filemanager-9.14.1/img/down.png new file mode 100644 index 0000000..7651122 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/down.png differ diff --git a/libraries/filemanager-9.14.1/img/download.png b/libraries/filemanager-9.14.1/img/download.png new file mode 100644 index 0000000..76125f2 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/download.png differ diff --git a/libraries/filemanager-9.14.1/img/duplicate.png b/libraries/filemanager-9.14.1/img/duplicate.png new file mode 100644 index 0000000..faa0f97 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/duplicate.png differ diff --git a/libraries/filemanager-9.14.1/img/edit_img.png b/libraries/filemanager-9.14.1/img/edit_img.png new file mode 100644 index 0000000..ca55e58 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/edit_img.png differ diff --git a/libraries/filemanager-9.14.1/img/file_edit.png b/libraries/filemanager-9.14.1/img/file_edit.png new file mode 100644 index 0000000..4bcd072 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/file_edit.png differ diff --git a/libraries/filemanager-9.14.1/img/glyphicons-halflings-white.png b/libraries/filemanager-9.14.1/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..a92969a Binary files /dev/null and b/libraries/filemanager-9.14.1/img/glyphicons-halflings-white.png differ diff --git a/libraries/filemanager-9.14.1/img/glyphicons-halflings.png b/libraries/filemanager-9.14.1/img/glyphicons-halflings.png new file mode 100644 index 0000000..f43139a Binary files /dev/null and b/libraries/filemanager-9.14.1/img/glyphicons-halflings.png differ diff --git a/libraries/filemanager-9.14.1/img/ico/ac3.jpg b/libraries/filemanager-9.14.1/img/ico/ac3.jpg new file mode 100644 index 0000000..3ce97c7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ac3.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/accdb.jpg b/libraries/filemanager-9.14.1/img/ico/accdb.jpg new file mode 100644 index 0000000..4581e5e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/accdb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ade.jpg b/libraries/filemanager-9.14.1/img/ico/ade.jpg new file mode 100644 index 0000000..b653b3d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ade.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/adp.jpg b/libraries/filemanager-9.14.1/img/ico/adp.jpg new file mode 100644 index 0000000..b653b3d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/adp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ai.jpg b/libraries/filemanager-9.14.1/img/ico/ai.jpg new file mode 100644 index 0000000..e469be3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ai.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/aiff.jpg b/libraries/filemanager-9.14.1/img/ico/aiff.jpg new file mode 100644 index 0000000..053ff30 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/aiff.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/avi.jpg b/libraries/filemanager-9.14.1/img/ico/avi.jpg new file mode 100644 index 0000000..b9ddc2d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/avi.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/bmp.jpg b/libraries/filemanager-9.14.1/img/ico/bmp.jpg new file mode 100644 index 0000000..8c771ca Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/bmp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/c4d.jpg b/libraries/filemanager-9.14.1/img/ico/c4d.jpg new file mode 100644 index 0000000..62994da Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/c4d.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/css.jpg b/libraries/filemanager-9.14.1/img/ico/css.jpg new file mode 100644 index 0000000..e1673b0 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/css.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/csv.jpg b/libraries/filemanager-9.14.1/img/ico/csv.jpg new file mode 100644 index 0000000..ca93201 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/csv.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/default.jpg b/libraries/filemanager-9.14.1/img/ico/default.jpg new file mode 100644 index 0000000..94ca669 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/default.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/dmg.jpg b/libraries/filemanager-9.14.1/img/ico/dmg.jpg new file mode 100644 index 0000000..2494e87 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/dmg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/doc.jpg b/libraries/filemanager-9.14.1/img/ico/doc.jpg new file mode 100644 index 0000000..c0e14b3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/doc.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/docx.jpg b/libraries/filemanager-9.14.1/img/ico/docx.jpg new file mode 100644 index 0000000..c0e14b3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/docx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/dwg.jpg b/libraries/filemanager-9.14.1/img/ico/dwg.jpg new file mode 100644 index 0000000..bf5d63f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/dwg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/dxf.jpg b/libraries/filemanager-9.14.1/img/ico/dxf.jpg new file mode 100644 index 0000000..7041cbe Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/dxf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/favicon.ico b/libraries/filemanager-9.14.1/img/ico/favicon.ico new file mode 100644 index 0000000..7383707 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/favicon.ico differ diff --git a/libraries/filemanager-9.14.1/img/ico/fla.jpg b/libraries/filemanager-9.14.1/img/ico/fla.jpg new file mode 100644 index 0000000..41bd2ec Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/fla.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/flv.jpg b/libraries/filemanager-9.14.1/img/ico/flv.jpg new file mode 100644 index 0000000..75aff12 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/flv.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/folder.png b/libraries/filemanager-9.14.1/img/ico/folder.png new file mode 100644 index 0000000..d56b85e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/folder.png differ diff --git a/libraries/filemanager-9.14.1/img/ico/folder_back.png b/libraries/filemanager-9.14.1/img/ico/folder_back.png new file mode 100644 index 0000000..dc0786e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/folder_back.png differ diff --git a/libraries/filemanager-9.14.1/img/ico/gif.jpg b/libraries/filemanager-9.14.1/img/ico/gif.jpg new file mode 100644 index 0000000..8c771ca Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/gif.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/gz.jpg b/libraries/filemanager-9.14.1/img/ico/gz.jpg new file mode 100644 index 0000000..36d1591 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/gz.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/html.jpg b/libraries/filemanager-9.14.1/img/ico/html.jpg new file mode 100644 index 0000000..a1af20d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/html.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/iso.jpg b/libraries/filemanager-9.14.1/img/ico/iso.jpg new file mode 100644 index 0000000..379f506 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/iso.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/jpeg.jpg b/libraries/filemanager-9.14.1/img/ico/jpeg.jpg new file mode 100644 index 0000000..0be5ac5 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/jpeg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/jpg.jpg b/libraries/filemanager-9.14.1/img/ico/jpg.jpg new file mode 100644 index 0000000..8c771ca Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/jpg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/log.jpg b/libraries/filemanager-9.14.1/img/ico/log.jpg new file mode 100644 index 0000000..ec6d3e3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/log.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/m4a.jpg b/libraries/filemanager-9.14.1/img/ico/m4a.jpg new file mode 100644 index 0000000..5c6417c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/m4a.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mdb.jpg b/libraries/filemanager-9.14.1/img/ico/mdb.jpg new file mode 100644 index 0000000..4581e5e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mdb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mid.jpg b/libraries/filemanager-9.14.1/img/ico/mid.jpg new file mode 100644 index 0000000..176cd71 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mid.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mov.jpg b/libraries/filemanager-9.14.1/img/ico/mov.jpg new file mode 100644 index 0000000..78a2ffa Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mov.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mp3.jpg b/libraries/filemanager-9.14.1/img/ico/mp3.jpg new file mode 100644 index 0000000..b79ba99 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mp3.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mp4.jpg b/libraries/filemanager-9.14.1/img/ico/mp4.jpg new file mode 100644 index 0000000..50184ef Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mp4.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mpeg.jpg b/libraries/filemanager-9.14.1/img/ico/mpeg.jpg new file mode 100644 index 0000000..50f99ff Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mpeg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/mpg.jpg b/libraries/filemanager-9.14.1/img/ico/mpg.jpg new file mode 100644 index 0000000..daa2bc4 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/mpg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/odb.jpg b/libraries/filemanager-9.14.1/img/ico/odb.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/odb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/odf.jpg b/libraries/filemanager-9.14.1/img/ico/odf.jpg new file mode 100644 index 0000000..da290dc Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/odf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/odg.jpg b/libraries/filemanager-9.14.1/img/ico/odg.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/odg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/odp.jpg b/libraries/filemanager-9.14.1/img/ico/odp.jpg new file mode 100644 index 0000000..da290dc Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/odp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ods.jpg b/libraries/filemanager-9.14.1/img/ico/ods.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ods.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/odt.jpg b/libraries/filemanager-9.14.1/img/ico/odt.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/odt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ogg.jpg b/libraries/filemanager-9.14.1/img/ico/ogg.jpg new file mode 100644 index 0000000..e20ab2f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ogg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/otg.jpg b/libraries/filemanager-9.14.1/img/ico/otg.jpg new file mode 100644 index 0000000..af44482 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/otg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/otp.jpg b/libraries/filemanager-9.14.1/img/ico/otp.jpg new file mode 100644 index 0000000..802e78c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/otp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ots.jpg b/libraries/filemanager-9.14.1/img/ico/ots.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ots.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ott.jpg b/libraries/filemanager-9.14.1/img/ico/ott.jpg new file mode 100644 index 0000000..1a4157e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ott.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/pdf.jpg b/libraries/filemanager-9.14.1/img/ico/pdf.jpg new file mode 100644 index 0000000..2080921 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/pdf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/png.jpg b/libraries/filemanager-9.14.1/img/ico/png.jpg new file mode 100644 index 0000000..8c771ca Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/png.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/ppt.jpg b/libraries/filemanager-9.14.1/img/ico/ppt.jpg new file mode 100644 index 0000000..aa13f73 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/ppt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/pptx.jpg b/libraries/filemanager-9.14.1/img/ico/pptx.jpg new file mode 100644 index 0000000..8504969 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/pptx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/psd.jpg b/libraries/filemanager-9.14.1/img/ico/psd.jpg new file mode 100644 index 0000000..53028c5 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/psd.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/rar.jpg b/libraries/filemanager-9.14.1/img/ico/rar.jpg new file mode 100644 index 0000000..36d1591 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/rar.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/rtf.jpg b/libraries/filemanager-9.14.1/img/ico/rtf.jpg new file mode 100644 index 0000000..c0e14b3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/rtf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/skp.jpg b/libraries/filemanager-9.14.1/img/ico/skp.jpg new file mode 100644 index 0000000..6ebcde0 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/skp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/sql.jpg b/libraries/filemanager-9.14.1/img/ico/sql.jpg new file mode 100644 index 0000000..46794ad Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/sql.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/stp.jpg b/libraries/filemanager-9.14.1/img/ico/stp.jpg new file mode 100644 index 0000000..cab6077 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/stp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/svg.jpg b/libraries/filemanager-9.14.1/img/ico/svg.jpg new file mode 100644 index 0000000..8c771ca Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/svg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/tar.jpg b/libraries/filemanager-9.14.1/img/ico/tar.jpg new file mode 100644 index 0000000..665cd03 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/tar.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/tiff.jpg b/libraries/filemanager-9.14.1/img/ico/tiff.jpg new file mode 100644 index 0000000..afe2cde Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/tiff.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/txt.jpg b/libraries/filemanager-9.14.1/img/ico/txt.jpg new file mode 100644 index 0000000..ec6d3e3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/txt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/vwx.jpg b/libraries/filemanager-9.14.1/img/ico/vwx.jpg new file mode 100644 index 0000000..c56cad7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/vwx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/wav.jpg b/libraries/filemanager-9.14.1/img/ico/wav.jpg new file mode 100644 index 0000000..e20ab2f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/wav.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/webm.jpg b/libraries/filemanager-9.14.1/img/ico/webm.jpg new file mode 100644 index 0000000..b9ddc2d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/webm.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/wma.jpg b/libraries/filemanager-9.14.1/img/ico/wma.jpg new file mode 100644 index 0000000..b9ddc2d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/wma.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/xhtml.jpg b/libraries/filemanager-9.14.1/img/ico/xhtml.jpg new file mode 100644 index 0000000..5979c91 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/xhtml.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/xls.jpg b/libraries/filemanager-9.14.1/img/ico/xls.jpg new file mode 100644 index 0000000..4f656f7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/xls.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/xlsx.jpg b/libraries/filemanager-9.14.1/img/ico/xlsx.jpg new file mode 100644 index 0000000..b4c33ff Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/xlsx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/xml.jpg b/libraries/filemanager-9.14.1/img/ico/xml.jpg new file mode 100644 index 0000000..73301e7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/xml.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico/zip.jpg b/libraries/filemanager-9.14.1/img/ico/zip.jpg new file mode 100644 index 0000000..36d1591 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico/zip.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ac3.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ac3.jpg new file mode 100644 index 0000000..0530f28 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ac3.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/accdb.jpg b/libraries/filemanager-9.14.1/img/ico_dark/accdb.jpg new file mode 100644 index 0000000..13607b1 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/accdb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ade.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ade.jpg new file mode 100644 index 0000000..92d67d9 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ade.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/adp.jpg b/libraries/filemanager-9.14.1/img/ico_dark/adp.jpg new file mode 100644 index 0000000..92d67d9 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/adp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ai.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ai.jpg new file mode 100644 index 0000000..b7c353b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ai.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/aiff.jpg b/libraries/filemanager-9.14.1/img/ico_dark/aiff.jpg new file mode 100644 index 0000000..f0422da Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/aiff.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/avi.jpg b/libraries/filemanager-9.14.1/img/ico_dark/avi.jpg new file mode 100644 index 0000000..9dfa9fe Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/avi.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/bmp.jpg b/libraries/filemanager-9.14.1/img/ico_dark/bmp.jpg new file mode 100644 index 0000000..f479380 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/bmp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/css.jpg b/libraries/filemanager-9.14.1/img/ico_dark/css.jpg new file mode 100644 index 0000000..8c80e15 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/css.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/csv.jpg b/libraries/filemanager-9.14.1/img/ico_dark/csv.jpg new file mode 100644 index 0000000..b81a32b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/csv.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/default.jpg b/libraries/filemanager-9.14.1/img/ico_dark/default.jpg new file mode 100644 index 0000000..433adcf Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/default.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/dmg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/dmg.jpg new file mode 100644 index 0000000..509039e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/dmg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/doc.jpg b/libraries/filemanager-9.14.1/img/ico_dark/doc.jpg new file mode 100644 index 0000000..122d382 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/doc.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/docx.jpg b/libraries/filemanager-9.14.1/img/ico_dark/docx.jpg new file mode 100644 index 0000000..9b0bc4b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/docx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/favicon.ico b/libraries/filemanager-9.14.1/img/ico_dark/favicon.ico new file mode 100644 index 0000000..7383707 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/favicon.ico differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/fla.jpg b/libraries/filemanager-9.14.1/img/ico_dark/fla.jpg new file mode 100644 index 0000000..e8757e6 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/fla.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/flv.jpg b/libraries/filemanager-9.14.1/img/ico_dark/flv.jpg new file mode 100644 index 0000000..c53f135 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/flv.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/folder.png b/libraries/filemanager-9.14.1/img/ico_dark/folder.png new file mode 100644 index 0000000..a5fac96 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/folder.png differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/folder_back.png b/libraries/filemanager-9.14.1/img/ico_dark/folder_back.png new file mode 100644 index 0000000..dc0786e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/folder_back.png differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/gif.jpg b/libraries/filemanager-9.14.1/img/ico_dark/gif.jpg new file mode 100644 index 0000000..f479380 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/gif.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/gz.jpg b/libraries/filemanager-9.14.1/img/ico_dark/gz.jpg new file mode 100644 index 0000000..414d5da Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/gz.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/html.jpg b/libraries/filemanager-9.14.1/img/ico_dark/html.jpg new file mode 100644 index 0000000..6bb6743 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/html.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/iso.jpg b/libraries/filemanager-9.14.1/img/ico_dark/iso.jpg new file mode 100644 index 0000000..aaf5d5b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/iso.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/jpeg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/jpeg.jpg new file mode 100644 index 0000000..b4f258a Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/jpeg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/jpg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/jpg.jpg new file mode 100644 index 0000000..f479380 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/jpg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/log.jpg b/libraries/filemanager-9.14.1/img/ico_dark/log.jpg new file mode 100644 index 0000000..c2fe0e7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/log.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/m4a.jpg b/libraries/filemanager-9.14.1/img/ico_dark/m4a.jpg new file mode 100644 index 0000000..f3997e6 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/m4a.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mdb.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mdb.jpg new file mode 100644 index 0000000..13607b1 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mdb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mid.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mid.jpg new file mode 100644 index 0000000..966b39c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mid.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mov.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mov.jpg new file mode 100644 index 0000000..2e98f5e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mov.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mp3.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mp3.jpg new file mode 100644 index 0000000..fd66149 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mp3.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mp4.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mp4.jpg new file mode 100644 index 0000000..0b045ed Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mp4.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mpeg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mpeg.jpg new file mode 100644 index 0000000..f075cc3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mpeg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/mpg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/mpg.jpg new file mode 100644 index 0000000..0da2aad Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/mpg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/odb.jpg b/libraries/filemanager-9.14.1/img/ico_dark/odb.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/odb.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/odf.jpg b/libraries/filemanager-9.14.1/img/ico_dark/odf.jpg new file mode 100644 index 0000000..8f40c74 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/odf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/odg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/odg.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/odg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/odp.jpg b/libraries/filemanager-9.14.1/img/ico_dark/odp.jpg new file mode 100644 index 0000000..8f40c74 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/odp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ods.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ods.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ods.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/odt.jpg b/libraries/filemanager-9.14.1/img/ico_dark/odt.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/odt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ogg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ogg.jpg new file mode 100644 index 0000000..23ed22b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ogg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/otg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/otg.jpg new file mode 100644 index 0000000..b36cae5 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/otg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/otp.jpg b/libraries/filemanager-9.14.1/img/ico_dark/otp.jpg new file mode 100644 index 0000000..fc995f5 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/otp.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ots.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ots.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ots.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ott.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ott.jpg new file mode 100644 index 0000000..eb6522c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ott.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/pdf.jpg b/libraries/filemanager-9.14.1/img/ico_dark/pdf.jpg new file mode 100644 index 0000000..809b5e6 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/pdf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/png.jpg b/libraries/filemanager-9.14.1/img/ico_dark/png.jpg new file mode 100644 index 0000000..f479380 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/png.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/ppt.jpg b/libraries/filemanager-9.14.1/img/ico_dark/ppt.jpg new file mode 100644 index 0000000..b87590a Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/ppt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/pptx.jpg b/libraries/filemanager-9.14.1/img/ico_dark/pptx.jpg new file mode 100644 index 0000000..62cbe2f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/pptx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/psd.jpg b/libraries/filemanager-9.14.1/img/ico_dark/psd.jpg new file mode 100644 index 0000000..312af5c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/psd.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/rar.jpg b/libraries/filemanager-9.14.1/img/ico_dark/rar.jpg new file mode 100644 index 0000000..6057cbc Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/rar.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/rtf.jpg b/libraries/filemanager-9.14.1/img/ico_dark/rtf.jpg new file mode 100644 index 0000000..122d382 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/rtf.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/sql.jpg b/libraries/filemanager-9.14.1/img/ico_dark/sql.jpg new file mode 100644 index 0000000..73485f1 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/sql.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/svg.jpg b/libraries/filemanager-9.14.1/img/ico_dark/svg.jpg new file mode 100644 index 0000000..f479380 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/svg.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/tar.jpg b/libraries/filemanager-9.14.1/img/ico_dark/tar.jpg new file mode 100644 index 0000000..bb5adaf Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/tar.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/tiff.jpg b/libraries/filemanager-9.14.1/img/ico_dark/tiff.jpg new file mode 100644 index 0000000..e25985d Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/tiff.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/txt.jpg b/libraries/filemanager-9.14.1/img/ico_dark/txt.jpg new file mode 100644 index 0000000..c2fe0e7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/txt.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/wav.jpg b/libraries/filemanager-9.14.1/img/ico_dark/wav.jpg new file mode 100644 index 0000000..23ed22b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/wav.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/webm.jpg b/libraries/filemanager-9.14.1/img/ico_dark/webm.jpg new file mode 100644 index 0000000..b6c568c Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/webm.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/wma.jpg b/libraries/filemanager-9.14.1/img/ico_dark/wma.jpg new file mode 100644 index 0000000..9dfa9fe Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/wma.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/xhtml.jpg b/libraries/filemanager-9.14.1/img/ico_dark/xhtml.jpg new file mode 100644 index 0000000..3420b33 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/xhtml.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/xls.jpg b/libraries/filemanager-9.14.1/img/ico_dark/xls.jpg new file mode 100644 index 0000000..62e21dd Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/xls.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/xlsx.jpg b/libraries/filemanager-9.14.1/img/ico_dark/xlsx.jpg new file mode 100644 index 0000000..c1728bc Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/xlsx.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/xml.jpg b/libraries/filemanager-9.14.1/img/ico_dark/xml.jpg new file mode 100644 index 0000000..7b2d75b Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/xml.jpg differ diff --git a/libraries/filemanager-9.14.1/img/ico_dark/zip.jpg b/libraries/filemanager-9.14.1/img/ico_dark/zip.jpg new file mode 100644 index 0000000..414d5da Binary files /dev/null and b/libraries/filemanager-9.14.1/img/ico_dark/zip.jpg differ diff --git a/libraries/filemanager-9.14.1/img/info.png b/libraries/filemanager-9.14.1/img/info.png new file mode 100644 index 0000000..6baffc3 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/info.png differ diff --git a/libraries/filemanager-9.14.1/img/key.png b/libraries/filemanager-9.14.1/img/key.png new file mode 100644 index 0000000..463d082 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/key.png differ diff --git a/libraries/filemanager-9.14.1/img/label.png b/libraries/filemanager-9.14.1/img/label.png new file mode 100644 index 0000000..fa65317 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/label.png differ diff --git a/libraries/filemanager-9.14.1/img/loading.gif b/libraries/filemanager-9.14.1/img/loading.gif new file mode 100644 index 0000000..6fba776 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/loading.gif differ diff --git a/libraries/filemanager-9.14.1/img/logo.png b/libraries/filemanager-9.14.1/img/logo.png new file mode 100644 index 0000000..2d2c0b2 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/logo.png differ diff --git a/libraries/filemanager-9.14.1/img/preview.png b/libraries/filemanager-9.14.1/img/preview.png new file mode 100644 index 0000000..b124752 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/preview.png differ diff --git a/libraries/filemanager-9.14.1/img/processing.gif b/libraries/filemanager-9.14.1/img/processing.gif new file mode 100644 index 0000000..7c99504 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/processing.gif differ diff --git a/libraries/filemanager-9.14.1/img/rename.png b/libraries/filemanager-9.14.1/img/rename.png new file mode 100644 index 0000000..a425ee7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/rename.png differ diff --git a/libraries/filemanager-9.14.1/img/size.png b/libraries/filemanager-9.14.1/img/size.png new file mode 100644 index 0000000..fcc302f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/size.png differ diff --git a/libraries/filemanager-9.14.1/img/sort.png b/libraries/filemanager-9.14.1/img/sort.png new file mode 100644 index 0000000..0a029be Binary files /dev/null and b/libraries/filemanager-9.14.1/img/sort.png differ diff --git a/libraries/filemanager-9.14.1/img/storing_animation.gif b/libraries/filemanager-9.14.1/img/storing_animation.gif new file mode 100644 index 0000000..eca3a53 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/storing_animation.gif differ diff --git a/libraries/filemanager-9.14.1/img/trans.jpg b/libraries/filemanager-9.14.1/img/trans.jpg new file mode 100644 index 0000000..147175e Binary files /dev/null and b/libraries/filemanager-9.14.1/img/trans.jpg differ diff --git a/libraries/filemanager-9.14.1/img/up.png b/libraries/filemanager-9.14.1/img/up.png new file mode 100644 index 0000000..680dade Binary files /dev/null and b/libraries/filemanager-9.14.1/img/up.png differ diff --git a/libraries/filemanager-9.14.1/img/upload.png b/libraries/filemanager-9.14.1/img/upload.png new file mode 100644 index 0000000..7380e8f Binary files /dev/null and b/libraries/filemanager-9.14.1/img/upload.png differ diff --git a/libraries/filemanager-9.14.1/img/url.png b/libraries/filemanager-9.14.1/img/url.png new file mode 100644 index 0000000..f18499a Binary files /dev/null and b/libraries/filemanager-9.14.1/img/url.png differ diff --git a/libraries/filemanager-9.14.1/img/zip.png b/libraries/filemanager-9.14.1/img/zip.png new file mode 100644 index 0000000..9ef55c7 Binary files /dev/null and b/libraries/filemanager-9.14.1/img/zip.png differ diff --git a/libraries/filemanager-9.14.1/include/FtpClient.php b/libraries/filemanager-9.14.1/include/FtpClient.php new file mode 100644 index 0000000..4283b8a --- /dev/null +++ b/libraries/filemanager-9.14.1/include/FtpClient.php @@ -0,0 +1,884 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * @copyright Nicolas Tallefourtane http://nicolab.net + */ +namespace FtpClient; + +use \Countable; + +/** + * The FTP and SSL-FTP client for PHP. + * + * @method bool alloc() alloc(int $filesize, string &$result = null) Allocates space for a file to be uploaded + * @method bool cdup() cdup() Changes to the parent directory + * @method bool chdir() chdir(string $directory) Changes the current directory on a FTP server + * @method int chmod() chmod(int $mode, string $filename) Set permissions on a file via FTP + * @method bool delete() delete(string $path) Deletes a file on the FTP server + * @method bool exec() exec(string $command) Requests execution of a command on the FTP server + * @method bool fget() fget(resource $handle, string $remote_file, int $mode, int $resumepos = 0) Downloads a file from the FTP server and saves to an open file + * @method bool fput() fput(string $remote_file, resource $handle, int $mode, int $startpos = 0) Uploads from an open file to the FTP server + * @method mixed get_option() get_option(int $option) Retrieves various runtime behaviours of the current FTP stream + * @method bool get() get(string $local_file, string $remote_file, int $mode, int $resumepos = 0) Downloads a file from the FTP server + * @method int mdtm() mdtm(string $remote_file) Returns the last modified time of the given file + * @method int nb_continue() nb_continue() Continues retrieving/sending a file (non-blocking) + * @method int nb_fget() nb_fget(resource $handle, string $remote_file, int $mode, int $resumepos = 0) Retrieves a file from the FTP server and writes it to an open file (non-blocking) + * @method int nb_fput() nb_fput(string $remote_file, resource $handle, int $mode, int $startpos = 0) Stores a file from an open file to the FTP server (non-blocking) + * @method int nb_get() nb_get(string $local_file, string $remote_file, int $mode, int $resumepos = 0) Retrieves a file from the FTP server and writes it to a local file (non-blocking) + * @method int nb_put() nb_put(string $remote_file, string $local_file, int $mode, int $startpos = 0) Stores a file on the FTP server (non-blocking) + * @method bool pasv() pasv(bool $pasv) Turns passive mode on or off + * @method bool put() put(string $remote_file, string $local_file, int $mode, int $startpos = 0) Uploads a file to the FTP server + * @method string pwd() pwd() Returns the current directory name + * @method bool quit() quit() Closes an FTP connection + * @method array raw() raw(string $command) Sends an arbitrary command to an FTP server + * @method bool rename() rename(string $oldname, string $newname) Renames a file or a directory on the FTP server + * @method bool set_option() set_option(int $option, mixed $value) Set miscellaneous runtime FTP options + * @method bool site() site(string $command) Sends a SITE command to the server + * @method int size() size(string $remote_file) Returns the size of the given file + * @method string systype() systype() Returns the system type identifier of the remote FTP server + * + * @author Nicolas Tallefourtane + */ +class FtpClient implements Countable +{ + /** + * The connection with the server. + * + * @var resource + */ + protected $conn; + + /** + * PHP FTP functions wrapper. + * + * @var FtpWrapper + */ + private $ftp; + + /** + * Constructor. + * + * @param resource|null $connection + * @throws FtpException If FTP extension is not loaded. + */ + public function __construct($connection = null) + { + if (!extension_loaded('ftp')) { + throw new FtpException('FTP extension is not loaded!'); + } + + if ($connection) { + $this->conn = $connection; + } + + $this->setWrapper(new FtpWrapper($this->conn)); + } + + /** + * Close the connection when the object is destroyed. + */ + public function __destruct() + { + if ($this->conn) { + $this->ftp->close(); + } + } + + /** + * Call an internal method or a FTP method handled by the wrapper. + * + * Wrap the FTP PHP functions to call as method of FtpClient object. + * The connection is automaticaly passed to the FTP PHP functions. + * + * @param string $method + * @param array $arguments + * @return mixed + * @throws FtpException When the function is not valid + */ + public function __call($method, array $arguments) + { + return $this->ftp->__call($method, $arguments); + } + + /** + * Overwrites the PHP limit + * + * @param string|null $memory The memory limit, if null is not modified + * @param int $time_limit The max execution time, unlimited by default + * @param bool $ignore_user_abort Ignore user abort, true by default + * @return FtpClient + */ + public function setPhpLimit($memory = null, $time_limit = 0, $ignore_user_abort = true) + { + if (null !== $memory) { + ini_set('memory_limit', $memory); + } + + ignore_user_abort(true); + set_time_limit($time_limit); + + return $this; + } + + /** + * Get the help information of the remote FTP server. + * + * @return array + */ + public function help() + { + return $this->ftp->raw('help'); + } + + /** + * Open a FTP connection. + * + * @param string $host + * @param bool $ssl + * @param int $port + * @param int $timeout + * + * @return FTPClient + * @throws FtpException If unable to connect + */ + public function connect($host, $ssl = false, $port = 21, $timeout = 90) + { + if ($ssl) { + $this->conn = @$this->ftp->ssl_connect($host, $port, $timeout); + } else { + $this->conn = @$this->ftp->connect($host, $port, $timeout); + } + + if (!$this->conn) { + throw new FtpException('Unable to connect'); + } + + return $this; + } + + /** + * Closes the current FTP connection. + * + * @return bool + */ + public function close() + { + if ($this->conn) { + $this->ftp->close(); + $this->conn = null; + } + } + + /** + * Get the connection with the server. + * + * @return resource + */ + public function getConnection() + { + return $this->conn; + } + + /** + * Get the wrapper. + * + * @return FtpWrapper + */ + public function getWrapper() + { + return $this->ftp; + } + + /** + * Logs in to an FTP connection. + * + * @param string $username + * @param string $password + * + * @return FtpClient + * @throws FtpException If the login is incorrect + */ + public function login($username = 'anonymous', $password = '') + { + $result = $this->ftp->login($username, $password); + + if ($result === false) { + throw new FtpException('Login incorrect'); + } + + return $this; + } + + /** + * Returns the last modified time of the given file. + * Return -1 on error + * + * @param string $remoteFile + * @param string|null $format + * + * @return int + */ + public function modifiedTime($remoteFile, $format = null) + { + $time = $this->ftp->mdtm($remoteFile); + + if ($time !== -1 && $format !== null) { + return date($format, $time); + } + + return $time; + } + + /** + * Changes to the parent directory. + * + * @throws FtpException + * @return FtpClient + */ + public function up() + { + $result = @$this->ftp->cdup(); + + if ($result === false) { + throw new FtpException('Unable to get parent folder'); + } + + return $this; + } + + /** + * Returns a list of files in the given directory. + * + * @param string $directory The directory, by default is "." the current directory + * @param bool $recursive + * @param callable $filter A callable to filter the result, by default is asort() PHP function. + * The result is passed in array argument, + * must take the argument by reference ! + * The callable should proceed with the reference array + * because is the behavior of several PHP sorting + * functions (by reference ensure directly the compatibility + * with all PHP sorting functions). + * + * @return array + * @throws FtpException If unable to list the directory + */ + public function nlist($directory = '.', $recursive = false, $filter = 'sort') + { + if (!$this->isDir($directory)) { + throw new FtpException('"'.$directory.'" is not a directory'); + } + + $files = $this->ftp->nlist($directory); + + if ($files === false) { + throw new FtpException('Unable to list directory'); + } + + $result = array(); + $dir_len = strlen($directory); + + // if it's the current + if (false !== ($kdot = array_search('.', $files))) { + unset($files[$kdot]); + } + + // if it's the parent + if(false !== ($kdot = array_search('..', $files))) { + unset($files[$kdot]); + } + + if (!$recursive) { + foreach ($files as $file) { + $result[] = $directory.'/'.$file; + } + + // working with the reference (behavior of several PHP sorting functions) + $filter($result); + + return $result; + } + + // utils for recursion + $flatten = function (array $arr) use (&$flatten) { + + $flat = []; + + foreach ($arr as $k => $v) { + if (is_array($v)) { + $flat = array_merge($flat, $flatten($v)); + } else { + $flat[] = $v; + } + } + + return $flat; + }; + + foreach ($files as $file) { + $file = $directory.'/'.$file; + + // if contains the root path (behavior of the recursivity) + if (0 === strpos($file, $directory, $dir_len)) { + $file = substr($file, $dir_len); + } + + if ($this->isDir($file)) { + $result[] = $file; + $items = $flatten($this->nlist($file, true, $filter)); + + foreach ($items as $item) { + $result[] = $item; + } + + } else { + $result[] = $file; + } + } + + $result = array_unique($result); + + $filter($result); + + return $result; + } + + /** + * Creates a directory. + * + * @see FtpClient::rmdir() + * @see FtpClient::remove() + * @see FtpClient::put() + * @see FtpClient::putAll() + * + * @param string $directory The directory + * @param bool $recursive + * @return array + */ + public function mkdir($directory, $recursive = false) + { + if (!$recursive or $this->isDir($directory)) { + return $this->ftp->mkdir($directory); + } + + $result = false; + $pwd = $this->ftp->pwd(); + $parts = explode('/', $directory); + + foreach ($parts as $part) { + + if (!@$this->ftp->chdir($part)) { + $result = $this->ftp->mkdir($part); + $this->ftp->chdir($part); + } + } + + $this->ftp->chdir($pwd); + + return $result; + } + + /** + * Remove a directory. + * + * @see FtpClient::mkdir() + * @see FtpClient::cleanDir() + * @see FtpClient::remove() + * @see FtpClient::delete() + * @param string $directory + * @param bool $recursive Forces deletion if the directory is not empty + * @return bool + * @throws FtpException If unable to list the directory to remove + */ + public function rmdir($directory, $recursive = true) + { + if ($recursive) { + $files = $this->nlist($directory, false, 'rsort'); + + // remove children + foreach ($files as $file) { + $this->remove($file, true); + } + } + + // remove the directory + return $this->ftp->rmdir($directory); + } + + /** + * Empty directory. + * + * @see FtpClient::remove() + * @see FtpClient::delete() + * @see FtpClient::rmdir() + * + * @param string $directory + * @return bool + */ + public function cleanDir($directory) + { + if(!$files = $this->nlist($directory)) { + return $this->isEmpty($directory); + } + + // remove children + foreach ($files as $file) { + $this->remove($file, true); + } + + return $this->isEmpty($directory); + } + + /** + * Remove a file or a directory. + * + * @see FtpClient::rmdir() + * @see FtpClient::cleanDir() + * @see FtpClient::delete() + * @param string $path The path of the file or directory to remove + * @param bool $recursive Is effective only if $path is a directory, {@see FtpClient::rmdir()} + * @return bool + */ + public function remove($path, $recursive = false) + { + try { + if (@$this->ftp->delete($path) + or ($this->isDir($path) and @$this->rmdir($path, $recursive))) { + return true; + } + + return false; + } catch (\Exception $e) { + return false; + } + } + + /** + * Check if a directory exist. + * + * @param string $directory + * @return bool + * @throws FtpException + */ + public function isDir($directory) + { + $pwd = $this->ftp->pwd(); + + if ($pwd === false) { + throw new FtpException('Unable to resolve the current directory'); + } + + if (@$this->ftp->chdir($directory)) { + $this->ftp->chdir($pwd); + return true; + } + + $this->ftp->chdir($pwd); + + return false; + } + + /** + * Check if a directory is empty. + * + * @param string $directory + * @return bool + */ + public function isEmpty($directory) + { + return $this->count($directory, null, false) === 0 ? true : false; + } + + /** + * Scan a directory and returns the details of each item. + * + * @see FtpClient::nlist() + * @see FtpClient::rawlist() + * @see FtpClient::parseRawList() + * @see FtpClient::dirSize() + * @param string $directory + * @param bool $recursive + * @return array + */ + public function scanDir($directory = '.', $recursive = false) + { + return $this->parseRawList($this->rawlist($directory, $recursive)); + } + + /** + * Returns the total size of the given directory in bytes. + * + * @param string $directory The directory, by default is the current directory. + * @param bool $recursive true by default + * @return int The size in bytes. + */ + public function dirSize($directory = '.', $recursive = true) + { + $items = $this->scanDir($directory, $recursive); + $size = 0; + + foreach ($items as $item) { + $size += (int) $item['size']; + } + + return $size; + } + + /** + * Count the items (file, directory, link, unknown). + * + * @param string $directory The directory, by default is the current directory. + * @param string|null $type The type of item to count (file, directory, link, unknown) + * @param bool $recursive true by default + * @return int + */ + public function count($directory = '.', $type = null, $recursive = true) + { + $items = (null === $type ? $this->nlist($directory, $recursive) + : $this->scanDir($directory, $recursive)); + + $count = 0; + foreach ($items as $item) { + if (null === $type or $item['type'] == $type) { + $count++; + } + } + + return $count; + } + + /** + * Uploads a file to the server from a string. + * + * @param string $remote_file + * @param string $content + * @return FtpClient + * @throws FtpException When the transfer fails + */ + public function putFromString($remote_file, $content) + { + $handle = fopen('php://temp', 'w'); + + fwrite($handle, $content); + rewind($handle); + + if ($this->ftp->fput($remote_file, $handle, FTP_BINARY)) { + return $this; + } + + throw new FtpException('Unable to put the file "'.$remote_file.'"'); + } + + /** + * Uploads a file to the server. + * + * @param string $local_file + * @return FtpClient + * @throws FtpException When the transfer fails + */ + public function putFromPath($local_file) + { + $remote_file = basename($local_file); + $handle = fopen($local_file, 'r'); + + if ($this->ftp->fput($remote_file, $handle, FTP_BINARY)) { + rewind($handle); + return $this; + } + + throw new FtpException( + 'Unable to put the remote file from the local file "'.$local_file.'"' + ); + } + + /** + * Upload files. + * + * @param string $source_directory + * @param string $target_directory + * @param int $mode + * @return FtpClient + */ + public function putAll($source_directory, $target_directory, $mode = FTP_BINARY) + { + $d = dir($source_directory); + + // do this for each file in the directory + while ($file = $d->read()) { + + // to prevent an infinite loop + if ($file != "." && $file != "..") { + + // do the following if it is a directory + if (is_dir($source_directory.'/'.$file)) { + + if (!$this->isDir($target_directory.'/'.$file)) { + + // create directories that do not yet exist + $this->ftp->mkdir($target_directory.'/'.$file); + } + + // recursive part + $this->putAll( + $source_directory.'/'.$file, $target_directory.'/'.$file, + $mode + ); + } else { + + // put the files + $this->ftp->put( + $target_directory.'/'.$file, $source_directory.'/'.$file, + $mode + ); + } + } + } + + return $this; + } + + /** + * Returns a detailed list of files in the given directory. + * + * @see FtpClient::nlist() + * @see FtpClient::scanDir() + * @see FtpClient::dirSize() + * @param string $directory The directory, by default is the current directory + * @param bool $recursive + * @return array + * @throws FtpException + */ + public function rawlist($directory = '.', $recursive = false) + { + if (!$this->isDir($directory)) { + throw new FtpException('"'.$directory.'" is not a directory.'); + } + + $list = $this->ftp->rawlist($directory); + $items = array(); + + if (!$list) { + return $items; + } + + if (false == $recursive) { + + foreach ($list as $path => $item) { + $chunks = preg_split("/\s+/", $item); + + // if not "name" + if (empty($chunks[8]) || $chunks[8] == '.' || $chunks[8] == '..') { + continue; + } + + $path = $directory.'/'.$chunks[8]; + + if (isset($chunks[9])) { + $nbChunks = count($chunks); + + for ($i = 9; $i < $nbChunks; $i++) { + $path .= ' '.$chunks[$i]; + } + } + + + if (substr($path, 0, 2) == './') { + $path = substr($path, 2); + } + + $items[ $this->rawToType($item).'#'.$path ] = $item; + } + + return $items; + } + + $path = ''; + + foreach ($list as $item) { + $len = strlen($item); + + if (!$len + + // "." + || ($item[$len-1] == '.' && $item[$len-2] == ' ' + + // ".." + or $item[$len-1] == '.' && $item[$len-2] == '.' && $item[$len-3] == ' ') + ){ + + continue; + } + + $chunks = preg_split("/\s+/", $item); + + // if not "name" + if (empty($chunks[8]) || $chunks[8] == '.' || $chunks[8] == '..') { + continue; + } + + $path = $directory.'/'.$chunks[8]; + + if (isset($chunks[9])) { + $nbChunks = count($chunks); + + for ($i = 9; $i < $nbChunks; $i++) { + $path .= ' '.$chunks[$i]; + } + } + + if (substr($path, 0, 2) == './') { + $path = substr($path, 2); + } + + $items[$this->rawToType($item).'#'.$path] = $item; + + if ($item[0] == 'd') { + $sublist = $this->rawlist($path, true); + + foreach ($sublist as $subpath => $subitem) { + $items[$subpath] = $subitem; + } + } + } + + return $items; + } + + /** + * Parse raw list. + * + * @see FtpClient::rawlist() + * @see FtpClient::scanDir() + * @see FtpClient::dirSize() + * @param array $rawlist + * @return array + */ + public function parseRawList(array $rawlist) + { + $items = array(); + $path = ''; + + foreach ($rawlist as $key => $child) { + $chunks = preg_split("/\s+/", $child); + + if (isset($chunks[8]) && ($chunks[8] == '.' or $chunks[8] == '..')) { + continue; + } + + if (count($chunks) === 1) { + $len = strlen($chunks[0]); + + if ($len && $chunks[0][$len-1] == ':') { + $path = substr($chunks[0], 0, -1); + } + + continue; + } + + $item = [ + 'permissions' => $chunks[0], + 'number' => $chunks[1], + 'owner' => $chunks[2], + 'group' => $chunks[3], + 'size' => $chunks[4], + 'month' => $chunks[5], + 'day' => $chunks[6], + 'time' => $chunks[7], + 'name' => $chunks[8], + 'type' => $this->rawToType($chunks[0]), + ]; + + unset($chunks[0]); + unset($chunks[1]); + unset($chunks[2]); + unset($chunks[3]); + unset($chunks[4]); + unset($chunks[5]); + unset($chunks[6]); + unset($chunks[7]); + $item['name'] = implode(' ', $chunks); + + if ($item['type'] == 'link') { + $item['target'] = $chunks[10]; // 9 is "->" + } + + // if the key is not the path, behavior of ftp_rawlist() PHP function + if (is_int($key) || false === strpos($key, $item['name'])) { + array_splice($chunks, 0, 8); + + $key = $item['type'].'#' + .($path ? $path.'/' : '') + .implode(" ", $chunks); + + if ($item['type'] == 'link') { + + // get the first part of 'link#the-link.ext -> /path/of/the/source.ext' + $exp = explode(' ->', $key); + $key = rtrim($exp[0]); + } + + $items[$key] = $item; + + } else { + + // the key is the path, behavior of FtpClient::rawlist() method() + $items[$key] = $item; + } + } + + return $items; + } + + /** + * Convert raw info (drwx---r-x ...) to type (file, directory, link, unknown). + * Only the first char is used for resolving. + * + * @param string $permission Example : drwx---r-x + * + * @return string The file type (file, directory, link, unknown) + * @throws FtpException + */ + public function rawToType($permission) + { + if (!is_string($permission)) { + throw new FtpException('The "$permission" argument must be a string, "' + .gettype($permission).'" given.'); + } + + if (empty($permission[0])) { + return 'unknown'; + } + + switch ($permission[0]) { + case '-': + return 'file'; + + case 'd': + return 'directory'; + + case 'l': + return 'link'; + + default: + return 'unknown'; + } + } + + /** + * Set the wrapper which forward the PHP FTP functions to use in FtpClient instance. + * + * @param FtpWrapper $wrapper + * @return FtpClient + */ + protected function setWrapper(FtpWrapper $wrapper) + { + $this->ftp = $wrapper; + + return $this; + } +} diff --git a/libraries/filemanager-9.14.1/include/FtpException.php b/libraries/filemanager-9.14.1/include/FtpException.php new file mode 100644 index 0000000..f17ed7f --- /dev/null +++ b/libraries/filemanager-9.14.1/include/FtpException.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * @copyright Nicolas Tallefourtane http://nicolab.net + */ +namespace FtpClient; + +/** + * The FtpException class. + * Exception thrown if an error on runtime of the FTP client occurs. + * @inheritDoc + * @author Nicolas Tallefourtane + */ +class FtpException extends \Exception {} diff --git a/libraries/filemanager-9.14.1/include/FtpWrapper.php b/libraries/filemanager-9.14.1/include/FtpWrapper.php new file mode 100644 index 0000000..cd12de0 --- /dev/null +++ b/libraries/filemanager-9.14.1/include/FtpWrapper.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * @copyright Nicolas Tallefourtane http://nicolab.net + */ +namespace FtpClient; + +/** + * Wrap the PHP FTP functions + * + * @method bool alloc() alloc(int $filesize, string &$result = null) Allocates space for a file to be uploaded + * @method bool cdup() cdup() Changes to the parent directory + * @method bool chdir() chdir(string $directory) Changes the current directory on a FTP server + * @method int chmod() chmod(int $mode, string $filename) Set permissions on a file via FTP + * @method bool close() close() Closes an FTP connection + * @method bool delete() delete(string $path) Deletes a file on the FTP server + * @method bool exec() exec(string $command) Requests execution of a command on the FTP server + * @method bool fget() fget(resource $handle, string $remote_file, int $mode, int $resumepos = 0) Downloads a file from the FTP server and saves to an open file + * @method bool fput() fput(string $remote_file, resource $handle, int $mode, int $startpos = 0) Uploads from an open file to the FTP server + * @method mixed get_option() get_option(int $option) Retrieves various runtime behaviours of the current FTP stream + * @method bool get() get(string $local_file, string $remote_file, int $mode, int $resumepos = 0) Downloads a file from the FTP server + * @method bool login() login(string $username, string $password) Logs in to an FTP connection + * @method int mdtm() mdtm(string $remote_file) Returns the last modified time of the given file + * @method string mkdir() mkdir(string $directory) Creates a directory + * @method int nb_continue() nb_continue() Continues retrieving/sending a file (non-blocking) + * @method int nb_fget() nb_fget(resource $handle, string $remote_file, int $mode, int $resumepos = 0) Retrieves a file from the FTP server and writes it to an open file (non-blocking) + * @method int nb_fput() nb_fput(string $remote_file, resource $handle, int $mode, int $startpos = 0) Stores a file from an open file to the FTP server (non-blocking) + * @method int nb_get() nb_get(string $local_file, string $remote_file, int $mode, int $resumepos = 0) Retrieves a file from the FTP server and writes it to a local file (non-blocking) + * @method int nb_put() nb_put(string $remote_file, string $local_file, int $mode, int $startpos = 0) Stores a file on the FTP server (non-blocking) + * @method array nlist() nlist(string $directory) Returns a list of files in the given directory + * @method bool pasv() pasv(bool $pasv) Turns passive mode on or off + * @method bool put() put(string $remote_file, string $local_file, int $mode, int $startpos = 0) Uploads a file to the FTP server + * @method string pwd() pwd() Returns the current directory name + * @method bool quit() quit() Closes an FTP connection + * @method array raw() raw(string $command) Sends an arbitrary command to an FTP server + * @method array rawlist() rawlist(string $directory, bool $recursive = false) Returns a detailed list of files in the given directory + * @method bool rename() rename(string $oldname, string $newname) Renames a file or a directory on the FTP server + * @method bool rmdir() rmdir(string $directory) Removes a directory + * @method bool set_option() set_option(int $option, mixed $value) Set miscellaneous runtime FTP options + * @method bool site() site(string $command) Sends a SITE command to the server + * @method int size() size(string $remote_file) Returns the size of the given file + * @method string systype() systype() Returns the system type identifier of the remote FTP server + * + * @author Nicolas Tallefourtane + */ +class FtpWrapper +{ + /** + * The connection with the server + * + * @var resource + */ + protected $conn; + + /** + * Constructor. + * + * @param resource &$connection The FTP (or SSL-FTP) connection (takes by reference). + */ + public function __construct(&$connection) + { + $this->conn = &$connection; + } + + /** + * Forward the method call to FTP functions + * + * @param string $function + * @param array $arguments + * @return mixed + * @throws FtpException When the function is not valid + */ + public function __call($function, array $arguments) + { + $function = 'ftp_' . $function; + + if (function_exists($function)) { + array_unshift($arguments, $this->conn); + return call_user_func_array($function, $arguments); + } + + throw new FtpException("{$function} is not a valid FTP function"); + } + + /** + * Opens a FTP connection + * + * @param string $host + * @param int $port + * @param int $timeout + * @return resource + */ + public function connect($host, $port = 21, $timeout = 90) + { + return ftp_connect($host, $port, $timeout); + } + + /** + * Opens a Secure SSL-FTP connection + * @param string $host + * @param int $port + * @param int $timeout + * @return resource + */ + public function ssl_connect($host, $port = 21, $timeout = 90) + { + return ftp_ssl_connect($host, $port, $timeout); + } +} diff --git a/libraries/filemanager-9.14.1/include/Response.php b/libraries/filemanager-9.14.1/include/Response.php new file mode 100644 index 0000000..ae9f10c --- /dev/null +++ b/libraries/filemanager-9.14.1/include/Response.php @@ -0,0 +1,365 @@ + 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', // RFC2518 + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', // RFC4918 + 208 => 'Already Reported', // RFC5842 + 226 => 'IM Used', // RFC3229 + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Reserved', + 307 => 'Temporary Redirect', + 308 => 'Permanent Redirect', // RFC7238 + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', // RFC2324 + 422 => 'Unprocessable Entity', // RFC4918 + 423 => 'Locked', // RFC4918 + 424 => 'Failed Dependency', // RFC4918 + 425 => 'Reserved for WebDAV advanced collections expired proposal', // RFC2817 + 426 => 'Upgrade Required', // RFC2817 + 428 => 'Precondition Required', // RFC6585 + 429 => 'Too Many Requests', // RFC6585 + 431 => 'Request Header Fields Too Large', // RFC6585 + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates (Experimental)', // RFC2295 + 507 => 'Insufficient Storage', // RFC4918 + 508 => 'Loop Detected', // RFC5842 + 510 => 'Not Extended', // RFC2774 + 511 => 'Network Authentication Required', // RFC6585 + ); + + /** + * @var string + */ + protected $content; + + /** + * @var int + */ + protected $statusCode; + + /** + * @var string + */ + protected $statusText; + + /** + * @var array + */ + public $headers; + + /** + * @var string + */ + protected $version; + + /** + * Construct the response + * + * @param mixed $content + * @param int $statusCode + * @param array $headers + */ + public function __construct($content = '', $statusCode = 200, $headers = array()) + { + $this->setContent($content); + $this->setStatusCode($statusCode); + $this->headers = $headers; + $this->version = '1.1'; + } + + /** + * Set the content on the response. + * + * @param mixed $content + * @return $this + */ + public function setContent($content) + { + if ($content instanceof ArrayObject || is_array($content)) + { + $this->headers['Content-Type'] = array('application/json'); + + $content = json_encode($content); + } + + $this->content = $content; + } + + /** + * Returns the Response as an HTTP string. + * + * The string representation of the Response is the same as the + * one that will be sent to the client only if the prepare() method + * has been called before. + * + * @return string The Response as an HTTP string + * + * @see prepare() + */ + public function __toString() + { + return + sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText)."\r\n". + $this->headers."\r\n". + $this->getContent(); + } + + /** + * Sets the response status code. + * + * @param int $code HTTP status code + * @param mixed $text HTTP status text + * + * If the status text is null it will be automatically populated for the known + * status codes and left empty otherwise. + * + * @return Response + * + * @throws \InvalidArgumentException When the HTTP status code is not valid + * + * @api + */ + public function setStatusCode($code, $text = null) + { + $this->statusCode = $code = (int) $code; + if ($this->isInvalid()) { + throw new InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $code)); + } + + if (null === $text) { + $this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : ''; + + return $this; + } + + if (false === $text) { + $this->statusText = ''; + + return $this; + } + + $this->statusText = $text; + + return $this; + } + + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + /** + * Is response invalid? + * + * @return bool + * + * @api + */ + public function isInvalid() + { + return $this->statusCode < 100 || $this->statusCode >= 600; + } + + /** + * Set a header on the Response. + * + * @param string $key + * @param string $value + * @param bool $replace + * @return $this + */ + public function header($key, $value, $replace = true) + { + if (empty($this->headers[$key])) + { + $this->headers[$key] = array(); + } + if ($replace) + { + $this->headers[$key] = array($value); + } + else + { + $this->headers[$key][] = $value; + } + + return $this; + } + + /** + * Sends HTTP headers and content. + * + * @return Response + * + * @api + */ + public function send() + { + $this->sendHeaders(); + $this->sendContent(); + + if (function_exists('fastcgi_finish_request')) { + fastcgi_finish_request(); + } + + return $this; + } + + /** + * Sends content for the current web response. + * + * @return Response + */ + public function sendContent() + { + echo $this->content; + + return $this; + } + + /** + * Sends HTTP headers. + * + * @return Response + */ + public function sendHeaders() + { + // headers have already been sent by the developer + if (headers_sent()) { + return $this; + } + + // status + header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode); + + // headers + foreach ($this->headers as $name => $values) { + if (is_array($values)) + { + foreach ($values as $value) + { + header($name . ': ' . $value, false, $this->statusCode); + } + } + else + { + header($name . ': ' . $values, false, $this->statusCode); + } + } + + return $this; + } +} \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/include/ftp_class.php b/libraries/filemanager-9.14.1/include/ftp_class.php new file mode 100644 index 0000000..9c2ae22 --- /dev/null +++ b/libraries/filemanager-9.14.1/include/ftp_class.php @@ -0,0 +1,82 @@ +messageArray[] = $message; + } + + public function getMessages() + { + return $this->messageArray; + } + + public function connect ($server, $ftpUser, $ftpPassword, $isPassive = false) + { + + // *** Set up basic connection + $this->connectionId = ftp_connect($server); + + // *** Login with username and password + $loginResult = ftp_login($this->connectionId, $ftpUser, $ftpPassword); + + // *** Sets passive mode on/off (default off) + ftp_pasv($this->connectionId, $isPassive); + + // *** Check connection + if ((!$this->connectionId) || (!$loginResult)) { + $this->logMessage('FTP connection has failed!'); + $this->logMessage('Attempted to connect to ' . $server . ' for user ' . $ftpUser, true); + return false; + } else { + $this->logMessage('Connected to ' . $server . ', for user ' . $ftpUser); + $this->loginOk = true; + return true; + } + } + public function makeDir($directory) + { + // *** If creating a directory is successful... + if (ftp_mkdir($this->connectionId, $directory)) { + + $this->logMessage('Directory "' . $directory . '" created successfully'); + return true; + + } else { + + // *** ...Else, FAIL. + $this->logMessage('Failed creating directory "' . $directory . '"'); + return false; + } + } + + public function changeDir($directory) + { + if (ftp_chdir($this->connectionId, $directory)) { + $this->logMessage('Current directory is now: ' . ftp_pwd($this->connectionId)); + return true; + } else { + $this->logMessage('Couldn\'t change directory'); + return false; + } + } + + public function getDirListing($directory = '.', $parameters = '-la') + { + echo shell_exec('whoami')." is who i am
          "; + echo "Current directory is now: " . ftp_pwd($this->connectionId) . "
          "; + + // get contents of the current directory + $contentsArray = ftp_rawlist($this->connectionId, $parameters . ' ' . $directory); + echo error_get_last(); + return $contentsArray; + } +} \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/include/mime_type_lib.php b/libraries/filemanager-9.14.1/include/mime_type_lib.php new file mode 100644 index 0000000..182f645 --- /dev/null +++ b/libraries/filemanager-9.14.1/include/mime_type_lib.php @@ -0,0 +1,267 @@ + "ps", + "audio/x-aiff" => "aiff", + "text/plain" => "txt", + "video/x-ms-asf" => "asx", + "audio/basic" => "snd", + "video/x-msvideo" => "avi", + "application/x-bcpio" => "bcpio", + "application/octet-stream" => "so", + "image/bmp" => "bmp", + "application/x-rar" => "rar", + "application/x-bzip2" => "bz2", + "application/x-netcdf" => "nc", + "application/x-kchart" => "chrt", + "application/x-cpio" => "cpio", + "application/mac-compactpro" => "cpt", + "application/x-csh" => "csh", + "text/css" => "css", + "application/x-director" => "dxr", + "image/vnd.djvu" => "djvu", + "application/x-dvi" => "dvi", + "image/vnd.dwg" => "dwg", + "application/epub" => "epub", + "application/epub+zip" => "epub", + "text/x-setext" => "etx", + "application/andrew-inset" => "ez", + "video/x-flv" => "flv", + "image/gif" => "gif", + "application/x-gtar" => "gtar", + "application/x-gzip" => "tgz", + "application/x-hdf" => "hdf", + "application/mac-binhex40" => "hqx", + "text/html" => "html", + "text/htm" => "htm", + "x-conference/x-cooltalk" => "ice", + "image/ief" => "ief", + "model/iges" => "igs", + "text/vnd.sun.j2me.app-descriptor" => "jad", + "application/x-java-archive" => "jar", + "application/x-java-jnlp-file" => "jnlp", + "image/jpeg" => "jpg", + "application/x-javascript" => "js", + "audio/midi" => "midi", + "application/x-killustrator" => "kil", + "application/x-kpresenter" => "kpt", + "application/x-kspread" => "ksp", + "application/x-kword" => "kwt", + "application/vnd.google-earth.kml+xml" => "kml", + "application/vnd.google-earth.kmz" => "kmz", + "application/x-latex" => "latex", + "audio/x-mpegurl" => "m3u", + "application/x-troff-man" => "man", + "application/x-troff-me" => "me", + "model/mesh" => "silo", + "application/vnd.mif" => "mif", + "video/quicktime" => "mov", + "video/x-sgi-movie" => "movie", + "audio/mpeg" => "mp3", + "video/mp4" => "mp4", + "video/mpeg" => "mpeg", + "application/x-troff-ms" => "ms", + "video/vnd.mpegurl" => "mxu", + "application/vnd.oasis.opendocument.database" => "odb", + "application/vnd.oasis.opendocument.chart" => "odc", + "application/vnd.oasis.opendocument.formula" => "odf", + "application/vnd.oasis.opendocument.graphics" => "odg", + "application/vnd.oasis.opendocument.image" => "odi", + "application/vnd.oasis.opendocument.text-master" => "odm", + "application/vnd.oasis.opendocument.presentation" => "odp", + "application/vnd.oasis.opendocument.spreadsheet" => "ods", + "application/vnd.oasis.opendocument.text" => "odt", + "application/ogg" => "ogg", + "video/ogg" => "ogv", + "application/vnd.oasis.opendocument.graphics-template" => "otg", + "application/vnd.oasis.opendocument.text-web" => "oth", + "application/vnd.oasis.opendocument.presentation-template" => "otp", + "application/vnd.oasis.opendocument.spreadsheet-template" => "ots", + "application/vnd.oasis.opendocument.text-template" => "ott", + "image/x-portable-bitmap" => "pbm", + "chemical/x-pdb" => "pdb", + "application/pdf" => "pdf", + "image/x-portable-graymap" => "pgm", + "application/x-chess-pgn" => "pgn", + "text/x-php" => "php", + "image/png" => "png", + "image/x-portable-anymap" => "pnm", + "image/x-portable-pixmap" => "ppm", + "application/vnd.ms-powerpoint" => "ppt", + "audio/x-realaudio" => "ra", + "audio/x-pn-realaudio" => "rm", + "image/x-cmu-raster" => "ras", + "image/x-rgb" => "rgb", + "application/x-troff" => "tr", + "application/x-rpm" => "rpm", + "text/rtf" => "rtf", + "text/richtext" => "rtx", + "text/sgml" => "sgml", + "application/x-sh" => "sh", + "application/x-shar" => "shar", + "application/vnd.symbian.install" => "sis", + "application/x-stuffit" => "sit", + "application/x-koan" => "skt", + "application/smil" => "smil", + "image/svg+xml" => "svg", + "application/x-futuresplash" => "spl", + "application/x-wais-source" => "src", + "application/vnd.sun.xml.calc.template" => "stc", + "application/vnd.sun.xml.draw.template" => "std", + "application/vnd.sun.xml.impress.template" => "sti", + "application/vnd.sun.xml.writer.template" => "stw", + "application/x-sv4cpio" => "sv4cpio", + "application/x-sv4crc" => "sv4crc", + "application/x-shockwave-flash" => "swf", + "application/vnd.sun.xml.calc" => "sxc", + "application/vnd.sun.xml.draw" => "sxd", + "application/vnd.sun.xml.writer.global" => "sxg", + "application/vnd.sun.xml.impress" => "sxi", + "application/vnd.sun.xml.math" => "sxm", + "application/vnd.sun.xml.writer" => "sxw", + "application/x-tar" => "tar", + "application/x-tcl" => "tcl", + "application/x-tex" => "tex", + "application/x-texinfo" => "texinfo", + "image/tiff" => "tiff", + "image/tiff-fx" => "tiff", + "application/x-bittorrent" => "torrent", + "text/tab-separated-values" => "tsv", + "application/x-ustar" => "ustar", + "application/x-cdlink" => "vcd", + "model/vrml" => "wrl", + "audio/x-wav" => "wav", + "audio/x-ms-wax" => "wax", + "image/vnd.wap.wbmp" => "wbmp", + "application/vnd.wap.wbxml" => "wbxml", + "video/x-ms-wm" => "wm", + "audio/x-ms-wma" => "wma", + "text/vnd.wap.wml" => "wml", + "application/vnd.wap.wmlc" => "wmlc", + "text/vnd.wap.wmlscript" => "wmls", + "application/vnd.wap.wmlscriptc" => "wmlsc", + "video/x-ms-wmv" => "wmv", + "video/x-ms-wmx" => "wmx", + "video/x-ms-wvx" => "wvx", + "image/x-xbitmap" => "xbm", + "application/xhtml+xml" => "xhtml", + "application/xml" => "xml", + "image/x-xpixmap" => "xpm", + "text/xsl" => "xsl", + "image/x-xwindowdump" => "xwd", + "chemical/x-xyz" => "xyz", + "application/zip" => "zip", + "application/msword" => "doc", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" => "docx", + "application/vnd.openxmlformats-officedocument.wordprocessingml.template" => "dotx", + "application/vnd.ms-word.document.macroEnabled.12" => "docm", + "application/vnd.ms-excel" => "xls", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" => "xlsx", + "application/vnd.openxmlformats-officedocument.spreadsheetml.template" => "xltx", + "application/vnd.ms-excel.sheet.macroEnabled.12" => "xlsm", + "application/vnd.ms-excel.template.macroEnabled.12" => "xltm", + "application/vnd.ms-excel.addin.macroEnabled.12" => "xlam", + "application/vnd.ms-excel.sheet.binary.macroEnabled.12" => "xlsb", + "application/vnd.openxmlformats-officedocument.presentationml.presentation" => "pptx", + "application/vnd.openxmlformats-officedocument.presentationml.template" => "potx", + "application/vnd.openxmlformats-officedocument.presentationml.slideshow" => "ppsx", + "application/vnd.ms-powerpoint.addin.macroEnabled.12" => "ppam", + "application/vnd.ms-powerpoint.presentation.macroEnabled.12" => "pptm", + "application/vnd.ms-powerpoint.template.macroEnabled.12" => "potm", + "application/vnd.ms-powerpoint.slideshow.macroEnabled.12" => "ppsm", +); + + +if ( ! function_exists('get_extension_from_mime')) +{ + function get_extension_from_mime($mime){ + global $mime_types; + if(strpos($mime, ';')!==FALSE){ + $mime = substr($mime, 0,strpos($mime, ';')); + } + if(isset($mime_types[$mime])){ + return $mime_types[$mime]; + } + return ''; + } +} + +if ( ! function_exists('get_file_mime_type')) +{ + function get_file_mime_type($filename, $debug = false) + { + if (function_exists('finfo_open') && function_exists('finfo_file') && function_exists('finfo_close')) + { + $fileinfo = finfo_open(FILEINFO_MIME_TYPE); + $mime_type = finfo_file($fileinfo, $filename); + finfo_close($fileinfo); + + if ( ! empty($mime_type)) + { + if (true === $debug) + { + return array( 'mime_type' => $mime_type, 'method' => 'fileinfo' ); + } + + return $mime_type; + } + } + + if (function_exists('mime_content_type')) + { + $mime_type = mime_content_type($filename); + + if ( ! empty($mime_type)) + { + if (true === $debug) + { + return array( 'mime_type' => $mime_type, 'method' => 'mime_content_type' ); + } + + return $mime_type; + } + } + + global $mime_types; + $mime_types = array_flip($mime_types); + + $tmp_array = explode('.', $filename); + $ext = strtolower(array_pop($tmp_array)); + + if ( ! empty($mime_types[ $ext ])) + { + if (true === $debug) + { + return array( 'mime_type' => $mime_types[ $ext ], 'method' => 'from_array' ); + } + + return $mime_types[ $ext ]; + } + + if (true === $debug) + { + return array( 'mime_type' => 'application/octet-stream', 'method' => 'last_resort' ); + } + + return 'application/octet-stream'; + } +} + + +/******************** + * The following code can be used to test the function. + * First put a plain text file named "test.txt" and a + * JPEG image file named "image.jpg" in the same folder + * as this file. + * + * Simply remove the "REMOVE ME TO TEST" lines below to have + * the code run when this file runs. + * + * Run the code with this command: + * php mime_type_lib.php + ********************/ + + +/* REMOVE ME TO TEST +echo get_file_mime_type( 'test.txt' ) . "\n"; +echo print_r( get_file_mime_type( 'image.jpg', true ), true ) . "\n"; +REMOVE ME TO TEST */ diff --git a/libraries/filemanager-9.14.1/include/php_image_magician.php b/libraries/filemanager-9.14.1/include/php_image_magician.php new file mode 100644 index 0000000..8dbc5e7 --- /dev/null +++ b/libraries/filemanager-9.14.1/include/php_image_magician.php @@ -0,0 +1,3785 @@ + resizeImage(150, 100, 0); +# $magicianObj -> saveImage('images/car_small.jpg', 100); +# +# - See end of doc for more examples - +# +# Supported file types include: jpg, png, gif, bmp, psd (read) +# +# +# +# The following functions are taken from phpThumb() [available from +# http://phpthumb.sourceforge.net], and are used with written permission +# from James Heinrich. +# - GD2BMPstring +# - GetPixelColor +# - LittleEndian2String +# +# The following functions are from Marc Hibbins and are used with written +# permission (are also under the Attribution-ShareAlike +# [http://creativecommons.org/licenses/by-sa/3.0/] license. +# - +# +# PhpPsdReader is used with written permission from Tim de Koning. +# [http://www.kingsquare.nl/phppsdreader] +# +# +# +# Modificatoin history +# Date Initials Ver Description +# 10-05-11 J.C.O 0.0 Initial build +# 01-06-11 J.C.O 0.1.1 * Added reflections +# * Added Rounded corners +# * You can now use PNG interlacing +# * Added shadow +# * Added caption box +# * Added vintage filter +# * Added dynamic image resizing (resize on the fly) +# * minor bug fixes +# 05-06-11 J.C.O 0.1.1.1 * Fixed undefined variables +# 17-06-11 J.C.O 0.1.2 * Added image_batch_class.php class +# * Minor bug fixes +# 26-07-11 J.C.O 0.1.4 * Added support for external images +# * Can now set the crop poisition +# 03-08-11 J.C.O 0.1.5 * Added reset() method to reset resource to +# original input file. +# * Added method addTextToCaptionBox() to +# simplify adding text to a caption box. +# * Added experimental writeIPTC. (not finished) +# * Added experimental readIPTC. (not finished) +# 11-08-11 J.C.O * Added initial border presets. +# 30-08-11 J.C.O * Added 'auto' crop option to crop portrait +# images near the top. +# 08-09-11 J.C.O * Added cropImage() method to allow standalone +# cropping. +# 17-09-11 J.C.O * Added setCropFromTop() set method - set the +# percentage to crop from the top when using +# crop 'auto' option. +# * Added setTransparency() set method - allows you +# to turn transparency off (like when saving +# as a jpg). +# * Added setFillColor() set method - set the +# background color to use instead of transparency. +# 05-11-11 J.C.O 0.1.5.1 * Fixed interlacing option +# 0-07-12 J.C.O 1.0 +# +# Known issues & Limitations: +# ------------------------------- +# Not so much an issue, the image is destroyed on the deconstruct rather than +# when we have finished with it. The reason for this is that we don't know +# when we're finished with it as you can both save the image and display +# it directly to the screen (imagedestroy($this->imageResized)) +# +# Opening BMP files is slow. A test with 884 bmp files processed in a loop +# takes forever - over 5 min. This test inlcuded opening the file, then +# getting and displaying its width and height. +# +# $forceStretch: +# ------------------------------- +# On by default. +# $forceStretch can be disabled by calling method setForceStretch with false +# parameter. If disabled, if an images original size is smaller than the size +# specified by the user, the original size will be used. This is useful when +# dealing with small images. +# +# If enabled, images smaller than the size specified will be stretched to +# that size. +# +# Tips: +# ------------------------------- +# * If you're resizing a transparent png and saving it as a jpg, set +# $keepTransparency to false with: $magicianObj->setTransparency(false); +# +# FEATURES: +# * EASY TO USE +# * BMP SUPPORT (read & write) +# * PSD (photoshop) support (read) +# * RESIZE IMAGES +# - Preserve transparency (png, gif) +# - Apply sharpening (jpg) (requires PHP >= 5.1.0) +# - Set image quality (jpg, png) +# - Resize modes: +# - exact size +# - resize by width (auto height) +# - resize by height (auto width) +# - auto (automatically determine the best of the above modes to use) +# - crop - resize as best as it can then crop the rest +# - Force stretching of smaller images (upscale) +# * APPLY FILTERS +# - Convert to grey scale +# - Convert to black and white +# - Convert to sepia +# - Convert to negative +# * ROTATE IMAGES +# - Rotate using predefined "left", "right", or "180"; or any custom degree amount +# * EXTRACT EXIF DATA (requires exif module) +# - make +# - model +# - date +# - exposure +# - aperture +# - f-stop +# - iso +# - focal length +# - exposure program +# - metering mode +# - flash status +# - creator +# - copyright +# * ADD WATERMARK +# - Specify exact x, y placement +# - Or, specify using one of the 9 pre-defined placements such as "tl" +# (for top left), "m" (for middle), "br" (for bottom right) +# - also specify padding from edge amount (optional). +# - Set opacity of watermark (png). +# * ADD BORDER +# * USE HEX WHEN SPECIFYING COLORS (eg: #ffffff) +# * SAVE IMAGE OR OUTPUT TO SCREEN +# +# +# ========================================================================# + + +class imageLib { + + private $fileName; + private $image; + protected $imageResized; + private $widthOriginal; # Always be the original width + private $heightOriginal; + private $width; # Current width (width after resize) + private $height; + private $imageSize; + private $fileExtension; + + private $debug = true; + private $errorArray = array(); + + private $forceStretch = true; + private $aggresiveSharpening = false; + + private $transparentArray = array( '.png', '.gif' ); + private $keepTransparency = true; + private $fillColorArray = array( 'r' => 255, 'g' => 255, 'b' => 255 ); + + private $sharpenArray = array( 'jpg' ); + + private $psdReaderPath; + private $filterOverlayPath; + + private $isInterlace; + + private $captionBoxPositionArray = array(); + + private $fontDir = 'fonts'; + + private $cropFromTopPercent = 10; + + +## -------------------------------------------------------- + + function __construct($fileName) + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Constructor + # Param in: $fileName: File name and path. + # Param out: n/a + # Reference: + # Notes: + # + { + if ( ! $this->testGDInstalled()) + { + if ($this->debug) + { + throw new Exception('The GD Library is not installed.'); + } + else + { + throw new Exception(); + } + }; + + $this->initialise(); + + // *** Save the image file name. Only store this incase you want to display it + $this->fileName = $fileName; + $this->fileExtension = fix_strtolower(strrchr($fileName, '.')); + + // *** Open up the file + $this->image = $this->openImage($fileName); + + + // *** Assign here so we don't modify the original + $this->imageResized = $this->image; + + // *** If file is an image + if ($this->testIsImage($this->image)) + { + // *** Get width and height + $this->width = imagesx($this->image); + $this->widthOriginal = imagesx($this->image); + $this->height = imagesy($this->image); + $this->heightOriginal = imagesy($this->image); + + + /* Added 15-09-08 + * Get the filesize using this build in method. + * Stores an array of size + * + * $this->imageSize[1] = width + * $this->imageSize[2] = height + * $this->imageSize[3] = width x height + * + */ + $this->imageSize = getimagesize($this->fileName); + + } + else + { + $this->errorArray[] = 'File is not an image'; + } + } + +## -------------------------------------------------------- + + private function initialise() + { + + $this->psdReaderPath = dirname(__FILE__) . '/classPhpPsdReader.php'; + $this->filterOverlayPath = dirname(__FILE__) . '/filters'; + + // *** Set if image should be interlaced or not. + $this->isInterlace = false; + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Resize +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + + public function resizeImage($newWidth, $newHeight, $option = 0, $sharpen = false, $autoRotate = false) + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Resizes the image + # Param in: $newWidth: + # $newHeight: + # $option: 0 / exact = defined size; + # 1 / portrait = keep aspect set height; + # 2 / landscape = keep aspect set width; + # 3 / auto = auto; + # 4 / crop= resize and crop; + # + # $option can also be an array containing options for + # cropping. E.G., array('crop', 'r') + # + # This array only applies to 'crop' and the 'r' refers to + # "crop right". Other value include; tl, t, tr, l, m (default), + # r, bl, b, br, or you can specify your own co-ords (which + # isn't recommended. + # + # $sharpen: true: sharpen (jpg only); + # false: don't sharpen + # Param out: n/a + # Reference: + # Notes: To clarify the $option input: + # 0 = The exact height and width dimensions you set. + # 1 = Whatever height is passed in will be the height that + # is set. The width will be calculated and set automatically + # to a the value that keeps the original aspect ratio. + # 2 = The same but based on the width. We try make the image the + # biggest size we can while stil fitting inside the box size + # 3 = Depending whether the image is landscape or portrait, this + # will automatically determine whether to resize via + # dimension 1,2 or 0 + # 4 = Will resize and then crop the image for best fit + # + # forceStretch can be applied to options 1,2,3 and 4 + # + { + + // *** We can pass in an array of options to change the crop position + $cropPos = 'm'; + if (is_array($option) && fix_strtolower($option[0]) == 'crop') + { + $cropPos = $option[1]; # get the crop option + } + else + { + if (strpos($option, '-') !== false) + { + // *** Or pass in a hyphen seperated option + $optionPiecesArray = explode('-', $option); + $cropPos = end($optionPiecesArray); + } + } + + // *** Check the option is valid + $option = $this->prepOption($option); + + // *** Make sure the file passed in is valid + if ( ! $this->image) + { + if ($this->debug) + { + throw new Exception('file ' . $this->getFileName() . ' is missing or invalid'); + } + else + { + throw new Exception(); + } + }; + + // *** Get optimal width and height - based on $option + $dimensionsArray = $this->getDimensions($newWidth, $newHeight, $option); + + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + + // *** Resample - create image canvas of x, y size + $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); + $this->keepTransparancy($optimalWidth, $optimalHeight, $this->imageResized); + imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height); + + + // *** If '4', then crop too + if ($option == 4 || $option == 'crop') + { + + if (($optimalWidth >= $newWidth && $optimalHeight >= $newHeight)) + { + $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight, $cropPos); + } + } + + // *** If Rotate. + if ($autoRotate) + { + + $exifData = $this->getExif(false); + if (count($exifData) > 0) + { + + switch ($exifData['orientation']) + { + case 8: + $this->imageResized = imagerotate($this->imageResized, 90, 0); + break; + case 3: + $this->imageResized = imagerotate($this->imageResized, 180, 0); + break; + case 6: + $this->imageResized = imagerotate($this->imageResized, -90, 0); + break; + } + } + } + + // *** Sharpen image (if jpg and the user wishes to do so) + if ($sharpen && in_array($this->fileExtension, $this->sharpenArray)) + { + + // *** Sharpen + $this->sharpen(); + } + } + +## -------------------------------------------------------- + + public function cropImage($newWidth, $newHeight, $cropPos = 'm') + # Author: Jarrod Oberto + # Date: 08-09-11 + # Purpose: Crops the image + # Param in: $newWidth: crop with + # $newHeight: crop height + # $cropPos: Can be any of the following: + # tl, t, tr, l, m, r, bl, b, br, auto + # Or: + # a custom position such as '30x50' + # Param out: n/a + # Reference: + # Notes: + # + { + + // *** Make sure the file passed in is valid + if ( ! $this->image) + { + if ($this->debug) + { + throw new Exception('file ' . $this->getFileName() . ' is missing or invalid'); + } + else + { + throw new Exception(); + } + }; + + $this->imageResized = $this->image; + $this->crop($this->width, $this->height, $newWidth, $newHeight, $cropPos); + + } + +## -------------------------------------------------------- + + private function keepTransparancy($width, $height, $im) + # Author: Jarrod Oberto + # Date: 08-04-11 + # Purpose: Keep transparency for png and gif image + # Param in: + # Param out: n/a + # Reference: + # Notes: + # + { + // *** If PNG, perform some transparency retention actions (gif untested) + if (in_array($this->fileExtension, $this->transparentArray) && $this->keepTransparency) + { + imagealphablending($im, false); + imagesavealpha($im, true); + $transparent = imagecolorallocatealpha($im, 255, 255, 255, 127); + imagefilledrectangle($im, 0, 0, $width, $height, $transparent); + } + else + { + $color = imagecolorallocate($im, $this->fillColorArray['r'], $this->fillColorArray['g'], $this->fillColorArray['b']); + imagefilledrectangle($im, 0, 0, $width, $height, $color); + } + } + +## -------------------------------------------------------- + + private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight, $cropPos) + # Author: Jarrod Oberto + # Date: 15-09-08 + # Purpose: Crops the image + # Param in: $newWidth: + # $newHeight: + # Param out: n/a + # Reference: + # Notes: + # + { + + // *** Get cropping co-ordinates + $cropArray = $this->getCropPlacing($optimalWidth, $optimalHeight, $newWidth, $newHeight, $cropPos); + $cropStartX = $cropArray['x']; + $cropStartY = $cropArray['y']; + + // *** Crop this bad boy + $crop = imagecreatetruecolor($newWidth, $newHeight); + $this->keepTransparancy($optimalWidth, $optimalHeight, $crop); + imagecopyresampled($crop, $this->imageResized, 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight, $newWidth, $newHeight); + + $this->imageResized = $crop; + + // *** Set new width and height to our variables + $this->width = $newWidth; + $this->height = $newHeight; + + } + +## -------------------------------------------------------- + + private function getCropPlacing($optimalWidth, $optimalHeight, $newWidth, $newHeight, $pos = 'm') + # + # Author: Jarrod Oberto + # Date: July 11 + # Purpose: Set the cropping area. + # Params in: + # Params out: (array) the crop x and y co-ordinates. + # Notes: When specifying the exact pixel crop position (eg 10x15), be + # very careful as it's easy to crop out of the image leaving + # black borders. + # + { + $pos = fix_strtolower($pos); + + // *** If co-ords have been entered + if (strstr($pos, 'x')) + { + $pos = str_replace(' ', '', $pos); + + $xyArray = explode('x', $pos); + list($cropStartX, $cropStartY) = $xyArray; + + } + else + { + + switch ($pos) + { + case 'tl': + $cropStartX = 0; + $cropStartY = 0; + break; + + case 't': + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = 0; + break; + + case 'tr': + $cropStartX = $optimalWidth - $newWidth; + $cropStartY = 0; + break; + + case 'l': + $cropStartX = 0; + $cropStartY = ($optimalHeight / 2) - ($newHeight / 2); + break; + + case 'm': + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = ($optimalHeight / 2) - ($newHeight / 2); + break; + + case 'r': + $cropStartX = $optimalWidth - $newWidth; + $cropStartY = ($optimalHeight / 2) - ($newHeight / 2); + break; + + case 'bl': + $cropStartX = 0; + $cropStartY = $optimalHeight - $newHeight; + break; + + case 'b': + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = $optimalHeight - $newHeight; + break; + + case 'br': + $cropStartX = $optimalWidth - $newWidth; + $cropStartY = $optimalHeight - $newHeight; + break; + + case 'auto': + // *** If image is a portrait crop from top, not center. v1.5 + if ($optimalHeight > $optimalWidth) + { + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = ($this->cropFromTopPercent / 100) * $optimalHeight; + } + else + { + + // *** Else crop from the center + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = ($optimalHeight / 2) - ($newHeight / 2); + } + break; + + default: + // *** Default to center + $cropStartX = ($optimalWidth / 2) - ($newWidth / 2); + $cropStartY = ($optimalHeight / 2) - ($newHeight / 2); + break; + } + } + + return array( 'x' => $cropStartX, 'y' => $cropStartY ); + } + +## -------------------------------------------------------- + + private function getDimensions($newWidth, $newHeight, $option) + # Author: Jarrod Oberto + # Date: 17-11-09 + # Purpose: Get new image dimensions based on user specificaions + # Param in: $newWidth: + # $newHeight: + # Param out: Array of new width and height values + # Reference: + # Notes: If $option = 3 then this function is call recursivly + # + # To clarify the $option input: + # 0 = The exact height and width dimensions you set. + # 1 = Whatever height is passed in will be the height that + # is set. The width will be calculated and set automatically + # to a the value that keeps the original aspect ratio. + # 2 = The same but based on the width. + # 3 = Depending whether the image is landscape or portrait, this + # will automatically determine whether to resize via + # dimension 1,2 or 0. + # 4 = Resize the image as much as possible, then crop the + # remainder. + { + + switch (strval($option)) + { + case '0': + case 'exact': + $optimalWidth = $newWidth; + $optimalHeight = $newHeight; + break; + case '1': + case 'portrait': + $dimensionsArray = $this->getSizeByFixedHeight($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + break; + case '2': + case 'landscape': + $dimensionsArray = $this->getSizeByFixedWidth($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + break; + case '3': + case 'auto': + $dimensionsArray = $this->getSizeByAuto($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + break; + case '4': + case 'crop': + $dimensionsArray = $this->getOptimalCrop($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + break; + } + + return array( 'optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight ); + } + +## -------------------------------------------------------- + + private function getSizeByFixedHeight($newWidth, $newHeight) + { + // *** If forcing is off... + if ( ! $this->forceStretch) + { + + // *** ...check if actual height is less than target height + if ($this->height < $newHeight) + { + return array( 'optimalWidth' => $this->width, 'optimalHeight' => $this->height ); + } + } + + $ratio = $this->width / $this->height; + + $newWidth = $newHeight * $ratio; + + //return $newWidth; + return array( 'optimalWidth' => $newWidth, 'optimalHeight' => $newHeight ); + } + +## -------------------------------------------------------- + + private function getSizeByFixedWidth($newWidth, $newHeight) + { + // *** If forcing is off... + if ( ! $this->forceStretch) + { + + // *** ...check if actual width is less than target width + if ($this->width < $newWidth) + { + return array( 'optimalWidth' => $this->width, 'optimalHeight' => $this->height ); + } + } + + $ratio = $this->height / $this->width; + + $newHeight = $newWidth * $ratio; + + //return $newHeight; + return array( 'optimalWidth' => $newWidth, 'optimalHeight' => $newHeight ); + } + +## -------------------------------------------------------- + + private function getSizeByAuto($newWidth, $newHeight) + # Author: Jarrod Oberto + # Date: 19-08-08 + # Purpose: Depending on the height, choose to resize by 0, 1, or 2 + # Param in: The new height and new width + # Notes: + # + { + // *** If forcing is off... + if ( ! $this->forceStretch) + { + + // *** ...check if actual size is less than target size + if ($this->width < $newWidth && $this->height < $newHeight) + { + return array( 'optimalWidth' => $this->width, 'optimalHeight' => $this->height ); + } + } + + if ($this->height < $this->width) + // *** Image to be resized is wider (landscape) + { + //$optimalWidth = $newWidth; + //$optimalHeight= $this->getSizeByFixedWidth($newWidth); + + $dimensionsArray = $this->getSizeByFixedWidth($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + } + elseif ($this->height > $this->width) + // *** Image to be resized is taller (portrait) + { + //$optimalWidth = $this->getSizeByFixedHeight($newHeight); + //$optimalHeight= $newHeight; + + $dimensionsArray = $this->getSizeByFixedHeight($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + } + else + // *** Image to be resizerd is a square + { + + if ($newHeight < $newWidth) + { + //$optimalWidth = $newWidth; + //$optimalHeight= $this->getSizeByFixedWidth($newWidth); + $dimensionsArray = $this->getSizeByFixedWidth($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + } + else + { + if ($newHeight > $newWidth) + { + //$optimalWidth = $this->getSizeByFixedHeight($newHeight); + //$optimalHeight= $newHeight; + $dimensionsArray = $this->getSizeByFixedHeight($newWidth, $newHeight); + $optimalWidth = $dimensionsArray['optimalWidth']; + $optimalHeight = $dimensionsArray['optimalHeight']; + } + else + { + // *** Sqaure being resized to a square + $optimalWidth = $newWidth; + $optimalHeight = $newHeight; + } + } + } + + return array( 'optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight ); + } + +## -------------------------------------------------------- + + private function getOptimalCrop($newWidth, $newHeight) + # Author: Jarrod Oberto + # Date: 17-11-09 + # Purpose: Get optimal crop dimensions + # Param in: width and height as requested by user (fig 3) + # Param out: Array of optimal width and height (fig 2) + # Reference: + # Notes: The optimal width and height return are not the same as the + # same as the width and height passed in. For example: + # + # + # |-----------------| |------------| |-------| + # | | => |**| |**| => | | + # | | |**| |**| | | + # | | |------------| |-------| + # |-----------------| + # original optimal crop + # size size size + # Fig 1 2 3 + # + # 300 x 250 150 x 125 150 x 100 + # + # The optimal size is the smallest size (that is closest to the crop size) + # while retaining proportion/ratio. + # + # The crop size is the optimal size that has been cropped on one axis to + # make the image the exact size specified by the user. + # + # * represent cropped area + # + { + + // *** If forcing is off... + if ( ! $this->forceStretch) + { + + // *** ...check if actual size is less than target size + if ($this->width < $newWidth && $this->height < $newHeight) + { + return array( 'optimalWidth' => $this->width, 'optimalHeight' => $this->height ); + } + } + + $heightRatio = $this->height / $newHeight; + $widthRatio = $this->width / $newWidth; + + if ($heightRatio < $widthRatio) + { + $optimalRatio = $heightRatio; + } + else + { + $optimalRatio = $widthRatio; + } + + $optimalHeight = round($this->height / $optimalRatio); + $optimalWidth = round($this->width / $optimalRatio); + + return array( 'optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight ); + } + +## -------------------------------------------------------- + + private function sharpen() + # Author: Jarrod Oberto + # Date: 08 04 2011 + # Purpose: Sharpen image + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # Credit: Incorporates Joe Lencioni (August 6, 2008) code + { + + if (version_compare(PHP_VERSION, '5.1.0') >= 0) + { + + // *** + if ($this->aggresiveSharpening) + { # A more aggressive sharpening solution + + $sharpenMatrix = array( array( -1, -1, -1 ), + array( -1, 16, -1 ), + array( -1, -1, -1 ) ); + $divisor = 8; + $offset = 0; + + imageconvolution($this->imageResized, $sharpenMatrix, $divisor, $offset); + } + else # More subtle and personally more desirable + { + $sharpness = $this->findSharp($this->widthOriginal, $this->width); + + $sharpenMatrix = array( + array( -1, -2, -1 ), + array( -2, $sharpness + 12, -2 ), //Lessen the effect of a filter by increasing the value in the center cell + array( -1, -2, -1 ) + ); + $divisor = $sharpness; // adjusts brightness + $offset = 0; + imageconvolution($this->imageResized, $sharpenMatrix, $divisor, $offset); + } + } + else + { + if ($this->debug) + { + throw new Exception('Sharpening required PHP 5.1.0 or greater.'); + } + } + } + + ## -------------------------------------------------------- + + private function sharpen2($level) + { + $sharpenMatrix = array( + array( $level, $level, $level ), + array( $level, (8 * $level) + 1, $level ), //Lessen the effect of a filter by increasing the value in the center cell + array( $level, $level, $level ) + ); + + } + +## -------------------------------------------------------- + + private function findSharp($orig, $final) + # Author: Ryan Rud (http://adryrun.com) + # Purpose: Find optimal sharpness + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # + { + $final = $final * (750.0 / $orig); + $a = 52; + $b = -0.27810650887573124; + $c = .00047337278106508946; + + $result = $a + $b * $final + $c * $final * $final; + + return max(round($result), 0); + } + +## -------------------------------------------------------- + + private function prepOption($option) + # Author: Jarrod Oberto + # Purpose: Prep option like change the passed in option to lowercase + # Param in: (str/int) $option: eg. 'exact', 'crop'. 0, 4 + # Param out: lowercase string + # Reference: + # Notes: + # + { + if (is_array($option)) + { + if (fix_strtolower($option[0]) == 'crop' && count($option) == 2) + { + return 'crop'; + } + else + { + throw new Exception('Crop resize option array is badly formatted.'); + } + } + else + { + if (strpos($option, 'crop') !== false) + { + return 'crop'; + } + } + + if (is_string($option)) + { + return fix_strtolower($option); + } + + return $option; + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Presets +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + +# +# Preset are pre-defined templates you can apply to your image. +# +# These are inteded to be applied to thumbnail images. +# + + + public function borderPreset($preset) + { + switch ($preset) + { + + case 'simple': + $this->addBorder(7, '#fff'); + $this->addBorder(6, '#f2f1f0'); + $this->addBorder(2, '#fff'); + $this->addBorder(1, '#ccc'); + break; + default: + break; + } + + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Draw border +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addBorder($thickness = 1, $rgbArray = array( 255, 255, 255 )) + # Author: Jarrod Oberto + # Date: 05-05-11 + # Purpose: Add a border to the image + # Param in: + # Param out: + # Reference: + # Notes: This border is added to the INSIDE of the image + # + { + if ($this->imageResized) + { + + $rgbArray = $this->formatColor($rgbArray); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + + + $x1 = 0; + $y1 = 0; + $x2 = ImageSX($this->imageResized) - 1; + $y2 = ImageSY($this->imageResized) - 1; + + $rgbArray = ImageColorAllocate($this->imageResized, $r, $g, $b); + + + for ($i = 0; $i < $thickness; $i++) + { + ImageRectangle($this->imageResized, $x1++, $y1++, $x2--, $y2--, $rgbArray); + } + } + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Gray Scale +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function greyScale() + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Make image greyscale + # Param in: n/a + # Param out: + # Reference: + # Notes: + # + { + if ($this->imageResized) + { + imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE); + } + + } + + ## -------------------------------------------------------- + + public function greyScaleEnhanced() + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Make image greyscale + # Param in: n/a + # Param out: + # Reference: + # Notes: + # + { + if ($this->imageResized) + { + imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE); + imagefilter($this->imageResized, IMG_FILTER_CONTRAST, -15); + imagefilter($this->imageResized, IMG_FILTER_BRIGHTNESS, 2); + $this->sharpen($this->width); + } + } + + ## -------------------------------------------------------- + + public function greyScaleDramatic() + # Alias of gd_filter_monopin + { + $this->gd_filter_monopin(); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Black 'n White +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function blackAndWhite() + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Make image black and white + # Param in: n/a + # Param out: + # Reference: + # Notes: + # + { + if ($this->imageResized) + { + + imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE); + imagefilter($this->imageResized, IMG_FILTER_CONTRAST, -1000); + } + + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Negative +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function negative() + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Make image negative + # Param in: n/a + # Param out: + # Reference: + # Notes: + # + { + if ($this->imageResized) + { + + imagefilter($this->imageResized, IMG_FILTER_NEGATE); + } + + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Sepia +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function sepia() + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Make image sepia + # Param in: n/a + # Param out: + # Reference: + # Notes: + # + { + if ($this->imageResized) + { + imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE); + imagefilter($this->imageResized, IMG_FILTER_BRIGHTNESS, -10); + imagefilter($this->imageResized, IMG_FILTER_CONTRAST, -20); + imagefilter($this->imageResized, IMG_FILTER_COLORIZE, 60, 30, -15); + } + } + + ## -------------------------------------------------------- + + public function sepia2() + + { + if ($this->imageResized) + { + + $total = imagecolorstotal($this->imageResized); + for ($i = 0; $i < $total; $i++) + { + $index = imagecolorsforindex($this->imageResized, $i); + $red = ($index["red"] * 0.393 + $index["green"] * 0.769 + $index["blue"] * 0.189) / 1.351; + $green = ($index["red"] * 0.349 + $index["green"] * 0.686 + $index["blue"] * 0.168) / 1.203; + $blue = ($index["red"] * 0.272 + $index["green"] * 0.534 + $index["blue"] * 0.131) / 2.140; + imagecolorset($this->imageResized, $i, $red, $green, $blue); + } + + + } + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Vintage +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function vintage() + # Alias of gd_filter_monopin + { + $this->gd_filter_vintage(); + } + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Presets By Marc Hibbins +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + + /** Apply 'Monopin' preset */ + public function gd_filter_monopin() + { + + if ($this->imageResized) + { + imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE); + imagefilter($this->imageResized, IMG_FILTER_BRIGHTNESS, -15); + imagefilter($this->imageResized, IMG_FILTER_CONTRAST, -15); + $this->imageResized = $this->gd_apply_overlay($this->imageResized, 'vignette', 100); + } + } + + ## -------------------------------------------------------- + + public function gd_filter_vintage() + { + if ($this->imageResized) + { + $this->imageResized = $this->gd_apply_overlay($this->imageResized, 'vignette', 45); + imagefilter($this->imageResized, IMG_FILTER_BRIGHTNESS, 20); + imagefilter($this->imageResized, IMG_FILTER_CONTRAST, -35); + imagefilter($this->imageResized, IMG_FILTER_COLORIZE, 60, -10, 35); + imagefilter($this->imageResized, IMG_FILTER_SMOOTH, 7); + $this->imageResized = $this->gd_apply_overlay($this->imageResized, 'scratch', 10); + } + } + + ## -------------------------------------------------------- + + /** Apply a PNG overlay */ + private function gd_apply_overlay($im, $type, $amount) + # + # Original Author: Marc Hibbins + # License: Attribution-ShareAlike 3.0 + # Purpose: + # Params in: + # Params out: + # Notes: + # + { + $width = imagesx($im); + $height = imagesy($im); + $filter = imagecreatetruecolor($width, $height); + + imagealphablending($filter, false); + imagesavealpha($filter, true); + + $transparent = imagecolorallocatealpha($filter, 255, 255, 255, 127); + imagefilledrectangle($filter, 0, 0, $width, $height, $transparent); + + // *** Resize overlay + $overlay = $this->filterOverlayPath . '/' . $type . '.png'; + $png = imagecreatefrompng($overlay); + imagecopyresampled($filter, $png, 0, 0, 0, 0, $width, $height, imagesx($png), imagesy($png)); + + $comp = imagecreatetruecolor($width, $height); + imagecopy($comp, $im, 0, 0, 0, 0, $width, $height); + imagecopy($comp, $filter, 0, 0, 0, 0, $width, $height); + imagecopymerge($im, $comp, 0, 0, 0, 0, $width, $height, $amount); + + imagedestroy($comp); + + return $im; + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Colorise +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function image_colorize($rgb) + { + imageTrueColorToPalette($this->imageResized, true, 256); + $numColors = imageColorsTotal($this->imageResized); + + for ($x = 0; $x < $numColors; $x++) + { + list($r, $g, $b) = array_values(imageColorsForIndex($this->imageResized, $x)); + + // calculate grayscale in percent + $grayscale = ($r + $g + $b) / 3 / 0xff; + + imageColorSet($this->imageResized, $x, + $grayscale * $rgb[0], + $grayscale * $rgb[1], + $grayscale * $rgb[2] + ); + + } + + return true; + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Reflection +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addReflection($reflectionHeight = 50, $startingTransparency = 30, $inside = false, $bgColor = '#fff', $stretch = false, $divider = 0) + { + + // *** Convert color + $rgbArray = $this->formatColor($bgColor); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + + $im = $this->imageResized; + $li = imagecreatetruecolor($this->width, 1); + + $bgc = imagecolorallocate($li, $r, $g, $b); + imagefilledrectangle($li, 0, 0, $this->width, 1, $bgc); + + $bg = imagecreatetruecolor($this->width, $reflectionHeight); + $wh = imagecolorallocate($im, 255, 255, 255); + + $im = imagerotate($im, -180, $wh); + imagecopyresampled($bg, $im, 0, 0, 0, 0, $this->width, $this->height, $this->width, $this->height); + + $im = $bg; + + $bg = imagecreatetruecolor($this->width, $reflectionHeight); + + for ($x = 0; $x < $this->width; $x++) + { + imagecopy($bg, $im, $x, 0, $this->width - $x - 1, 0, 1, $reflectionHeight); + } + $im = $bg; + + $transaprencyAmount = $this->invertTransparency($startingTransparency, 100); + + + // *** Fade + if ($stretch) + { + $step = 100 / ($reflectionHeight + $startingTransparency); + } + else + { + $step = 100 / $reflectionHeight; + } + for ($i = 0; $i <= $reflectionHeight; $i++) + { + + if ($startingTransparency > 100) + { + $startingTransparency = 100; + } + if ($startingTransparency < 1) + { + $startingTransparency = 1; + } + imagecopymerge($bg, $li, 0, $i, 0, 0, $this->width, 1, $startingTransparency); + $startingTransparency += $step; + } + + // *** Apply fade + imagecopymerge($im, $li, 0, 0, 0, 0, $this->width, $divider, 100); // Divider + + + // *** width, height of reflection. + $x = imagesx($im); + $y = imagesy($im); + + + // *** Determines if the reflection should be displayed inside or outside the image + if ($inside) + { + + // Create new blank image with sizes. + $final = imagecreatetruecolor($this->width, $this->height); + + imagecopymerge($final, $this->imageResized, 0, 0, 0, $reflectionHeight, $this->width, $this->height - $reflectionHeight, 100); + imagecopymerge($final, $im, 0, $this->height - $reflectionHeight, 0, 0, $x, $y, 100); + + } + else + { + + // Create new blank image with sizes. + $final = imagecreatetruecolor($this->width, $this->height + $y); + + imagecopymerge($final, $this->imageResized, 0, 0, 0, 0, $this->width, $this->height, 100); + imagecopymerge($final, $im, 0, $this->height, 0, 0, $x, $y, 100); + } + + $this->imageResized = $final; + + imagedestroy($li); + imagedestroy($im); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Rotate +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function rotate($value = 90, $bgColor = 'transparent') + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Rotate image + # Param in: (mixed) $degrees: (int) number of degress to rotate image + # (str) param "left": rotate left + # (str) param "right": rotate right + # (str) param "upside": upside-down image + # Param out: + # Reference: + # Notes: The default direction of imageRotate() is counter clockwise. + # + { + if ($this->imageResized) + { + + if (is_integer($value)) + { + $degrees = $value; + } + + // *** Convert color + $rgbArray = $this->formatColor($bgColor); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + if (isset($rgbArray['a'])) + { + $a = $rgbArray['a']; + } + + if (is_string($value)) + { + + $value = fix_strtolower($value); + + switch ($value) + { + case 'left': + $degrees = 90; + break; + case 'right': + $degrees = 270; + break; + case 'upside': + $degrees = 180; + break; + default: + break; + } + + } + + // *** The default direction of imageRotate() is counter clockwise + // * This makes it clockwise + $degrees = 360 - $degrees; + + // *** Create background color + $bg = ImageColorAllocateAlpha($this->imageResized, $r, $g, $b, $a); + + // *** Fill with background + ImageFill($this->imageResized, 0, 0, $bg); + + // *** Rotate + $this->imageResized = imagerotate($this->imageResized, $degrees, $bg); // Rotate 45 degrees and allocated the transparent colour as the one to make transparent (obviously) + + // Ensure alpha transparency + ImageSaveAlpha($this->imageResized, true); + + } + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Round corners +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function roundCorners($radius = 5, $bgColor = 'transparent') + # Author: Jarrod Oberto + # Date: 19-05-2011 + # Purpose: Create rounded corners on your image + # Param in: (int) radius = the amount of curvature + # (mixed) $bgColor = the corner background color + # Param out: n/a + # Reference: + # Notes: + # + { + + // *** Check if the user wants transparency + $isTransparent = false; + if ( ! is_array($bgColor)) + { + if (fix_strtolower($bgColor) == 'transparent') + { + $isTransparent = true; + } + } + + + // *** If we use transparency, we need to color our curved mask with a unique color + if ($isTransparent) + { + $bgColor = $this->findUnusedGreen(); + } + + // *** Convert color + $rgbArray = $this->formatColor($bgColor); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + if (isset($rgbArray['a'])) + { + $a = $rgbArray['a']; + } + + + // *** Create top-left corner mask (square) + $cornerImg = imagecreatetruecolor($radius, $radius); + //$cornerImg = imagecreate($radius, $radius); + + //imagealphablending($cornerImg, true); + //imagesavealpha($cornerImg, true); + + //imagealphablending($this->imageResized, false); + //imagesavealpha($this->imageResized, true); + + // *** Give it a color + $maskColor = imagecolorallocate($cornerImg, 0, 0, 0); + + + // *** Replace the mask color (black) to transparent + imagecolortransparent($cornerImg, $maskColor); + + + // *** Create the image background color + $imagebgColor = imagecolorallocate($cornerImg, $r, $g, $b); + + + // *** Fill the corner area to the user defined color + imagefill($cornerImg, 0, 0, $imagebgColor); + + + imagefilledellipse($cornerImg, $radius, $radius, $radius * 2, $radius * 2, $maskColor); + + + // *** Map to top left corner + imagecopymerge($this->imageResized, $cornerImg, 0, 0, 0, 0, $radius, $radius, 100); #tl + + // *** Map rounded corner to other corners by rotating and applying the mask + $cornerImg = imagerotate($cornerImg, 90, 0); + imagecopymerge($this->imageResized, $cornerImg, 0, $this->height - $radius, 0, 0, $radius, $radius, 100); #bl + + $cornerImg = imagerotate($cornerImg, 90, 0); + imagecopymerge($this->imageResized, $cornerImg, $this->width - $radius, $this->height - $radius, 0, 0, $radius, $radius, 100); #br + + $cornerImg = imagerotate($cornerImg, 90, 0); + imagecopymerge($this->imageResized, $cornerImg, $this->width - $radius, 0, 0, 0, $radius, $radius, 100); #tr + + + // *** If corners are to be transparent, we fill our chromakey color as transparent. + if ($isTransparent) + { + //imagecolortransparent($this->imageResized, $imagebgColor); + $this->imageResized = $this->transparentImage($this->imageResized); + imagesavealpha($this->imageResized, true); + } + + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Shadow +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addShadow($shadowAngle = 45, $blur = 15, $bgColor = 'transparent') + # + # Author: Jarrod Oberto (Adapted from Pascal Naidon) + # Ref: http://www.les-stooges.org/pascal/webdesign/vignettes/index.php?la=en + # Purpose: Add a drop shadow to your image + # Params in: (int) $angle: the angle of the shadow + # (int) $blur: the blur distance + # (mixed) $bgColor: the color of the background + # Params out: + # Notes: + # + { + // *** A higher number results in a smoother shadow + define('STEPS', $blur * 2); + + // *** Set the shadow distance + $shadowDistance = $blur * 0.25; + + // *** Set blur width and height + $blurWidth = $blurHeight = $blur; + + + if ($shadowAngle == 0) + { + $distWidth = 0; + $distHeight = 0; + } + else + { + $distWidth = $shadowDistance * cos(deg2rad($shadowAngle)); + $distHeight = $shadowDistance * sin(deg2rad($shadowAngle)); + } + + + // *** Convert color + if (fix_strtolower($bgColor) != 'transparent') + { + $rgbArray = $this->formatColor($bgColor); + $r0 = $rgbArray['r']; + $g0 = $rgbArray['g']; + $b0 = $rgbArray['b']; + } + + + $image = $this->imageResized; + $width = $this->width; + $height = $this->height; + + + $newImage = imagecreatetruecolor($width, $height); + imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $width, $height); + + + // *** RGB + $rgb = imagecreatetruecolor($width + $blurWidth, $height + $blurHeight); + $colour = imagecolorallocate($rgb, 0, 0, 0); + imagefilledrectangle($rgb, 0, 0, $width + $blurWidth, $height + $blurHeight, $colour); + $colour = imagecolorallocate($rgb, 255, 255, 255); + //imagefilledrectangle($rgb, $blurWidth*0.5-$distWidth, $blurHeight*0.5-$distHeight, $width+$blurWidth*0.5-$distWidth, $height+$blurWidth*0.5-$distHeight, $colour); + imagefilledrectangle($rgb, $blurWidth * 0.5 - $distWidth, $blurHeight * 0.5 - $distHeight, $width + $blurWidth * 0.5 - $distWidth, $height + $blurWidth * 0.5 - $distHeight, $colour); + //imagecopymerge($rgb, $newImage, 1+$blurWidth*0.5-$distWidth, 1+$blurHeight*0.5-$distHeight, 0,0, $width, $height, 100); + imagecopymerge($rgb, $newImage, $blurWidth * 0.5 - $distWidth, $blurHeight * 0.5 - $distHeight, 0, 0, $width + $blurWidth, $height + $blurHeight, 100); + + + // *** Shadow (alpha) + $shadow = imagecreatetruecolor($width + $blurWidth, $height + $blurHeight); + imagealphablending($shadow, false); + $colour = imagecolorallocate($shadow, 0, 0, 0); + imagefilledrectangle($shadow, 0, 0, $width + $blurWidth, $height + $blurHeight, $colour); + + + for ($i = 0; $i <= STEPS; $i++) + { + + $t = ((1.0 * $i) / STEPS); + $intensity = 255 * $t * $t; + + $colour = imagecolorallocate($shadow, $intensity, $intensity, $intensity); + $points = array( + $blurWidth * $t, $blurHeight, // Point 1 (x, y) + $blurWidth, $blurHeight * $t, // Point 2 (x, y) + $width, $blurHeight * $t, // Point 3 (x, y) + $width + $blurWidth * (1 - $t), $blurHeight, // Point 4 (x, y) + $width + $blurWidth * (1 - $t), $height, // Point 5 (x, y) + $width, $height + $blurHeight * (1 - $t), // Point 6 (x, y) + $blurWidth, $height + $blurHeight * (1 - $t), // Point 7 (x, y) + $blurWidth * $t, $height // Point 8 (x, y) + ); + imagepolygon($shadow, $points, 8, $colour); + } + + for ($i = 0; $i <= STEPS; $i++) + { + + $t = ((1.0 * $i) / STEPS); + $intensity = 255 * $t * $t; + + $colour = imagecolorallocate($shadow, $intensity, $intensity, $intensity); + imagefilledarc($shadow, $blurWidth - 1, $blurHeight - 1, 2 * (1 - $t) * $blurWidth, 2 * (1 - $t) * $blurHeight, 180, 268, $colour, IMG_ARC_PIE); + imagefilledarc($shadow, $width, $blurHeight - 1, 2 * (1 - $t) * $blurWidth, 2 * (1 - $t) * $blurHeight, 270, 358, $colour, IMG_ARC_PIE); + imagefilledarc($shadow, $width, $height, 2 * (1 - $t) * $blurWidth, 2 * (1 - $t) * $blurHeight, 0, 90, $colour, IMG_ARC_PIE); + imagefilledarc($shadow, $blurWidth - 1, $height, 2 * (1 - $t) * $blurWidth, 2 * (1 - $t) * $blurHeight, 90, 180, $colour, IMG_ARC_PIE); + } + + + $colour = imagecolorallocate($shadow, 255, 255, 255); + imagefilledrectangle($shadow, $blurWidth, $blurHeight, $width, $height, $colour); + imagefilledrectangle($shadow, $blurWidth * 0.5 - $distWidth, $blurHeight * 0.5 - $distHeight, $width + $blurWidth * 0.5 - 1 - $distWidth, $height + $blurHeight * 0.5 - 1 - $distHeight, $colour); + + + // *** The magic + imagealphablending($rgb, false); + + for ($theX = 0; $theX < imagesx($rgb); $theX++) + { + for ($theY = 0; $theY < imagesy($rgb); $theY++) + { + + // *** Get the RGB values for every pixel of the RGB image + $colArray = imagecolorat($rgb, $theX, $theY); + $r = ($colArray >> 16) & 0xFF; + $g = ($colArray >> 8) & 0xFF; + $b = $colArray & 0xFF; + + // *** Get the alpha value for every pixel of the shadow image + $colArray = imagecolorat($shadow, $theX, $theY); + $a = $colArray & 0xFF; + $a = 127 - floor($a / 2); + $t = $a / 128.0; + + // *** Create color + if (fix_strtolower($bgColor) == 'transparent') + { + $myColour = imagecolorallocatealpha($rgb, $r, $g, $b, $a); + } + else + { + $myColour = imagecolorallocate($rgb, $r * (1.0 - $t) + $r0 * $t, $g * (1.0 - $t) + $g0 * $t, $b * (1.0 - $t) + $b0 * $t); + } + + // *** Add color to new rgb image + imagesetpixel($rgb, $theX, $theY, $myColour); + } + } + + imagealphablending($rgb, true); + imagesavealpha($rgb, true); + + $this->imageResized = $rgb; + + imagedestroy($image); + imagedestroy($newImage); + imagedestroy($shadow); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Add Caption Box +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addCaptionBox($side = 'b', $thickness = 50, $padding = 0, $bgColor = '#000', $transaprencyAmount = 30) + # + # Author: Jarrod Oberto + # Date: 26 May 2011 + # Purpose: Add a caption box + # Params in: (str) $side: the side to add the caption box (t, r, b, or l). + # (int) $thickness: how thick you want the caption box to be. + # (mixed) $bgColor: The color of the caption box. + # (int) $transaprencyAmount: The amount of transparency to be + # applied. + # Params out: n/a + # Notes: + # + { + $side = fix_strtolower($side); + + // *** Convert color + $rgbArray = $this->formatColor($bgColor); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + + $positionArray = $this->calculateCaptionBoxPosition($side, $thickness, $padding); + + // *** Store incase we want to use method addTextToCaptionBox() + $this->captionBoxPositionArray = $positionArray; + + + $transaprencyAmount = $this->invertTransparency($transaprencyAmount, 127, false); + $transparent = imagecolorallocatealpha($this->imageResized, $r, $g, $b, $transaprencyAmount); + imagefilledrectangle($this->imageResized, $positionArray['x1'], $positionArray['y1'], $positionArray['x2'], $positionArray['y2'], $transparent); + } + + ## -------------------------------------------------------- + + public function addTextToCaptionBox($text, $fontColor = '#fff', $fontSize = 12, $angle = 0, $font = null) + # + # Author: Jarrod Oberto + # Date: 03 Aug 11 + # Purpose: Simplify adding text to a caption box by automatically + # locating the center of the caption box + # Params in: The usually text paams (less a couple) + # Params out: n/a + # Notes: + # + { + + // *** Get the caption box measurements + if (count($this->captionBoxPositionArray) == 4) + { + $x1 = $this->captionBoxPositionArray['x1']; + $x2 = $this->captionBoxPositionArray['x2']; + $y1 = $this->captionBoxPositionArray['y1']; + $y2 = $this->captionBoxPositionArray['y2']; + } + else + { + if ($this->debug) + { + throw new Exception('No caption box found.'); + } + else + { + return false; + } + } + + + // *** Get text font + $font = $this->getTextFont($font); + + // *** Get text size + $textSizeArray = $this->getTextSize($fontSize, $angle, $font, $text); + $textWidth = $textSizeArray['width']; + $textHeight = $textSizeArray['height']; + + // *** Find the width/height middle points + $boxXMiddle = (($x2 - $x1) / 2); + $boxYMiddle = (($y2 - $y1) / 2); + + // *** Box middle - half the text width/height + $xPos = ($x1 + $boxXMiddle) - ($textWidth / 2); + $yPos = ($y1 + $boxYMiddle) - ($textHeight / 2); + + $pos = $xPos . 'x' . $yPos; + + $this->addText($text, $pos, $padding = 0, $fontColor, $fontSize, $angle, $font); + + } + + ## -------------------------------------------------------- + + private function calculateCaptionBoxPosition($side, $thickness, $padding) + { + $positionArray = array(); + + switch ($side) + { + case 't': + $positionArray['x1'] = 0; + $positionArray['y1'] = $padding; + $positionArray['x2'] = $this->width; + $positionArray['y2'] = $thickness + $padding; + break; + case 'r': + $positionArray['x1'] = $this->width - $thickness - $padding; + $positionArray['y1'] = 0; + $positionArray['x2'] = $this->width - $padding; + $positionArray['y2'] = $this->height; + break; + case 'b': + $positionArray['x1'] = 0; + $positionArray['y1'] = $this->height - $thickness - $padding; + $positionArray['x2'] = $this->width; + $positionArray['y2'] = $this->height - $padding; + break; + case 'l': + $positionArray['x1'] = $padding; + $positionArray['y1'] = 0; + $positionArray['x2'] = $thickness + $padding; + $positionArray['y2'] = $this->height; + break; + + default: + break; + } + + return $positionArray; + + } + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Get EXIF Data +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function getExif($debug = false) + # Author: Jarrod Oberto + # Date: 07-05-2011 + # Purpose: Get image EXIF data + # Param in: n/a + # Param out: An associate array of EXIF data + # Reference: + # Notes: + # 23 May 13 : added orientation flag -jco + # + { + + if ( ! $this->debug || ! $debug) + { + $debug = false; + } + + // *** Check all is good - check the EXIF library exists and the file exists, too. + if ( ! $this->testEXIFInstalled()) + { + if ($debug) + { + throw new Exception('The EXIF Library is not installed.'); + } + else + { + return array(); + } + }; + if ( ! file_exists($this->fileName)) + { + if ($debug) + { + throw new Exception('Image not found.'); + } + else + { + return array(); + } + }; + if ($this->fileExtension != '.jpg') + { + if ($debug) + { + throw new Exception('Metadata not supported for this image type.'); + } + else + { + return array(); + } + }; + $exifData = exif_read_data($this->fileName, 'IFD0'); + + // *** Format the apperture value + $ev = $exifData['ApertureValue']; + $apPeicesArray = explode('/', $ev); + if (count($apPeicesArray) == 2) + { + $apertureValue = round($apPeicesArray[0] / $apPeicesArray[1], 2, PHP_ROUND_HALF_DOWN) . ' EV'; + } + else + { + $apertureValue = ''; + } + + // *** Format the focal length + $focalLength = $exifData['FocalLength']; + $flPeicesArray = explode('/', $focalLength); + if (count($flPeicesArray) == 2) + { + $focalLength = $flPeicesArray[0] / $flPeicesArray[1] . '.0 mm'; + } + else + { + $focalLength = ''; + } + + // *** Format fNumber + $fNumber = $exifData['FNumber']; + $fnPeicesArray = explode('/', $fNumber); + if (count($fnPeicesArray) == 2) + { + $fNumber = $fnPeicesArray[0] / $fnPeicesArray[1]; + } + else + { + $fNumber = ''; + } + + // *** Resolve ExposureProgram + if (isset($exifData['ExposureProgram'])) + { + $ep = $exifData['ExposureProgram']; + } + if (isset($ep)) + { + $ep = $this->resolveExposureProgram($ep); + } + + + // *** Resolve MeteringMode + $mm = $exifData['MeteringMode']; + $mm = $this->resolveMeteringMode($mm); + + // *** Resolve Flash + $flash = $exifData['Flash']; + $flash = $this->resolveFlash($flash); + + + if (isset($exifData['Make'])) + { + $exifDataArray['make'] = $exifData['Make']; + } + else + { + $exifDataArray['make'] = ''; + } + + if (isset($exifData['Model'])) + { + $exifDataArray['model'] = $exifData['Model']; + } + else + { + $exifDataArray['model'] = ''; + } + + if (isset($exifData['DateTime'])) + { + $exifDataArray['date'] = $exifData['DateTime']; + } + else + { + $exifDataArray['date'] = ''; + } + + if (isset($exifData['ExposureTime'])) + { + $exifDataArray['exposure time'] = $exifData['ExposureTime'] . ' sec.'; + } + else + { + $exifDataArray['exposure time'] = ''; + } + + if ($apertureValue != '') + { + $exifDataArray['aperture value'] = $apertureValue; + } + else + { + $exifDataArray['aperture value'] = ''; + } + + if (isset($exifData['COMPUTED']['ApertureFNumber'])) + { + $exifDataArray['f-stop'] = $exifData['COMPUTED']['ApertureFNumber']; + } + else + { + $exifDataArray['f-stop'] = ''; + } + + if (isset($exifData['FNumber'])) + { + $exifDataArray['fnumber'] = $exifData['FNumber']; + } + else + { + $exifDataArray['fnumber'] = ''; + } + + if ($fNumber != '') + { + $exifDataArray['fnumber value'] = $fNumber; + } + else + { + $exifDataArray['fnumber value'] = ''; + } + + if (isset($exifData['ISOSpeedRatings'])) + { + $exifDataArray['iso'] = $exifData['ISOSpeedRatings']; + } + else + { + $exifDataArray['iso'] = ''; + } + + if ($focalLength != '') + { + $exifDataArray['focal length'] = $focalLength; + } + else + { + $exifDataArray['focal length'] = ''; + } + + if (isset($ep)) + { + $exifDataArray['exposure program'] = $ep; + } + else + { + $exifDataArray['exposure program'] = ''; + } + + if ($mm != '') + { + $exifDataArray['metering mode'] = $mm; + } + else + { + $exifDataArray['metering mode'] = ''; + } + + if ($flash != '') + { + $exifDataArray['flash status'] = $flash; + } + else + { + $exifDataArray['flash status'] = ''; + } + + if (isset($exifData['Artist'])) + { + $exifDataArray['creator'] = $exifData['Artist']; + } + else + { + $exifDataArray['creator'] = ''; + } + + if (isset($exifData['Copyright'])) + { + $exifDataArray['copyright'] = $exifData['Copyright']; + } + else + { + $exifDataArray['copyright'] = ''; + } + + // *** Orientation + if (isset($exifData['Orientation'])) + { + $exifDataArray['orientation'] = $exifData['Orientation']; + } + else + { + $exifDataArray['orientation'] = ''; + } + + return $exifDataArray; + } + + ## -------------------------------------------------------- + + private function resolveExposureProgram($ep) + { + switch ($ep) + { + case 0: + $ep = ''; + break; + case 1: + $ep = 'manual'; + break; + case 2: + $ep = 'normal program'; + break; + case 3: + $ep = 'aperture priority'; + break; + case 4: + $ep = 'shutter priority'; + break; + case 5: + $ep = 'creative program'; + break; + case 6: + $ep = 'action program'; + break; + case 7: + $ep = 'portrait mode'; + break; + case 8: + $ep = 'landscape mode'; + break; + + default: + break; + } + + return $ep; + } + + ## -------------------------------------------------------- + + private function resolveMeteringMode($mm) + { + switch ($mm) + { + case 0: + $mm = 'unknown'; + break; + case 1: + $mm = 'average'; + break; + case 2: + $mm = 'center weighted average'; + break; + case 3: + $mm = 'spot'; + break; + case 4: + $mm = 'multi spot'; + break; + case 5: + $mm = 'pattern'; + break; + case 6: + $mm = 'partial'; + break; + case 255: + $mm = 'other'; + break; + + default: + break; + } + + return $mm; + } + + ## -------------------------------------------------------- + + private function resolveFlash($flash) + { + switch ($flash) + { + case 0: + $flash = 'flash did not fire'; + break; + case 1: + $flash = 'flash fired'; + break; + case 5: + $flash = 'strobe return light not detected'; + break; + case 7: + $flash = 'strobe return light detected'; + break; + case 9: + $flash = 'flash fired, compulsory flash mode'; + break; + case 13: + $flash = 'flash fired, compulsory flash mode, return light not detected'; + break; + case 15: + $flash = 'flash fired, compulsory flash mode, return light detected'; + break; + case 16: + $flash = 'flash did not fire, compulsory flash mode'; + break; + case 24: + $flash = 'flash did not fire, auto mode'; + break; + case 25: + $flash = 'flash fired, auto mode'; + break; + case 29: + $flash = 'flash fired, auto mode, return light not detected'; + break; + case 31: + $flash = 'flash fired, auto mode, return light detected'; + break; + case 32: + $flash = 'no flash function'; + break; + case 65: + $flash = 'flash fired, red-eye reduction mode'; + break; + case 69: + $flash = 'flash fired, red-eye reduction mode, return light not detected'; + break; + case 71: + $flash = 'flash fired, red-eye reduction mode, return light detected'; + break; + case 73: + $flash = 'flash fired, compulsory flash mode, red-eye reduction mode'; + break; + case 77: + $flash = 'flash fired, compulsory flash mode, red-eye reduction mode, return light not detected'; + break; + case 79: + $flash = 'flash fired, compulsory flash mode, red-eye reduction mode, return light detected'; + break; + case 89: + $flash = 'flash fired, auto mode, red-eye reduction mode'; + break; + case 93: + $flash = 'flash fired, auto mode, return light not detected, red-eye reduction mode'; + break; + case 95: + $flash = 'flash fired, auto mode, return light detected, red-eye reduction mode'; + break; + + default: + break; + } + + return $flash; + + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Get IPTC Data +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Write IPTC Data +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function writeIPTCcaption($value) + # Caption + { + $this->writeIPTC(120, $value); + } + + ## -------------------------------------------------------- + + public function writeIPTCwriter($value) + { + //$this->writeIPTC(65, $value); + } + + ## -------------------------------------------------------- + + private function writeIPTC($dat, $value) + { + + # LIMIT TO JPG + + $caption_block = $this->iptc_maketag(2, $dat, $value); + $image_string = iptcembed($caption_block, $this->fileName); + file_put_contents('iptc.jpg', $image_string); + } + +## -------------------------------------------------------- + + private function iptc_maketag($rec, $dat, $val) + # Author: Thies C. Arntzen + # Purpose: Function to format the new IPTC text + # Param in: $rec: Application record. (We’re working with #2) + # $dat: Index. (120 for caption, 118 for contact. See the IPTC IIM + # specification: + # http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf + # $val: Value/data/text. Make sure this is within the length + # constraints of the IPTC IIM specification + # Ref: http://blog.peterhaza.no/working-with-image-meta-data-in-exif-and-iptc-headers-from-php/ + # http://php.net/manual/en/function.iptcembed.php + # + { + $len = strlen($val); + if ($len < 0x8000) + { + return chr(0x1c) . chr($rec) . chr($dat) . + chr($len >> 8) . + chr($len & 0xff) . + $val; + } + else + { + return chr(0x1c) . chr($rec) . chr($dat) . + chr(0x80) . chr(0x04) . + chr(($len >> 24) & 0xff) . + chr(($len >> 16) & 0xff) . + chr(($len >> 8) & 0xff) . + chr(($len) & 0xff) . + $val; + } + } + + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Write XMP Data +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + //http://xmpphptoolkit.sourceforge.net/ + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Add Text +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addText($text, $pos = '20x20', $padding = 0, $fontColor = '#fff', $fontSize = 12, $angle = 0, $font = null) + # Author: Jarrod Oberto + # Date: 18-11-09 + # Purpose: Add text to an image + # Param in: + # Param out: + # Reference: http://php.net/manual/en/function.imagettftext.php + # Notes: Make sure you supply the font. + # + { + + // *** Convert color + $rgbArray = $this->formatColor($fontColor); + $r = $rgbArray['r']; + $g = $rgbArray['g']; + $b = $rgbArray['b']; + + // *** Get text font + $font = $this->getTextFont($font); + + // *** Get text size + $textSizeArray = $this->getTextSize($fontSize, $angle, $font, $text); + $textWidth = $textSizeArray['width']; + $textHeight = $textSizeArray['height']; + + // *** Find co-ords to place text + $posArray = $this->calculatePosition($pos, $padding, $textWidth, $textHeight, false); + $x = $posArray['width']; + $y = $posArray['height']; + + $fontColor = imagecolorallocate($this->imageResized, $r, $g, $b); + + // *** Add text + imagettftext($this->imageResized, $fontSize, $angle, $x, $y, $fontColor, $font, $text); + } + + ## -------------------------------------------------------- + + private function getTextFont($font) + { + // *** Font path (shou + $fontPath = dirname(__FILE__) . '/' . $this->fontDir; + + + // *** The below is/may be needed depending on your version (see ref) + putenv('GDFONTPATH=' . realpath('.')); + + // *** Check if the passed in font exsits... + if ($font == null || ! file_exists($font)) + { + + // *** ...If not, default to this font. + $font = $fontPath . '/arimo.ttf'; + + // *** Check our default font exists... + if ( ! file_exists($font)) + { + + // *** If not, return false + if ($this->debug) + { + throw new Exception('Font not found'); + } + else + { + return false; + } + } + } + + return $font; + + } + + ## -------------------------------------------------------- + + private function getTextSize($fontSize, $angle, $font, $text) + { + + // *** Define box (so we can get the width) + $box = @imageTTFBbox($fontSize, $angle, $font, $text); + + // *** Get width of text from dimensions + $textWidth = abs($box[4] - $box[0]); + + // *** Get height of text from dimensions (should also be same as $fontSize) + $textHeight = abs($box[5] - $box[1]); + + return array( 'height' => $textHeight, 'width' => $textWidth ); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + Add Watermark +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + public function addWatermark($watermarkImage, $pos, $padding = 0, $opacity = 0) + # Author: Jarrod Oberto + # Date: 18-11-09 + # Purpose: Add watermark image + # Param in: (str) $watermark: The watermark image + # (str) $pos: Could be a pre-determined position such as: + # tl = top left, + # t = top (middle), + # tr = top right, + # l = left, + # m = middle, + # r = right, + # bl = bottom left, + # b = bottom (middle), + # br = bottom right + # Or, it could be a co-ordinate position such as: 50x100 + # + # (int) $padding: If using a pre-determined position you can + # adjust the padding from the edges by passing an amount + # in pixels. If using co-ordinates, this value is ignored. + # Param out: + # Reference: http://www.php.net/manual/en/image.examples-watermark.php + # Notes: Based on example in reference. + # + # + { + + // Load the stamp and the photo to apply the watermark to + $stamp = $this->openImage($watermarkImage); # stamp + $im = $this->imageResized; # photo + + // *** Get stamps width and height + $sx = imagesx($stamp); + $sy = imagesy($stamp); + + // *** Find co-ords to place image + $posArray = $this->calculatePosition($pos, $padding, $sx, $sy); + $x = $posArray['width']; + $y = $posArray['height']; + + // *** Set watermark opacity + if (fix_strtolower(strrchr($watermarkImage, '.')) == '.png') + { + + $opacity = $this->invertTransparency($opacity, 100); + $this->filterOpacity($stamp, $opacity); + } + + // Copy the watermark image onto our photo + imagecopy($im, $stamp, $x, $y, 0, 0, imagesx($stamp), imagesy($stamp)); + + } + + ## -------------------------------------------------------- + + private function calculatePosition($pos, $padding, $assetWidth, $assetHeight, $upperLeft = true) + # + # Author: Jarrod Oberto + # Date: 08-05-11 + # Purpose: Calculate the x, y pixel cordinates of the asset to place + # Params in: (str) $pos: Either something like: "tl", "l", "br" or an + # exact position like: "100x50" + # (int) $padding: The amount of padding from the edge. Only + # used for the predefined $pos. + # (int) $assetWidth: The width of the asset to add to the image + # (int) $assetHeight: The height of the asset to add to the image + # (bol) $upperLeft: if true, the asset will be positioned based + # on the upper left x, y coords. If false, it means you're + # using the lower left as the basepoint and this will + # convert it to the upper left position + # Params out: + # NOTE: this is done from the UPPER left corner!! But will convert lower + # left basepoints to upper left if $upperleft is set to false + # + # + { + $pos = fix_strtolower($pos); + + // *** If co-ords have been entered + if (strstr($pos, 'x')) + { + $pos = str_replace(' ', '', $pos); + + $xyArray = explode('x', $pos); + list($width, $height) = $xyArray; + + } + else + { + + switch ($pos) + { + case 'tl': + $width = 0 + $padding; + $height = 0 + $padding; + break; + + case 't': + $width = ($this->width / 2) - ($assetWidth / 2); + $height = 0 + $padding; + break; + + case 'tr': + $width = $this->width - $assetWidth - $padding; + $height = 0 + $padding;; + break; + + case 'l': + $width = 0 + $padding; + $height = ($this->height / 2) - ($assetHeight / 2); + break; + + case 'm': + $width = ($this->width / 2) - ($assetWidth / 2); + $height = ($this->height / 2) - ($assetHeight / 2); + break; + + case 'r': + $width = $this->width - $assetWidth - $padding; + $height = ($this->height / 2) - ($assetHeight / 2); + break; + + case 'bl': + $width = 0 + $padding; + $height = $this->height - $assetHeight - $padding; + break; + + case 'b': + $width = ($this->width / 2) - ($assetWidth / 2); + $height = $this->height - $assetHeight - $padding; + break; + + case 'br': + $width = $this->width - $assetWidth - $padding; + $height = $this->height - $assetHeight - $padding; + break; + + default: + $width = 0; + $height = 0; + break; + } + } + + if ( ! $upperLeft) + { + $height = $height + $assetHeight; + } + + return array( 'width' => $width, 'height' => $height ); + } + + + ## -------------------------------------------------------- + + private function filterOpacity(&$img, $opacity = 75) + # + # Author: aiden dot mail at freemail dot hu + # Author date: 29-03-08 08:16 + # Date added: 08-05-11 + # Purpose: Change opacity of image + # Params in: $img: Image resource id + # (int) $opacity: the opacity amount: 0-100, 100 being not opaque. + # Params out: (bool) true on success, else false + # Ref: http://www.php.net/manual/en/function.imagefilter.php#82162 + # Notes: png only + # + { + + if ( ! isset($opacity)) + { + return false; + } + + if ($opacity == 100) + { + return true; + } + + $opacity /= 100; + + //get image width and height + $w = imagesx($img); + $h = imagesy($img); + + //turn alpha blending off + imagealphablending($img, false); + + //find the most opaque pixel in the image (the one with the smallest alpha value) + $minalpha = 127; + for ($x = 0; $x < $w; $x++) + { + for ($y = 0; $y < $h; $y++) + { + $alpha = (imagecolorat($img, $x, $y) >> 24) & 0xFF; + if ($alpha < $minalpha) + { + $minalpha = $alpha; + } + } + } + + //loop through image pixels and modify alpha for each + for ($x = 0; $x < $w; $x++) + { + for ($y = 0; $y < $h; $y++) + { + //get current alpha value (represents the TANSPARENCY!) + $colorxy = imagecolorat($img, $x, $y); + $alpha = ($colorxy >> 24) & 0xFF; + //calculate new alpha + if ($minalpha !== 127) + { + $alpha = 127 + 127 * $opacity * ($alpha - 127) / (127 - $minalpha); + } + else + { + $alpha += 127 * $opacity; + } + //get the color index with new alpha + $alphacolorxy = imagecolorallocatealpha($img, ($colorxy >> 16) & 0xFF, ($colorxy >> 8) & 0xFF, $colorxy & 0xFF, $alpha); + //set pixel with the new color + opacity + if ( ! imagesetpixel($img, $x, $y, $alphacolorxy)) + { + + return false; + } + } + } + + return true; + } + +## -------------------------------------------------------- + + private function openImage($file) + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: + # Param in: + # Param out: n/a + # Reference: + # Notes: + # + { + + if ( ! file_exists($file) && ! $this->checkStringStartsWith('http://', $file) && ! $this->checkStringStartsWith('https://', $file) ) + { + if ($this->debug) + { + throw new Exception('Image not found.'); + } + else + { + throw new Exception(); + } + }; + + // *** Get extension / image type + $extension = mime_content_type($file); + $extension = fix_strtolower($extension); + $extension = str_replace('image/', '', $extension); + switch ($extension) + { + case 'jpg': + case 'jpeg': + $img = @imagecreatefromjpeg($file); + break; + case 'gif': + $img = @imagecreatefromgif($file); + break; + case 'png': + $img = @imagecreatefrompng($file); + break; + case 'bmp': + $img = @$this->imagecreatefrombmp($file); + break; + case 'psd': + case 'vnd.adobe.photoshop': + $img = @$this->imagecreatefrompsd($file); + break; + + + // ... etc + + default: + $img = false; + break; + } + + return $img; + } + +## -------------------------------------------------------- + + public function reset() + # + # Author: Jarrod Oberto + # Date: 30-08-11 + # Purpose: Reset the resource (allow further editing) + # Params in: + # Params out: + # Notes: + # + { + $this->__construct($this->fileName); + } + +## -------------------------------------------------------- + + public function saveImage($savePath, $imageQuality = "100") + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Saves the image + # Param in: $savePath: Where to save the image including filename: + # $imageQuality: image quality you want the image saved at 0-100 + # Param out: n/a + # Reference: + # Notes: * gif doesn't have a quality parameter + # * jpg has a quality setting 0-100 (100 being the best) + # * png has a quality setting 0-9 (0 being the best) + # + # * bmp files have no native support for bmp files. We use a + # third party class to save as bmp. + { + + // *** Perform a check or two. + if ( ! is_resource($this->imageResized)) + { + if ($this->debug) + { + throw new Exception('saveImage: This is not a resource.'); + } + else + { + throw new Exception(); + } + } + $fileInfoArray = pathInfo($savePath); + clearstatcache(); + if ( ! is_writable($fileInfoArray['dirname'])) + { + if ($this->debug) + { + throw new Exception('The path is not writable. Please check your permissions.'); + } + else + { + throw new Exception(); + } + } + + // *** Get extension + $extension = strrchr($savePath, '.'); + $extension = fix_strtolower($extension); + + $error = ''; + + switch ($extension) + { + case '.jpg': + case '.jpeg': + $this->checkInterlaceImage($this->isInterlace); + if (imagetypes() & IMG_JPG) + { + imagejpeg($this->imageResized, $savePath, $imageQuality); + } + else + { + $error = 'jpg'; + } + break; + + case '.gif': + $this->checkInterlaceImage($this->isInterlace); + if (imagetypes() & IMG_GIF) + { + imagegif($this->imageResized, $savePath); + } + else + { + $error = 'gif'; + } + break; + + case '.png': + // *** Scale quality from 0-100 to 0-9 + $scaleQuality = round(($imageQuality / 100) * 9); + + // *** Invert qualit setting as 0 is best, not 9 + $invertScaleQuality = 9 - $scaleQuality; + + $this->checkInterlaceImage($this->isInterlace); + if (imagetypes() & IMG_PNG) + { + imagepng($this->imageResized, $savePath, $invertScaleQuality); + } + else + { + $error = 'png'; + } + break; + + case '.bmp': + file_put_contents($savePath, $this->GD2BMPstring($this->imageResized)); + break; + + + // ... etc + + default: + // *** No extension - No save. + $this->errorArray[] = 'This file type (' . $extension . ') is not supported. File not saved.'; + break; + } + + //imagedestroy($this->imageResized); + + // *** Display error if a file type is not supported. + if ($error != '') + { + $this->errorArray[] = $error . ' support is NOT enabled. File not saved.'; + } + } + +## -------------------------------------------------------- + + public function displayImage($fileType = 'jpg', $imageQuality = "100") + # Author: Jarrod Oberto + # Date: 18-11-09 + # Purpose: Display images directly to the browser + # Param in: The image type you want to display + # Param out: + # Reference: + # Notes: + # + { + + if ( ! is_resource($this->imageResized)) + { + if ($this->debug) + { + throw new Exception('saveImage: This is not a resource.'); + } + else + { + throw new Exception(); + } + } + + switch ($fileType) + { + case 'jpg': + case 'jpeg': + header('Content-type: image/jpeg'); + imagejpeg($this->imageResized, '', $imageQuality); + break; + case 'gif': + header('Content-type: image/gif'); + imagegif($this->imageResized); + break; + case 'png': + header('Content-type: image/png'); + + // *** Scale quality from 0-100 to 0-9 + $scaleQuality = round(($imageQuality / 100) * 9); + + // *** Invert qualit setting as 0 is best, not 9 + $invertScaleQuality = 9 - $scaleQuality; + + imagepng($this->imageResized, '', $invertScaleQuality); + break; + case 'bmp': + echo 'bmp file format is not supported.'; + break; + + // ... etc + + default: + // *** No extension - No save. + break; + } + + + //imagedestroy($this->imageResized); + } + +## -------------------------------------------------------- + + public function setTransparency($bool) + # Sep 2011 + { + $this->keepTransparency = $bool; + } + +## -------------------------------------------------------- + + public function setFillColor($value) + # Sep 2011 + # Param in: (mixed) $value: (array) Could be an array of RGB + # (str) Could be hex #ffffff or #fff, fff, ffffff + # + # If the keepTransparency is set to false, then no transparency is to be used. + # This is ideal when you want to save as jpg. + # + # this method allows you to set the background color to use instead of + # transparency. + # + { + $colorArray = $this->formatColor($value); + $this->fillColorArray = $colorArray; + } + +## -------------------------------------------------------- + + public function setCropFromTop($value) + # Sep 2011 + { + $this->cropFromTopPercent = $value; + } + +## -------------------------------------------------------- + + public function testGDInstalled() + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Test to see if GD is installed + # Param in: n/a + # Param out: (bool) True is gd extension loaded otherwise false + # Reference: + # Notes: + # + { + if (extension_loaded('gd') && function_exists('gd_info')) + { + $gdInstalled = true; + } + else + { + $gdInstalled = false; + } + + return $gdInstalled; + } + +## -------------------------------------------------------- + + public function testEXIFInstalled() + # Author: Jarrod Oberto + # Date: 08-05-11 + # Purpose: Test to see if EXIF is installed + # Param in: n/a + # Param out: (bool) True is exif extension loaded otherwise false + # Reference: + # Notes: + # + { + if (extension_loaded('exif')) + { + $exifInstalled = true; + } + else + { + $exifInstalled = false; + } + + return $exifInstalled; + } + +## -------------------------------------------------------- + + public function testIsImage($image) + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Test if file is an image + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # + { + if ($image) + { + $fileIsImage = true; + } + else + { + $fileIsImage = false; + } + + return $fileIsImage; + } + +## -------------------------------------------------------- + + public function testFunct() + # Author: Jarrod Oberto + # Date: 27-02-08 + # Purpose: Test Function + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # + { + echo $this->height; + } + +## -------------------------------------------------------- + + public function setForceStretch($value) + # Author: Jarrod Oberto + # Date: 23-12-10 + # Purpose: + # Param in: (bool) $value + # Param out: n/a + # Reference: + # Notes: + # + { + $this->forceStretch = $value; + } + +## -------------------------------------------------------- + + public function setFile($fileName) + # Author: Jarrod Oberto + # Date: 28-02-08 + # Purpose: + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # + { + self::__construct($fileName); + } + +## -------------------------------------------------------- + + public function getFileName() + # Author: Jarrod Oberto + # Date: 10-09-08 + # Purpose: + # Param in: n/a + # Param out: n/a + # Reference: + # Notes: + # + { + return $this->fileName; + } + +## -------------------------------------------------------- + + public function getHeight() + { + return $this->height; + } + +## -------------------------------------------------------- + + public function getWidth() + { + return $this->width; + } + +## -------------------------------------------------------- + + public function getOriginalHeight() + { + return $this->heightOriginal; + } + +## -------------------------------------------------------- + + public function getOriginalWidth() + { + return $this->widthOriginal; + } + +## -------------------------------------------------------- + + public function getErrors() + # Author: Jarrod Oberto + # Date: 19-11-09 + # Purpose: Returns the error array + # Param in: n/a + # Param out: Array of errors + # Reference: + # Notes: + # + { + return $this->errorArray; + } + +## -------------------------------------------------------- + + private function checkInterlaceImage($isEnabled) + # jpg will use progressive (they don't use interace) + { + if ($isEnabled) + { + imageinterlace($this->imageResized, $isEnabled); + } + } + +## -------------------------------------------------------- + + protected function formatColor($value) + # Author: Jarrod Oberto + # Date: 09-05-11 + # Purpose: Determine color method passed in and return color as RGB + # Param in: (mixed) $value: (array) Could be an array of RGB + # (str) Could be hex #ffffff or #fff, fff, ffffff + # Param out: + # Reference: + # Notes: + # + { + $rgbArray = array(); + + // *** If it's an array it should be R, G, B + if (is_array($value)) + { + + if (key($value) == 0 && count($value) == 3) + { + + $rgbArray['r'] = $value[0]; + $rgbArray['g'] = $value[1]; + $rgbArray['b'] = $value[2]; + + } + else + { + $rgbArray = $value; + } + } + else + { + if (fix_strtolower($value) == 'transparent') + { + + $rgbArray = array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + 'a' => 127 + ); + + } + else + { + + // *** ...Else it should be hex. Let's make it RGB + $rgbArray = $this->hex2dec($value); + } + } + + return $rgbArray; + } + + ## -------------------------------------------------------- + + function hex2dec($hex) + # Purpose: Convert #hex color to RGB + { + $color = str_replace('#', '', $hex); + + if (strlen($color) == 3) + { + $color = $color . $color; + } + + $rgb = array( + 'r' => hexdec(substr($color, 0, 2)), + 'g' => hexdec(substr($color, 2, 2)), + 'b' => hexdec(substr($color, 4, 2)), + 'a' => 0 + ); + + return $rgb; + } + + ## -------------------------------------------------------- + + private function createImageColor($colorArray) + { + $r = $colorArray['r']; + $g = $colorArray['g']; + $b = $colorArray['b']; + + return imagecolorallocate($this->imageResized, $r, $g, $b); + } + + ## -------------------------------------------------------- + + private function testColorExists($colorArray) + { + $r = $colorArray['r']; + $g = $colorArray['g']; + $b = $colorArray['b']; + + if (imagecolorexact($this->imageResized, $r, $g, $b) == -1) + { + return false; + } + else + { + return true; + } + } + + ## -------------------------------------------------------- + + private function findUnusedGreen() + # Purpose: We find a green color suitable to use like green-screen effect. + # Therefore, the color must not exist in the image. + { + $green = 255; + + do + { + + $greenChroma = array( 0, $green, 0 ); + $colorArray = $this->formatColor($greenChroma); + $match = $this->testColorExists($colorArray); + $green--; + + } while ($match == false && $green > 0); + + // *** If no match, just bite the bullet and use green value of 255 + if ( ! $match) + { + $greenChroma = array( 0, $green, 0 ); + } + + return $greenChroma; + } + + ## -------------------------------------------------------- + + private function findUnusedBlue() + # Purpose: We find a green color suitable to use like green-screen effect. + # Therefore, the color must not exist in the image. + { + $blue = 255; + + do + { + + $blueChroma = array( 0, 0, $blue ); + $colorArray = $this->formatColor($blueChroma); + $match = $this->testColorExists($colorArray); + $blue--; + + } while ($match == false && $blue > 0); + + // *** If no match, just bite the bullet and use blue value of 255 + if ( ! $match) + { + $blueChroma = array( 0, 0, $blue ); + } + + return $blueChroma; + } + + ## -------------------------------------------------------- + + private function invertTransparency($value, $originalMax, $invert = true) + # Purpose: This does two things: + # 1) Convert the range from 0-127 to 0-100 + # 2) Inverts value to 100 is not transparent while 0 is fully + # transparent (like Photoshop) + { + // *** Test max range + if ($value > $originalMax) + { + $value = $originalMax; + } + + // *** Test min range + if ($value < 0) + { + $value = 0; + } + + if ($invert) + { + return $originalMax - (($value / 100) * $originalMax); + } + else + { + return ($value / 100) * $originalMax; + } + } + + ## -------------------------------------------------------- + + private function transparentImage($src) + { + // *** making images with white bg transparent + $r1 = 0; + $g1 = 255; + $b1 = 0; + for ($x = 0; $x < imagesx($src); ++$x) + { + for ($y = 0; $y < imagesy($src); ++$y) + { + $color = imagecolorat($src, $x, $y); + $r = ($color >> 16) & 0xFF; + $g = ($color >> 8) & 0xFF; + $b = $color & 0xFF; + for ($i = 0; $i < 270; $i++) + { + //if ($r . $g . $b == ($r1 + $i) . ($g1 + $i) . ($b1 + $i)) { + if ($r == 0 && $g == 255 && $b == 0) + { + //if ($g == 255) { + $trans_colour = imagecolorallocatealpha($src, 0, 0, 0, 127); + imagefill($src, $x, $y, $trans_colour); + } + } + } + } + + return $src; + } + + ## -------------------------------------------------------- + + function checkStringStartsWith($needle, $haystack) + # Check if a string starts with a specific pattern + { + return (substr($haystack, 0, strlen($needle)) == $needle); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + BMP SUPPORT (SAVING) - James Heinrich +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + private function GD2BMPstring(&$gd_image) + # Author: James Heinrich + # Purpose: Save file as type bmp + # Param in: The image canvas (passed as ref) + # Param out: + # Reference: + # Notes: This code was stripped out of two external files + # (phpthumb.bmp.php,phpthumb.functions.php) and added below to + # avoid dependancies. + # + { + $imageX = ImageSX($gd_image); + $imageY = ImageSY($gd_image); + + $BMP = ''; + for ($y = ($imageY - 1); $y >= 0; $y--) + { + $thisline = ''; + for ($x = 0; $x < $imageX; $x++) + { + $argb = $this->GetPixelColor($gd_image, $x, $y); + $thisline .= chr($argb['blue']) . chr($argb['green']) . chr($argb['red']); + } + while (strlen($thisline) % 4) + { + $thisline .= "\x00"; + } + $BMP .= $thisline; + } + + $bmpSize = strlen($BMP) + 14 + 40; + // BITMAPFILEHEADER [14 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_62uq.asp + $BITMAPFILEHEADER = 'BM'; // WORD bfType; + $BITMAPFILEHEADER .= $this->LittleEndian2String($bmpSize, 4); // DWORD bfSize; + $BITMAPFILEHEADER .= $this->LittleEndian2String(0, 2); // WORD bfReserved1; + $BITMAPFILEHEADER .= $this->LittleEndian2String(0, 2); // WORD bfReserved2; + $BITMAPFILEHEADER .= $this->LittleEndian2String(54, 4); // DWORD bfOffBits; + + // BITMAPINFOHEADER - [40 bytes] http://msdn.microsoft.com/library/en-us/gdi/bitmaps_1rw2.asp + $BITMAPINFOHEADER = $this->LittleEndian2String(40, 4); // DWORD biSize; + $BITMAPINFOHEADER .= $this->LittleEndian2String($imageX, 4); // LONG biWidth; + $BITMAPINFOHEADER .= $this->LittleEndian2String($imageY, 4); // LONG biHeight; + $BITMAPINFOHEADER .= $this->LittleEndian2String(1, 2); // WORD biPlanes; + $BITMAPINFOHEADER .= $this->LittleEndian2String(24, 2); // WORD biBitCount; + $BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4); // DWORD biCompression; + $BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4); // DWORD biSizeImage; + $BITMAPINFOHEADER .= $this->LittleEndian2String(2835, 4); // LONG biXPelsPerMeter; + $BITMAPINFOHEADER .= $this->LittleEndian2String(2835, 4); // LONG biYPelsPerMeter; + $BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4); // DWORD biClrUsed; + $BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4); // DWORD biClrImportant; + + return $BITMAPFILEHEADER . $BITMAPINFOHEADER . $BMP; + } + +## -------------------------------------------------------- + + private function GetPixelColor(&$img, $x, $y) + # Author: James Heinrich + # Purpose: + # Param in: + # Param out: + # Reference: + # Notes: + # + { + if ( ! is_resource($img)) + { + return false; + } + + return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y)); + } + +## -------------------------------------------------------- + + private function LittleEndian2String($number, $minbytes = 1) + # Author: James Heinrich + # Purpose: BMP SUPPORT (SAVING) + # Param in: + # Param out: + # Reference: + # Notes: + # + { + $intstring = ''; + while ($number > 0) + { + $intstring = $intstring . chr($number & 255); + $number >>= 8; + } + + return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + BMP SUPPORT (READING) +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + private function ImageCreateFromBMP($filename) + # Author: DHKold + # Date: The 15th of June 2005 + # Version: 2.0B + # Purpose: To create an image from a BMP file. + # Param in: BMP file to open. + # Param out: Return a resource like the other ImageCreateFrom functions + # Reference: http://us3.php.net/manual/en/function.imagecreate.php#53879 + # Bug fix: Author: domelca at terra dot es + # Date: 06 March 2008 + # Fix: Correct 16bit BMP support + # Notes: + # + { + + //Ouverture du fichier en mode binaire + if ( ! $f1 = fopen($filename, "rb")) + { + return false; + } + + //1 : Chargement des ent�tes FICHIER + $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14)); + if ($FILE['file_type'] != 19778) + { + return false; + } + + //2 : Chargement des ent�tes BMP + $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel' . + '/Vcompression/Vsize_bitmap/Vhoriz_resolution' . + '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1, 40)); + $BMP['colors'] = pow(2, $BMP['bits_per_pixel']); + + if ($BMP['size_bitmap'] == 0) + { + $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset']; + } + + $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel'] / 8; + $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']); + $BMP['decal'] = ($BMP['width'] * $BMP['bytes_per_pixel'] / 4); + $BMP['decal'] -= floor($BMP['width'] * $BMP['bytes_per_pixel'] / 4); + $BMP['decal'] = 4 - (4 * $BMP['decal']); + + if ($BMP['decal'] == 4) + { + $BMP['decal'] = 0; + } + + //3 : Chargement des couleurs de la palette + $PALETTE = array(); + if ($BMP['colors'] < 16777216) + { + $PALETTE = unpack('V' . $BMP['colors'], fread($f1, $BMP['colors'] * 4)); + } + + //4 : Cr�ation de l'image + $IMG = fread($f1, $BMP['size_bitmap']); + $VIDE = chr(0); + + $res = imagecreatetruecolor($BMP['width'], $BMP['height']); + $P = 0; + $Y = $BMP['height'] - 1; + while ($Y >= 0) + { + $X = 0; + while ($X < $BMP['width']) + { + if ($BMP['bits_per_pixel'] == 24) + { + $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE); + } + elseif ($BMP['bits_per_pixel'] == 16) + { + + /* + * BMP 16bit fix + * ================= + * + * Ref: http://us3.php.net/manual/en/function.imagecreate.php#81604 + * + * Notes: + * "don't work with bmp 16 bits_per_pixel. change pixel + * generator for this." + * + */ + + // *** Original code (don't work) + //$COLOR = unpack("n",substr($IMG,$P,2)); + //$COLOR[1] = $PALETTE[$COLOR[1]+1]; + + $COLOR = unpack("v", substr($IMG, $P, 2)); + $blue = ($COLOR[1] & 0x001f) << 3; + $green = ($COLOR[1] & 0x07e0) >> 3; + $red = ($COLOR[1] & 0xf800) >> 8; + $COLOR[1] = $red * 65536 + $green * 256 + $blue; + + } + elseif ($BMP['bits_per_pixel'] == 8) + { + $COLOR = unpack("n", $VIDE . substr($IMG, $P, 1)); + $COLOR[1] = $PALETTE[ $COLOR[1] + 1 ]; + } + elseif ($BMP['bits_per_pixel'] == 4) + { + $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1)); + if (($P * 2) % 2 == 0) + { + $COLOR[1] = ($COLOR[1] >> 4); + } + else + { + $COLOR[1] = ($COLOR[1] & 0x0F); + } + $COLOR[1] = $PALETTE[ $COLOR[1] + 1 ]; + } + elseif ($BMP['bits_per_pixel'] == 1) + { + $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1)); + if (($P * 8) % 8 == 0) + { + $COLOR[1] = $COLOR[1] >> 7; + } + elseif (($P * 8) % 8 == 1) + { + $COLOR[1] = ($COLOR[1] & 0x40) >> 6; + } + elseif (($P * 8) % 8 == 2) + { + $COLOR[1] = ($COLOR[1] & 0x20) >> 5; + } + elseif (($P * 8) % 8 == 3) + { + $COLOR[1] = ($COLOR[1] & 0x10) >> 4; + } + elseif (($P * 8) % 8 == 4) + { + $COLOR[1] = ($COLOR[1] & 0x8) >> 3; + } + elseif (($P * 8) % 8 == 5) + { + $COLOR[1] = ($COLOR[1] & 0x4) >> 2; + } + elseif (($P * 8) % 8 == 6) + { + $COLOR[1] = ($COLOR[1] & 0x2) >> 1; + } + elseif (($P * 8) % 8 == 7) + { + $COLOR[1] = ($COLOR[1] & 0x1); + } + $COLOR[1] = $PALETTE[ $COLOR[1] + 1 ]; + } + else + { + return false; + } + + imagesetpixel($res, $X, $Y, $COLOR[1]); + $X++; + $P += $BMP['bytes_per_pixel']; + } + + $Y--; + $P += $BMP['decal']; + } + //Fermeture du fichier + fclose($f1); + + return $res; + } + + + /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*- + PSD SUPPORT (READING) +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*/ + + private function imagecreatefrompsd($fileName) + # Author: Tim de Koning + # Version: 1.3 + # Purpose: To create an image from a PSD file. + # Param in: PSD file to open. + # Param out: Return a resource like the other ImageCreateFrom functions + # Reference: http://www.kingsquare.nl/phppsdreader + # Notes: + # + { + if (file_exists($this->psdReaderPath)) + { + + + include_once($this->psdReaderPath); + + $psdReader = new PhpPsdReader($fileName); + + if (isset($psdReader->infoArray['error'])) + { + return ''; + } + else + { + return $psdReader->getImage(); + } + } + else + { + return false; + } + } + +## -------------------------------------------------------- + + public function __destruct() + { + if (is_resource($this->imageResized)) + { + imagedestroy($this->imageResized); + } + } + +## -------------------------------------------------------- + +} + + +/* + * Example with some API calls (outdated): + * + * + * =============================== + * Compulsary + * =============================== + * + * include("classes/resize_class.php"); + * + * // *** Initialise object + * $magicianObj = new resize('images/cars/large/a.jpg'); + * + * // *** Turn off stretching (optional) + * $magicianObj -> setForceStretch(false); + * + * // *** Resize object + * $magicianObj -> resizeImage(150, 100, 0); + * + * =============================== + * Image options - can run none, one, or all. + * =============================== + * + * // *** Add watermark + * $magicianObj -> addWatermark('stamp.png'); + * + * // *** Add text + * $magicianObj -> addText('testing...'); + * + * =============================== + * Output options - can run one, or the other, or both. + * =============================== + * + * // *** Save image to disk + * $magicianObj -> saveImage('images/cars/large/b.jpg', 100); + * + * // *** Or output to screen (params in can be jpg, gif, png) + * $magicianObj -> displayImage('png'); + * + * =============================== + * Return options - return errors. nice for debuggin. + * =============================== + * + * // *** Return error array + * $errorArray = $magicianObj -> getErrors(); + * + * + * =============================== + * Cleanup options - not really neccessary, but good practice + * =============================== + * + * // *** Free used memory + * $magicianObj -> __destruct(); + */ diff --git a/libraries/filemanager-9.14.1/include/utils.php b/libraries/filemanager-9.14.1/include/utils.php new file mode 100644 index 0000000..8cda960 --- /dev/null +++ b/libraries/filemanager-9.14.1/include/utils.php @@ -0,0 +1,1345 @@ +send(); + exit; + } + + } + if(file_exists('lang/' . $lang . '.php')){ + $lang_vars = include 'lang/' . $lang . '.php'; + }else{ + $lang_vars = include '../lang/' . $lang . '.php'; + } + + if ( ! is_array($lang_vars)) + { + $lang_vars = array(); + } +} + + +function checkRelativePathPartial($path){ + if (strpos($path, '../') !== false + || strpos($path, './') !== false + || strpos($path, '/..') !== false + || strpos($path, '..\\') !== false + || strpos($path, '\\..') !== false + || strpos($path, '.\\') !== false + || $path === ".." + ){ + return false; + } + return true; +} + +/** +* Check relative path +* +* @param string $path +* +* @return boolean is it correct? +*/ +function checkRelativePath($path){ + $path_correct = checkRelativePathPartial($path); + if($path_correct){ + $path_decoded = rawurldecode($path); + $path_correct = checkRelativePathPartial($path_decoded); + } + return $path_correct; +} + +/** +* Check if the given path is an upload dir based on config +* +* @param string $path +* @param array $config +* +* @return boolean is it an upload dir? +*/ +function isUploadDir($path, $config){ + $upload_dir = $config['current_path']; + $thumbs_dir = $config['thumbs_base_path']; + if (realpath($path) === realpath($upload_dir) || realpath($path) === realpath($thumbs_dir)) + { + return true; + } + return false; +} + +/** +* Delete file +* +* @param string $path +* @param string $path_thumb +* @param array $config +* +* @return null +*/ +function deleteFile($path,$path_thumb,$config){ + if ($config['delete_files']){ + $ftp = ftp_con($config); + if($ftp){ + try{ + $ftp->delete("/".$path); + @$ftp->delete("/".$path_thumb); + }catch(FtpClient\FtpException $e){ + return; + } + }else{ + if (file_exists($path)){ + unlink($path); + } + if (file_exists($path_thumb)){ + unlink($path_thumb); + } + } + + $info=pathinfo($path); + if (!$ftp && $config['relative_image_creation']){ + foreach($config['relative_path_from_current_pos'] as $k=>$path) + { + if ($path!="" && $path[strlen($path)-1]!="/") $path.="/"; + + if (file_exists($info['dirname']."/".$path.$config['relative_image_creation_name_to_prepend'][$k].$info['filename'].$config['relative_image_creation_name_to_append'][$k].".".$info['extension'])) + { + unlink($info['dirname']."/".$path.$config['relative_image_creation_name_to_prepend'][$k].$info['filename'].$config['relative_image_creation_name_to_append'][$k].".".$info['extension']); + } + } + } + + if (!$ftp && $config['fixed_image_creation']) + { + foreach($config['fixed_path_from_filemanager'] as $k=>$path) + { + if ($path!="" && $path[strlen($path)-1] != "/") $path.="/"; + + $base_dir=$path.substr_replace($info['dirname']."/", '', 0, strlen($config['current_path'])); + if (file_exists($base_dir.$config['fixed_image_creation_name_to_prepend'][$k].$info['filename'].$config['fixed_image_creation_to_append'][$k].".".$info['extension'])) + { + unlink($base_dir.$config['fixed_image_creation_name_to_prepend'][$k].$info['filename'].$config['fixed_image_creation_to_append'][$k].".".$info['extension']); + } + } + } + } +} + +/** +* Delete directory +* +* @param string $dir +* +* @return bool +*/ +function deleteDir($dir,$ftp = null, $config = null) +{ + if($ftp){ + + try{ + $ftp->rmdir($dir); + return true; + + }catch(FtpClient\FtpException $e){ + return null; + } + + }else{ + if ( ! file_exists($dir) || isUploadDir($dir, $config)) + { + return false; + } + if ( ! is_dir($dir)) + { + return unlink($dir); + } + foreach (scandir($dir) as $item) + { + if ($item == '.' || $item == '..') + { + continue; + } + if ( ! deleteDir($dir . DIRECTORY_SEPARATOR . $item)) + { + return false; + } + } + } + + return rmdir($dir); +} + +/** +* Make a file copy +* +* @param string $old_path +* @param string $name New file name without extension +* +* @return bool +*/ +function duplicate_file( $old_path, $name, $ftp = null, $config = null ) +{ + $info = pathinfo($old_path); + $new_path = $info['dirname'] . "/" . $name . "." . $info['extension']; + if($ftp){ + try{ + $tmp = time().$name . "." . $info['extension']; + $ftp->get($tmp, "/".$old_path, FTP_BINARY); + $ftp->put("/".$new_path, $tmp, FTP_BINARY); + unlink($tmp); + return true; + + }catch(FtpClient\FtpException $e){ + return null; + } + }else{ + if (file_exists($old_path) && is_file($old_path)) + { + if (file_exists($new_path) && $old_path == $new_path) + { + return false; + } + + return copy($old_path, $new_path); + } + } +} + + +/** +* Rename file +* +* @param string $old_path File to rename +* @param string $name New file name without extension +* @param bool $transliteration +* +* @return bool +*/ +function rename_file($old_path, $name, $ftp = null, $config = null) +{ + $name = fix_filename($name, $config); + $info = pathinfo($old_path); + $new_path = $info['dirname'] . "/" . $name . "." . $info['extension']; + if($ftp){ + try{ + return $ftp->rename("/".$old_path, "/".$new_path); + }catch(FtpClient\FtpException $e){ + return false; + } + }else{ + if (file_exists($old_path) && is_file($old_path)) + { + $new_path = $info['dirname'] . "/" . $name . "." . $info['extension']; + if (file_exists($new_path) && $old_path == $new_path) + { + return false; + } + + return rename($old_path, $new_path); + } + } +} + + +function url_exists($url){ + if (!$fp = curl_init($url)) return false; + return true; +} + + +function tempdir() { + $tempfile=tempnam(sys_get_temp_dir(),''); + if (file_exists($tempfile)) { unlink($tempfile); } + mkdir($tempfile); + if (is_dir($tempfile)) { return $tempfile; } +} + + +/** +* Rename directory +* +* @param string $old_path Directory to rename +* @param string $name New directory name +* @param bool $transliteration +* +* @return bool +*/ +function rename_folder($old_path, $name, $ftp = null, $config = null) +{ + $name = fix_filename($name, $config, true); + $new_path = fix_dirname($old_path) . "/" . $name; + if($ftp){ + if($ftp->chdir("/".$old_path)){ + if(@$ftp->chdir($new_path)){ + return false; + } + return $ftp->rename("/".$old_path, "/".$new_path); + } + }else{ + if (file_exists($old_path) && is_dir($old_path) && !isUploadDir($old_path, $config)) + { + if (file_exists($new_path) && $old_path == $new_path) + { + return false; + } + return rename($old_path, $new_path); + } + } +} + +function ftp_con($config){ + if(isset($config['ftp_host']) && $config['ftp_host']){ + // *** Include the class + include('include/FtpClient.php'); + include('include/FtpException.php'); + include('include/FtpWrapper.php'); + + $ftp = new \FtpClient\FtpClient(); + try{ + $ftp->connect($config['ftp_host'],$config['ftp_ssl'],$config['ftp_port']); + $ftp->login($config['ftp_user'], $config['ftp_pass']); + $ftp->pasv(true); + return $ftp; + }catch(FtpClient\FtpException $e){ + echo "Error: "; + echo $e->getMessage(); + echo " to server "; + $tmp = $e->getTrace(); + echo $tmp[0]['args'][0]; + echo "
          Please check configurations"; + die(); + } + }else{ + return false; + } +} + +/** +* Create new image from existing file +* +* @param string $imgfile Source image file name +* @param string $imgthumb Thumbnail file name +* @param int $newwidth Thumbnail width +* @param int $newheight Optional thumbnail height +* @param string $option Type of resize +* +* @return bool +* @throws \Exception +*/ +function create_img($imgfile, $imgthumb, $newwidth, $newheight = null, $option = "crop",$config = array()) +{ + $result = false; + if(isset($config['ftp_host']) && $config['ftp_host']){ + if(url_exists($imgfile)){ + $temp = tempnam('/tmp','RF'); + unlink($temp); + $temp .=".".substr(strrchr($imgfile,'.'),1); + $handle = fopen($temp, "w"); + fwrite($handle, file_get_contents($imgfile)); + fclose($handle); + $imgfile= $temp; + $save_ftp = $imgthumb; + $imgthumb = $temp; + } + } + if(file_exists($imgfile) || strpos($imgfile,'http')===0){ + if (strpos($imgfile,'http')===0 || image_check_memory_usage($imgfile, $newwidth, $newheight)) + { + require_once('php_image_magician.php'); + try{ + $magicianObj = new imageLib($imgfile); + $magicianObj->resizeImage($newwidth, $newheight, $option); + $magicianObj->saveImage($imgthumb, 80); + }catch (Exception $e){ + return $e->getMessage(); + } + $result = true; + } + } + if($result && isset($config['ftp_host']) && $config['ftp_host'] ){ + $ftp->put($save_ftp, $imgthumb, FTP_BINARY); + unlink($imgthumb); + } + + return $result; +} + +/** +* Convert convert size in bytes to human readable +* +* @param int $size +* +* @return string +*/ +function makeSize($size) +{ + $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); + $u = 0; + while ((round($size / 1024) > 0) && ($u < 4)) + { + $size = $size / 1024; + $u++; + } + + return (number_format($size, 0) . " " . trans($units[ $u ])); +} + +/** +* Determine directory size +* +* @param string $path +* +* @return int +*/ +function folder_info($path,$count_hidden=true) +{ + global $config; + $total_size = 0; + $files = scandir($path); + $cleanPath = rtrim($path, '/') . '/'; + $files_count = 0; + $folders_count = 0; + foreach ($files as $t) + { + if ($t != "." && $t != "..") + { + if ($count_hidden or !(in_array($t,$config['hidden_folders']) or in_array($t,$config['hidden_files']))) + { + $currentFile = $cleanPath . $t; + if (is_dir($currentFile)) + { + list($size,$tmp,$tmp1) = folder_info($currentFile); + $total_size += $size; + $folders_count ++; + } + else + { + $size = filesize($currentFile); + $total_size += $size; + $files_count++; + } + } + } + } + + return array($total_size,$files_count,$folders_count); +} +/** +* Get number of files in a directory +* +* @param string $path +* +* @return int +*/ +function filescount($path,$count_hidden=true) +{ + global $config; + $total_count = 0; + $files = scandir($path); + $cleanPath = rtrim($path, '/') . '/'; + + foreach ($files as $t) + { + if ($t != "." && $t != "..") + { + if ($count_hidden or !(in_array($t,$config['hidden_folders']) or in_array($t,$config['hidden_files']))) + { + $currentFile = $cleanPath . $t; + if (is_dir($currentFile)) + { + $size = filescount($currentFile); + $total_count += $size; + } + else + { + $total_count += 1; + } + } + } + } + + return $total_count; +} +/** +* check if the current folder size plus the added size is over the overall size limite +* +* @param int $sizeAdded +* +* @return bool +*/ +function checkresultingsize($sizeAdded) +{ + global $config; + + if ($config['MaxSizeTotal'] !== false && is_int($config['MaxSizeTotal'])) { + list($sizeCurrentFolder,$fileCurrentNum,$foldersCurrentCount) = folder_info($config['current_path'],false); + // overall size over limit + if (($config['MaxSizeTotal'] * 1024 * 1024) < ($sizeCurrentFolder + $sizeAdded)) { + return false; + } + } + return true; +} + +/** +* Create directory for images and/or thumbnails +* +* @param string $path +* @param string $path_thumbs +*/ +function create_folder($path = null, $path_thumbs = null,$ftp = null,$config = null) +{ + if($ftp){ + $ftp->mkdir($path); + $ftp->mkdir($path_thumbs); + }else{ + if(file_exists($path) || file_exists($path_thumbs)){ + return false; + } + $oldumask = umask(0); + $permission = 0755; + if(isset($config['folderPermission'])){ + $permission = $config['folderPermission']; + } + if ($path && !file_exists($path)) + { + mkdir($path, $permission, true); + } // or even 01777 so you get the sticky bit set + if ($path_thumbs) + { + mkdir($path_thumbs, $permission, true) or die("$path_thumbs cannot be found"); + } // or even 01777 so you get the sticky bit set + umask($oldumask); + return true; + } +} + +/** +* Get file extension present in directory +* +* @param string $path +* @param string $ext +*/ +function check_files_extensions_on_path($path, $ext) +{ + if ( ! is_dir($path)) + { + $fileinfo = pathinfo($path); + if ( ! in_array(mb_strtolower($fileinfo['extension']), $ext)) + { + unlink($path); + } + } + else + { + $files = scandir($path); + foreach ($files as $file) + { + check_files_extensions_on_path(trim($path, '/') . "/" . $file, $ext); + } + } +} + + +/** +* Check file extension +* +* @param string $extension +* @param array $config +*/ + +function check_file_extension($extension,$config){ + $check = false; + if (!$config['ext_blacklist']) { + if(in_array(mb_strtolower($extension), $conf['ext'])){ + $check = true; + } + } else { + if(!in_array(mb_strtolower($extension), $conf['ext_blacklist'])){ + $check = true; + } + } + + if($config['files_without_extension'] && $extension == ''){ + $check = true; + } + + return $check; +} + + +/** +* Get file extension present in PHAR file +* +* @param string $phar +* @param array $files +* @param string $basepath +* @param string $ext +*/ +function check_files_extensions_on_phar($phar, &$files, $basepath, $config) +{ + foreach ($phar as $file) + { + if ($file->isFile()) + { + if (check_file_extension($file->getExtension())) + { + $files[] = $basepath . $file->getFileName(); + } + } + else + { + if ($file->isDir()) + { + $iterator = new DirectoryIterator($file); + check_files_extensions_on_phar($iterator, $files, $basepath . $file->getFileName() . '/', $config); + } + } + } +} + +/** +* Cleanup input +* +* @param string $str +* +* @return string +*/ +function fix_get_params($str) +{ + return strip_tags(preg_replace("/[^a-zA-Z0-9\.\[\]_| -]/", '', $str)); +} + + +/** +* Check extension +* +* @param string $extension +* @param array $config +* +* @return bool +*/ +function check_extension($extension,$config){ + $extension = fix_strtolower($extension); + if((!$config['ext_blacklist'] && !in_array($extension, $config['ext'])) || ($config['ext_blacklist'] && in_array($extension, $config['ext_blacklist']))){ + return false; + } + return true; +} + + + + +/** +* Sanitize filename +* +* @param string $str +* +* @return string +*/ +function sanitize($str) +{ + return strip_tags(htmlspecialchars($str)); +} + +/** +* Cleanup filename +* +* @param string $str +* @param bool $transliteration +* @param bool $convert_spaces +* @param string $replace_with +* @param bool $is_folder +* +* @return string +*/ +function fix_filename($str, $config, $is_folder = false) +{ + $str = sanitize($str); + if ($config['convert_spaces']) + { + $str = str_replace(' ', $config['replace_with'], $str); + } + + if ($config['transliteration']) + { + if (!mb_detect_encoding($str, 'UTF-8', true)) + { + $str = utf8_encode($str); + } + if (function_exists('transliterator_transliterate')) + { + $str = transliterator_transliterate('Any-Latin; Latin-ASCII', $str); + } + else + { + $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); + } + + $str = preg_replace("/[^a-zA-Z0-9\.\[\]_| -]/", '', $str); + } + + $str = str_replace(array( '"', "'", "/", "\\" ), "", $str); + $str = strip_tags($str); + + // Empty or incorrectly transliterated filename. + // Here is a point: a good file UNKNOWN_LANGUAGE.jpg could become .jpg in previous code. + // So we add that default 'file' name to fix that issue. + if (!$config['empty_filename'] && strpos($str, '.') === 0 && $is_folder === false) + { + $str = 'file' . $str; + } + + return trim($str); +} + +/** +* Cleanup directory name +* +* @param string $str +* +* @return string +*/ +function fix_dirname($str) +{ + return str_replace('~', ' ', dirname(str_replace(' ', '~', $str))); +} + +/** +* Correct strtoupper handling +* +* @param string $str +* +* @return string +*/ +function fix_strtoupper($str) +{ + if (function_exists('mb_strtoupper')) + { + return mb_strtoupper($str); + } + else + { + return strtoupper($str); + } +} + +/** +* Correct strtolower handling +* +* @param string $str +* +* @return string +*/ +function fix_strtolower($str) +{ + if (function_exists('mb_strtoupper')) + { + return mb_strtolower($str); + } + else + { + return strtolower($str); + } +} + +function fix_path($path, $config) +{ + $info = pathinfo($path); + $tmp_path = $info['dirname']; + $str = fix_filename($info['filename'], $config); + if ($tmp_path != "") + { + return $tmp_path . DIRECTORY_SEPARATOR . $str; + } + else + { + return $str; + } +} + +/** +* @param $current_path +* @param $fld +* +* @return bool +*/ +function config_loading($current_path, $fld) +{ + if (file_exists($current_path . $fld . ".config")) + { + require_once($current_path . $fld . ".config"); + + return true; + } + echo "!!!!" . $parent = fix_dirname($fld); + if ($parent != "." && ! empty($parent)) + { + config_loading($current_path, $parent); + } + + return false; +} + +/** +* Check if memory is enough to process image +* +* @param string $img +* @param int $max_breedte +* @param int $max_hoogte +* +* @return bool +*/ +function image_check_memory_usage($img, $max_breedte, $max_hoogte) +{ + if (file_exists($img)) + { + $K64 = 65536; // number of bytes in 64K + $memory_usage = memory_get_usage(); + if(ini_get('memory_limit') > 0 ){ + + $mem = ini_get('memory_limit'); + $memory_limit = 0; + if (strpos($mem, 'M') !== false) $memory_limit = abs(intval(str_replace(array('M'), '', $mem) * 1024 * 1024)); + if (strpos($mem, 'G') !== false) $memory_limit = abs(intval(str_replace(array('G'), '', $mem) * 1024 * 1024 * 1024)); + + $image_properties = getimagesize($img); + $image_width = $image_properties[0]; + $image_height = $image_properties[1]; + if (isset($image_properties['bits'])) + $image_bits = $image_properties['bits']; + else + $image_bits = 0; + $image_memory_usage = $K64 + ($image_width * $image_height * ($image_bits >> 3) * 2); + $thumb_memory_usage = $K64 + ($max_breedte * $max_hoogte * ($image_bits >> 3) * 2); + $memory_needed = abs(intval($memory_usage + $image_memory_usage + $thumb_memory_usage)); + + if ($memory_needed > $memory_limit) + { + return false; + } + } + return true; + } + return false; +} + +/** +* Check is string is ended with needle +* +* @param string $haystack +* @param string $needle +* +* @return bool +*/ +if(!function_exists('ends_with')){ + function ends_with($haystack, $needle) + { + return $needle === "" || substr($haystack, -strlen($needle)) === $needle; + } +} + +/** +* TODO REFACTOR THIS! +* +* @param $targetPath +* @param $targetFile +* @param $name +* @param $current_path +* @param $config +* relative_image_creation +* relative_path_from_current_pos +* relative_image_creation_name_to_prepend +* relative_image_creation_name_to_append +* relative_image_creation_width +* relative_image_creation_height +* relative_image_creation_option +* fixed_image_creation +* fixed_path_from_filemanager +* fixed_image_creation_name_to_prepend +* fixed_image_creation_to_append +* fixed_image_creation_width +* fixed_image_creation_height +* fixed_image_creation_option +* +* @return bool +*/ +function new_thumbnails_creation($targetPath, $targetFile, $name, $current_path, $config) +{ + //create relative thumbs + $all_ok = true; + + $info = pathinfo($name); + $info['filename'] = fix_filename($info['filename'],$config); + if ($config['relative_image_creation']) + { + foreach ($config['relative_path_from_current_pos'] as $k => $path) + { + if ($path != "" && $path[ strlen($path) - 1 ] != "/") + { + $path .= "/"; + } + if ( ! file_exists($targetPath . $path)) + { + create_folder($targetPath . $path, false); + } + if ( ! ends_with($targetPath, $path)) + { + if ( ! create_img($targetFile, $targetPath . $path . $config['relative_image_creation_name_to_prepend'][ $k ] . $info['filename'] . $config['relative_image_creation_name_to_append'][ $k ] . "." . $info['extension'], $config['relative_image_creation_width'][ $k ], $config['relative_image_creation_height'][ $k ], $config['relative_image_creation_option'][ $k ])) + { + $all_ok = false; + } + } + } + } + + //create fixed thumbs + if ($config['fixed_image_creation']) + { + foreach ($config['fixed_path_from_filemanager'] as $k => $path) + { + if ($path != "" && $path[ strlen($path) - 1 ] != "/") + { + $path .= "/"; + } + $base_dir = $path . substr_replace($targetPath, '', 0, strlen($current_path)); + if ( ! file_exists($base_dir)) + { + create_folder($base_dir, false); + } + if ( ! create_img($targetFile, $base_dir . $config['fixed_image_creation_name_to_prepend'][ $k ] . $info['filename'] . $config['fixed_image_creation_to_append'][ $k ] . "." . $info['extension'], $config['fixed_image_creation_width'][ $k ], $config['fixed_image_creation_height'][ $k ], $config['fixed_image_creation_option'][ $k ])) + { + $all_ok = false; + } + } + } + + return $all_ok; +} + + +/** +* Get a remote file, using whichever mechanism is enabled +* +* @param string $url +* +* @return bool|mixed|string +*/ +function get_file_by_url($url) +{ + if (ini_get('allow_url_fopen')) + { + $arrContextOptions=array( + "ssl"=>array( + "verify_peer"=>false, + "verify_peer_name"=>false, + ), + ); + return file_get_contents($url, false, stream_context_create($arrContextOptions)); + } + if ( ! function_exists('curl_version')) + { + return false; + } + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_URL, $url); + + $data = curl_exec($ch); + curl_close($ch); + + return $data; +} + +/** +* test for dir/file writability properly +* +* @param string $dir +* +* @return bool +*/ +function is_really_writable($dir) +{ + $dir = rtrim($dir, '/'); + // linux, safe off + if (DIRECTORY_SEPARATOR == '/' && @ini_get("safe_mode") == false) + { + return is_writable($dir); + } + + // Windows, safe ON. (have to write a file :S) + if (is_dir($dir)) + { + $dir = $dir . '/' . md5(mt_rand(1, 1000) . mt_rand(1, 1000)); + + if (($fp = @fopen($dir, 'ab')) === false) + { + return false; + } + + fclose($fp); + @chmod($dir, 0755); + @unlink($dir); + + return true; + } + elseif ( ! is_file($dir) || ($fp = @fopen($dir, 'ab')) === false) + { + return false; + } + + fclose($fp); + + return true; +} + +/** +* Check if a function is callable. +* Some servers disable copy,rename etc. +* +* @parm string $name +* +* @return bool +*/ +function is_function_callable($name) +{ + if (function_exists($name) === false) + { + return false; + } + $disabled = explode(',', ini_get('disable_functions')); + + return ! in_array($name, $disabled); +} + +/** +* recursivly copies everything +* +* @param string $source +* @param string $destination +* @param bool $is_rec +*/ +function rcopy($source, $destination, $is_rec = false) +{ + if (is_dir($source)) + { + if ($is_rec === false) + { + $pinfo = pathinfo($source); + $destination = rtrim($destination, '/') . DIRECTORY_SEPARATOR . $pinfo['basename']; + } + if (is_dir($destination) === false) + { + mkdir($destination, 0755, true); + } + + $files = scandir($source); + foreach ($files as $file) + { + if ($file != "." && $file != "..") + { + rcopy($source . DIRECTORY_SEPARATOR . $file, rtrim($destination, '/') . DIRECTORY_SEPARATOR . $file, true); + } + } + } + else + { + if (file_exists($source)) + { + if (is_dir($destination) === true) + { + $pinfo = pathinfo($source); + $dest2 = rtrim($destination, '/') . DIRECTORY_SEPARATOR . $pinfo['basename']; + } + else + { + $dest2 = $destination; + } + + copy($source, $dest2); + } + } +} + + + + +/** +* recursivly renames everything +* +* I know copy and rename could be done with just one function +* but i split the 2 because sometimes rename fails on windows +* Need more feedback from users and refactor if needed +* +* @param string $source +* @param string $destination +* @param bool $is_rec +*/ +function rrename($source, $destination, $is_rec = false) +{ + if (is_dir($source)) + { + if ($is_rec === false) + { + $pinfo = pathinfo($source); + $destination = rtrim($destination, '/') . DIRECTORY_SEPARATOR . $pinfo['basename']; + } + if (is_dir($destination) === false) + { + mkdir($destination, 0755, true); + } + + $files = scandir($source); + foreach ($files as $file) + { + if ($file != "." && $file != "..") + { + rrename($source . DIRECTORY_SEPARATOR . $file, rtrim($destination, '/') . DIRECTORY_SEPARATOR . $file, true); + } + } + } + else + { + if (file_exists($source)) + { + if (is_dir($destination) === true) + { + $pinfo = pathinfo($source); + $dest2 = rtrim($destination, '/') . DIRECTORY_SEPARATOR . $pinfo['basename']; + } + else + { + $dest2 = $destination; + } + + rename($source, $dest2); + } + } +} + +// On windows rename leaves folders sometime +// This will clear leftover folders +// After more feedback will merge it with rrename +function rrename_after_cleaner($source) +{ + $files = scandir($source); + + foreach ($files as $file) + { + if ($file != "." && $file != "..") + { + if (is_dir($source . DIRECTORY_SEPARATOR . $file)) + { + rrename_after_cleaner($source . DIRECTORY_SEPARATOR . $file); + } + else + { + unlink($source . DIRECTORY_SEPARATOR . $file); + } + } + } + + return rmdir($source); +} + +/** +* Recursive chmod +* @param string $source +* @param int $mode +* @param string $rec_option +* @param bool $is_rec +*/ +function rchmod($source, $mode, $rec_option = "none", $is_rec = false) +{ + if ($rec_option == "none") + { + chmod($source, $mode); + } + else + { + if ($is_rec === false) + { + chmod($source, $mode); + } + + $files = scandir($source); + + foreach ($files as $file) + { + if ($file != "." && $file != "..") + { + if (is_dir($source . DIRECTORY_SEPARATOR . $file)) + { + if ($rec_option == "folders" || $rec_option == "both") + { + chmod($source . DIRECTORY_SEPARATOR . $file, $mode); + } + rchmod($source . DIRECTORY_SEPARATOR . $file, $mode, $rec_option, true); + } + else + { + if ($rec_option == "files" || $rec_option == "both") + { + chmod($source . DIRECTORY_SEPARATOR . $file, $mode); + } + } + } + } + } +} + +/** +* @param string $input +* @param bool $trace +* @param bool $halt +*/ +function debugger($input, $trace = false, $halt = false) +{ + ob_start(); + + echo "
          ----- DEBUG DUMP -----"; + echo "
          ";
          +	var_dump($input);
          +	echo "
          "; + + if ($trace) + { + if (is_php('5.3.6')) + { + $debug = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + } + else + { + $debug = debug_backtrace(false); + } + + echo "
          -----STACK TRACE-----"; + echo "
          ";
          +		var_dump($debug);
          +		echo "
          "; + } + + echo ""; + echo "---------------------------
          "; + + $ret = ob_get_contents(); + ob_end_clean(); + + echo $ret; + + if ($halt == true) + { + exit(); + } +} + +/** +* @param string $version +* +* @return bool +*/ +function is_php($version = '5.0.0') +{ + static $phpVer; + $version = (string) $version; + + if ( ! isset($phpVer[ $version ])) + { + $phpVer[ $version ] = (version_compare(PHP_VERSION, $version) < 0) ? false : true; + } + + return $phpVer[ $version ]; +} + +/** +* Return the caller location if set in config.php +* @param string $version +* +* @return bool +*/ +function AddErrorLocation() +{ + if (defined('DEBUG_ERROR_MESSAGE') and DEBUG_ERROR_MESSAGE) { + $pile=debug_backtrace(); + return " (@".$pile[0]["file"]."#".$pile[0]["line"].")"; + } + return ""; +} diff --git a/libraries/filemanager-9.14.1/index.php b/libraries/filemanager-9.14.1/index.php new file mode 100644 index 0000000..c30c28f --- /dev/null +++ b/libraries/filemanager-9.14.1/index.php @@ -0,0 +1,10 @@ +
          ")},unzip:function(e){var a=jQuery("#sub_folder").val()+jQuery("#fldr_value").val()+e.find("a.link").attr("data-file");show_animation(),y.ajax({type:"POST",url:"ajax_calls.php?action=extract",data:{path:a}}).done(function(e){hide_animation(),""!=e?bootbox.alert(e):window.location.href=jQuery("#refresh").attr("href")+"&"+(new Date).getTime()})},edit_img:function(e){var a=e.attr("data-name"),t=e.attr("data-path");if(1==jQuery("#ftp").val())var r=jQuery("#ftp_base_url").val()+jQuery("#upload_dir").val()+jQuery("#fldr_value").val()+a;else r=jQuery("#base_url").val()+jQuery("#upload_dir").val()+t;var i,n=jQuery("#tui-image-editor");n.attr("data-name",a),n.attr("data-path",r),show_animation(),n.attr("id"),i=r,imageEditor.loadImageFromURL(i,"SampleImage").then(function(e){imageEditor.ui.resizeEditor({imageSize:{oldWidth:e.oldWidth,oldHeight:e.oldHeight,newWidth:e.newWidth,newHeight:e.newHeight}})}).catch(function(e){bootbox.alert("Something went wrong: "+e)}),hide_animation(),n.removeClass("hide")},duplicate:function(a){var t=a.find("h4").text().trim();bootbox.prompt(jQuery("#lang_duplicate").val(),jQuery("#cancel").val(),jQuery("#ok").val(),function(e){null!==e&&(e=Q(e))!=t&&g("duplicate_file",a.attr("data-path"),e,a,"apply_file_duplicate")},t+" - copy")},select:function(e){var a,t=l(e),r=jQuery("#field_id").val();(1==jQuery("#return_relative_url").val()&&(t=(t=t.replace(jQuery("#base_url").val(),"")).replace(jQuery("#cur_dir").val(),"")),a=1==jQuery("#popup").val()?window.opener:window.parent,""!=r)?1==jQuery("#crossdomain").val()?a.postMessage({sender:"responsivefilemanager",url:t,field_id:r},"*"):(jQuery("#"+r,a.document).val(t).trigger("change"),"function"==typeof a.responsive_filemanager_callback&&a.responsive_filemanager_callback(r),j()):apply_any(t)},copy:function(e){u(e,"copy")},cut:function(e){u(e,"cut")},paste:function(){d()},chmod:function(e){!function(e){jQuery("#files_permission_start").parent().parent().remove();var r=e.find(".rename-file-paths"),i=e.closest("figure").attr("data-path"),a=r.attr("data-permissions"),n=r.attr("data-folder");y.ajax({type:"POST",url:"ajax_calls.php?action=chmod",data:{path:i,permissions:a,folder:n}}).done(function(e){bootbox.dialog(e,[{label:jQuery("#cancel").val(),class:"btn"},{label:jQuery("#ok").val(),class:"btn-inverse",callback:function(){var a="-";jQuery("#u_4").is(":checked")?a+="r":a+="-",jQuery("#u_2").is(":checked")?a+="w":a+="-",jQuery("#u_1").is(":checked")?a+="x":a+="-",jQuery("#g_4").is(":checked")?a+="r":a+="-",jQuery("#g_2").is(":checked")?a+="w":a+="-",jQuery("#g_1").is(":checked")?a+="x":a+="-",jQuery("#a_4").is(":checked")?a+="r":a+="-",jQuery("#a_2").is(":checked")?a+="w":a+="-",jQuery("#a_1").is(":checked")?a+="x":a+="-";var e=jQuery("#chmod_form #chmod_value").val();if(""!=e&&void 0!==e){var t=jQuery("#chmod_form input[name=apply_recursive]:checked").val();""!=t&&void 0!==t||(t="none"),y.ajax({type:"POST",url:"execute.php?action=chmod",data:{path:i,new_mode:e,is_recursive:t,folder:n}}).done(function(e){""!=e?bootbox.alert(e):r.attr("data-permissions",a)})}}}],{header:jQuery("#lang_file_permission").val()}),setTimeout(function(){o(!1)},100)})}(e)},edit_text_file:function(e){!function(a){jQuery("#textfile_edit_area").parent().parent().remove();var t=a.closest("figure").attr("data-path");y.ajax({type:"POST",url:"ajax_calls.php?action=get_file&sub_action=edit&preview_mode=text",data:{path:t}}).done(function(e){bootbox.dialog(e,[{label:jQuery("#cancel").val(),class:"btn"},{label:jQuery("#ok").val(),class:"btn-inverse",callback:function(){var e=jQuery("#textfile_edit_area").val();window.editor&&"function"==typeof window.editor.getData&&(e=window.editor.getData()),y.ajax({type:"POST",url:"execute.php?action=save_text_file",data:{path:t,new_content:e}}).done(function(e){""!=e&&bootbox.alert(e)})}}],{header:a.find(".name_download").val()})})}(e)}},makeContextMenu:function(){var r=this;y.contextMenu({selector:"figure:not(.back-directory), .list-view2 figure:not(.back-directory)",autoHide:!0,build:function(t){t.addClass("selected");var e={callback:function(e,a){r.contextActions[e](t)},items:{}};return(t.find(".img-precontainer-mini .filetype").hasClass("png")||t.find(".img-precontainer-mini .filetype").hasClass("jpg")||t.find(".img-precontainer-mini .filetype").hasClass("jpeg"))&&a&&(e.items.edit_img={name:jQuery("#lang_edit_image").val(),icon:"edit_img",disabled:!1}),t.hasClass("directory")&&0!=jQuery("#type_param").val()&&(e.items.select={name:jQuery("#lang_select").val(),icon:"",disabled:!1}),e.items.copy_url={name:jQuery("#lang_show_url").val(),icon:"url",disabled:!1},(t.find(".img-precontainer-mini .filetype").hasClass("zip")||t.find(".img-precontainer-mini .filetype").hasClass("tar")||t.find(".img-precontainer-mini .filetype").hasClass("gz"))&&1==jQuery("#extract_files").val()&&(e.items.unzip={name:jQuery("#lang_extract").val(),icon:"extract",disabled:!1}),t.find(".img-precontainer-mini .filetype").hasClass("edit-text-file-allowed")&&(e.items.edit_text_file={name:jQuery("#lang_edit_file").val(),icon:"edit",disabled:!1}),t.hasClass("directory")||1!=jQuery("#duplicate").val()||(e.items.duplicate={name:jQuery("#lang_duplicate").val(),icon:"duplicate",disabled:!1}),t.hasClass("directory")||1!=jQuery("#copy_cut_files_allowed").val()?t.hasClass("directory")&&1==jQuery("#copy_cut_dirs_allowed").val()&&(e.items.copy={name:jQuery("#lang_copy").val(),icon:"copy",disabled:!1},e.items.cut={name:jQuery("#lang_cut").val(),icon:"cut",disabled:!1}):(e.items.copy={name:jQuery("#lang_copy").val(),icon:"copy",disabled:!1},e.items.cut={name:jQuery("#lang_cut").val(),icon:"cut",disabled:!1}),0==jQuery("#clipboard").val()||t.hasClass("directory")||(e.items.paste={name:jQuery("#lang_paste_here").val(),icon:"clipboard-apply",disabled:!1}),t.hasClass("directory")||1!=jQuery("#chmod_files_allowed").val()?t.hasClass("directory")&&1==jQuery("#chmod_dirs_allowed").val()&&(e.items.chmod={name:jQuery("#lang_file_permission").val(),icon:"key",disabled:!1}):e.items.chmod={name:jQuery("#lang_file_permission").val(),icon:"key",disabled:!1},e.items.sep="----",e.items.info={type:"html",html:""+jQuery("#lang_file_info").val()+""},e.items.name={name:t.attr("data-name"),icon:"label",disabled:!0},"img"==t.attr("data-type")&&(e.items.dimension={name:t.find(".img-dimension").html(),icon:"dimension",disabled:!0}),"true"!==jQuery("#show_folder_size").val()&&"true"!==jQuery("#show_folder_size").val()||(t.hasClass("directory")?e.items.size={name:t.find(".file-size").html()+" - "+t.find(".nfiles").val()+" "+jQuery("#lang_files").val()+" - "+t.find(".nfolders").val()+" "+jQuery("#lang_folders").val(),icon:"size",disabled:!0}:e.items.size={name:t.find(".file-size").html(),icon:"size",disabled:!0}),e.items.date={name:t.find(".file-date").html(),icon:"date",disabled:!0},e},events:{hide:function(){jQuery("figure").removeClass("selected")}}}),jQuery(document).on("contextmenu",function(e){if(!jQuery(e.target).is("figure"))return!1})},updateMultipleSelectionButtons:function(){0 div > div.fileupload-buttonbar > div.text-center > button").click()},200)}),jQuery("#fileupload").bind("fileuploadsubmit",function(e,a){a.formData={fldr:jQuery("#sub_folder").val()+jQuery("#fldr_value").val()+(a.files[0].relativePath||a.files[0].webkitRelativePath||"")}}),jQuery("#fileupload").addClass("fileupload-processing"),y.ajax({url:jQuery("#fileupload").fileupload("option","url"),dataType:"json",context:jQuery("#fileupload")[0]}).always(function(){jQuery(this).removeClass("fileupload-processing")}),jQuery(".upload-btn").on("click",function(){jQuery(".uploader").show(200)}),jQuery(".close-uploader").on("click",function(){jQuery(".uploader").hide(200),setTimeout(function(){window.location.href=jQuery("#refresh").attr("href")+"&"+(new Date).getTime()},420)})},uploadURL:function(){jQuery("#uploadURL").on("click",function(e){e.preventDefault();var a=jQuery("#url").val(),t=jQuery("#fldr_value").val();show_animation(),y.ajax({type:"POST",url:"upload.php",data:{fldr:t,url:a}}).done(function(e){hide_animation(),jQuery("#url").val("")}).fail(function(e){bootbox.alert(jQuery("#lang_error_upload").val()),hide_animation(),jQuery("#url").val("")})})},makeSort:function(r){jQuery("input[name=radio-sort]").on("click",function(){var e=jQuery(this).attr("data-item"),a=jQuery("#"+e),t=jQuery(".filters label");c=0,y(".selection:checkbox").removeAttr("checked"),s.updateMultipleSelectionButtons(),t.removeClass("btn-inverse"),t.find("i").removeClass("icon-white"),jQuery("#filter-input").val(""),a.addClass("btn-inverse"),a.find("i").addClass("icon-white"),"ff-item-type-all"==e?(r?jQuery(".grid li").show(300):window.location.href=jQuery("#current_url").val()+"&sort_by="+jQuery("#sort_by").val()+"&descending="+(i?1:0),"undefined"!=typeof Storage&&localStorage.setItem("sort","")):jQuery(this).is(":checked")&&(jQuery(".grid li").not("."+e).hide(300),jQuery(".grid li."+e).show(300),"undefined"!=typeof Storage&&localStorage.setItem("sort",e)),b()});var i=jQuery("#descending").val();jQuery(".sorter").on("click",function(){var e=jQuery(this);i=jQuery("#sort_by").val()!==e.attr("data-sort")||0==i,r?(y.ajax({url:"ajax_calls.php?action=sort&sort_by="+e.attr("data-sort")+"&descending="+(i?1:0)}),_(i,"."+e.attr("data-sort")),jQuery(" a.sorter").removeClass("descending").removeClass("ascending"),i?jQuery(".sort-"+e.attr("data-sort")).addClass("descending"):jQuery(".sort-"+e.attr("data-sort")).addClass("ascending"),jQuery("#sort_by").val(e.attr("data-sort")),jQuery("#descending").val(i?1:0),b()):window.location.href=jQuery("#current_url").val()+"&sort_by="+e.attr("data-sort")+"&descending="+(i?1:0)})}};function o(e){var n=[];if(n.user=0,n.group=0,void(n.all=0)!==e&&1==e){var a=jQuery("#chmod_form #chmod_value").val();n.user=a.substr(0,1),n.group=a.substr(1,1),n.all=a.substr(2,1),y.each(n,function(e){(""==n[e]||0==y.isNumeric(n[e])||parseInt(n[e])<0||7]+(>|$)/g,""),y.trim(e)):null}function g(e,a,t,r,i){null!==t&&(t=Q(t),y.ajax({type:"POST",url:"execute.php?action="+e,data:{path:a,name:t.replace("/","")}}).done(function(e){return""!=e?(bootbox.alert(e),!1):(""!=i&&window[i](r,t),!0)}))}function _(e,t){var a=jQuery("li.dir","ul.grid").filter(":visible"),r=jQuery("li.file","ul.grid").filter(":visible");c=0,y(".selection:checkbox").removeAttr("checked"),s.updateMultipleSelectionButtons();var i=[],n=[],l=[],o=[];a.each(function(){var e=jQuery(this),a=e.find(t).val();if(y.isNumeric(a))for(a=parseFloat(a);void 0!==i[a]&&i[a];)a=parseFloat(parseFloat(a)+parseFloat(.001));else a=a+"a"+e.find("h4 a").attr("data-file");i[a]=e.html(),n.push(a)}),r.each(function(){var e=jQuery(this),a=e.find(t).val();if(y.isNumeric(a))for(a=parseFloat(a);void 0!==l[a]&&l[a];)a=parseFloat(parseFloat(a)+parseFloat(.001));else a=a+"a"+e.find("h4 a").attr("data-file");l[a]=e.html(),o.push(a)}),y.isNumeric(n[0])?n.sort(function(e,a){return parseFloat(e)-parseFloat(a)}):n.sort(),y.isNumeric(o[0])?o.sort(function(e,a){return parseFloat(e)-parseFloat(a)}):o.sort(),e&&(n.reverse(),o.reverse()),a.each(function(e){jQuery(this).html(i[n[e]])}),r.each(function(e){jQuery(this).html(l[o[e]]),jQuery(this).attr("data-name",jQuery(this).children().attr("data-name"))})}function b(){i.update()}jQuery(document).ready(function(){if(s.makeContextMenu(),"undefined"!=typeof Storage&&1!=jQuery("#type_param").val()&&3!=jQuery("#type_param").val()){var e=localStorage.getItem("sort");if(e){var a=jQuery("#"+e);a.addClass("btn-inverse"),a.find("i").addClass("icon-white"),jQuery(".grid li").not("."+e).hide(300),jQuery(".grid li."+e).show(300)}}if(jQuery(".ff-container").on("click",".checkmark",function(e){e.stopPropagation(),jQuery(this).parent().find("input").is(":checked")?c--:c++,s.updateMultipleSelectionButtons()}),jQuery("#full-img").on("click",function(){jQuery("#previewLightbox").lightbox("hide")}),jQuery("body").on("click",function(){jQuery(".tip-right").tooltip("hide")}),s.bindGridEvents(),parseInt(jQuery("#file_number").val())>parseInt(jQuery("#file_number_limit_js").val()))var t=!1;else t=!0;s.makeSort(t),s.makeFilters(t),s.uploadURL(),jQuery("#info").on("click",function(){bootbox.alert('

          responsive filemanager

          RESPONSIVE filemanager v.9.14.0
          responsivefilemanager.com


          Copyright © Tecrail - Alberto Peripolli. All rights reserved.


          License
          Creative Commons License
          This work is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported License.

          ')}),jQuery("#change_lang_btn").on("click",function(){y.ajax({type:"POST",url:"ajax_calls.php?action=get_lang",data:{}}).done(function(e){bootbox.dialog(e,[{label:jQuery("#cancel").val(),class:"btn"},{label:jQuery("#ok").val(),class:"btn-inverse",callback:function(){var a=jQuery("#new_lang_select").val();y.ajax({type:"POST",url:"ajax_calls.php?action=change_lang",data:{choosen_lang:a}}).done(function(e){""!=e?bootbox.alert(e):setTimeout(function(){window.location.href=jQuery("#refresh").attr("href").replace(/lang=[\w]*&/i,"lang="+a+"&")+"&"+(new Date).getTime()},100)})}}],{header:jQuery("#lang_lang_change").val()})})}),s.makeUploader(),jQuery("body").on("keypress",function(e){var a=String.fromCharCode(e.which);if("'"==a||'"'==a||"\\"==a||"/"==a)return!1}),jQuery("ul.grid li figcaption").on("click",'a[data-toggle="lightbox"]',function(){!function(e){show_animation();var a=new Image;a.src=e,jQuery(a).on("load",function(){hide_animation()})}(decodeURIComponent(jQuery(this).attr("data-url")))}),jQuery(".create-file-btn").on("click",function(){jQuery("#textfile_create_area").parent().parent().remove(),y.ajax({type:"GET",url:"ajax_calls.php?action=new_file_form"}).done(function(e){bootbox.dialog(e,[{label:jQuery("#cancel").val(),class:"btn"},{label:jQuery("#ok").val(),class:"btn-inverse",callback:function(){var e=jQuery("#create_text_file_name").val()+jQuery("#create_text_file_extension").val(),a=jQuery("#textfile_create_area").val();if(null!==e){e=Q(e);var t=jQuery("#sub_folder").val()+jQuery("#fldr_value").val();y.ajax({type:"POST",url:"execute.php?action=create_file",data:{path:t,name:e,new_content:a}}).done(function(e){""!=e&&bootbox.alert(e,function(){setTimeout(function(){window.location.href=jQuery("#refresh").attr("href")+"&"+(new Date).getTime()},500)})})}}}],{header:jQuery("#lang_new_file").val()})})}),jQuery(".new-folder").on("click",function(){bootbox.prompt(jQuery("#insert_folder_name").val(),jQuery("#cancel").val(),jQuery("#ok").val(),function(e){if(null!==e){e=Q(e).replace(".","");var a=jQuery("#sub_folder").val()+jQuery("#fldr_value").val();y.ajax({type:"POST",url:"execute.php?action=create_folder",data:{path:a,name:e}}).done(function(e){e?bootbox.alert(jQuery("#rename_existing_folder").val()):setTimeout(function(){window.location.href=jQuery("#refresh").attr("href")+"&"+(new Date).getTime()},300)})}})}),jQuery(".view-controller button").on("click",function(){var e=jQuery(this);jQuery(".view-controller button").removeClass("btn-inverse"),jQuery(".view-controller i").removeClass("icon-white"),e.addClass("btn-inverse"),e.find("i").addClass("icon-white"),y.ajax({url:"ajax_calls.php?action=view&type="+e.attr("data-value")}).done(function(e){""!=e&&bootbox.alert(e)}),void 0!==jQuery("ul.grid")[0]&&jQuery("ul.grid")[0]&&(jQuery("ul.grid")[0].className=jQuery("ul.grid")[0].className.replace(/\blist-view.*?\b/g,"")),void 0!==jQuery(".sorter-container")[0]&&jQuery(".sorter-container")[0]&&(jQuery(".sorter-container")[0].className=jQuery(".sorter-container")[0].className.replace(/\blist-view.*?\b/g,""));var a=e.attr("data-value");jQuery("#view").val(a),jQuery("ul.grid").addClass("list-view"+a),jQuery(".sorter-container").addClass("list-view"+a),1<=e.attr("data-value")?p(14):(jQuery("ul.grid li").css("width",126),jQuery("ul.grid figure").css("width",122)),b()}),n.touch?(jQuery("#help").show(),jQuery(".box:not(.no-effect)").swipe({swipeLeft:v,swipeRight:v,threshold:30})):(jQuery(".tip").tooltip({placement:"bottom"}),jQuery(".tip-top").tooltip({placement:"top"}),jQuery(".tip-left").tooltip({placement:"left"}),jQuery(".tip-right").tooltip({placement:"right"}),jQuery("body").addClass("no-touch")),jQuery(".paste-here-btn").on("click",function(){0==jQuery(this).hasClass("disabled")&&d()}),jQuery(".clear-clipboard-btn").on("click",function(){0==jQuery(this).hasClass("disabled")&&bootbox.confirm(jQuery("#lang_clear_clipboard_confirm").val(),jQuery("#cancel").val(),jQuery("#ok").val(),function(e){1==e&&y.ajax({type:"POST",url:"ajax_calls.php?action=clear_clipboard",data:{}}).done(function(e){""!=e?bootbox.alert(e):jQuery("#clipboard").val("0"),f(!1)})})});var u=function(a){var t=[];return jQuery(".selection:checkbox:checked:visible").each(function(){var e=jQuery(this).val();a&&(e=jQuery(this).closest("figure").attr("data-path")),t.push(e)}),t};if(jQuery(".multiple-action-btn").on("click",function(){var e=u();window[jQuery(this).attr("data-function")](e,jQuery("#field_id").val())}),jQuery(".multiple-deselect-btn").on("click",function(){y(".selection:checkbox").removeAttr("checked"),jQuery("#multiple-selection").hide(300)}),jQuery(".multiple-select-btn").on("click",function(){y(".selection:checkbox:visible").prop("checked",!0)}),jQuery(".multiple-delete-btn").on("click",function(){if(0!=jQuery(".selection:checkbox:checked:visible").length){var e=jQuery(this);bootbox.confirm(e.attr("data-confirm"),jQuery("#cancel").val(),jQuery("#ok").val(),function(e){if(1==e){var a=u(!0);r="delete_files",i=a,o=l=n="",null!==name&&(name=Q(name),y.ajax({type:"POST",url:"execute.php?action="+r,data:{path:i[0],paths:i,names:n}}).done(function(e){return""!=e?(bootbox.alert(e),!1):(""!=o&&window[o](l,name),!0)}));var t=jQuery("#files_number");t.text(parseInt(t.text())-a.length),jQuery(".selection:checkbox:checked:visible").each(function(){jQuery(this).closest("li").remove()}),jQuery("#multiple-selection").hide(300)}var r,i,n,l,o})}}),!n.csstransforms){var r=jQuery("figure");r.on("mouseover",function(){0==jQuery("#view").val()&&!1===jQuery("#main-item-container").hasClass("no-effect-slide")&&jQuery(this).find(".box:not(.no-effect)").animate({top:"-26px"},{queue:!1,duration:300})}),r.on("mouseout",function(){0==jQuery("#view").val()&&jQuery(this).find(".box:not(.no-effect)").animate({top:"0px"},{queue:!1,duration:300})})}jQuery(window).resize(function(){p(28)}),p(14),1==jQuery("#clipboard").val()?f(!0):f(!1),jQuery("li.dir, li.file").draggable({distance:20,cursor:"move",helper:function(){jQuery(this).find("figure").find(".box").css("top","0px");var e=jQuery(this).clone().css("z-index",1e3).find(".box").css("box-shadow","none").css("-webkit-box-shadow","none").parent().parent();return jQuery(this).addClass("selected"),e},start:function(e,a){jQuery(a.helper).addClass("ui-draggable-helper"),0==jQuery("#view").val()&&jQuery("#main-item-container").addClass("no-effect-slide")},stop:function(){jQuery(this).removeClass("selected"),0==jQuery("#view").val()&&jQuery("#main-item-container").removeClass("no-effect-slide")}}),jQuery("li.dir,li.back").droppable({accept:"ul.grid li",activeClass:"ui-state-highlight",hoverClass:"ui-state-hover",drop:function(e,a){!function(t,r){t.hasClass("directory")?t.find(".rename-folder"):t.find(".rename-file");var e=t.closest("figure").attr("data-path");t.parent().hide(100),y.ajax({type:"POST",url:"ajax_calls.php?action=copy_cut",data:{path:e,sub_action:"cut"}}).done(function(e){var a;""!=e?bootbox.alert(e):(a=void 0!==r?r.hasClass("back-directory")?r.find(".path").val():r.closest("figure").attr("data-path"):jQuery("#sub_folder").val()+jQuery("#fldr_value").val(),y.ajax({type:"POST",url:"execute.php?action=paste_clipboard",data:{path:a}}).done(function(e){""!=e?(bootbox.alert(e),t.parent().show(100)):(jQuery("#clipboard").val("0"),f(!1),t.parent().remove())}))}).error(function(){t.parent().show(100)})}(a.draggable.find("figure"),jQuery(this).find("figure"))}}),jQuery(document).on("keyup","#chmod_form #chmod_value",function(){o(!0)}),jQuery(document).on("change","#chmod_form input",function(){o(!1)}),jQuery(document).on("focusout","#chmod_form #chmod_value",function(){var e=jQuery("#chmod_form #chmod_value");null==e.val().match(/^[0-7]{3}$/)&&(e.val(e.attr("data-def-value")),o(!0))}),i=new LazyLoad,new Clipboard(".btn")}),encodeURL=function(e){for(var a=e.split("/"),t=3;t '):-1'+d+" ":-1'+d+" "):i+=''+d+" "}1==jQuery("#crossdomain").val()?t.postMessage({sender:"responsivefilemanager",url:u,field_id:null,html:i},"*"):parent.tinymce.majorVersion<4?(parent.tinymce.activeEditor.execCommand("mceInsertContent",!1,i),parent.tinymce.activeEditor.windowManager.close(parent.tinymce.activeEditor.windowManager.params.mce_window_id)):(parent.tinymce.activeEditor.insertContent(i),parent.tinymce.activeEditor.windowManager.close())}},apply_link=function(e,a){var t=h(),r=jQuery("#callback").val();Array.isArray(e)||(e=new Array(e));var i=m(e),n=JSON.stringify(i);(1==i.length&&(n=i[0]),""!=a)?1==jQuery("#crossdomain").val()?t.postMessage({sender:"responsivefilemanager",url:i[0],field_id:a},"*"):(jQuery("#"+a,t.document).val(n).trigger("change"),0==r?"function"==typeof t.responsive_filemanager_callback&&t.responsive_filemanager_callback(a):"function"==typeof t[r]&&t[r](a),j()):apply_any(i[0])},apply_img=function(e,a){var t=h(),r=jQuery("#callback").val();Array.isArray(e)||(e=new Array(e));var i=m(e),n=JSON.stringify(i);if(1==i.length&&(n=i[0]),""!=a){if(1==jQuery("#crossdomain").val())t.postMessage({sender:"responsivefilemanager",url:i[0],field_id:a},"*");else jQuery("#"+a,t.document).val(n).trigger("change"),0==r?"function"==typeof t.responsive_filemanager_callback&&t.responsive_filemanager_callback(a):"function"==typeof t[r]&&t[r](a),j()}else{if(jQuery("#add_time_to_img").val())var l=i[0]+"?"+(new Date).getTime();else l=i[0];apply_any(l)}},apply_video=function(e,a){var t=h(),r=jQuery("#callback").val();Array.isArray(e)||(e=new Array(e));var i=m(e),n=JSON.stringify(i);(1==i.length&&(n=i[0]),""!=a)?1==jQuery("#crossdomain").val()?t.postMessage({sender:"responsivefilemanager",url:i[0],field_id:a},"*"):(jQuery("#"+a,t.document).val(n).trigger("change"),0==r?"function"==typeof t.responsive_filemanager_callback&&t.responsive_filemanager_callback(a):"function"==typeof t[r]&&t[r](a),j()):apply_any(i[0])},apply_none=function(e,a,t){t.parent().find("form a")[1].click(),jQuery(".tip-right").tooltip("hide")},apply_any=function(e){if(1==jQuery("#crossdomain").val())window.parent.postMessage({sender:"responsivefilemanager",url:e,field_id:null},"*");else if("ckeditor"===jQuery("#editor").val()){var a=(t=new RegExp("(?:[?&]|&)"+"CKEditorFuncNum"+"=([^&]+)","i"),(r=window.location.search.match(t))&&1"+t.html()+"");var r=t.next();apply_file_rename(r.find("figure"),a);var i=r.find(".download-form"),n="form"+(new Date).getTime();i.attr("id",n),i.find(".tip-right").first().attr("onclick","jQuery('#"+n+"').submit();")},apply_file_rename=function(e,a){var t;e.attr("data-name",a),e.parent().attr("data-name",a),e.find("h4").text(a);var r=e.find("a.link"),i=(t=r.attr("data-file")).substring(t.lastIndexOf("/")+1),n=t.substring(t.lastIndexOf(".")+1);n=n?"."+n:"",r.each(function(){jQuery(this).attr("data-file",encodeURIComponent(a+n))}),e.find("img").each(function(){if(e=jQuery(this).attr("src"))jQuery(this).attr("src",e.replace(i,a+n)+"?time="+(new Date).getTime());else{var e=jQuery(this).attr("data-src");jQuery(this).attr("data-src",e.replace(i,a+n)+"?time="+(new Date).getTime())}jQuery(this).attr("alt",a+" thumbnails")});var l=e.find("a.preview");void 0!==(t=l.attr("data-url"))&&t&&l.attr("data-url",t.replace(encodeURIComponent(i),encodeURIComponent(a+n))),e.parent().attr("data-name",a+n),e.attr("data-name",a+n),e.find(".name_download").val(a+n);var o=e.attr("data-path").replace(i,a+n);e.attr("data-path",o)},apply_folder_rename=function(e,a){e.attr("data-name",a),e.find("figure").attr("data-name",a);var t=e.find("h4").find("a").text();e.find("h4 > a").text(a);var r=e.find(".folder-link"),i=r.attr("href"),n=jQuery("#fldr_value").val(),l=i.replace("fldr="+n+encodeURIComponent(t),"fldr="+n+encodeURIComponent(a));r.each(function(){jQuery(this).attr("href",l)});var o=e.attr("data-path"),u=o.lastIndexOf("/"),c=o.substr(0,u+1)+a;e.attr("data-path",c)},show_animation=function(){jQuery("#loading_container").css("display","block"),jQuery("#loading").css("opacity",".7")},hide_animation=function(){jQuery("#loading_container").fadeOut()}}(jQuery,Modernizr,image_editor),function(){if("function"==typeof window.CustomEvent)return;function e(e,a){a=a||{bubbles:!1,cancelable:!1,detail:void 0};var t=document.createEvent("CustomEvent");return t.initCustomEvent(e,a.bubbles,a.cancelable,a.detail),t}e.prototype=window.Event.prototype,window.CustomEvent=e}(); \ No newline at end of file diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-angular.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-angular.js new file mode 100644 index 0000000..185907d --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-angular.js @@ -0,0 +1,438 @@ +/* + * jQuery File Upload AngularJS Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, angular, require */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'angular', + './jquery.fileupload-image', + './jquery.fileupload-audio', + './jquery.fileupload-video', + './jquery.fileupload-validate' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('angular'), + require('./jquery.fileupload-image'), + require('./jquery.fileupload-audio'), + require('./jquery.fileupload-video'), + require('./jquery.fileupload-validate') + ); + } else { + factory(); + } +}(function () { + 'use strict'; + + angular.module('blueimp.fileupload', []) + + // The fileUpload service provides configuration options + // for the fileUpload directive and default handlers for + // File Upload events: + .provider('fileUpload', function () { + var scopeEvalAsync = function (expression) { + var scope = angular.element(this) + .fileupload('option', 'scope'); + // Schedule a new $digest cycle if not already inside of one + // and evaluate the given expression: + scope.$evalAsync(expression); + }, + addFileMethods = function (scope, data) { + var files = data.files, + file = files[0]; + angular.forEach(files, function (file, index) { + file._index = index; + file.$state = function () { + return data.state(); + }; + file.$processing = function () { + return data.processing(); + }; + file.$progress = function () { + return data.progress(); + }; + file.$response = function () { + return data.response(); + }; + }); + file.$submit = function () { + if (!file.error) { + return data.submit(); + } + }; + file.$cancel = function () { + return data.abort(); + }; + }, + $config; + $config = this.defaults = { + handleResponse: function (e, data) { + var files = data.result && data.result.files; + if (files) { + data.scope.replace(data.files, files); + } else if (data.errorThrown || + data.textStatus === 'error') { + data.files[0].error = data.errorThrown || + data.textStatus; + } + }, + add: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var scope = data.scope, + filesCopy = []; + angular.forEach(data.files, function (file) { + filesCopy.push(file); + }); + scope.$parent.$applyAsync(function () { + addFileMethods(scope, data); + var method = scope.option('prependFiles') ? + 'unshift' : 'push'; + Array.prototype[method].apply(scope.queue, data.files); + }); + data.process(function () { + return scope.process(data); + }).always(function () { + scope.$parent.$applyAsync(function () { + addFileMethods(scope, data); + scope.replace(filesCopy, data.files); + }); + }).then(function () { + if ((scope.option('autoUpload') || + data.autoUpload) && + data.autoUpload !== false) { + data.submit(); + } + }); + }, + done: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = this; + data.scope.$apply(function () { + data.handleResponse.call(that, e, data); + }); + }, + fail: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = this, + scope = data.scope; + if (data.errorThrown === 'abort') { + scope.clear(data.files); + return; + } + scope.$apply(function () { + data.handleResponse.call(that, e, data); + }); + }, + stop: scopeEvalAsync, + processstart: scopeEvalAsync, + processstop: scopeEvalAsync, + getNumberOfFiles: function () { + var scope = this.scope; + return scope.queue.length - scope.processing(); + }, + dataType: 'json', + autoUpload: false + }; + this.$get = [ + function () { + return { + defaults: $config + }; + } + ]; + }) + + // Format byte numbers to readable presentations: + .provider('formatFileSizeFilter', function () { + var $config = { + // Byte units following the IEC format + // http://en.wikipedia.org/wiki/Kilobyte + units: [ + {size: 1000000000, suffix: ' GB'}, + {size: 1000000, suffix: ' MB'}, + {size: 1000, suffix: ' KB'} + ] + }; + this.defaults = $config; + this.$get = function () { + return function (bytes) { + if (!angular.isNumber(bytes)) { + return ''; + } + var unit = true, + i = 0, + prefix, + suffix; + while (unit) { + unit = $config.units[i]; + prefix = unit.prefix || ''; + suffix = unit.suffix || ''; + if (i === $config.units.length - 1 || bytes >= unit.size) { + return prefix + (bytes / unit.size).toFixed(2) + suffix; + } + i += 1; + } + }; + }; + }) + + // The FileUploadController initializes the fileupload widget and + // provides scope methods to control the File Upload functionality: + .controller('FileUploadController', [ + '$scope', '$element', '$attrs', '$window', 'fileUpload','$q', + function ($scope, $element, $attrs, $window, fileUpload, $q) { + var uploadMethods = { + progress: function () { + return $element.fileupload('progress'); + }, + active: function () { + return $element.fileupload('active'); + }, + option: function (option, data) { + if (arguments.length === 1) { + return $element.fileupload('option', option); + } + $element.fileupload('option', option, data); + }, + add: function (data) { + return $element.fileupload('add', data); + }, + send: function (data) { + return $element.fileupload('send', data); + }, + process: function (data) { + return $element.fileupload('process', data); + }, + processing: function (data) { + return $element.fileupload('processing', data); + } + }; + $scope.disabled = !$window.jQuery.support.fileInput; + $scope.queue = $scope.queue || []; + $scope.clear = function (files) { + var queue = this.queue, + i = queue.length, + file = files, + length = 1; + if (angular.isArray(files)) { + file = files[0]; + length = files.length; + } + while (i) { + i -= 1; + if (queue[i] === file) { + return queue.splice(i, length); + } + } + }; + $scope.replace = function (oldFiles, newFiles) { + var queue = this.queue, + file = oldFiles[0], + i, + j; + for (i = 0; i < queue.length; i += 1) { + if (queue[i] === file) { + for (j = 0; j < newFiles.length; j += 1) { + queue[i + j] = newFiles[j]; + } + return; + } + } + }; + $scope.applyOnQueue = function (method) { + var list = this.queue.slice(0), + i, + file, + promises = []; + for (i = 0; i < list.length; i += 1) { + file = list[i]; + if (file[method]) { + promises.push(file[method]()); + } + } + return $q.all(promises); + }; + $scope.submit = function () { + return this.applyOnQueue('$submit'); + }; + $scope.cancel = function () { + return this.applyOnQueue('$cancel'); + }; + // Add upload methods to the scope: + angular.extend($scope, uploadMethods); + // The fileupload widget will initialize with + // the options provided via "data-"-parameters, + // as well as those given via options object: + $element.fileupload(angular.extend( + {scope: $scope}, + fileUpload.defaults + )).on('fileuploadadd', function (e, data) { + data.scope = $scope; + }).on('fileuploadfail', function (e, data) { + if (data.errorThrown === 'abort') { + return; + } + if (data.dataType && + data.dataType.indexOf('json') === data.dataType.length - 4) { + try { + data.result = angular.fromJson(data.jqXHR.responseText); + } catch (ignore) {} + } + }).on([ + 'fileuploadadd', + 'fileuploadsubmit', + 'fileuploadsend', + 'fileuploaddone', + 'fileuploadfail', + 'fileuploadalways', + 'fileuploadprogress', + 'fileuploadprogressall', + 'fileuploadstart', + 'fileuploadstop', + 'fileuploadchange', + 'fileuploadpaste', + 'fileuploaddrop', + 'fileuploaddragover', + 'fileuploadchunkbeforesend', + 'fileuploadchunksend', + 'fileuploadchunkdone', + 'fileuploadchunkfail', + 'fileuploadchunkalways', + 'fileuploadprocessstart', + 'fileuploadprocess', + 'fileuploadprocessdone', + 'fileuploadprocessfail', + 'fileuploadprocessalways', + 'fileuploadprocessstop' + ].join(' '), function (e, data) { + $scope.$parent.$applyAsync(function () { + if ($scope.$emit(e.type, data).defaultPrevented) { + e.preventDefault(); + } + }); + }).on('remove', function () { + // Remove upload methods from the scope, + // when the widget is removed: + var method; + for (method in uploadMethods) { + if (uploadMethods.hasOwnProperty(method)) { + delete $scope[method]; + } + } + }); + // Observe option changes: + $scope.$watch( + $attrs.fileUpload, + function (newOptions) { + if (newOptions) { + $element.fileupload('option', newOptions); + } + } + ); + } + ]) + + // Provide File Upload progress feedback: + .controller('FileUploadProgressController', [ + '$scope', '$attrs', '$parse', + function ($scope, $attrs, $parse) { + var fn = $parse($attrs.fileUploadProgress), + update = function () { + var progress = fn($scope); + if (!progress || !progress.total) { + return; + } + $scope.num = Math.floor( + progress.loaded / progress.total * 100 + ); + }; + update(); + $scope.$watch( + $attrs.fileUploadProgress + '.loaded', + function (newValue, oldValue) { + if (newValue !== oldValue) { + update(); + } + } + ); + } + ]) + + // Display File Upload previews: + .controller('FileUploadPreviewController', [ + '$scope', '$element', '$attrs', + function ($scope, $element, $attrs) { + $scope.$watch( + $attrs.fileUploadPreview + '.preview', + function (preview) { + $element.empty(); + if (preview) { + $element.append(preview); + } + } + ); + } + ]) + + .directive('fileUpload', function () { + return { + controller: 'FileUploadController', + scope: true + }; + }) + + .directive('fileUploadProgress', function () { + return { + controller: 'FileUploadProgressController', + scope: true + }; + }) + + .directive('fileUploadPreview', function () { + return { + controller: 'FileUploadPreviewController' + }; + }) + + // Enhance the HTML5 download attribute to + // allow drag&drop of files to the desktop: + .directive('download', function () { + return function (scope, elm) { + elm.on('dragstart', function (e) { + try { + e.originalEvent.dataTransfer.setData( + 'DownloadURL', + [ + 'application/octet-stream', + elm.prop('download'), + elm.prop('href') + ].join(':') + ); + } catch (ignore) {} + }); + }; + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-audio.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-audio.js new file mode 100644 index 0000000..a253776 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-audio.js @@ -0,0 +1,113 @@ +/* + * jQuery File Upload Audio Preview Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, document */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'load-image', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('blueimp-load-image/js/load-image'), + require('./jquery.fileupload-process') + ); + } else { + // Browser globals: + factory( + window.jQuery, + window.loadImage + ); + } +}(function ($, loadImage) { + 'use strict'; + + // Prepend to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.unshift( + { + action: 'loadAudio', + // Use the action as prefix for the "@" options: + prefix: true, + fileTypes: '@', + maxFileSize: '@', + disabled: '@disableAudioPreview' + }, + { + action: 'setAudio', + name: '@audioPreviewName', + disabled: '@disableAudioPreview' + } + ); + + // The File Upload Audio Preview plugin extends the fileupload widget + // with audio preview functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The regular expression for the types of audio files to load, + // matched against the file type: + loadAudioFileTypes: /^audio\/.*$/ + }, + + _audioElement: document.createElement('audio'), + + processActions: { + + // Loads the audio file given via data.files and data.index + // as audio element if the browser supports playing it. + // Accepts the options fileTypes (regular expression) + // and maxFileSize (integer) to limit the files to load: + loadAudio: function (data, options) { + if (options.disabled) { + return data; + } + var file = data.files[data.index], + url, + audio; + if (this._audioElement.canPlayType && + this._audioElement.canPlayType(file.type) && + ($.type(options.maxFileSize) !== 'number' || + file.size <= options.maxFileSize) && + (!options.fileTypes || + options.fileTypes.test(file.type))) { + url = loadImage.createObjectURL(file); + if (url) { + audio = this._audioElement.cloneNode(false); + audio.src = url; + audio.controls = true; + data.audio = audio; + return data; + } + } + return data; + }, + + // Sets the audio element as a property of the file object: + setAudio: function (data, options) { + if (data.audio && !options.disabled) { + data.files[data.index][options.name || 'preview'] = data.audio; + } + return data; + } + + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-image.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-image.js new file mode 100644 index 0000000..65fc6d7 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-image.js @@ -0,0 +1,326 @@ +/* + * jQuery File Upload Image Preview & Resize Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, Blob */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'load-image', + 'load-image-meta', + 'load-image-scale', + 'load-image-exif', + 'canvas-to-blob', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('blueimp-load-image/js/load-image'), + require('blueimp-load-image/js/load-image-meta'), + require('blueimp-load-image/js/load-image-scale'), + require('blueimp-load-image/js/load-image-exif'), + require('blueimp-canvas-to-blob'), + require('./jquery.fileupload-process') + ); + } else { + // Browser globals: + factory( + window.jQuery, + window.loadImage + ); + } +}(function ($, loadImage) { + 'use strict'; + + // Prepend to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.unshift( + { + action: 'loadImageMetaData', + disableImageHead: '@', + disableExif: '@', + disableExifThumbnail: '@', + disableExifSub: '@', + disableExifGps: '@', + disabled: '@disableImageMetaDataLoad' + }, + { + action: 'loadImage', + // Use the action as prefix for the "@" options: + prefix: true, + fileTypes: '@', + maxFileSize: '@', + noRevoke: '@', + disabled: '@disableImageLoad' + }, + { + action: 'resizeImage', + // Use "image" as prefix for the "@" options: + prefix: 'image', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + forceResize: '@', + disabled: '@disableImageResize' + }, + { + action: 'saveImage', + quality: '@imageQuality', + type: '@imageType', + disabled: '@disableImageResize' + }, + { + action: 'saveImageMetaData', + disabled: '@disableImageMetaDataSave' + }, + { + action: 'resizeImage', + // Use "preview" as prefix for the "@" options: + prefix: 'preview', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + thumbnail: '@', + canvas: '@', + disabled: '@disableImagePreview' + }, + { + action: 'setImage', + name: '@imagePreviewName', + disabled: '@disableImagePreview' + }, + { + action: 'deleteImageReferences', + disabled: '@disableImageReferencesDeletion' + } + ); + + // The File Upload Resize plugin extends the fileupload widget + // with image resize functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The regular expression for the types of images to load: + // matched against the file type: + loadImageFileTypes: /^image\/(gif|jpeg|png|svg\+xml)$/, + // The maximum file size of images to load: + loadImageMaxFileSize: 10000000, // 10MB + // The maximum width of resized images: + imageMaxWidth: 1920, + // The maximum height of resized images: + imageMaxHeight: 1080, + // Defines the image orientation (1-8) or takes the orientation + // value from Exif data if set to true: + imageOrientation: false, + // Define if resized images should be cropped or only scaled: + imageCrop: false, + // Disable the resize image functionality by default: + disableImageResize: true, + // The maximum width of the preview images: + previewMaxWidth: 80, + // The maximum height of the preview images: + previewMaxHeight: 80, + // Defines the preview orientation (1-8) or takes the orientation + // value from Exif data if set to true: + previewOrientation: true, + // Create the preview using the Exif data thumbnail: + previewThumbnail: true, + // Define if preview images should be cropped or only scaled: + previewCrop: false, + // Define if preview images should be resized as canvas elements: + previewCanvas: true + }, + + processActions: { + + // Loads the image given via data.files and data.index + // as img element, if the browser supports the File API. + // Accepts the options fileTypes (regular expression) + // and maxFileSize (integer) to limit the files to load: + loadImage: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (($.type(options.maxFileSize) === 'number' && + file.size > options.maxFileSize) || + (options.fileTypes && + !options.fileTypes.test(file.type)) || + !loadImage( + file, + function (img) { + if (img.src) { + data.img = img; + } + dfd.resolveWith(that, [data]); + }, + options + )) { + return data; + } + return dfd.promise(); + }, + + // Resizes the image given as data.canvas or data.img + // and updates data.canvas or data.img with the resized image. + // Also stores the resized image as preview property. + // Accepts the options maxWidth, maxHeight, minWidth, + // minHeight, canvas and crop: + resizeImage: function (data, options) { + if (options.disabled || !(data.canvas || data.img)) { + return data; + } + options = $.extend({canvas: true}, options); + var that = this, + dfd = $.Deferred(), + img = (options.canvas && data.canvas) || data.img, + resolve = function (newImg) { + if (newImg && (newImg.width !== img.width || + newImg.height !== img.height || + options.forceResize)) { + data[newImg.getContext ? 'canvas' : 'img'] = newImg; + } + data.preview = newImg; + dfd.resolveWith(that, [data]); + }, + thumbnail; + if (data.exif) { + if (options.orientation === true) { + options.orientation = data.exif.get('Orientation'); + } + if (options.thumbnail) { + thumbnail = data.exif.get('Thumbnail'); + if (thumbnail) { + loadImage(thumbnail, resolve, options); + return dfd.promise(); + } + } + // Prevent orienting the same image twice: + if (data.orientation) { + delete options.orientation; + } else { + data.orientation = options.orientation; + } + } + if (img) { + resolve(loadImage.scale(img, options)); + return dfd.promise(); + } + return data; + }, + + // Saves the processed image given as data.canvas + // inplace at data.index of data.files: + saveImage: function (data, options) { + if (!data.canvas || options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (data.canvas.toBlob) { + data.canvas.toBlob( + function (blob) { + if (!blob.name) { + if (file.type === blob.type) { + blob.name = file.name; + } else if (file.name) { + blob.name = file.name.replace( + /\.\w+$/, + '.' + blob.type.substr(6) + ); + } + } + // Don't restore invalid meta data: + if (file.type !== blob.type) { + delete data.imageHead; + } + // Store the created blob at the position + // of the original file in the files list: + data.files[data.index] = blob; + dfd.resolveWith(that, [data]); + }, + options.type || file.type, + options.quality + ); + } else { + return data; + } + return dfd.promise(); + }, + + loadImageMetaData: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + dfd = $.Deferred(); + loadImage.parseMetaData(data.files[data.index], function (result) { + $.extend(data, result); + dfd.resolveWith(that, [data]); + }, options); + return dfd.promise(); + }, + + saveImageMetaData: function (data, options) { + if (!(data.imageHead && data.canvas && + data.canvas.toBlob && !options.disabled)) { + return data; + } + var file = data.files[data.index], + blob = new Blob([ + data.imageHead, + // Resized images always have a head size of 20 bytes, + // including the JPEG marker and a minimal JFIF header: + this._blobSlice.call(file, 20) + ], {type: file.type}); + blob.name = file.name; + data.files[data.index] = blob; + return data; + }, + + // Sets the resized version of the image as a property of the + // file object, must be called after "saveImage": + setImage: function (data, options) { + if (data.preview && !options.disabled) { + data.files[data.index][options.name || 'preview'] = data.preview; + } + return data; + }, + + deleteImageReferences: function (data, options) { + if (!options.disabled) { + delete data.img; + delete data.canvas; + delete data.preview; + delete data.imageHead; + } + return data; + } + + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-jquery-ui.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-jquery-ui.js new file mode 100644 index 0000000..7b136b3 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-jquery-ui.js @@ -0,0 +1,161 @@ +/* + * jQuery File Upload jQuery UI Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload-ui' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('./jquery.fileupload-ui') + ); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + processdone: function (e, data) { + data.context.find('.start').button('enable'); + }, + progress: function (e, data) { + if (data.context) { + data.context.find('.progress').progressbar( + 'option', + 'value', + parseInt(data.loaded / data.total * 100, 10) + ); + } + }, + progressall: function (e, data) { + var $this = $(this); + $this.find('.fileupload-progress') + .find('.progress').progressbar( + 'option', + 'value', + parseInt(data.loaded / data.total * 100, 10) + ).end() + .find('.progress-extended').each(function () { + $(this).html( + ($this.data('blueimp-fileupload') || + $this.data('fileupload')) + ._renderExtendedProgress(data) + ); + }); + } + }, + + _renderUpload: function (func, files) { + var node = this._super(func, files), + showIconText = $(window).width() > 480; + node.find('.progress').empty().progressbar(); + node.find('.start').button({ + icons: {primary: 'ui-icon-circle-arrow-e'}, + text: showIconText + }); + node.find('.cancel').button({ + icons: {primary: 'ui-icon-cancel'}, + text: showIconText + }); + if (node.hasClass('fade')) { + node.hide(); + } + return node; + }, + + _renderDownload: function (func, files) { + var node = this._super(func, files), + showIconText = $(window).width() > 480; + node.find('.delete').button({ + icons: {primary: 'ui-icon-trash'}, + text: showIconText + }); + if (node.hasClass('fade')) { + node.hide(); + } + return node; + }, + + _startHandler: function (e) { + $(e.currentTarget).button('disable'); + this._super(e); + }, + + _transition: function (node) { + var deferred = $.Deferred(); + if (node.hasClass('fade')) { + node.fadeToggle( + this.options.transitionDuration, + this.options.transitionEasing, + function () { + deferred.resolveWith(node); + } + ); + } else { + deferred.resolveWith(node); + } + return deferred; + }, + + _create: function () { + this._super(); + this.element + .find('.fileupload-buttonbar') + .find('.fileinput-button').each(function () { + var input = $(this).find('input:file').detach(); + $(this) + .button({icons: {primary: 'ui-icon-plusthick'}}) + .append(input); + }) + .end().find('.start') + .button({icons: {primary: 'ui-icon-circle-arrow-e'}}) + .end().find('.cancel') + .button({icons: {primary: 'ui-icon-cancel'}}) + .end().find('.delete') + .button({icons: {primary: 'ui-icon-trash'}}) + .end().find('.progress').progressbar(); + }, + + _destroy: function () { + this.element + .find('.fileupload-buttonbar') + .find('.fileinput-button').each(function () { + var input = $(this).find('input:file').detach(); + $(this) + .button('destroy') + .append(input); + }) + .end().find('.start') + .button('destroy') + .end().find('.cancel') + .button('destroy') + .end().find('.delete') + .button('destroy') + .end().find('.progress').progressbar('destroy'); + this._super(); + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-process.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-process.js new file mode 100644 index 0000000..638f0d2 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-process.js @@ -0,0 +1,178 @@ +/* + * jQuery File Upload Processing Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('./jquery.fileupload') + ); + } else { + // Browser globals: + factory( + window.jQuery + ); + } +}(function ($) { + 'use strict'; + + var originalAdd = $.blueimp.fileupload.prototype.options.add; + + // The File Upload Processing plugin extends the fileupload widget + // with file processing functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The list of processing actions: + processQueue: [ + /* + { + action: 'log', + type: 'debug' + } + */ + ], + add: function (e, data) { + var $this = $(this); + data.process(function () { + return $this.fileupload('process', data); + }); + originalAdd.call(this, e, data); + } + }, + + processActions: { + /* + log: function (data, options) { + console[options.type]( + 'Processing "' + data.files[data.index].name + '"' + ); + } + */ + }, + + _processFile: function (data, originalData) { + var that = this, + dfd = $.Deferred().resolveWith(that, [data]), + chain = dfd.promise(); + this._trigger('process', null, data); + $.each(data.processQueue, function (i, settings) { + var func = function (data) { + if (originalData.errorThrown) { + return $.Deferred() + .rejectWith(that, [originalData]).promise(); + } + return that.processActions[settings.action].call( + that, + data, + settings + ); + }; + chain = chain.then(func, settings.always && func); + }); + chain + .done(function () { + that._trigger('processdone', null, data); + that._trigger('processalways', null, data); + }) + .fail(function () { + that._trigger('processfail', null, data); + that._trigger('processalways', null, data); + }); + return chain; + }, + + // Replaces the settings of each processQueue item that + // are strings starting with an "@", using the remaining + // substring as key for the option map, + // e.g. "@autoUpload" is replaced with options.autoUpload: + _transformProcessQueue: function (options) { + var processQueue = []; + $.each(options.processQueue, function () { + var settings = {}, + action = this.action, + prefix = this.prefix === true ? action : this.prefix; + $.each(this, function (key, value) { + if ($.type(value) === 'string' && + value.charAt(0) === '@') { + settings[key] = options[ + value.slice(1) || (prefix ? prefix + + key.charAt(0).toUpperCase() + key.slice(1) : key) + ]; + } else { + settings[key] = value; + } + + }); + processQueue.push(settings); + }); + options.processQueue = processQueue; + }, + + // Returns the number of files currently in the processsing queue: + processing: function () { + return this._processing; + }, + + // Processes the files given as files property of the data parameter, + // returns a Promise object that allows to bind callbacks: + process: function (data) { + var that = this, + options = $.extend({}, this.options, data); + if (options.processQueue && options.processQueue.length) { + this._transformProcessQueue(options); + if (this._processing === 0) { + this._trigger('processstart'); + } + $.each(data.files, function (index) { + var opts = index ? $.extend({}, options) : options, + func = function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return that._processFile(opts, data); + }; + opts.index = index; + that._processing += 1; + that._processingQueue = that._processingQueue.then(func, func) + .always(function () { + that._processing -= 1; + if (that._processing === 0) { + that._trigger('processstop'); + } + }); + }); + } + return this._processingQueue; + }, + + _create: function () { + this._super(); + this._processing = 0; + this._processingQueue = $.Deferred().resolveWith(this) + .promise(); + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-ui.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-ui.js new file mode 100644 index 0000000..5058084 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-ui.js @@ -0,0 +1,714 @@ +/* + * jQuery File Upload User Interface Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'blueimp-tmpl', + './jquery.fileupload-image', + './jquery.fileupload-audio', + './jquery.fileupload-video', + './jquery.fileupload-validate' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('blueimp-tmpl'), + require('./jquery.fileupload-image'), + require('./jquery.fileupload-audio'), + require('./jquery.fileupload-video'), + require('./jquery.fileupload-validate') + ); + } else { + // Browser globals: + factory( + window.jQuery, + window.tmpl + ); + } +}(function ($, tmpl) { + 'use strict'; + + $.blueimp.fileupload.prototype._specialOptions.push( + 'filesContainer', + 'uploadTemplateId', + 'downloadTemplateId' + ); + + // The UI version extends the file upload widget + // and adds complete user interface interaction: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // By default, files added to the widget are uploaded as soon + // as the user clicks on the start buttons. To enable automatic + // uploads, set the following option to true: + autoUpload: false, + // The ID of the upload template: + uploadTemplateId: 'template-upload', + // The ID of the download template: + downloadTemplateId: 'template-download', + // The container for the list of files. If undefined, it is set to + // an element with class "files" inside of the widget element: + filesContainer: undefined, + // By default, files are appended to the files container. + // Set the following option to true, to prepend files instead: + prependFiles: false, + // The expected data type of the upload response, sets the dataType + // option of the $.ajax upload requests: + dataType: 'json', + + // Error and info messages: + messages: { + unknownError: 'Unknown error' + }, + + // Function returning the current number of files, + // used by the maxNumberOfFiles validation: + getNumberOfFiles: function () { + return this.filesContainer.children() + .not('.processing').length; + }, + + // Callback to retrieve the list of files from the server response: + getFilesFromResponse: function (data) { + if (data.result && $.isArray(data.result.files)) { + return data.result.files; + } + return []; + }, + + // The add callback is invoked as soon as files are added to the fileupload + // widget (via file input selection, drag & drop or add API call). + // See the basic file upload widget for more information: + add: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var $this = $(this), + that = $this.data('blueimp-fileupload') || + $this.data('fileupload'), + options = that.options; + data.context = that._renderUpload(data.files) + .data('data', data) + .addClass('processing'); + options.filesContainer[ + options.prependFiles ? 'prepend' : 'append' + ](data.context); + that._forceReflow(data.context); + that._transition(data.context); + data.process(function () { + return $this.fileupload('process', data); + }).always(function () { + data.context.each(function (index) { + $(this).find('.size').text( + that._formatFileSize(data.files[index].size) + ); + }).removeClass('processing'); + that._renderPreviews(data); + }).done(function () { + data.context.find('.start').prop('disabled', false); + if ((that._trigger('added', e, data) !== false) && + (options.autoUpload || data.autoUpload) && + data.autoUpload !== false) { + data.submit(); + } + }).fail(function () { + if (data.files.error) { + data.context.each(function (index) { + var error = data.files[index].error; + if (error) { + $(this).find('.error').text(error); + } + }); + } + }); + }, + // Callback for the start of each file upload request: + send: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'); + if (data.context && data.dataType && + data.dataType.substr(0, 6) === 'iframe') { + // Iframe Transport does not support progress events. + // In lack of an indeterminate progress bar, we set + // the progress to 100%, showing the full animated bar: + data.context + .find('.progress').addClass( + !$.support.transition && 'progress-animated' + ) + .attr('aria-valuenow', 100) + .children().first().css( + 'width', + '100%' + ); + } + return that._trigger('sent', e, data); + }, + // Callback for successful uploads: + done: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'), + getFilesFromResponse = data.getFilesFromResponse || + that.options.getFilesFromResponse, + files = getFilesFromResponse(data), + template, + deferred; + if (data.context) { + data.context.each(function (index) { + var file = files[index] || + {error: 'Empty file upload result'}; + deferred = that._addFinishedDeferreds(); + that._transition($(this)).done( + function () { + var node = $(this); + template = that._renderDownload([file]) + .replaceAll(node); + that._forceReflow(template); + that._transition(template).done( + function () { + data.context = $(this); + that._trigger('completed', e, data); + that._trigger('finished', e, data); + deferred.resolve(); + } + ); + } + ); + }); + } else { + template = that._renderDownload(files)[ + that.options.prependFiles ? 'prependTo' : 'appendTo' + ](that.options.filesContainer); + that._forceReflow(template); + deferred = that._addFinishedDeferreds(); + that._transition(template).done( + function () { + data.context = $(this); + that._trigger('completed', e, data); + that._trigger('finished', e, data); + deferred.resolve(); + } + ); + } + }, + // Callback for failed (abort or error) uploads: + fail: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'), + template, + deferred; + if (data.context) { + data.context.each(function (index) { + if (data.errorThrown !== 'abort') { + var file = data.files[index]; + file.error = file.error || data.errorThrown || + data.i18n('unknownError'); + deferred = that._addFinishedDeferreds(); + that._transition($(this)).done( + function () { + var node = $(this); + template = that._renderDownload([file]) + .replaceAll(node); + that._forceReflow(template); + that._transition(template).done( + function () { + data.context = $(this); + that._trigger('failed', e, data); + that._trigger('finished', e, data); + deferred.resolve(); + } + ); + } + ); + } else { + deferred = that._addFinishedDeferreds(); + that._transition($(this)).done( + function () { + $(this).remove(); + that._trigger('failed', e, data); + that._trigger('finished', e, data); + deferred.resolve(); + } + ); + } + }); + } else if (data.errorThrown !== 'abort') { + data.context = that._renderUpload(data.files)[ + that.options.prependFiles ? 'prependTo' : 'appendTo' + ](that.options.filesContainer) + .data('data', data); + that._forceReflow(data.context); + deferred = that._addFinishedDeferreds(); + that._transition(data.context).done( + function () { + data.context = $(this); + that._trigger('failed', e, data); + that._trigger('finished', e, data); + deferred.resolve(); + } + ); + } else { + that._trigger('failed', e, data); + that._trigger('finished', e, data); + that._addFinishedDeferreds().resolve(); + } + }, + // Callback for upload progress events: + progress: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var progress = Math.floor(data.loaded / data.total * 100); + if (data.context) { + data.context.each(function () { + $(this).find('.progress') + .attr('aria-valuenow', progress) + .children().first().css( + 'width', + progress + '%' + ); + }); + } + }, + // Callback for global upload progress events: + progressall: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var $this = $(this), + progress = Math.floor(data.loaded / data.total * 100), + globalProgressNode = $this.find('.fileupload-progress'), + extendedProgressNode = globalProgressNode + .find('.progress-extended'); + if (extendedProgressNode.length) { + extendedProgressNode.html( + ($this.data('blueimp-fileupload') || $this.data('fileupload')) + ._renderExtendedProgress(data) + ); + } + globalProgressNode + .find('.progress') + .attr('aria-valuenow', progress) + .children().first().css( + 'width', + progress + '%' + ); + }, + // Callback for uploads start, equivalent to the global ajaxStart event: + start: function (e) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'); + that._resetFinishedDeferreds(); + that._transition($(this).find('.fileupload-progress')).done( + function () { + that._trigger('started', e); + } + ); + }, + // Callback for uploads stop, equivalent to the global ajaxStop event: + stop: function (e) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'), + deferred = that._addFinishedDeferreds(); + $.when.apply($, that._getFinishedDeferreds()) + .done(function () { + that._trigger('stopped', e); + }); + that._transition($(this).find('.fileupload-progress')).done( + function () { + $(this).find('.progress') + .attr('aria-valuenow', '0') + .children().first().css('width', '0%'); + $(this).find('.progress-extended').html(' '); + deferred.resolve(); + } + ); + }, + processstart: function (e) { + if (e.isDefaultPrevented()) { + return false; + } + $(this).addClass('fileupload-processing'); + }, + processstop: function (e) { + if (e.isDefaultPrevented()) { + return false; + } + $(this).removeClass('fileupload-processing'); + }, + // Callback for file deletion: + destroy: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + var that = $(this).data('blueimp-fileupload') || + $(this).data('fileupload'), + removeNode = function () { + that._transition(data.context).done( + function () { + $(this).remove(); + that._trigger('destroyed', e, data); + } + ); + }; + if (data.url) { + data.dataType = data.dataType || that.options.dataType; + $.ajax(data).done(removeNode).fail(function () { + that._trigger('destroyfailed', e, data); + }); + } else { + removeNode(); + } + } + }, + + _resetFinishedDeferreds: function () { + this._finishedUploads = []; + }, + + _addFinishedDeferreds: function (deferred) { + if (!deferred) { + deferred = $.Deferred(); + } + this._finishedUploads.push(deferred); + return deferred; + }, + + _getFinishedDeferreds: function () { + return this._finishedUploads; + }, + + // Link handler, that allows to download files + // by drag & drop of the links to the desktop: + _enableDragToDesktop: function () { + var link = $(this), + url = link.prop('href'), + name = link.prop('download'), + type = 'application/octet-stream'; + link.bind('dragstart', function (e) { + try { + e.originalEvent.dataTransfer.setData( + 'DownloadURL', + [type, name, url].join(':') + ); + } catch (ignore) {} + }); + }, + + _formatFileSize: function (bytes) { + if (typeof bytes !== 'number') { + return ''; + } + if (bytes >= 1000000000) { + return (bytes / 1000000000).toFixed(2) + ' GB'; + } + if (bytes >= 1000000) { + return (bytes / 1000000).toFixed(2) + ' MB'; + } + return (bytes / 1000).toFixed(2) + ' KB'; + }, + + _formatBitrate: function (bits) { + if (typeof bits !== 'number') { + return ''; + } + if (bits >= 1000000000) { + return (bits / 1000000000).toFixed(2) + ' Gbit/s'; + } + if (bits >= 1000000) { + return (bits / 1000000).toFixed(2) + ' Mbit/s'; + } + if (bits >= 1000) { + return (bits / 1000).toFixed(2) + ' kbit/s'; + } + return bits.toFixed(2) + ' bit/s'; + }, + + _formatTime: function (seconds) { + var date = new Date(seconds * 1000), + days = Math.floor(seconds / 86400); + days = days ? days + 'd ' : ''; + return days + + ('0' + date.getUTCHours()).slice(-2) + ':' + + ('0' + date.getUTCMinutes()).slice(-2) + ':' + + ('0' + date.getUTCSeconds()).slice(-2); + }, + + _formatPercentage: function (floatValue) { + return (floatValue * 100).toFixed(2) + ' %'; + }, + + _renderExtendedProgress: function (data) { + return this._formatBitrate(data.bitrate) + ' | ' + + this._formatTime( + (data.total - data.loaded) * 8 / data.bitrate + ) + ' | ' + + this._formatPercentage( + data.loaded / data.total + ) + ' | ' + + this._formatFileSize(data.loaded) + ' / ' + + this._formatFileSize(data.total); + }, + + _renderTemplate: function (func, files) { + if (!func) { + return $(); + } + var result = func({ + files: files, + formatFileSize: this._formatFileSize, + options: this.options + }); + if (result instanceof $) { + return result; + } + return $(this.options.templatesContainer).html(result).children(); + }, + + _renderPreviews: function (data) { + data.context.find('.preview').each(function (index, elm) { + $(elm).append(data.files[index].preview); + }); + }, + + _renderUpload: function (files) { + return this._renderTemplate( + this.options.uploadTemplate, + files + ); + }, + + _renderDownload: function (files) { + return this._renderTemplate( + this.options.downloadTemplate, + files + ).find('a[download]').each(this._enableDragToDesktop).end(); + }, + + _startHandler: function (e) { + e.preventDefault(); + var button = $(e.currentTarget), + template = button.closest('.template-upload'), + data = template.data('data'); + button.prop('disabled', true); + if (data && data.submit) { + data.submit(); + } + }, + + _cancelHandler: function (e) { + e.preventDefault(); + var template = $(e.currentTarget) + .closest('.template-upload,.template-download'), + data = template.data('data') || {}; + data.context = data.context || template; + if (data.abort) { + data.abort(); + } else { + data.errorThrown = 'abort'; + this._trigger('fail', e, data); + } + }, + + _deleteHandler: function (e) { + e.preventDefault(); + var button = $(e.currentTarget); + this._trigger('destroy', e, $.extend({ + context: button.closest('.template-download'), + type: 'DELETE' + }, button.data())); + }, + + _forceReflow: function (node) { + return $.support.transition && node.length && + node[0].offsetWidth; + }, + + _transition: function (node) { + var dfd = $.Deferred(); + if ($.support.transition && node.hasClass('fade') && node.is(':visible')) { + node.bind( + $.support.transition.end, + function (e) { + // Make sure we don't respond to other transitions events + // in the container element, e.g. from button elements: + if (e.target === node[0]) { + node.unbind($.support.transition.end); + dfd.resolveWith(node); + } + } + ).toggleClass('in'); + } else { + node.toggleClass('in'); + dfd.resolveWith(node); + } + return dfd; + }, + + _initButtonBarEventHandlers: function () { + var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'), + filesList = this.options.filesContainer; + this._on(fileUploadButtonBar.find('.start'), { + click: function (e) { + e.preventDefault(); + filesList.find('.start').click(); + } + }); + this._on(fileUploadButtonBar.find('.cancel'), { + click: function (e) { + e.preventDefault(); + filesList.find('.cancel').click(); + } + }); + this._on(fileUploadButtonBar.find('.delete'), { + click: function (e) { + e.preventDefault(); + filesList.find('.toggle:checked') + .closest('.template-download') + .find('.delete').click(); + fileUploadButtonBar.find('.toggle') + .prop('checked', false); + } + }); + this._on(fileUploadButtonBar.find('.toggle'), { + change: function (e) { + filesList.find('.toggle').prop( + 'checked', + $(e.currentTarget).is(':checked') + ); + } + }); + }, + + _destroyButtonBarEventHandlers: function () { + this._off( + this.element.find('.fileupload-buttonbar') + .find('.start, .cancel, .delete'), + 'click' + ); + this._off( + this.element.find('.fileupload-buttonbar .toggle'), + 'change.' + ); + }, + + _initEventHandlers: function () { + this._super(); + this._on(this.options.filesContainer, { + 'click .start': this._startHandler, + 'click .cancel': this._cancelHandler, + 'click .delete': this._deleteHandler + }); + this._initButtonBarEventHandlers(); + }, + + _destroyEventHandlers: function () { + this._destroyButtonBarEventHandlers(); + this._off(this.options.filesContainer, 'click'); + this._super(); + }, + + _enableFileInputButton: function () { + this.element.find('.fileinput-button input') + .prop('disabled', false) + .parent().removeClass('disabled'); + }, + + _disableFileInputButton: function () { + this.element.find('.fileinput-button input') + .prop('disabled', true) + .parent().addClass('disabled'); + }, + + _initTemplates: function () { + var options = this.options; + options.templatesContainer = this.document[0].createElement( + options.filesContainer.prop('nodeName') + ); + if (tmpl) { + if (options.uploadTemplateId) { + options.uploadTemplate = tmpl(options.uploadTemplateId); + } + if (options.downloadTemplateId) { + options.downloadTemplate = tmpl(options.downloadTemplateId); + } + } + }, + + _initFilesContainer: function () { + var options = this.options; + if (options.filesContainer === undefined) { + options.filesContainer = this.element.find('.files'); + } else if (!(options.filesContainer instanceof $)) { + options.filesContainer = $(options.filesContainer); + } + }, + + _initSpecialOptions: function () { + this._super(); + this._initFilesContainer(); + this._initTemplates(); + }, + + _create: function () { + this._super(); + this._resetFinishedDeferreds(); + if (!$.support.fileInput) { + this._disableFileInputButton(); + } + }, + + enable: function () { + var wasDisabled = false; + if (this.options.disabled) { + wasDisabled = true; + } + this._super(); + if (wasDisabled) { + this.element.find('input, button').prop('disabled', false); + this._enableFileInputButton(); + } + }, + + disable: function () { + if (!this.options.disabled) { + this.element.find('input, button').prop('disabled', true); + this._disableFileInputButton(); + } + this._super(); + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-validate.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-validate.js new file mode 100644 index 0000000..eebeb37 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-validate.js @@ -0,0 +1,125 @@ +/* + * jQuery File Upload Validation Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('./jquery.fileupload-process') + ); + } else { + // Browser globals: + factory( + window.jQuery + ); + } +}(function ($) { + 'use strict'; + + // Append to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.push( + { + action: 'validate', + // Always trigger this action, + // even if the previous action was rejected: + always: true, + // Options taken from the global options map: + acceptFileTypes: '@', + maxFileSize: '@', + minFileSize: '@', + maxNumberOfFiles: '@', + disabled: '@disableValidation' + } + ); + + // The File Upload Validation plugin extends the fileupload widget + // with file validation functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + /* + // The regular expression for allowed file types, matches + // against either file type or file name: + acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, + // The maximum allowed file size in bytes: + maxFileSize: 10000000, // 10 MB + // The minimum allowed file size in bytes: + minFileSize: undefined, // No minimal file size + // The limit of files to be uploaded: + maxNumberOfFiles: 10, + */ + + // Function returning the current number of files, + // has to be overriden for maxNumberOfFiles validation: + getNumberOfFiles: $.noop, + + // Error and info messages: + messages: { + maxNumberOfFiles: 'Maximum number of files exceeded', + acceptFileTypes: 'File type not allowed', + maxFileSize: 'File is too large', + minFileSize: 'File is too small' + } + }, + + processActions: { + + validate: function (data, options) { + if (options.disabled) { + return data; + } + var dfd = $.Deferred(), + settings = this.options, + file = data.files[data.index], + fileSize; + if (options.minFileSize || options.maxFileSize) { + fileSize = file.size; + } + if ($.type(options.maxNumberOfFiles) === 'number' && + (settings.getNumberOfFiles() || 0) + data.files.length > + options.maxNumberOfFiles) { + file.error = settings.i18n('maxNumberOfFiles'); + } else if (options.acceptFileTypes && + !(options.acceptFileTypes.test(file.type) || + options.acceptFileTypes.test(file.name))) { + file.error = settings.i18n('acceptFileTypes'); + } else if (fileSize > options.maxFileSize) { + file.error = settings.i18n('maxFileSize'); + } else if ($.type(fileSize) === 'number' && + fileSize < options.minFileSize) { + file.error = settings.i18n('minFileSize'); + } else { + delete file.error; + } + if (file.error || data.files.error) { + data.files.error = true; + dfd.rejectWith(this, [data]); + } else { + dfd.resolveWith(this, [data]); + } + return dfd.promise(); + } + + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload-video.js b/libraries/filemanager-9.14.1/js/jquery.fileupload-video.js new file mode 100644 index 0000000..aedcec2 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload-video.js @@ -0,0 +1,113 @@ +/* + * jQuery File Upload Video Preview Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, document */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'load-image', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('blueimp-load-image/js/load-image'), + require('./jquery.fileupload-process') + ); + } else { + // Browser globals: + factory( + window.jQuery, + window.loadImage + ); + } +}(function ($, loadImage) { + 'use strict'; + + // Prepend to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.unshift( + { + action: 'loadVideo', + // Use the action as prefix for the "@" options: + prefix: true, + fileTypes: '@', + maxFileSize: '@', + disabled: '@disableVideoPreview' + }, + { + action: 'setVideo', + name: '@videoPreviewName', + disabled: '@disableVideoPreview' + } + ); + + // The File Upload Video Preview plugin extends the fileupload widget + // with video preview functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The regular expression for the types of video files to load, + // matched against the file type: + loadVideoFileTypes: /^video\/.*$/ + }, + + _videoElement: document.createElement('video'), + + processActions: { + + // Loads the video file given via data.files and data.index + // as video element if the browser supports playing it. + // Accepts the options fileTypes (regular expression) + // and maxFileSize (integer) to limit the files to load: + loadVideo: function (data, options) { + if (options.disabled) { + return data; + } + var file = data.files[data.index], + url, + video; + if (this._videoElement.canPlayType && + this._videoElement.canPlayType(file.type) && + ($.type(options.maxFileSize) !== 'number' || + file.size <= options.maxFileSize) && + (!options.fileTypes || + options.fileTypes.test(file.type))) { + url = loadImage.createObjectURL(file); + if (url) { + video = this._videoElement.cloneNode(false); + video.src = url; + video.controls = true; + data.video = video; + return data; + } + } + return data; + }, + + // Sets the video element as a property of the file object: + setVideo: function (data, options) { + if (data.video && !options.disabled) { + data.files[data.index][options.name || 'preview'] = data.video; + } + return data; + } + + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.fileupload.js b/libraries/filemanager-9.14.1/js/jquery.fileupload.js new file mode 100644 index 0000000..700f901 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.fileupload.js @@ -0,0 +1,1502 @@ +/* + * jQuery File Upload Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, document, location, Blob, FormData */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'jquery-ui/ui/widget' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('./vendor/jquery.ui.widget') + ); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Detect file input support, based on + // http://viljamis.com/blog/2012/file-upload-support-on-mobile/ + $.support.fileInput = !(new RegExp( + // Handle devices which give false positives for the feature detection: + '(Android (1\\.[0156]|2\\.[01]))' + + '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + + '|(w(eb)?OSBrowser)|(webOS)' + + '|(Kindle/(1\\.0|2\\.[05]|3\\.0))' + ).test(window.navigator.userAgent) || + // Feature detection for all other devices: + $('').prop('disabled')); + + // The FileReader API is not actually used, but works as feature detection, + // as some Safari versions (5?) support XHR file uploads via the FormData API, + // but not non-multipart XHR file uploads. + // window.XMLHttpRequestUpload is not available on IE10, so we check for + // window.ProgressEvent instead to detect XHR2 file upload capability: + $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); + $.support.xhrFormDataFileUpload = !!window.FormData; + + // Detect support for Blob slicing (required for chunked uploads): + $.support.blobSlice = window.Blob && (Blob.prototype.slice || + Blob.prototype.webkitSlice || Blob.prototype.mozSlice); + + // Helper function to create drag handlers for dragover/dragenter/dragleave: + function getDragHandler(type) { + var isDragOver = type === 'dragover'; + return function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var dataTransfer = e.dataTransfer; + if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && + this._trigger( + type, + $.Event(type, {delegatedEvent: e}) + ) !== false) { + e.preventDefault(); + if (isDragOver) { + dataTransfer.dropEffect = 'copy'; + } + } + }; + } + + // The fileupload widget listens for change events on file input fields defined + // via fileInput setting and paste or drop events of the given dropZone. + // In addition to the default jQuery Widget methods, the fileupload widget + // exposes the "add" and "send" methods, to add or directly send files using + // the fileupload API. + // By default, files added via file input selection, paste, drag & drop or + // "add" method are uploaded immediately, but it is possible to override + // the "add" callback option to queue file uploads. + $.widget('blueimp.fileupload', { + + options: { + // The drop target element(s), by the default the complete document. + // Set to null to disable drag & drop support: + dropZone: $(document), + // The paste target element(s), by the default undefined. + // Set to a DOM node or jQuery object to enable file pasting: + pasteZone: undefined, + // The file input field(s), that are listened to for change events. + // If undefined, it is set to the file input fields inside + // of the widget element on plugin initialization. + // Set to null to disable the change listener. + fileInput: undefined, + // By default, the file input field is replaced with a clone after + // each input field change event. This is required for iframe transport + // queues and allows change events to be fired for the same file + // selection, but can be disabled by setting the following option to false: + replaceFileInput: true, + // The parameter name for the file form data (the request argument name). + // If undefined or empty, the name property of the file input field is + // used, or "files[]" if the file input name property is also empty, + // can be a string or an array of strings: + paramName: undefined, + // By default, each file of a selection is uploaded using an individual + // request for XHR type uploads. Set to false to upload file + // selections in one request each: + singleFileUploads: true, + // To limit the number of files uploaded with one XHR request, + // set the following option to an integer greater than 0: + limitMultiFileUploads: undefined, + // The following option limits the number of files uploaded with one + // XHR request to keep the request size under or equal to the defined + // limit in bytes: + limitMultiFileUploadSize: undefined, + // Multipart file uploads add a number of bytes to each uploaded file, + // therefore the following option adds an overhead for each file used + // in the limitMultiFileUploadSize configuration: + limitMultiFileUploadSizeOverhead: 512, + // Set the following option to true to issue all file upload requests + // in a sequential order: + sequentialUploads: false, + // To limit the number of concurrent uploads, + // set the following option to an integer greater than 0: + limitConcurrentUploads: undefined, + // Set the following option to true to force iframe transport uploads: + forceIframeTransport: false, + // Set the following option to the location of a redirect url on the + // origin server, for cross-domain iframe transport uploads: + redirect: undefined, + // The parameter name for the redirect url, sent as part of the form + // data and set to 'redirect' if this option is empty: + redirectParamName: undefined, + // Set the following option to the location of a postMessage window, + // to enable postMessage transport uploads: + postMessage: undefined, + // By default, XHR file uploads are sent as multipart/form-data. + // The iframe transport is always using multipart/form-data. + // Set to false to enable non-multipart XHR uploads: + multipart: true, + // To upload large files in smaller chunks, set the following option + // to a preferred maximum chunk size. If set to 0, null or undefined, + // or the browser does not support the required Blob API, files will + // be uploaded as a whole. + maxChunkSize: undefined, + // When a non-multipart upload or a chunked multipart upload has been + // aborted, this option can be used to resume the upload by setting + // it to the size of the already uploaded bytes. This option is most + // useful when modifying the options object inside of the "add" or + // "send" callbacks, as the options are cloned for each file upload. + uploadedBytes: undefined, + // By default, failed (abort or error) file uploads are removed from the + // global progress calculation. Set the following option to false to + // prevent recalculating the global progress data: + recalculateProgress: true, + // Interval in milliseconds to calculate and trigger progress events: + progressInterval: 100, + // Interval in milliseconds to calculate progress bitrate: + bitrateInterval: 500, + // By default, uploads are started automatically when adding files: + autoUpload: true, + + // Error and info messages: + messages: { + uploadedBytes: 'Uploaded bytes exceed file size' + }, + + // Translation function, gets the message key to be translated + // and an object with context specific data as arguments: + i18n: function (message, context) { + message = this.messages[message] || message.toString(); + if (context) { + $.each(context, function (key, value) { + message = message.replace('{' + key + '}', value); + }); + } + return message; + }, + + // Additional form data to be sent along with the file uploads can be set + // using this option, which accepts an array of objects with name and + // value properties, a function returning such an array, a FormData + // object (for XHR file uploads), or a simple object. + // The form of the first fileInput is given as parameter to the function: + formData: function (form) { + return form.serializeArray(); + }, + + // The add callback is invoked as soon as files are added to the fileupload + // widget (via file input selection, drag & drop, paste or add API call). + // If the singleFileUploads option is enabled, this callback will be + // called once for each file in the selection for XHR file uploads, else + // once for each file selection. + // + // The upload starts when the submit method is invoked on the data parameter. + // The data object contains a files property holding the added files + // and allows you to override plugin options as well as define ajax settings. + // + // Listeners for this callback can also be bound the following way: + // .bind('fileuploadadd', func); + // + // data.submit() returns a Promise object and allows to attach additional + // handlers using jQuery's Deferred callbacks: + // data.submit().done(func).fail(func).always(func); + add: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + if (data.autoUpload || (data.autoUpload !== false && + $(this).fileupload('option', 'autoUpload'))) { + data.process().done(function () { + data.submit(); + }); + } + }, + + // Other callbacks: + + // Callback for the submit event of each file upload: + // submit: function (e, data) {}, // .bind('fileuploadsubmit', func); + + // Callback for the start of each file upload request: + // send: function (e, data) {}, // .bind('fileuploadsend', func); + + // Callback for successful uploads: + // done: function (e, data) {}, // .bind('fileuploaddone', func); + + // Callback for failed (abort or error) uploads: + // fail: function (e, data) {}, // .bind('fileuploadfail', func); + + // Callback for completed (success, abort or error) requests: + // always: function (e, data) {}, // .bind('fileuploadalways', func); + + // Callback for upload progress events: + // progress: function (e, data) {}, // .bind('fileuploadprogress', func); + + // Callback for global upload progress events: + // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func); + + // Callback for uploads start, equivalent to the global ajaxStart event: + // start: function (e) {}, // .bind('fileuploadstart', func); + + // Callback for uploads stop, equivalent to the global ajaxStop event: + // stop: function (e) {}, // .bind('fileuploadstop', func); + + // Callback for change events of the fileInput(s): + // change: function (e, data) {}, // .bind('fileuploadchange', func); + + // Callback for paste events to the pasteZone(s): + // paste: function (e, data) {}, // .bind('fileuploadpaste', func); + + // Callback for drop events of the dropZone(s): + // drop: function (e, data) {}, // .bind('fileuploaddrop', func); + + // Callback for dragover events of the dropZone(s): + // dragover: function (e) {}, // .bind('fileuploaddragover', func); + + // Callback before the start of each chunk upload request (before form data initialization): + // chunkbeforesend: function (e, data) {}, // .bind('fileuploadchunkbeforesend', func); + + // Callback for the start of each chunk upload request: + // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func); + + // Callback for successful chunk uploads: + // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func); + + // Callback for failed (abort or error) chunk uploads: + // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func); + + // Callback for completed (success, abort or error) chunk upload requests: + // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func); + + // The plugin options are used as settings object for the ajax calls. + // The following are jQuery ajax settings required for the file uploads: + processData: false, + contentType: false, + cache: false, + timeout: 0 + }, + + // A list of options that require reinitializing event listeners and/or + // special initialization code: + _specialOptions: [ + 'fileInput', + 'dropZone', + 'pasteZone', + 'multipart', + 'forceIframeTransport' + ], + + _blobSlice: $.support.blobSlice && function () { + var slice = this.slice || this.webkitSlice || this.mozSlice; + return slice.apply(this, arguments); + }, + + _BitrateTimer: function () { + this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime()); + this.loaded = 0; + this.bitrate = 0; + this.getBitrate = function (now, loaded, interval) { + var timeDiff = now - this.timestamp; + if (!this.bitrate || !interval || timeDiff > interval) { + this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; + this.loaded = loaded; + this.timestamp = now; + } + return this.bitrate; + }; + }, + + _isXHRUpload: function (options) { + return !options.forceIframeTransport && + ((!options.multipart && $.support.xhrFileUpload) || + $.support.xhrFormDataFileUpload); + }, + + _getFormData: function (options) { + var formData; + if ($.type(options.formData) === 'function') { + return options.formData(options.form); + } + if ($.isArray(options.formData)) { + return options.formData; + } + if ($.type(options.formData) === 'object') { + formData = []; + $.each(options.formData, function (name, value) { + formData.push({name: name, value: value}); + }); + return formData; + } + return []; + }, + + _getTotal: function (files) { + var total = 0; + $.each(files, function (index, file) { + total += file.size || 1; + }); + return total; + }, + + _initProgressObject: function (obj) { + var progress = { + loaded: 0, + total: 0, + bitrate: 0 + }; + if (obj._progress) { + $.extend(obj._progress, progress); + } else { + obj._progress = progress; + } + }, + + _initResponseObject: function (obj) { + var prop; + if (obj._response) { + for (prop in obj._response) { + if (obj._response.hasOwnProperty(prop)) { + delete obj._response[prop]; + } + } + } else { + obj._response = {}; + } + }, + + _onProgress: function (e, data) { + if (e.lengthComputable) { + var now = ((Date.now) ? Date.now() : (new Date()).getTime()), + loaded; + if (data._time && data.progressInterval && + (now - data._time < data.progressInterval) && + e.loaded !== e.total) { + return; + } + data._time = now; + loaded = Math.floor( + e.loaded / e.total * (data.chunkSize || data._progress.total) + ) + (data.uploadedBytes || 0); + // Add the difference from the previously loaded state + // to the global loaded counter: + this._progress.loaded += (loaded - data._progress.loaded); + this._progress.bitrate = this._bitrateTimer.getBitrate( + now, + this._progress.loaded, + data.bitrateInterval + ); + data._progress.loaded = data.loaded = loaded; + data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate( + now, + loaded, + data.bitrateInterval + ); + // Trigger a custom progress event with a total data property set + // to the file size(s) of the current upload and a loaded data + // property calculated accordingly: + this._trigger( + 'progress', + $.Event('progress', {delegatedEvent: e}), + data + ); + // Trigger a global progress event for all current file uploads, + // including ajax calls queued for sequential file uploads: + this._trigger( + 'progressall', + $.Event('progressall', {delegatedEvent: e}), + this._progress + ); + } + }, + + _initProgressListener: function (options) { + var that = this, + xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + // Accesss to the native XHR object is required to add event listeners + // for the upload progress event: + if (xhr.upload) { + $(xhr.upload).bind('progress', function (e) { + var oe = e.originalEvent; + // Make sure the progress event properties get copied over: + e.lengthComputable = oe.lengthComputable; + e.loaded = oe.loaded; + e.total = oe.total; + that._onProgress(e, options); + }); + options.xhr = function () { + return xhr; + }; + } + }, + + _deinitProgressListener: function (options) { + var xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + if (xhr.upload) { + $(xhr.upload).unbind('progress'); + } + }, + + _isInstanceOf: function (type, obj) { + // Cross-frame instanceof check + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; + }, + + _initXHRData: function (options) { + var that = this, + formData, + file = options.files[0], + // Ignore non-multipart setting if not supported: + multipart = options.multipart || !$.support.xhrFileUpload, + paramName = $.type(options.paramName) === 'array' ? + options.paramName[0] : options.paramName; + options.headers = $.extend({}, options.headers); + if (options.contentRange) { + options.headers['Content-Range'] = options.contentRange; + } + if (!multipart || options.blob || !this._isInstanceOf('File', file)) { + options.headers['Content-Disposition'] = 'attachment; filename="' + + encodeURI(file.uploadName || file.name) + '"'; + } + if (!multipart) { + options.contentType = file.type || 'application/octet-stream'; + options.data = options.blob || file; + } else if ($.support.xhrFormDataFileUpload) { + if (options.postMessage) { + // window.postMessage does not allow sending FormData + // objects, so we just add the File/Blob objects to + // the formData array and let the postMessage window + // create the FormData object out of this array: + formData = this._getFormData(options); + if (options.blob) { + formData.push({ + name: paramName, + value: options.blob + }); + } else { + $.each(options.files, function (index, file) { + formData.push({ + name: ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + value: file + }); + }); + } + } else { + if (that._isInstanceOf('FormData', options.formData)) { + formData = options.formData; + } else { + formData = new FormData(); + $.each(this._getFormData(options), function (index, field) { + formData.append(field.name, field.value); + }); + } + if (options.blob) { + formData.append( + paramName, + options.blob, + file.uploadName || file.name + ); + } else { + $.each(options.files, function (index, file) { + // This check allows the tests to run with + // dummy objects: + if (that._isInstanceOf('File', file) || + that._isInstanceOf('Blob', file)) { + formData.append( + ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + file, + file.uploadName || file.name + ); + } + }); + } + } + options.data = formData; + } + // Blob reference is not needed anymore, free memory: + options.blob = null; + }, + + _initIframeSettings: function (options) { + var targetHost = $('').prop('href', options.url).prop('host'); + // Setting the dataType to iframe enables the iframe transport: + options.dataType = 'iframe ' + (options.dataType || ''); + // The iframe transport accepts a serialized array as form data: + options.formData = this._getFormData(options); + // Add redirect url to form data on cross-domain uploads: + if (options.redirect && targetHost && targetHost !== location.host) { + options.formData.push({ + name: options.redirectParamName || 'redirect', + value: options.redirect + }); + } + }, + + _initDataSettings: function (options) { + if (this._isXHRUpload(options)) { + if (!this._chunkedUpload(options, true)) { + if (!options.data) { + this._initXHRData(options); + } + this._initProgressListener(options); + } + if (options.postMessage) { + // Setting the dataType to postmessage enables the + // postMessage transport: + options.dataType = 'postmessage ' + (options.dataType || ''); + } + } else { + this._initIframeSettings(options); + } + }, + + _getParamName: function (options) { + var fileInput = $(options.fileInput), + paramName = options.paramName; + if (!paramName) { + paramName = []; + fileInput.each(function () { + var input = $(this), + name = input.prop('name') || 'files[]', + i = (input.prop('files') || [1]).length; + while (i) { + paramName.push(name); + i -= 1; + } + }); + if (!paramName.length) { + paramName = [fileInput.prop('name') || 'files[]']; + } + } else if (!$.isArray(paramName)) { + paramName = [paramName]; + } + return paramName; + }, + + _initFormSettings: function (options) { + // Retrieve missing options from the input field and the + // associated form, if available: + if (!options.form || !options.form.length) { + options.form = $(options.fileInput.prop('form')); + // If the given file input doesn't have an associated form, + // use the default widget file input's form: + if (!options.form.length) { + options.form = $(this.options.fileInput.prop('form')); + } + } + options.paramName = this._getParamName(options); + if (!options.url) { + options.url = options.form.prop('action') || location.href; + } + // The HTTP request method must be "POST" or "PUT": + options.type = (options.type || + ($.type(options.form.prop('method')) === 'string' && + options.form.prop('method')) || '' + ).toUpperCase(); + if (options.type !== 'POST' && options.type !== 'PUT' && + options.type !== 'PATCH') { + options.type = 'POST'; + } + if (!options.formAcceptCharset) { + options.formAcceptCharset = options.form.attr('accept-charset'); + } + }, + + _getAJAXSettings: function (data) { + var options = $.extend({}, this.options, data); + this._initFormSettings(options); + this._initDataSettings(options); + return options; + }, + + // jQuery 1.6 doesn't provide .state(), + // while jQuery 1.8+ removed .isRejected() and .isResolved(): + _getDeferredState: function (deferred) { + if (deferred.state) { + return deferred.state(); + } + if (deferred.isResolved()) { + return 'resolved'; + } + if (deferred.isRejected()) { + return 'rejected'; + } + return 'pending'; + }, + + // Maps jqXHR callbacks to the equivalent + // methods of the given Promise object: + _enhancePromise: function (promise) { + promise.success = promise.done; + promise.error = promise.fail; + promise.complete = promise.always; + return promise; + }, + + // Creates and returns a Promise object enhanced with + // the jqXHR methods abort, success, error and complete: + _getXHRPromise: function (resolveOrReject, context, args) { + var dfd = $.Deferred(), + promise = dfd.promise(); + context = context || this.options.context || promise; + if (resolveOrReject === true) { + dfd.resolveWith(context, args); + } else if (resolveOrReject === false) { + dfd.rejectWith(context, args); + } + promise.abort = dfd.promise; + return this._enhancePromise(promise); + }, + + // Adds convenience methods to the data callback argument: + _addConvenienceMethods: function (e, data) { + var that = this, + getPromise = function (args) { + return $.Deferred().resolveWith(that, args).promise(); + }; + data.process = function (resolveFunc, rejectFunc) { + if (resolveFunc || rejectFunc) { + data._processQueue = this._processQueue = + (this._processQueue || getPromise([this])).then( + function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return getPromise(arguments); + } + ).then(resolveFunc, rejectFunc); + } + return this._processQueue || getPromise([this]); + }; + data.submit = function () { + if (this.state() !== 'pending') { + data.jqXHR = this.jqXHR = + (that._trigger( + 'submit', + $.Event('submit', {delegatedEvent: e}), + this + ) !== false) && that._onSend(e, this); + } + return this.jqXHR || that._getXHRPromise(); + }; + data.abort = function () { + if (this.jqXHR) { + return this.jqXHR.abort(); + } + this.errorThrown = 'abort'; + that._trigger('fail', null, this); + return that._getXHRPromise(false); + }; + data.state = function () { + if (this.jqXHR) { + return that._getDeferredState(this.jqXHR); + } + if (this._processQueue) { + return that._getDeferredState(this._processQueue); + } + }; + data.processing = function () { + return !this.jqXHR && this._processQueue && that + ._getDeferredState(this._processQueue) === 'pending'; + }; + data.progress = function () { + return this._progress; + }; + data.response = function () { + return this._response; + }; + }, + + // Parses the Range header from the server response + // and returns the uploaded bytes: + _getUploadedBytes: function (jqXHR) { + var range = jqXHR.getResponseHeader('Range'), + parts = range && range.split('-'), + upperBytesPos = parts && parts.length > 1 && + parseInt(parts[1], 10); + return upperBytesPos && upperBytesPos + 1; + }, + + // Uploads a file in multiple, sequential requests + // by splitting the file up in multiple blob chunks. + // If the second parameter is true, only tests if the file + // should be uploaded in chunks, but does not invoke any + // upload requests: + _chunkedUpload: function (options, testOnly) { + options.uploadedBytes = options.uploadedBytes || 0; + var that = this, + file = options.files[0], + fs = file.size, + ub = options.uploadedBytes, + mcs = options.maxChunkSize || fs, + slice = this._blobSlice, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + upload; + if (!(this._isXHRUpload(options) && slice && (ub || ($.type(mcs) === 'function' ? mcs(options) : mcs) < fs)) || + options.data) { + return false; + } + if (testOnly) { + return true; + } + if (ub >= fs) { + file.error = options.i18n('uploadedBytes'); + return this._getXHRPromise( + false, + options.context, + [null, 'error', file.error] + ); + } + // The chunk upload method: + upload = function () { + // Clone the options object for each chunk upload: + var o = $.extend({}, options), + currentLoaded = o._progress.loaded; + o.blob = slice.call( + file, + ub, + ub + ($.type(mcs) === 'function' ? mcs(o) : mcs), + file.type + ); + // Store the current chunk size, as the blob itself + // will be dereferenced after data processing: + o.chunkSize = o.blob.size; + // Expose the chunk bytes position range: + o.contentRange = 'bytes ' + ub + '-' + + (ub + o.chunkSize - 1) + '/' + fs; + // Trigger chunkbeforesend to allow form data to be updated for this chunk + that._trigger('chunkbeforesend', null, o); + // Process the upload data (the blob and potential form data): + that._initXHRData(o); + // Add progress listeners for this chunk upload: + that._initProgressListener(o); + jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) || + that._getXHRPromise(false, o.context)) + .done(function (result, textStatus, jqXHR) { + ub = that._getUploadedBytes(jqXHR) || + (ub + o.chunkSize); + // Create a progress event if no final progress event + // with loaded equaling total has been triggered + // for this chunk: + if (currentLoaded + o.chunkSize - o._progress.loaded) { + that._onProgress($.Event('progress', { + lengthComputable: true, + loaded: ub - o.uploadedBytes, + total: ub - o.uploadedBytes + }), o); + } + options.uploadedBytes = o.uploadedBytes = ub; + o.result = result; + o.textStatus = textStatus; + o.jqXHR = jqXHR; + that._trigger('chunkdone', null, o); + that._trigger('chunkalways', null, o); + if (ub < fs) { + // File upload not yet complete, + // continue with the next chunk: + upload(); + } else { + dfd.resolveWith( + o.context, + [result, textStatus, jqXHR] + ); + } + }) + .fail(function (jqXHR, textStatus, errorThrown) { + o.jqXHR = jqXHR; + o.textStatus = textStatus; + o.errorThrown = errorThrown; + that._trigger('chunkfail', null, o); + that._trigger('chunkalways', null, o); + dfd.rejectWith( + o.context, + [jqXHR, textStatus, errorThrown] + ); + }) + .always(function () { + that._deinitProgressListener(o); + }); + }; + this._enhancePromise(promise); + promise.abort = function () { + return jqXHR.abort(); + }; + upload(); + return promise; + }, + + _beforeSend: function (e, data) { + if (this._active === 0) { + // the start callback is triggered when an upload starts + // and no other uploads are currently running, + // equivalent to the global ajaxStart event: + this._trigger('start'); + // Set timer for global bitrate progress calculation: + this._bitrateTimer = new this._BitrateTimer(); + // Reset the global progress values: + this._progress.loaded = this._progress.total = 0; + this._progress.bitrate = 0; + } + // Make sure the container objects for the .response() and + // .progress() methods on the data object are available + // and reset to their initial state: + this._initResponseObject(data); + this._initProgressObject(data); + data._progress.loaded = data.loaded = data.uploadedBytes || 0; + data._progress.total = data.total = this._getTotal(data.files) || 1; + data._progress.bitrate = data.bitrate = 0; + this._active += 1; + // Initialize the global progress values: + this._progress.loaded += data.loaded; + this._progress.total += data.total; + }, + + _onDone: function (result, textStatus, jqXHR, options) { + var total = options._progress.total, + response = options._response; + if (options._progress.loaded < total) { + // Create a progress event if no final progress event + // with loaded equaling total has been triggered: + this._onProgress($.Event('progress', { + lengthComputable: true, + loaded: total, + total: total + }), options); + } + response.result = options.result = result; + response.textStatus = options.textStatus = textStatus; + response.jqXHR = options.jqXHR = jqXHR; + this._trigger('done', null, options); + }, + + _onFail: function (jqXHR, textStatus, errorThrown, options) { + var response = options._response; + if (options.recalculateProgress) { + // Remove the failed (error or abort) file upload from + // the global progress calculation: + this._progress.loaded -= options._progress.loaded; + this._progress.total -= options._progress.total; + } + response.jqXHR = options.jqXHR = jqXHR; + response.textStatus = options.textStatus = textStatus; + response.errorThrown = options.errorThrown = errorThrown; + this._trigger('fail', null, options); + }, + + _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) { + // jqXHRorResult, textStatus and jqXHRorError are added to the + // options object via done and fail callbacks + this._trigger('always', null, options); + }, + + _onSend: function (e, data) { + if (!data.submit) { + this._addConvenienceMethods(e, data); + } + var that = this, + jqXHR, + aborted, + slot, + pipe, + options = that._getAJAXSettings(data), + send = function () { + that._sending += 1; + // Set timer for bitrate progress calculation: + options._bitrateTimer = new that._BitrateTimer(); + jqXHR = jqXHR || ( + ((aborted || that._trigger( + 'send', + $.Event('send', {delegatedEvent: e}), + options + ) === false) && + that._getXHRPromise(false, options.context, aborted)) || + that._chunkedUpload(options) || $.ajax(options) + ).done(function (result, textStatus, jqXHR) { + that._onDone(result, textStatus, jqXHR, options); + }).fail(function (jqXHR, textStatus, errorThrown) { + that._onFail(jqXHR, textStatus, errorThrown, options); + }).always(function (jqXHRorResult, textStatus, jqXHRorError) { + that._deinitProgressListener(options); + that._onAlways( + jqXHRorResult, + textStatus, + jqXHRorError, + options + ); + that._sending -= 1; + that._active -= 1; + if (options.limitConcurrentUploads && + options.limitConcurrentUploads > that._sending) { + // Start the next queued upload, + // that has not been aborted: + var nextSlot = that._slots.shift(); + while (nextSlot) { + if (that._getDeferredState(nextSlot) === 'pending') { + nextSlot.resolve(); + break; + } + nextSlot = that._slots.shift(); + } + } + if (that._active === 0) { + // The stop callback is triggered when all uploads have + // been completed, equivalent to the global ajaxStop event: + that._trigger('stop'); + } + }); + return jqXHR; + }; + this._beforeSend(e, options); + if (this.options.sequentialUploads || + (this.options.limitConcurrentUploads && + this.options.limitConcurrentUploads <= this._sending)) { + if (this.options.limitConcurrentUploads > 1) { + slot = $.Deferred(); + this._slots.push(slot); + pipe = slot.then(send); + } else { + this._sequence = this._sequence.then(send, send); + pipe = this._sequence; + } + // Return the piped Promise object, enhanced with an abort method, + // which is delegated to the jqXHR object of the current upload, + // and jqXHR callbacks mapped to the equivalent Promise methods: + pipe.abort = function () { + aborted = [undefined, 'abort', 'abort']; + if (!jqXHR) { + if (slot) { + slot.rejectWith(options.context, aborted); + } + return send(); + } + return jqXHR.abort(); + }; + return this._enhancePromise(pipe); + } + return send(); + }, + + _onAdd: function (e, data) { + var that = this, + result = true, + options = $.extend({}, this.options, data), + files = data.files, + filesLength = files.length, + limit = options.limitMultiFileUploads, + limitSize = options.limitMultiFileUploadSize, + overhead = options.limitMultiFileUploadSizeOverhead, + batchSize = 0, + paramName = this._getParamName(options), + paramNameSet, + paramNameSlice, + fileSet, + i, + j = 0; + if (!filesLength) { + return false; + } + if (limitSize && files[0].size === undefined) { + limitSize = undefined; + } + if (!(options.singleFileUploads || limit || limitSize) || + !this._isXHRUpload(options)) { + fileSet = [files]; + paramNameSet = [paramName]; + } else if (!(options.singleFileUploads || limitSize) && limit) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i += limit) { + fileSet.push(files.slice(i, i + limit)); + paramNameSlice = paramName.slice(i, i + limit); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + } + } else if (!options.singleFileUploads && limitSize) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i = i + 1) { + batchSize += files[i].size + overhead; + if (i + 1 === filesLength || + ((batchSize + files[i + 1].size + overhead) > limitSize) || + (limit && i + 1 - j >= limit)) { + fileSet.push(files.slice(j, i + 1)); + paramNameSlice = paramName.slice(j, i + 1); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + j = i + 1; + batchSize = 0; + } + } + } else { + paramNameSet = paramName; + } + data.originalFiles = files; + $.each(fileSet || files, function (index, element) { + var newData = $.extend({}, data); + newData.files = fileSet ? element : [element]; + newData.paramName = paramNameSet[index]; + that._initResponseObject(newData); + that._initProgressObject(newData); + that._addConvenienceMethods(e, newData); + result = that._trigger( + 'add', + $.Event('add', {delegatedEvent: e}), + newData + ); + return result; + }); + return result; + }, + + _replaceFileInput: function (data) { + var input = data.fileInput, + inputClone = input.clone(true), + restoreFocus = input.is(document.activeElement); + // Add a reference for the new cloned file input to the data argument: + data.fileInputClone = inputClone; + $('
          ').append(inputClone)[0].reset(); + // Detaching allows to insert the fileInput on another form + // without loosing the file input value: + input.after(inputClone).detach(); + // If the fileInput had focus before it was detached, + // restore focus to the inputClone. + if (restoreFocus) { + inputClone.focus(); + } + // Avoid memory leaks with the detached file input: + $.cleanData(input.unbind('remove')); + // Replace the original file input element in the fileInput + // elements set with the clone, which has been copied including + // event handlers: + this.options.fileInput = this.options.fileInput.map(function (i, el) { + if (el === input[0]) { + return inputClone[0]; + } + return el; + }); + // If the widget has been initialized on the file input itself, + // override this.element with the file input clone: + if (input[0] === this.element[0]) { + this.element = inputClone; + } + }, + + _handleFileTreeEntry: function (entry, path) { + var that = this, + dfd = $.Deferred(), + entries = [], + dirReader, + errorHandler = function (e) { + if (e && !e.entry) { + e.entry = entry; + } + // Since $.when returns immediately if one + // Deferred is rejected, we use resolve instead. + // This allows valid files and invalid items + // to be returned together in one set: + dfd.resolve([e]); + }, + successHandler = function (entries) { + that._handleFileTreeEntries( + entries, + path + entry.name + '/' + ).done(function (files) { + dfd.resolve(files); + }).fail(errorHandler); + }, + readEntries = function () { + dirReader.readEntries(function (results) { + if (!results.length) { + successHandler(entries); + } else { + entries = entries.concat(results); + readEntries(); + } + }, errorHandler); + }; + path = path || ''; + if (entry.isFile) { + if (entry._file) { + // Workaround for Chrome bug #149735 + entry._file.relativePath = path; + dfd.resolve(entry._file); + } else { + entry.file(function (file) { + file.relativePath = path; + dfd.resolve(file); + }, errorHandler); + } + } else if (entry.isDirectory) { + dirReader = entry.createReader(); + readEntries(); + } else { + // Return an empty list for file system items + // other than files or directories: + dfd.resolve([]); + } + return dfd.promise(); + }, + + _handleFileTreeEntries: function (entries, path) { + var that = this; + return $.when.apply( + $, + $.map(entries, function (entry) { + return that._handleFileTreeEntry(entry, path); + }) + ).then(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _getDroppedFiles: function (dataTransfer) { + dataTransfer = dataTransfer || {}; + var items = dataTransfer.items; + if (items && items.length && (items[0].webkitGetAsEntry || + items[0].getAsEntry)) { + return this._handleFileTreeEntries( + $.map(items, function (item) { + var entry; + if (item.webkitGetAsEntry) { + entry = item.webkitGetAsEntry(); + if (entry) { + // Workaround for Chrome bug #149735: + entry._file = item.getAsFile(); + } + return entry; + } + return item.getAsEntry(); + }) + ); + } + return $.Deferred().resolve( + $.makeArray(dataTransfer.files) + ).promise(); + }, + + _getSingleFileInputFiles: function (fileInput) { + fileInput = $(fileInput); + var entries = fileInput.prop('webkitEntries') || + fileInput.prop('entries'), + files, + value; + if (entries && entries.length) { + return this._handleFileTreeEntries(entries); + } + files = $.makeArray(fileInput.prop('files')); + if (!files.length) { + value = fileInput.prop('value'); + if (!value) { + return $.Deferred().resolve([]).promise(); + } + // If the files property is not available, the browser does not + // support the File API and we add a pseudo File object with + // the input value as name with path information removed: + files = [{name: value.replace(/^.*\\/, '')}]; + } else if (files[0].name === undefined && files[0].fileName) { + // File normalization for Safari 4 and Firefox 3: + $.each(files, function (index, file) { + file.name = file.fileName; + file.size = file.fileSize; + }); + } + return $.Deferred().resolve(files).promise(); + }, + + _getFileInputFiles: function (fileInput) { + if (!(fileInput instanceof $) || fileInput.length === 1) { + return this._getSingleFileInputFiles(fileInput); + } + return $.when.apply( + $, + $.map(fileInput, this._getSingleFileInputFiles) + ).then(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _onChange: function (e) { + var that = this, + data = { + fileInput: $(e.target), + form: $(e.target.form) + }; + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + if (that.options.replaceFileInput) { + that._replaceFileInput(data); + } + if (that._trigger( + 'change', + $.Event('change', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + }, + + _onPaste: function (e) { + var items = e.originalEvent && e.originalEvent.clipboardData && + e.originalEvent.clipboardData.items, + data = {files: []}; + if (items && items.length) { + $.each(items, function (index, item) { + var file = item.getAsFile && item.getAsFile(); + if (file) { + data.files.push(file); + } + }); + if (this._trigger( + 'paste', + $.Event('paste', {delegatedEvent: e}), + data + ) !== false) { + this._onAdd(e, data); + } + } + }, + + _onDrop: function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var that = this, + dataTransfer = e.dataTransfer, + data = {}; + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + e.preventDefault(); + this._getDroppedFiles(dataTransfer).always(function (files) { + data.files = files; + if (that._trigger( + 'drop', + $.Event('drop', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + } + }, + + _onDragOver: getDragHandler('dragover'), + + _onDragEnter: getDragHandler('dragenter'), + + _onDragLeave: getDragHandler('dragleave'), + + _initEventHandlers: function () { + if (this._isXHRUpload(this.options)) { + this._on(this.options.dropZone, { + dragover: this._onDragOver, + drop: this._onDrop, + // event.preventDefault() on dragenter is required for IE10+: + dragenter: this._onDragEnter, + // dragleave is not required, but added for completeness: + dragleave: this._onDragLeave + }); + this._on(this.options.pasteZone, { + paste: this._onPaste + }); + } + if ($.support.fileInput) { + this._on(this.options.fileInput, { + change: this._onChange + }); + } + }, + + _destroyEventHandlers: function () { + this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); + this._off(this.options.pasteZone, 'paste'); + this._off(this.options.fileInput, 'change'); + }, + + _destroy: function () { + this._destroyEventHandlers(); + }, + + _setOption: function (key, value) { + var reinit = $.inArray(key, this._specialOptions) !== -1; + if (reinit) { + this._destroyEventHandlers(); + } + this._super(key, value); + if (reinit) { + this._initSpecialOptions(); + this._initEventHandlers(); + } + }, + + _initSpecialOptions: function () { + var options = this.options; + if (options.fileInput === undefined) { + options.fileInput = this.element.is('input[type="file"]') ? + this.element : this.element.find('input[type="file"]'); + } else if (!(options.fileInput instanceof $)) { + options.fileInput = $(options.fileInput); + } + if (!(options.dropZone instanceof $)) { + options.dropZone = $(options.dropZone); + } + if (!(options.pasteZone instanceof $)) { + options.pasteZone = $(options.pasteZone); + } + }, + + _getRegExp: function (str) { + var parts = str.split('/'), + modifiers = parts.pop(); + parts.shift(); + return new RegExp(parts.join('/'), modifiers); + }, + + _isRegExpOption: function (key, value) { + return key !== 'url' && $.type(value) === 'string' && + /^\/.*\/[igm]{0,3}$/.test(value); + }, + + _initDataAttributes: function () { + var that = this, + options = this.options, + data = this.element.data(); + // Initialize options set via HTML5 data-attributes: + $.each( + this.element[0].attributes, + function (index, attr) { + var key = attr.name.toLowerCase(), + value; + if (/^data-/.test(key)) { + // Convert hyphen-ated key to camelCase: + key = key.slice(5).replace(/-[a-z]/g, function (str) { + return str.charAt(1).toUpperCase(); + }); + value = data[key]; + if (that._isRegExpOption(key, value)) { + value = that._getRegExp(value); + } + options[key] = value; + } + } + ); + }, + + _create: function () { + this._initDataAttributes(); + this._initSpecialOptions(); + this._slots = []; + this._sequence = this._getXHRPromise(true); + this._sending = this._active = 0; + this._initProgressObject(this); + this._initEventHandlers(); + }, + + // This method is exposed to the widget API and allows to query + // the number of active uploads: + active: function () { + return this._active; + }, + + // This method is exposed to the widget API and allows to query + // the widget upload progress. + // It returns an object with loaded, total and bitrate properties + // for the running uploads: + progress: function () { + return this._progress; + }, + + // This method is exposed to the widget API and allows adding files + // using the fileupload API. The data parameter accepts an object which + // must have a files property and can contain additional options: + // .fileupload('add', {files: filesList}); + add: function (data) { + var that = this; + if (!data || this.options.disabled) { + return; + } + if (data.fileInput && !data.files) { + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + that._onAdd(null, data); + }); + } else { + data.files = $.makeArray(data.files); + this._onAdd(null, data); + } + }, + + // This method is exposed to the widget API and allows sending files + // using the fileupload API. The data parameter accepts an object which + // must have a files or fileInput property and can contain additional options: + // .fileupload('send', {files: filesList}); + // The method returns a Promise object for the file upload call. + send: function (data) { + if (data && !this.options.disabled) { + if (data.fileInput && !data.files) { + var that = this, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + aborted; + promise.abort = function () { + aborted = true; + if (jqXHR) { + return jqXHR.abort(); + } + dfd.reject(null, 'abort', 'abort'); + return promise; + }; + this._getFileInputFiles(data.fileInput).always( + function (files) { + if (aborted) { + return; + } + if (!files.length) { + dfd.reject(); + return; + } + data.files = files; + jqXHR = that._onSend(null, data); + jqXHR.then( + function (result, textStatus, jqXHR) { + dfd.resolve(result, textStatus, jqXHR); + }, + function (jqXHR, textStatus, errorThrown) { + dfd.reject(jqXHR, textStatus, errorThrown); + } + ); + } + ); + return this._enhancePromise(promise); + } + data.files = $.makeArray(data.files); + if (data.files.length) { + return this._onSend(null, data); + } + } + return this._getXHRPromise(false, data && data.context); + } + + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/jquery.iframe-transport.js b/libraries/filemanager-9.14.1/js/jquery.iframe-transport.js new file mode 100644 index 0000000..8d25c46 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/jquery.iframe-transport.js @@ -0,0 +1,224 @@ +/* + * jQuery Iframe Transport Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* global define, require, window, document, JSON */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Helper variable to create unique names for the transport iframes: + var counter = 0, + jsonAPI = $, + jsonParse = 'parseJSON'; + + if ('JSON' in window && 'parse' in JSON) { + jsonAPI = JSON; + jsonParse = 'parse'; + } + + // The iframe transport accepts four additional options: + // options.fileInput: a jQuery collection of file input fields + // options.paramName: the parameter name for the file form data, + // overrides the name property of the file input field(s), + // can be a string or an array of strings. + // options.formData: an array of objects with name and value properties, + // equivalent to the return data of .serializeArray(), e.g.: + // [{name: 'a', value: 1}, {name: 'b', value: 2}] + // options.initialIframeSrc: the URL of the initial iframe src, + // by default set to "javascript:false;" + $.ajaxTransport('iframe', function (options) { + if (options.async) { + // javascript:false as initial iframe src + // prevents warning popups on HTTPS in IE6: + /*jshint scripturl: true */ + var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', + /*jshint scripturl: false */ + form, + iframe, + addParamChar; + return { + send: function (_, completeCallback) { + form = $('
          '); + form.attr('accept-charset', options.formAcceptCharset); + addParamChar = /\?/.test(options.url) ? '&' : '?'; + // XDomainRequest only supports GET and POST: + if (options.type === 'DELETE') { + options.url = options.url + addParamChar + '_method=DELETE'; + options.type = 'POST'; + } else if (options.type === 'PUT') { + options.url = options.url + addParamChar + '_method=PUT'; + options.type = 'POST'; + } else if (options.type === 'PATCH') { + options.url = options.url + addParamChar + '_method=PATCH'; + options.type = 'POST'; + } + // IE versions below IE8 cannot set the name property of + // elements that have already been added to the DOM, + // so we set the name along with the iframe HTML markup: + counter += 1; + iframe = $( + '' + ).bind('load', function () { + var fileInputClones, + paramNames = $.isArray(options.paramName) ? + options.paramName : [options.paramName]; + iframe + .unbind('load') + .bind('load', function () { + var response; + // Wrap in a try/catch block to catch exceptions thrown + // when trying to access cross-domain iframe contents: + try { + response = iframe.contents(); + // Google Chrome and Firefox do not throw an + // exception when calling iframe.contents() on + // cross-domain requests, so we unify the response: + if (!response.length || !response[0].firstChild) { + throw new Error(); + } + } catch (e) { + response = undefined; + } + // The complete callback returns the + // iframe content document as response object: + completeCallback( + 200, + 'success', + {'iframe': response} + ); + // Fix for IE endless progress bar activity bug + // (happens on form submits to iframe targets): + $('') + .appendTo(form); + window.setTimeout(function () { + // Removing the form in a setTimeout call + // allows Chrome's developer tools to display + // the response result + form.remove(); + }, 0); + }); + form + .prop('target', iframe.prop('name')) + .prop('action', options.url) + .prop('method', options.type); + if (options.formData) { + $.each(options.formData, function (index, field) { + $('') + .prop('name', field.name) + .val(field.value) + .appendTo(form); + }); + } + if (options.fileInput && options.fileInput.length && + options.type === 'POST') { + fileInputClones = options.fileInput.clone(); + // Insert a clone for each file input field: + options.fileInput.after(function (index) { + return fileInputClones[index]; + }); + if (options.paramName) { + options.fileInput.each(function (index) { + $(this).prop( + 'name', + paramNames[index] || options.paramName + ); + }); + } + // Appending the file input fields to the hidden form + // removes them from their original location: + form + .append(options.fileInput) + .prop('enctype', 'multipart/form-data') + // enctype must be set as encoding for IE: + .prop('encoding', 'multipart/form-data'); + // Remove the HTML5 form attribute from the input(s): + options.fileInput.removeAttr('form'); + } + form.submit(); + // Insert the file input fields at their original location + // by replacing the clones with the originals: + if (fileInputClones && fileInputClones.length) { + options.fileInput.each(function (index, input) { + var clone = $(fileInputClones[index]); + // Restore the original name and form properties: + $(input) + .prop('name', clone.prop('name')) + .attr('form', clone.attr('form')); + clone.replaceWith(input); + }); + } + }); + form.append(iframe).appendTo(document.body); + }, + abort: function () { + if (iframe) { + // javascript:false as iframe src aborts the request + // and prevents warning popups on HTTPS in IE6. + // concat is used to avoid the "Script URL" JSLint error: + iframe + .unbind('load') + .prop('src', initialIframeSrc); + } + if (form) { + form.remove(); + } + } + }; + } + }); + + // The iframe transport returns the iframe content document as response. + // The following adds converters from iframe to text, json, html, xml + // and script. + // Please note that the Content-Type for JSON responses has to be text/plain + // or text/html, if the browser doesn't include application/json in the + // Accept header, else IE will show a download dialog. + // The Content-Type for XML responses on the other hand has to be always + // application/xml or text/xml, so IE properly parses the XML response. + // See also + // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation + $.ajaxSetup({ + converters: { + 'iframe text': function (iframe) { + return iframe && $(iframe[0].body).text(); + }, + 'iframe json': function (iframe) { + return iframe && jsonAPI[jsonParse]($(iframe[0].body).text()); + }, + 'iframe html': function (iframe) { + return iframe && $(iframe[0].body).html(); + }, + 'iframe xml': function (iframe) { + var xmlDoc = iframe && iframe[0]; + return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : + $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || + $(xmlDoc.body).html()); + }, + 'iframe script': function (iframe) { + return iframe && $.globalEval($(iframe[0].body).text()); + } + } + }); + +})); diff --git a/libraries/filemanager-9.14.1/js/modernizr.custom.js b/libraries/filemanager-9.14.1/js/modernizr.custom.js new file mode 100644 index 0000000..2ec5cd3 --- /dev/null +++ b/libraries/filemanager-9.14.1/js/modernizr.custom.js @@ -0,0 +1,4 @@ +/* Modernizr 2.7.1 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexboxlegacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function B(a){j.cssText=a}function C(a,b){return B(n.join(a+";")+(b||""))}function D(a,b){return typeof a===b}function E(a,b){return!!~(""+a).indexOf(b)}function F(a,b){for(var d in a){var e=a[d];if(!E(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function G(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:D(f,"function")?f.bind(d||b):f}return!1}function H(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return D(b,"string")||D(b,"undefined")?F(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),G(e,b,c))}function I(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},y=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),z={}.hasOwnProperty,A;!D(z,"undefined")&&!D(z.call,"undefined")?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=v.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(v.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(v.call(arguments)))};return e}),r.flexbox=function(){return H("flexWrap")},r.flexboxlegacy=function(){return H("boxDirection")},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!D(b.createElement("canvas").getContext("2d").fillText,"function")},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){return!!a.openDatabase},r.indexedDB=function(){return!!H("indexedDB",a)},r.hashchange=function(){return y("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},r.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},r.rgba=function(){return B("background-color:rgba(150,255,150,.5)"),E(j.backgroundColor,"rgba")},r.hsla=function(){return B("background-color:hsla(120,40%,100%,.5)"),E(j.backgroundColor,"rgba")||E(j.backgroundColor,"hsla")},r.multiplebgs=function(){return B("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},r.backgroundsize=function(){return H("backgroundSize")},r.borderimage=function(){return H("borderImage")},r.borderradius=function(){return H("borderRadius")},r.boxshadow=function(){return H("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){return C("opacity:.55"),/^0.55$/.test(j.opacity)},r.cssanimations=function(){return H("animationName")},r.csscolumns=function(){return H("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return B((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),E(j.backgroundImage,"gradient")},r.cssreflections=function(){return H("boxReflect")},r.csstransforms=function(){return!!H("transform")},r.csstransforms3d=function(){var a=!!H("perspective");return a&&"webkitPerspective"in g.style&&x("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},r.csstransitions=function(){return H("transition")},r.fontface=function(){var a;return x('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},r.generatedcontent=function(){var a;return x(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},r.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},r.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache};for(var J in r)A(r,J)&&(w=J.toLowerCase(),e[w]=r[J](),u.push((e[w]?"":"no-")+w));return e.input||I(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},B(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=y,e.testProp=function(a){return F([a])},e.testAllProps=H,e.testStyles=x,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+u.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f=n-r?"bottom":null!=s&&o<=s&&"top"),this.affixed!==t&&(this.affixed=t,this.unpin="bottom"==t?i.top-o:null,this.$element.removeClass(c).addClass("affix"+(t?"-"+t:"")))}};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var o=e(this),i=o.data("affix"),a="object"==typeof n&&n;i||o.data("affix",i=new t(this,a)),"string"==typeof n&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery),!function(e){"use strict";function t(){e(".dropdown-backdrop").remove(),e(o).each(function(){n(e(this)).removeClass("open")})}function n(t){var n,o=t.attr("data-target");return o||(o=t.attr("href"),o=o&&/#/.test(o)&&o.replace(/.*(?=#[^\s]*$)/,"")),n=o&&e(o),n&&n.length||(n=t.parent()),n}var o="[data-toggle=dropdown]",i=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};i.prototype={constructor:i,toggle:function(o){var i,a,r=e(this);if(!r.is(".disabled, :disabled"))return i=n(r),a=i.hasClass("open"),t(),a||("ontouchstart"in document.documentElement&&e('