From c7c8998367de62545bec8940a1acbba4cb44b4ba Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Tue, 5 Nov 2019 21:51:46 +0100 Subject: [PATCH 01/27] include category name on JSON method --- bl-kernel/pagex.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/bl-kernel/pagex.class.php b/bl-kernel/pagex.class.php index 60da93c0..08da653b 100644 --- a/bl-kernel/pagex.class.php +++ b/bl-kernel/pagex.class.php @@ -273,6 +273,7 @@ class Page { $tmp['dateRaw'] = $this->dateRaw(); $tmp['tags'] = $this->tags(false); $tmp['username'] = $this->username(); + $tmp['category'] = $this->category(); $tmp['dateUTC'] = Date::convertToUTC($this->dateRaw(), DB_DATE_FORMAT, DB_DATE_FORMAT); $tmp['permalink'] = $this->permalink(true); $tmp['coverImage'] = $this->coverImage(true); From 2b504938ecd2a47bb63df8e83201fd67624432f7 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Mon, 11 Nov 2019 19:16:05 +0100 Subject: [PATCH 02/27] include get settings --- bl-plugins/api/plugin.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/bl-plugins/api/plugin.php b/bl-plugins/api/plugin.php index f7cb4583..5d986caf 100644 --- a/bl-plugins/api/plugin.php +++ b/bl-plugins/api/plugin.php @@ -121,6 +121,11 @@ class pluginAPI extends Plugin { } } + // Clean inputs + // ------------------------------------------------------------ + unset($inputs['token']); + unset($inputs['authentication']); + // ENDPOINTS // ------------------------------------------------------------ @@ -147,6 +152,10 @@ class pluginAPI extends Plugin { elseif ( ($method==='POST') && ($parameters[0]==='pages') && empty($parameters[1]) && $writePermissions ) { $data = $this->createPage($inputs); } + // (GET) /api/settings + elseif ( ($method==='GET') && ($parameters[0]==='settings') && empty($parameters[1]) && $writePermissions ) { + $data = $this->getSettings(); + } // (PUT) /api/settings elseif ( ($method==='PUT') && ($parameters[0]==='settings') && empty($parameters[1]) && $writePermissions ) { $data = $this->editSettings($inputs); @@ -509,6 +518,23 @@ class pluginAPI extends Plugin { ); } + /* + | Get the settings + | + | @args array + | + | @return array + */ + private function getSettings() + { + global $site; + return array( + 'status'=>'0', + 'message'=>'Settings.', + 'data'=>$site->get() + ); + } + /* | Edit the settings | You can edit any field defined in the class site.class.php variable $dbFields From 1a208b064236fb53d28911c0e768e35f7c3e45d5 Mon Sep 17 00:00:00 2001 From: Anaggh S Date: Fri, 15 Nov 2019 19:29:26 +0530 Subject: [PATCH 03/27] Allow backup downloads for admin role --- bl-kernel/functions.php | 16 +++++++++++++++- bl-plugins/backup/plugin.php | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/bl-kernel/functions.php b/bl-kernel/functions.php index 38f52871..40859d5c 100644 --- a/bl-kernel/functions.php +++ b/bl-kernel/functions.php @@ -872,4 +872,18 @@ function transformImage($file, $imageDir, $thumbnailDir=false) { } return $image; -} \ No newline at end of file +} + +function downloadRestrictedFile($file) { + if (is_file($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(0); + } +} diff --git a/bl-plugins/backup/plugin.php b/bl-plugins/backup/plugin.php index a7964a1a..0d6f7064 100644 --- a/bl-plugins/backup/plugin.php +++ b/bl-plugins/backup/plugin.php @@ -36,8 +36,13 @@ class pluginBackup extends Plugin { public function adminSidebar() { - $backups = $this->backupList(); - return 'Backups '.count($backups).''; + global $login; + if ($login->role() === 'admin') { + $backups = $this->backupList(); + return 'Backups '.count($backups).''; + } else { + return ''; + } } public function form() @@ -66,7 +71,7 @@ class pluginBackup extends Plugin { $html .= '

'.Date::format($filename, BACKUP_DATE_FORMAT, 'F j, Y, g:i a').'

'; // Allow download if a zip file if ($this->zip) { - $html .= ' '.$L->get('download').''; + $html .= ' '.$L->get('download').''; } $html .= ''; $html .= ''; @@ -76,6 +81,29 @@ class pluginBackup extends Plugin { return $html; } + /** + * Downloading Backups is not allowed by default server config + * This webhook is to allow downloads for admins + * Webhook: plugin-backup-download?file={backup-name.zip} + */ + public function beforeAll() + { + global $L; + $webhook = 'plugin-backup-download'; + if ($this->webhook($webhook)) { + if (!empty($_GET['file'])) { + $login = new Login(); + if ($login->role() === 'admin') { + downloadRestrictedFile(PATH_WORKSPACES.'backup/'.$_GET['file']); + } else { + Alert::set($L->g('You do not have sufficient permissions')); + Redirect::page('dashboard'); + } + } + exit(0); + } + } + public function backupList() { if ($this->zip) { From a39d3fff7fbe9095f484f9f9fab8ee2014b595ad Mon Sep 17 00:00:00 2001 From: Anaggh S Date: Fri, 15 Nov 2019 21:17:56 +0530 Subject: [PATCH 04/27] Add Disk Size to Simple Stats --- bl-kernel/helpers/filesystem.class.php | 28 ++++++++++++++++++++ bl-plugins/simple-stats/languages/de_CH.json | 3 ++- bl-plugins/simple-stats/languages/de_DE.json | 3 ++- bl-plugins/simple-stats/languages/en.json | 3 ++- bl-plugins/simple-stats/languages/es.json | 5 ++-- bl-plugins/simple-stats/languages/fa_IR.json | 3 ++- bl-plugins/simple-stats/languages/fr_FR.json | 3 ++- bl-plugins/simple-stats/languages/it.json | 3 ++- bl-plugins/simple-stats/languages/ja_JP.json | 3 ++- bl-plugins/simple-stats/languages/nl_NL.json | 3 ++- bl-plugins/simple-stats/languages/ru_RU.json | 3 ++- bl-plugins/simple-stats/languages/tr.json | 3 ++- bl-plugins/simple-stats/plugin.php | 6 +++++ 13 files changed, 57 insertions(+), 12 deletions(-) diff --git a/bl-kernel/helpers/filesystem.class.php b/bl-kernel/helpers/filesystem.class.php index c7c8b186..c7417afa 100644 --- a/bl-kernel/helpers/filesystem.class.php +++ b/bl-kernel/helpers/filesystem.class.php @@ -264,4 +264,32 @@ class Filesystem { public static function extension($file) { return pathinfo($file, PATHINFO_EXTENSION); } + + /** + * Get Size of file or directory in bytes + * @param [string] $fileOrDirectory + * @return [int|bool [bytes or false on error] + */ + public static function getSize($fileOrDirectory) { + // Files + if (is_file($fileOrDirectory)) { + return filesize($fileOrDirectory); + } + // Directories + if (file_exists($fileOrDirectory)) { + $size = 0; + foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fileOrDirectory)) as $file){ + $size += $file->getSize(); + } + return $size; + } + return false; + } + + public static function bytesToHumanFileSize($bytes, $decimals = 2) { + $size = array('B','kB','MB','GB','TB','PB','EB','ZB','YB'); + $factor = floor((strlen($bytes) - 1) / 3); + return sprintf("%.{$decimals}f ", $bytes / pow(1024, $factor)) . @$size[$factor]; + } + } diff --git a/bl-plugins/simple-stats/languages/de_CH.json b/bl-plugins/simple-stats/languages/de_CH.json index ed0cf4d1..3de04034 100644 --- a/bl-plugins/simple-stats/languages/de_CH.json +++ b/bl-plugins/simple-stats/languages/de_CH.json @@ -8,5 +8,6 @@ "visits-today": "Seitenaufrufe heute", "unique-visitors-today": "Besucher heute", "chart": "Chart", - "table": "Table" + "table": "Table", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/de_DE.json b/bl-plugins/simple-stats/languages/de_DE.json index c7b77a97..d5a8e9d0 100644 --- a/bl-plugins/simple-stats/languages/de_DE.json +++ b/bl-plugins/simple-stats/languages/de_DE.json @@ -8,5 +8,6 @@ "visits-today": "Seitenaufrufe heute", "unique-visitors-today": "Besucher heute", "chart": "Chart", - "table": "Table" + "table": "Table", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/en.json b/bl-plugins/simple-stats/languages/en.json index c343b890..5baff329 100644 --- a/bl-plugins/simple-stats/languages/en.json +++ b/bl-plugins/simple-stats/languages/en.json @@ -8,5 +8,6 @@ "visits-today": "Visits today", "unique-visitors-today": "Unique visitors today", "chart": "Chart", - "table": "Table" + "table": "Table", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/es.json b/bl-plugins/simple-stats/languages/es.json index 362e865b..45088270 100644 --- a/bl-plugins/simple-stats/languages/es.json +++ b/bl-plugins/simple-stats/languages/es.json @@ -8,5 +8,6 @@ "visits-today": "Visitas de hoy", "unique-visitors-today": "Visitantes únicos de hoy", "chart": "Gráfico", - "table": "Tabla" -} \ No newline at end of file + "table": "Tabla", + "disk-usage" : "Disk Usage" +} diff --git a/bl-plugins/simple-stats/languages/fa_IR.json b/bl-plugins/simple-stats/languages/fa_IR.json index 228c91d3..34243dd4 100644 --- a/bl-plugins/simple-stats/languages/fa_IR.json +++ b/bl-plugins/simple-stats/languages/fa_IR.json @@ -8,5 +8,6 @@ "visits-today": "بازدیدهای امروز", "unique-visitors-today": "بازدید کنندگان منحصر به فرد امروز", "chart": "چارت", - "table": "جدول" + "table": "جدول", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/fr_FR.json b/bl-plugins/simple-stats/languages/fr_FR.json index 1972173f..fec2a002 100644 --- a/bl-plugins/simple-stats/languages/fr_FR.json +++ b/bl-plugins/simple-stats/languages/fr_FR.json @@ -8,5 +8,6 @@ "visits-today": "Visites du jour", "unique-visitors-today": "Visiteurs uniques du jour", "chart": "Graphique", - "table": "Tableau" + "table": "Tableau", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/it.json b/bl-plugins/simple-stats/languages/it.json index 8362a1f4..c34f5697 100644 --- a/bl-plugins/simple-stats/languages/it.json +++ b/bl-plugins/simple-stats/languages/it.json @@ -8,5 +8,6 @@ "visits-today": "Visite oggi", "unique-visitors-today": "Visitatori unici oggi", "chart": "Grafico", - "table": "Tabella" + "table": "Tabella", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/ja_JP.json b/bl-plugins/simple-stats/languages/ja_JP.json index 8fa3a943..a19deca5 100644 --- a/bl-plugins/simple-stats/languages/ja_JP.json +++ b/bl-plugins/simple-stats/languages/ja_JP.json @@ -8,5 +8,6 @@ "visits-today": "Visits today", "unique-visitors-today": "Unique visitors today", "chart": "Chart", - "table": "テーブル" + "table": "テーブル", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/nl_NL.json b/bl-plugins/simple-stats/languages/nl_NL.json index 0a7071b0..f0ea1331 100644 --- a/bl-plugins/simple-stats/languages/nl_NL.json +++ b/bl-plugins/simple-stats/languages/nl_NL.json @@ -8,5 +8,6 @@ "visits-today": "Aantal bezoeken vandaag", "unique-visitors-today": "Unieke bezoekers vandaag", "chart": "Grafiek", - "table": "Tabel" + "table": "Tabel", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/ru_RU.json b/bl-plugins/simple-stats/languages/ru_RU.json index 5f2bdb2f..93f4f07c 100644 --- a/bl-plugins/simple-stats/languages/ru_RU.json +++ b/bl-plugins/simple-stats/languages/ru_RU.json @@ -8,5 +8,6 @@ "visits-today": "Посещений сегодня", "unique-visitors-today": "Уникальных посетителей сегодня", "chart": "Диаграмма", - "table": "Таблица" + "table": "Таблица", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/languages/tr.json b/bl-plugins/simple-stats/languages/tr.json index ebb7ec99..7e7df061 100644 --- a/bl-plugins/simple-stats/languages/tr.json +++ b/bl-plugins/simple-stats/languages/tr.json @@ -8,5 +8,6 @@ "visits-today": "Bugün yapılan ziyaretler", "unique-visitors-today": "Bugün yapılan benzersiz ziyaretler", "chart": "Grafik", - "table": "Tablo" + "table": "Tablo", + "disk-usage" : "Disk Usage" } diff --git a/bl-plugins/simple-stats/plugin.php b/bl-plugins/simple-stats/plugin.php index 110497ca..5b1686b2 100644 --- a/bl-plugins/simple-stats/plugin.php +++ b/bl-plugins/simple-stats/plugin.php @@ -220,6 +220,11 @@ EOF; public function renderContentStatistics($data) { + global $L; + $diskUsage = Filesystem::bytesToHumanFileSize( + Filesystem::getSize(PATH_ROOT) + ); + $html = '
'; $html .= "

{$data['title']}

"; $html .= ' @@ -237,6 +242,7 @@ EOF; '; + $html .= ""; foreach ($data['data'] as $th => $td) { $html .= " From 55bb7c4eeb65681399d03843278e38fffd080080 Mon Sep 17 00:00:00 2001 From: Anaggh S Date: Fri, 15 Nov 2019 21:32:48 +0530 Subject: [PATCH 05/27] Update Chartist.js 0.11.0 -> 0.11.4 --- bl-plugins/simple-stats/css/chartist.min.css | 2 +- bl-plugins/simple-stats/js/chartist.min.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bl-plugins/simple-stats/css/chartist.min.css b/bl-plugins/simple-stats/css/chartist.min.css index 6a23d470..3a070749 100644 --- a/bl-plugins/simple-stats/css/chartist.min.css +++ b/bl-plugins/simple-stats/css/chartist.min.css @@ -1 +1 @@ -.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-grid-background,.ct-line{fill:none}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{content:"";display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file +.ct-double-octave:after,.ct-golden-section:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-grid-background{fill:none}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{fill:none;stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{display:table}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/bl-plugins/simple-stats/js/chartist.min.js b/bl-plugins/simple-stats/js/chartist.min.js index 3ee93a32..258bad1e 100644 --- a/bl-plugins/simple-stats/js/chartist.min.js +++ b/bl-plugins/simple-stats/js/chartist.min.js @@ -1,9 +1,9 @@ -/* Chartist.js 0.11.0 - * Copyright © 2017 Gion Kunz +/* Chartist.js 0.11.4 + * Copyright © 2019 Gion Kunz * Free to use under either the WTFPL license or the MIT license. * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT */ -!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.0"};return function(a,b,c){"use strict";c.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){var b,d,e;for(a=a||{},b=1;b":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(c.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e),f._node.style.width=b,f._node.style.height=d,a.appendChild(f._node),f},c.normalizeData=function(a,b,d){var e,f={raw:a,normalized:{}};return f.normalized.series=c.getDataArray({series:a.series||[]},b,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,c.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),b&&c.reverseData(f.normalized),f},c.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},c.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},c.isNumeric=function(a){return null!==a&&isFinite(a)},c.isFalseyButZero=function(a){return!a&&0!==a},c.getNumberOrUndefined=function(a){return c.isNumeric(a)?+a:void 0},c.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},c.getMultiValue=function(a,b){return c.isMultiValue(a)?c.getNumberOrUndefined(a[b||"y"]):c.getNumberOrUndefined(a)},c.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},c.getBounds=function(a,b,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:b.high,low:b.low};k.valueRange=k.high-k.low,k.oom=c.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=c.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&c.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(c.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=c.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.quantity(b.width).value||0,i=a.height()||c.quantity(b.height).value||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},c.createLabel=function(a,d,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=d,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=b.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",c.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,c.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",c.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(b[h/2]));return f}}(window,document,a),function(a,b,c){"use strict";c.Interpolation={},c.Interpolation.none=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(b=h[0].pathCoordinates,g=h[0].valueData,b.length<=4)return c.Interpolation.none()(b,g);for(var j,k=(new c.Svg.Path).move(b[0],b[1],!1,g[0]),l=0,m=b.length;m-2*!j>l;l+=2){var n=[{x:+b[l-2],y:+b[l-1]},{x:+b[l],y:+b[l+1]},{x:+b[l+2],y:+b[l+3]},{x:+b[l+4],y:+b[l+5]}];j?l?m-4===l?n[3]={x:+b[0],y:+b[1]}:m-2===l&&(n[2]={x:+b[0],y:+b[1]},n[3]={x:+b[2],y:+b[3]}):n[0]={x:+b[m-2],y:+b[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+b[l],y:+b[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return c.Interpolation.none()([])}},c.Interpolation.monotoneCubic=function(a){var b={fillHoles:!1};return a=c.extend({},b,a),function d(b,e){var f=c.splitIntoSegments(b,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(g)}if(b=f[0].pathCoordinates,e=f[0].valueData,b.length<=4)return c.Interpolation.none()(b,e);var h,i,j=[],k=[],l=b.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new c.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(c){var h=i.elem("path",{d:c.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:b.normalized.series[g],path:c.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d;a.distributeSeries?(b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),b.normalized.series=b.normalized.series.map(function(a){return[a]})):b=c.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars&&0!==b.normalized.series.length){var i=c.serialMap(b.normalized.series,function(){ -return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=c.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=c.getHighLow(b.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?b.normalized.labels.slice(0,1):b.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,c.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,b.normalized.series,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,b.normalized.series,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,b.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,b.normalized.series,o,c.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&c.createGridBackground(e,o,a.classNames.gridBackground,this.eventEmitter),b.raw.series.forEach(function(d,e){var f,h,i=e-(b.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/b.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/b.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":c.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),b.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,b.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,b.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,b.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,b.normalized.series[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=c.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(c.isNumeric).join(","),"ct:meta":c.serialize(w)}),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=c.normalizeData(this.data),k=[],l=a.startAngle;this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=c.quantity(a.donutWidth);"%"===m.unit&&(m.value*=f/100),f-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?f:"center"===a.labelPosition?0:a.donutSolid?f-m.value/2:f/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(b=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,g){if(0!==j.normalized.series[g]||!a.ignoreEmptyValues){k[g].attr({"ct:series-name":e.name}),k[g].addClass([a.classNames.series,e.className||a.classNames.series+"-"+c.alphaNumerate(g)].join(" "));var p=i>0?l+j.normalized.series[g]/i*360:0,q=Math.max(0,l-(0===g||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=c.polarToCartesian(n.x,n.y,f,q),v=c.polarToCartesian(n.x,n.y,f,p),w=new c.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(f,f,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=f-m.value,r=c.polarToCartesian(n.x,n.y,t,l-(0===g||o?0:.2)),s=c.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[g].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[g],"ct:meta":c.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[g],totalDataSum:i,index:g,meta:e.meta,series:e,group:k[g],element:y,path:w.clone(),center:n,radius:f,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:c.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!c.isFalseyButZero(j.normalized.labels[g])?j.normalized.labels[g]:j.normalized.series[g];var B=a.labelInterpolationFnc(A,g);if(B||0===B){var C=b.elem("text",{dx:z.x,dy:z.y,"text-anchor":d(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:g,group:b,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define("Chartist",[],function(){return a.Chartist=b()}):"object"==typeof module&&module.exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.11.4"};return function(a,b){"use strict";var c=a.window,d=a.document;b.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},b.noop=function(a){return a},b.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},b.extend=function(a){var c,d,e;for(a=a||{},c=1;c":">",'"':""","'":"'"},b.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(b.escapingMap).reduce(function(a,c){return b.replaceAll(a,c,b.escapingMap[c])},a))},b.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(b.escapingMap).reduce(function(a,c){return b.replaceAll(a,b.escapingMap[c],c)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(c){}return a},b.createSvg=function(a,c,d,e){var f;return c=c||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS(b.namespaces.xmlns,"ct")}).forEach(function(b){a.removeChild(b)}),f=new b.Svg("svg").attr({width:c,height:d}).addClass(e),f._node.style.width=c,f._node.style.height=d,a.appendChild(f._node),f},b.normalizeData=function(a,c,d){var e,f={raw:a,normalized:{}};return f.normalized.series=b.getDataArray({series:a.series||[]},c,d),e=f.normalized.series.every(function(a){return a instanceof Array})?Math.max.apply(null,f.normalized.series.map(function(a){return a.length})):f.normalized.series.length,f.normalized.labels=(a.labels||[]).slice(),Array.prototype.push.apply(f.normalized.labels,b.times(Math.max(0,e-f.normalized.labels.length)).map(function(){return""})),c&&b.reverseData(f.normalized),f},b.safeHasProperty=function(a,b){return null!==a&&"object"==typeof a&&a.hasOwnProperty(b)},b.isDataHoleValue=function(a){return null===a||void 0===a||"number"==typeof a&&isNaN(a)},b.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&c0?f.low=0:(f.high=1,f.low=0)),f},b.isNumeric=function(a){return null!==a&&isFinite(a)},b.isFalseyButZero=function(a){return!a&&0!==a},b.getNumberOrUndefined=function(a){return b.isNumeric(a)?+a:void 0},b.isMultiValue=function(a){return"object"==typeof a&&("x"in a||"y"in a)},b.getMultiValue=function(a,c){return b.isMultiValue(a)?b.getNumberOrUndefined(a[c||"y"]):b.getNumberOrUndefined(a)},b.rho=function(a){function b(a,c){return a%c===0?c:b(c,a%c)}function c(a){return a*a+1}if(1===a)return a;var d,e=2,f=2;if(a%2===0)return 2;do e=c(e)%a,f=c(c(f))%a,d=b(Math.abs(e-f),a);while(1===d);return d},b.getBounds=function(a,c,d,e){function f(a,b){return a===(a+=b)&&(a*=1+(b>0?o:-o)),a}var g,h,i,j=0,k={high:c.high,low:c.low};k.valueRange=k.high-k.low,k.oom=b.orderOfMagnitude(k.valueRange),k.step=Math.pow(10,k.oom),k.min=Math.floor(k.low/k.step)*k.step,k.max=Math.ceil(k.high/k.step)*k.step,k.range=k.max-k.min,k.numberOfSteps=Math.round(k.range/k.step);var l=b.projectLength(a,k.step,k),m=l=d)k.step=1;else if(e&&n=d)k.step=n;else for(;;){if(m&&b.projectLength(a,k.step,k)<=d)k.step*=2;else{if(m||!(b.projectLength(a,k.step/2,k)>=d))break;if(k.step/=2,e&&k.step%1!==0){k.step*=2;break}}if(j++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}var o=2.221e-16;for(k.step=Math.max(k.step,o),h=k.min,i=k.max;h+k.step<=k.low;)h=f(h,k.step);for(;i-k.step>=k.high;)i=f(i,-k.step);k.min=h,k.max=i,k.range=k.max-k.min;var p=[];for(g=k.min;g<=k.max;g=f(g,k.step)){var q=b.roundWithPrecision(g);q!==p[p.length-1]&&p.push(q)}return k.values=p,k},b.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},b.createChartRect=function(a,c,d){var e=!(!c.axisX&&!c.axisY),f=e?c.axisY.offset:0,g=e?c.axisX.offset:0,h=a.width()||b.quantity(c.width).value||0,i=a.height()||b.quantity(c.height).value||0,j=b.normalizePadding(c.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===c.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===c.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},b.createGrid=function(a,c,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",b.extend({type:"grid",axis:d,index:c,group:g,element:k},j))},b.createGridBackground=function(a,b,c,d){var e=a.elem("rect",{x:b.x1,y:b.y2,width:b.width(),height:b.height()},c,!0);d.emit("draw",{type:"gridBackground",group:a,element:e})},b.createLabel=function(a,c,e,f,g,h,i,j,k,l,m){var n,o={};if(o[g.units.pos]=a+i[g.units.pos],o[g.counterUnits.pos]=i[g.counterUnits.pos],o[g.units.len]=c,o[g.counterUnits.len]=Math.max(0,h-10),l){var p=d.createElement("span");p.className=k.join(" "),p.setAttribute("xmlns",b.namespaces.xhtml),p.innerText=f[e],p.style[g.units.len]=Math.round(o[g.units.len])+"px",p.style[g.counterUnits.len]=Math.round(o[g.counterUnits.len])+"px",n=j.foreignObject(p,b.extend({style:"overflow: visible;"},o))}else n=j.elem("text",o,k.join(" ")).text(f[e]);m.emit("draw",b.extend({type:"label",axis:g,index:e,group:j,element:n,text:f[e]},o))},b.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},b.optionsProvider=function(a,d,e){function f(a){var f=h;if(h=b.extend({},j),d)for(i=0;i=2&&a[h]<=a[h-2]&&(g=!0),g&&(f.push({pathCoordinates:[],valueData:[]}),g=!1),f[f.length-1].pathCoordinates.push(a[h],a[h+1]),f[f.length-1].valueData.push(c[h/2]));return f}}(this||global,a),function(a,b){"use strict";b.Interpolation={},b.Interpolation.none=function(a){var c={fillHoles:!1};return a=b.extend({},c,a),function(c,d){for(var e=new b.Svg.Path,f=!0,g=0;g1){var i=[];return h.forEach(function(a){i.push(f(a.pathCoordinates,a.valueData))}),b.Svg.Path.join(i)}if(c=h[0].pathCoordinates,g=h[0].valueData,c.length<=4)return b.Interpolation.none()(c,g);for(var j,k=(new b.Svg.Path).move(c[0],c[1],!1,g[0]),l=0,m=c.length;m-2*!j>l;l+=2){var n=[{x:+c[l-2],y:+c[l-1]},{x:+c[l],y:+c[l+1]},{x:+c[l+2],y:+c[l+3]},{x:+c[l+4],y:+c[l+5]}];j?l?m-4===l?n[3]={x:+c[0],y:+c[1]}:m-2===l&&(n[2]={x:+c[0],y:+c[1]},n[3]={x:+c[2],y:+c[3]}):n[0]={x:+c[m-2],y:+c[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+c[l],y:+c[l+1]}),k.curve(d*(-n[0].x+6*n[1].x+n[2].x)/6+e*n[2].x,d*(-n[0].y+6*n[1].y+n[2].y)/6+e*n[2].y,d*(n[1].x+6*n[2].x-n[3].x)/6+e*n[2].x,d*(n[1].y+6*n[2].y-n[3].y)/6+e*n[2].y,n[2].x,n[2].y,!1,g[(l+2)/2])}return k}return b.Interpolation.none()([])}},b.Interpolation.monotoneCubic=function(a){var c={fillHoles:!1};return a=b.extend({},c,a),function d(c,e){var f=b.splitIntoSegments(c,e,{fillHoles:a.fillHoles,increasingX:!0});if(f.length){if(f.length>1){var g=[];return f.forEach(function(a){g.push(d(a.pathCoordinates,a.valueData))}),b.Svg.Path.join(g)}if(c=f[0].pathCoordinates,e=f[0].valueData,c.length<=4)return b.Interpolation.none()(c,e);var h,i,j=[],k=[],l=c.length/2,m=[],n=[],o=[],p=[];for(h=0;h0!=n[h]>0?m[h]=0:(m[h]=3*(p[h-1]+p[h])/((2*p[h]+p[h-1])/n[h-1]+(p[h]+2*p[h-1])/n[h]),isFinite(m[h])||(m[h]=0));for(i=(new b.Svg.Path).move(j[0],k[0],!1,e[0]),h=0;h1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(b){var h=i.elem("path",{d:b.stringify()},a.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:c.normalized.series[g],path:b.clone(),series:e,seriesIndex:g,axisX:d,axisY:f,chartRect:j,index:g,group:i,element:h})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:f.bounds,chartRect:j,axisX:d,axisY:f,svg:this.svg,options:a})}function d(a,c,d,f){b.Line["super"].constructor.call(this,a,c,e,b.extend({},e,d),f)}var e=(a.window,a.document,{axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,showGridBackground:!1,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}});b.Line=b.Base.extend({constructor:d,createChart:c})}(this||global,a),function(a,b){"use strict";function c(a){var c,d;a.distributeSeries?(c=b.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),c.normalized.series=c.normalized.series.map(function(a){return[a]})):c=b.normalizeData(this.data,a.reverseData,a.horizontalBars?"x":"y"),this.svg=b.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var f=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup); +if(a.stackBars&&0!==c.normalized.series.length){var i=b.serialMap(c.normalized.series,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+(b&&b.x)||0,y:a.y+(b&&b.y)||0}},{x:0,y:0})});d=b.getHighLow([i],a,a.horizontalBars?"x":"y")}else d=b.getHighLow(c.normalized.series,a,a.horizontalBars?"x":"y");d.high=+a.high||(0===a.high?0:d.high),d.low=+a.low||(0===a.low?0:d.low);var j,k,l,m,n,o=b.createChartRect(this.svg,a,e.padding);k=a.distributeSeries&&a.stackBars?c.normalized.labels.slice(0,1):c.normalized.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new b.AutoScaleAxis(b.Axis.units.x,c.normalized.series,o,b.extend({},a.axisX,{highLow:d,referenceValue:0})):a.axisX.type.call(b,b.Axis.units.x,c.normalized.series,o,b.extend({},a.axisX,{highLow:d,referenceValue:0})),l=n=void 0===a.axisY.type?new b.StepAxis(b.Axis.units.y,c.normalized.series,o,{ticks:k}):a.axisY.type.call(b,b.Axis.units.y,c.normalized.series,o,a.axisY)):(l=m=void 0===a.axisX.type?new b.StepAxis(b.Axis.units.x,c.normalized.series,o,{ticks:k}):a.axisX.type.call(b,b.Axis.units.x,c.normalized.series,o,a.axisX),j=n=void 0===a.axisY.type?new b.AutoScaleAxis(b.Axis.units.y,c.normalized.series,o,b.extend({},a.axisY,{highLow:d,referenceValue:0})):a.axisY.type.call(b,b.Axis.units.y,c.normalized.series,o,b.extend({},a.axisY,{highLow:d,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(f,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(f,h,this.supportsForeignObject,a,this.eventEmitter),a.showGridBackground&&b.createGridBackground(f,o,a.classNames.gridBackground,this.eventEmitter),c.raw.series.forEach(function(d,e){var f,h,i=e-(c.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/c.normalized.series.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/c.normalized.series[e].length/2,h=g.elem("g"),h.attr({"ct:series-name":d.name,"ct:meta":b.serialize(d.meta)}),h.addClass([a.classNames.series,d.className||a.classNames.series+"-"+b.alphaNumerate(e)].join(" ")),c.normalized.series[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,c.normalized.series[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,c.normalized.series[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,c.normalized.series[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,c.normalized.series[e])},l instanceof b.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],!a.stackBars||"accumulate"!==a.stackMode&&a.stackMode?(v[l.counterUnits.pos+"1"]=p,v[l.counterUnits.pos+"2"]=r[l.counterUnits.pos]):(v[l.counterUnits.pos+"1"]=t,v[l.counterUnits.pos+"2"]=q[k]),v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1);var w=b.getMetaData(d,k);s=h.elem("line",v,a.classNames.bar).attr({"ct:value":[g.x,g.y].filter(b.isNumeric).join(","),"ct:meta":b.serialize(w)}),this.eventEmitter.emit("draw",b.extend({type:"bar",value:g,index:k,meta:w,series:d,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function d(a,c,d,f){b.Bar["super"].constructor.call(this,a,c,e,b.extend({},e,d),f)}var e=(a.window,a.document,{axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:b.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,referenceValue:0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,showGridBackground:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",gridBackground:"ct-grid-background",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}});b.Bar=b.Base.extend({constructor:d,createChart:c})}(this||global,a),function(a,b){"use strict";function c(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function d(a){var d,e,g,h,i,j=b.normalizeData(this.data),k=[],l=a.startAngle;this.svg=b.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=b.createChartRect(this.svg,a,f.padding),g=Math.min(e.width()/2,e.height()/2),i=a.total||j.normalized.series.reduce(function(a,b){return a+b},0);var m=b.quantity(a.donutWidth);"%"===m.unit&&(m.value*=g/100),g-=a.donut&&!a.donutSolid?m.value/2:0,h="outside"===a.labelPosition||a.donut&&!a.donutSolid?g:"center"===a.labelPosition?0:a.donutSolid?g-m.value/2:g/2,h+=a.labelOffset;var n={x:e.x1+e.width()/2,y:e.y2+e.height()/2},o=1===j.raw.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;j.raw.series.forEach(function(a,b){k[b]=this.svg.elem("g",null,null)}.bind(this)),a.showLabel&&(d=this.svg.elem("g",null,null)),j.raw.series.forEach(function(e,f){if(0!==j.normalized.series[f]||!a.ignoreEmptyValues){k[f].attr({"ct:series-name":e.name}),k[f].addClass([a.classNames.series,e.className||a.classNames.series+"-"+b.alphaNumerate(f)].join(" "));var p=i>0?l+j.normalized.series[f]/i*360:0,q=Math.max(0,l-(0===f||o?0:.2));p-q>=359.99&&(p=q+359.99);var r,s,t,u=b.polarToCartesian(n.x,n.y,g,q),v=b.polarToCartesian(n.x,n.y,g,p),w=new b.Svg.Path(!a.donut||a.donutSolid).move(v.x,v.y).arc(g,g,0,p-l>180,0,u.x,u.y);a.donut?a.donutSolid&&(t=g-m.value,r=b.polarToCartesian(n.x,n.y,t,l-(0===f||o?0:.2)),s=b.polarToCartesian(n.x,n.y,t,p),w.line(r.x,r.y),w.arc(t,t,0,p-l>180,1,s.x,s.y)):w.line(n.x,n.y);var x=a.classNames.slicePie;a.donut&&(x=a.classNames.sliceDonut,a.donutSolid&&(x=a.classNames.sliceDonutSolid));var y=k[f].elem("path",{d:w.stringify()},x);if(y.attr({"ct:value":j.normalized.series[f],"ct:meta":b.serialize(e.meta)}),a.donut&&!a.donutSolid&&(y._node.style.strokeWidth=m.value+"px"),this.eventEmitter.emit("draw",{type:"slice",value:j.normalized.series[f],totalDataSum:i,index:f,meta:e.meta,series:e,group:k[f],element:y,path:w.clone(),center:n,radius:g,startAngle:l,endAngle:p}),a.showLabel){var z;z=1===j.raw.series.length?{x:n.x,y:n.y}:b.polarToCartesian(n.x,n.y,h,l+(p-l)/2);var A;A=j.normalized.labels&&!b.isFalseyButZero(j.normalized.labels[f])?j.normalized.labels[f]:j.normalized.series[f];var B=a.labelInterpolationFnc(A,f);if(B||0===B){var C=d.elem("text",{dx:z.x,dy:z.y,"text-anchor":c(n,z,a.labelDirection)},a.classNames.label).text(""+B);this.eventEmitter.emit("draw",{type:"label",index:f,group:d,element:C,text:""+B,x:z.x,y:z.y})}}l=p}}.bind(this)),this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function e(a,c,d,e){b.Pie["super"].constructor.call(this,a,c,f,b.extend({},f,d),e)}var f=(a.window,a.document,{width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",sliceDonutSolid:"ct-slice-donut-solid",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutSolid:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:b.noop,labelDirection:"neutral",reverseData:!1,ignoreEmptyValues:!1});b.Pie=b.Base.extend({constructor:e,createChart:d,determineAnchorPosition:c})}(this||global,a),a}); From f0e9bc62a220a47b47019b384eeefee7225cb397 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Mon, 18 Nov 2019 19:41:54 +0100 Subject: [PATCH 06/27] deactivate all plugins function --- bl-kernel/functions.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/bl-kernel/functions.php b/bl-kernel/functions.php index 38f52871..f033eff4 100644 --- a/bl-kernel/functions.php +++ b/bl-kernel/functions.php @@ -251,6 +251,24 @@ function deactivatePlugin($pluginClassName) { return false; } +function deactivateAllPlugin() { + global $plugins; + global $syslog; + global $L; + + // Check if the plugin exists + foreach ($plugins['all'] as $plugin) { + if ($plugin->uninstall()) { + // Add to syslog + $syslog->add(array( + 'dictionaryKey'=>'plugin-deactivated', + 'notes'=>$plugin->name() + )); + } + } + return false; +} + function changePluginsPosition($pluginClassList) { global $plugins; global $syslog; From 8b025ebe81efe0cf08f63d3c5b428f1c609d68f2 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Mon, 18 Nov 2019 20:17:27 +0100 Subject: [PATCH 07/27] Include Disk usage --- bl-kernel/admin/views/about.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bl-kernel/admin/views/about.php b/bl-kernel/admin/views/about.php index 734b70d0..61ea5c75 100644 --- a/bl-kernel/admin/views/about.php +++ b/bl-kernel/admin/views/about.php @@ -31,6 +31,11 @@ echo ''; echo ''; echo ''; +echo ''; +echo ''; +echo ''; +echo ''; + echo ''; echo ''; echo ''; From b510c59babd19b77c8e92e7ff054a4982f9e2498 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Mon, 18 Nov 2019 20:18:29 +0100 Subject: [PATCH 08/27] Improve date modified returns --- bl-kernel/pagex.class.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bl-kernel/pagex.class.php b/bl-kernel/pagex.class.php index 08da653b..d7b5cc45 100644 --- a/bl-kernel/pagex.class.php +++ b/bl-kernel/pagex.class.php @@ -122,9 +122,14 @@ class Page { } // Returns the date according to locale settings and format settings - public function dateModified() + public function dateModified($format=false) { - return $this->getValue('dateModified'); + $dateRaw = $this->getValue('dateModified'); + if ($format===false) { + global $site; + $format = $site->dateFormat(); + } + return Date::format($dateRaw, DB_DATE_FORMAT, $format); } // Returns the username who created the page From 4eb81c775c1c8300b04c052d83d4ec81f4552065 Mon Sep 17 00:00:00 2001 From: ethan42411 Date: Sun, 24 Nov 2019 11:21:00 +0800 Subject: [PATCH 09/27] Update zh_TW.json (20191124-1) 20191124-1 --- bl-languages/zh_TW.json | 266 ++++++++++++++++++++-------------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/bl-languages/zh_TW.json b/bl-languages/zh_TW.json index 83413c75..5e9e428e 100644 --- a/bl-languages/zh_TW.json +++ b/bl-languages/zh_TW.json @@ -2,9 +2,9 @@ "language-data": { "native": "Traditional Chinese (Taiwan)", "english-name": "Traditional Chinese", - "last-update": "2015-12-10", + "last-update": "2019-11-24", "authors": [ - "Ethan Chen http:\/\/single4.ml", + "Ethan Chen http:\/\/ethan42411.ml", "", "", "" @@ -51,87 +51,87 @@ }, "dashboard": "主頁面", "manage-users": "管理使用者", - "manage-categories": "Manage categories", + "manage-categories": "管理分類", "general-settings": "一般設定", "advanced-settings": "進階設定", - "thanks-for-supporting-bludit": "Thanks for support Bludit", - "upgrade-to-bludit-pro": "Upgrade to Bludit PRO", + "thanks-for-supporting-bludit": "感謝支持Bludit", + "upgrade-to-bludit-pro": "升級至Bludit PRO", "language": "語言", - "plugin": "Plugin", + "plugin": "延伸模組", "plugins": "延伸模組", - "developers": "Developers", + "developers": "開發者", "themes": "佈景主題", "about": "關於", - "url": "URL", - "welcome": "Welcome", + "url": "網址", + "welcome": "歡迎", "logout": "登出", "website": "網站", "publish": "發表", "manage": "管理", "content": "內容", - "category": "Category", - "categories": "Categories", + "category": "分類", + "categories": "分類", "users": "使用者", "settings": "設定", "general": "一般設定", "advanced": "進階設定", - "new-content": "New content", - "manage-content": "Manage content", - "add-new-content": "Add new content", - "new-category": "New category", + "new-content": "新內容", + "manage-content": "管理內容", + "add-new-content": "增加新內容", + "new-category": "新增分類", "you-do-not-have-sufficient-permissions": "您沒有權限存取此頁面,請聯絡管理員", "add-a-new-user": "新增使用者", - "url-associated-with-the-content": "URL associated with the content.", + "url-associated-with-the-content": "與內容關聯的網址.", "language-and-timezone": "語言與時區", "change-your-language-and-region-settings": "更改您所使用的語言與地區設定", - "notifications": "Notifications", - "plugin-activated": "Plugin activated", - "plugin-deactivated": "Plugin deactivated", - "new-theme-configured": "New theme configured", - "settings-changes": "Changes on settings", - "plugin-configured": "Plugin configured", + "notifications": "通知", + "plugin-activated": "延伸模組已啟用", + "plugin-deactivated": "延伸模組已關閉", + "new-theme-configured": "新佈景主題已設定", + "settings-changes": "變更設定", + "plugin-configured": "延伸模組已設定", "welcome-to-bludit": "歡迎使用Bludit", "statistics": "統計", "drafts": "草稿", "title": "標題", "save": "儲存", - "save-as-draft": "Save as draft", + "save-as-draft": "儲存成草稿", "cancel": "取消", "description": "簡介", "this-field-can-help-describe-the-content": "這個欄位可以幫助快速理解內容,不能超過150個字", "images": "圖片", "error": "錯誤", "supported-image-file-types": "可以上傳的檔案格式", - "cover-image": "Cover image", + "cover-image": "封面圖片", "drag-and-drop-or-click-here": "拖曳您的圖片到這裡或是點選這裡選擇圖片", - "there-are-no-images": "There are no images", - "upload-and-more-images": "Upload and more images", - "click-on-the-image-for-options": "Click on the image for options.", - "click-here-to-cancel": "Click here to cancel.", + "there-are-no-images": "目前沒有圖片", + "upload-and-more-images": "上傳更多圖片", + "click-on-the-image-for-options": "點選圖片來進行設定", + "click-here-to-cancel": "點選此處來取消", "insert-image": "插入圖片", - "set-as-cover-image": "Set as cover image", - "delete-image": "Delete image", + "set-as-cover-image": "設為封面圖片", + "delete-image": "刪除圖片", "tags": "標籤", "add": "新增", "status": "狀態", "published": "已發表", "draft": "草稿", "empty-title": "空白標題", - "empty": "empty", + "empty": "空白", "date": "日期", - "external-cover-image": "External cover image", + "external-cover-image": "外部封面圖片", "parent": "繼承頁面", - "full-image-url": "Full image URL.", - "this-field-is-used-when-you-order-the-content-by-position": "This field is used when you order the content by position.", + "full-image-url": "全圖網址", + "this-field-is-used-when-you-order-the-content-by-position": "當您依照位置排序內容,此欄位將會被使用", "position": "位置", "friendly-url": "友善網址", "image-description": "Image description", - "add-a-new-category": "Add a new category", + "add-a-new-category": "新增一個新分類", "name": "名稱", "username": "使用者名稱", "first-name": "名", "last-name": "姓", - "to-schedule-the-content-select-the-date-and-time": "To schedule the content select the date and time, the status has to be set to \"Published\".", + "to-schedule-the-content-select-the-date-and-time": "選取時間日期來進行此內容發表排程,狀態必須設定成\"發表\"", "email": "Email", "role": "角色", "registered": "已註冊", @@ -144,7 +144,7 @@ "you-can-add-a-site-description-to-provide": "您可以新增一段簡短的簡介來介紹您的網站", "footer-text": "頁尾文字", "you-can-add-a-small-text-on-the-bottom": "您可以在每一頁的頁尾放置一些短短的文字,例如: 版權、所有人、日期...", - "social-networks-links": "Social networks links", + "social-networks-links": "社群網站連結", "site-url": "網站網址", "email-account-settings": "Email帳戶設定", "sender-email": "寄件者email", @@ -156,40 +156,40 @@ "locale": "區域", "date-and-time-formats": "日期與時間格式", "date-format": "日期格式", - "current-format": "Current format", + "current-format": "目前格式", "version": "版本", "author": "作者", "activate": "啟用", "deactivate": "關閉", - "edit-category": "Edit category", + "edit-category": "編輯分類", "delete": "刪除", "password": "使用者密碼", "confirm-password": "確認密碼", "editor": "作者", "administrator": "管理員", "edit-user": "編輯使用者", - "edit-content": "Edit content", + "edit-content": "編輯內容", "profile": "個人檔案", "change-password": "更改密碼", "enabled": "啟用", - "disable-the-user": "Disable the user", + "disable-the-user": "停用此使用者", "profile-picture": "大頭貼", - "edit-or-delete-your-categories": "Edit or delete your categories", - "create-a-new-category-to-organize-your-content": "Create a new category to organize your content", + "edit-or-delete-your-categories": "編輯或刪除您的分類", + "create-a-new-category-to-organize-your-content": "新增一個新的分類來組織您的內容", "confirm-delete-this-action-cannot-be-undone": "確認刪除? 這個動作不可復原", - "do-you-want-to-disable-the-user": "Do you want to disable the user ?", + "do-you-want-to-disable-the-user": "您確定要停用此使用者嗎?", "new-password": "新密碼", "you-can-change-this-field-when-save-the-current-changes": "You can change this field when save the current changes.", - "items-per-page": "Items per page", + "items-per-page": "每頁的項目", "invite-a-friend-to-collaborate-on-your-site": "Invite a friend to collaborate on your site", - "number-of-items-to-show-per-page": "Number of items to show per page.", - "website-or-blog": "Website or Blog", + "number-of-items-to-show-per-page": "每頁顯示多少項目", + "website-or-blog": "網站或是部落格", "order-content-by": "Order content By", "edit-or-delete-content-from-your-site": "Edit or delete content from your site", "order-the-content-by-date-to-build-a-blog": "Order the content by date to build a Blog or order the content by position to build a Website.", - "page-not-found-content": "Hey! look like the page doesn't exist.", - "page-not-found": "Page not found", - "predefined-pages": "Predefined pages", + "page-not-found-content": "嘿! 這看起來像是不存在此頁面", + "page-not-found": "找不到此頁面", + "predefined-pages": "預先定義頁面", "returning-page-when-the-page-doesnt-exist": "Returning page when the page doesn't exist, leave it blank if you want to returns a default message.", "returning-page-for-the-main-page": "Returning page for the main page, leave it blank if you want to show all the pages on the main page.", "full-url-of-your-site": "Full URL of your site. Complete with the protocol HTTP or HTTPS (only if you have enabled SSL on your server).", @@ -203,76 +203,76 @@ "login": "登入", "back-to-login-form": "返回登入畫面", "get-login-access-code": "獲得登入存取碼", - "email-access-code": "Email access code", + "email-access-code": "Email存取碼", "whats-next": "接下來", "username-or-password-incorrect": "使用者帳號或密碼不正確", "follow-bludit-on": "Follow Bludit on", "this-is-a-brief-description-of-yourself-our-your-site": "這是關於您的自己或是網站的簡短介紹,如果想要修改介紹,請至管理介面\/設定\/延伸模組,設定一個名為關於的延伸模組。", - "new-version-available": "New version available", - "new-category-created": "New category created", - "category-deleted": "Category deleted", - "category-edited": "Category edited", - "new-user-created": "New user created", - "user-edited": "User edited", + "new-version-available": "有新版本可以使用", + "new-category-created": "新分類已建立", + "category-deleted": "分類已刪除", + "category-edited": "分類已編輯", + "new-user-created": "新使用者已建立", + "user-edited": "使用者已編輯", "user-deleted": "使用者已刪除", "recommended-for-recovery-password-and-notifications": "Recommended for recovery password and notifications.", "authentication-token": "Authentication Token", "token": "Token", - "current-status": "Current status", + "current-status": "目前狀態", "upload-image": "上傳圖片", "the-changes-have-been-saved": "變更已經儲存", - "label": "Label", - "links": "Links", + "label": "標籤", + "links": "連結", "this-title-is-almost-always-used-in-the-sidebar-of-the-site": "This title is almost always used in the sidebar of the site.", "password-must-be-at-least-6-characters-long": "密碼長度必須在6字元以上", "ip-address-has-been-blocked": "IP 位址已被封鎖", "try-again-in-a-few-minutes": "請過幾分鐘後再試", "content-published-from-scheduler": "Content published from scheduler", - "blog": "Blog", - "complete-all-fields": "Complete all fields", - "static": "Static", - "about-your-site-or-yourself": "About your site or yourself", - "homepage": "Homepage", - "disabled": "Disabled", + "blog": "部落格", + "complete-all-fields": "完成所有欄位", + "static": "靜態", + "about-your-site-or-yourself": "關於您的網站或您自己", + "homepage": "首頁", + "disabled": "停用", "to-enable-the-user-you-must-set-a-new-password": "To enable the user you must set a new password.", "delete-the-user-and-associate-his-content-to-admin-user": "Delete the user and associate his content to admin user", "delete-the-user-and-all-his-content": "Delete the user and all his content", - "user-disabled": "User disabled", - "user-password-changed": "User password changed", + "user-disabled": "使用者已經停用", + "user-password-changed": "使用者密碼已變更", "the-password-and-confirmation-password-do-not-match": "The password and confirmation password do not match", - "scheduled-content": "Scheduled content", - "there-are-no-scheduled-content": "There are no scheduled content.", - "new-content-created": "New content created", - "content-edited": "Content edited", - "content-deleted": "Contente deleted", - "undefined": "Undefined", - "create-new-content-for-your-site": "Create new content for your site", + "scheduled-content": "已排程的內容", + "there-are-no-scheduled-content": "目前沒有排程發表的內容", + "new-content-created": "新內容已建立", + "content-edited": "內容已編輯", + "content-deleted": "內容已刪除", + "undefined": "未定義", + "create-new-content-for-your-site": "為您的網站建立新的內容", "order-items-by": "Order items by", - "all-content": "All content", - "dynamic": "Dynamic", - "type": "Type", - "draft-content": "Draft content", - "post": "Post", - "default": "Default", - "latest-content": "Latest content", - "default-message": "Default message", + "all-content": "全部內容", + "dynamic": "動態", + "type": "類型", + "draft-content": "草稿內容", + "post": "發表", + "default": "預設", + "latest-content": "最新內容", + "default-message": "預設訊息", "no-parent": "No parent", "have-you-seen-my-ball": "Have you seen my ball?", "pagebreak": "Page break", "pages": "頁面", "this-plugin-may-not-be-supported-by-this-version-of-bludit": "This plugin may not be supported by this version of Bludit", "previous": "Previous", - "previous-page": "Previous page", - "next-page": "Next page", - "scheduled": "Scheduled", + "previous-page": "上一頁", + "next-page": "下一頁", + "scheduled": "已排程", "this-token-is-similar-to-a-password-it-should-not-be-shared": "This token is similar to a password, it should not be shared.", "congratulations-you-have-successfully-installed-your-bludit": "Congratulations you have successfully installed your **Bludit**", "this-theme-may-not-be-supported-by-this-version-of-bludit": "This theme may not be supported by this version of Bludit", - "read-more": "Read more", - "remember-me": "Remember me", - "plugins-position": "Plugin position", + "read-more": "閱讀更多", + "remember-me": "記住我", + "plugins-position": "延伸模組放置位置", "plugins-sorted": "Plugins sorted", - "plugins-position-changed": "Plugin position changed", + "plugins-position-changed": "延伸模組放置位置已變更", "drag-and-drop-to-set-the-position-of-the-plugin": "Drag and Drop to set the position of the plugins", "change-the-position-of-the-plugins": "Change the position of the plugins", "reading-time": "Reading time", @@ -287,15 +287,15 @@ "example-page-3-slug": "follow-bludit", "example-page-3-title": "Follow Bludit", "example-page-3-content": "Get information about news, new releases, new themes or new plugins on our social networks Facebook<\/a>, Twitter<\/a> and YouTube<\/a> or visit our Blog<\/a>.", - "example-page-4-slug": "about", - "example-page-4-title": "About", + "example-page-4-slug": "關於", + "example-page-4-title": "關於", "example-page-4-content": "Your About page is typically one of the most visited pages on your site, need to be simple with a few key things, such as your name, who are you, how can contact you, a small story, etc.", "the-extension-zip-is-not-installed": "The extension zip is not installed, to use this plugin you need to install the extension.", "there-are-no-sticky-pages-at-this-moment": "There are no sticky pages at this moment.", "there-are-no-scheduled-pages-at-this-moment": "There are no scheduled pages at this moment.", - "update": "Update", - "template": "Template", - "nickname": "Nickname", + "update": "更新", + "template": "範本", + "nickname": "暱稱", "disable-user": "Disable user", "delete-user-and-keep-content": "Delete user and keep content", "delete-user-and-delete-content": "Delete user and delete content (Warning)", @@ -308,13 +308,13 @@ "are-you-sure-you-want-to-delete-this-page": "Are you sure you want to delete this page?", "sticky": "Sticky", "actions": "Actions", - "edit": "Edit", - "options": "Options", - "enter-title": "Enter title", + "edit": "編輯", + "options": "選項", + "enter-title": "請輸入標題", "media-manager": "Media Manager", "set-a-cover-image-from-external-url,-such-as-a-cdn-or-some-server-dedicated-for-images": "Set a cover image from an external URL, such as a CDN or some server dedicated for images.", - "user": "User", - "date-format-format": "Date format: YYYY-MM-DD Hours:Minutes:Seconds<\/code>", + "user": "使用者", + "date-format-format": "日期格式: YYYY-MM-DD Hours:Minutes:Seconds<\/code>", "start-typing-a-page-title-to-see-a-list-of-suggestions": "Start typing a page title to see a list of suggestions.", "field-used-when-ordering-content-by-position": "Field used when ordering content by position", "write-a-template-name-to-filter-the-page-in-the-theme-and-change-the-style-of-the-page": "Write a template name to filter the page in the theme and change the style of the page.", @@ -325,29 +325,29 @@ "this-tells-search-engines-not-to-follow-links-on-this-page": "This tells search engines not to follow links on this page.", "apply-code-noarchive-code-to-this-page": "Apply noarchive<\/code> to this page.", "this-tells-search-engines-not-to-save-a-cached-copy-of-this-page": "This tells search engines not to save a cached copy of this page.", - "uncategorized": "Uncategorized", - "done": "Done", - "delete-category": "Delete category", - "are-you-sure-you-want-to-delete-this-category?": "Are you sure you want to delete this category?", - "confirm-new-password": "Confirm new password", + "uncategorized": "未分類", + "done": "完成", + "delete-category": "刪除分類", + "are-you-sure-you-want-to-delete-this-category?": "您確定想要刪除此分類嗎?", + "confirm-new-password": "確認新密碼", "the-nickname-is-almost-used-in-the-themes-to-display-the-author-of-the-content": "The nickname is almost used in the themes to display the author of the content", "allow-unicode": "Allow Unicode", "allow-unicode-characters-in-the-url-and-some-part-of-the-system": "Allow Unicode characters in the URL and some part of the system.", "variables-allowed": "Variables allowed", - "tag": "Tag", - "drag-and-drop-to-sort-the-plugins": "Drag and Drop to sort the plugins.", + "tag": "標籤", + "drag-and-drop-to-sort-the-plugins": "拖放來排序延伸模組", "seo": "SEO", - "documentation": "Documentation", - "forum-support": "Forum support", - "chat-support": "Chat support", - "quick-links": "Quick links", + "documentation": "文件", + "forum-support": "支援討論區", + "chat-support": "支援聊天室", + "quick-links": "快速連結", "leave-empty-for-autocomplete-by-bludit": "Leave empty for autocomplete by Bludit.", "choose-a-password-for-the-user-admin": "Choose a password for the user admin<\/code>", "access-denied": "Access denied", "choose-images-to-upload": "Choose images to upload", - "insert": "Insert", - "upload": "Upload", - "autosave": "Autosave", + "insert": "插入", + "upload": "上傳", + "autosave": "自動儲存", "the-content-is-saved-as-a-draft-to-publish-it": "The content is saved as a draft. To publish it click on the button Publish<\/b> or if you still working on it click on Save as draft<\/b>.", "site": "Site", "first": "First", @@ -355,23 +355,23 @@ "there-are-no-pages-at-this-moment": "There are no pages at this moment.", "there-are-no-static-pages-at-this-moment": "There are no static pages at this moment.", "there-are-no-draft-pages-at-this-moment": "There are no draft pages at this moment.", - "good-morning": "Good morning", - "good-afternoon": "Good afternoon", - "good-evening": "Good evening", - "good-night": "Good night", - "hello": "Hello", + "good-morning": "早安", + "good-afternoon": "下午好", + "good-evening": "晚上好", + "good-night": "晚安", + "hello": "您好", "there-are-no-images-for-the-page": "There are no images for the page.", - "select-cover-image": "Select cover image", + "select-cover-image": "選取一個封面照片", "this-plugin-depends-on-the-following-plugins": "This plugin depends on the following plugins.", "no-pages-found": "No pages found", - "system-updated": "System updated", - "security": "Security", + "system-updated": "系統已更新", + "security": "安全", "remove-cover-image": "Remove cover image", - "width": "Width", - "height": "Height", - "quality": "Quality", - "thumbnails": "Thumbnails", - "thumbnail": "Thumbnail", + "width": "寬", + "height": "高", + "quality": "品質", + "thumbnails": "縮圖", + "thumbnail": "縮圖", "thumbnail-width-in-pixels": "Thumbnail width in pixels (px).", "thumbnail-height-in-pixels": "Thumbnail height in pixels (px).", "thumbnail-quality-in-percentage": "Thumbnail quality in percentage (%).", @@ -380,12 +380,12 @@ "page-content": "Page content", "markdown-parser": "Markdown parser", "site-logo": "Site logo", - "search": "Search", - "search-plugins": "Search plugins", - "enabled-plugins": "Enabled plugins", - "disabled-plugins": "Disabled plugins", - "remove-logo": "Remove logo", - "preview": "Preview", + "search": "搜尋", + "search-plugins": "搜尋延伸模組", + "enabled-plugins": "啟用延伸模組", + "disabled-plugins": "關閉延伸模組", + "remove-logo": "移除logo", + "preview": "預覽", "author-can-write-and-edit-their-own-content": "Author: Can write and edit their own content. Editor: Can write and edit the content of others.", "custom-fields": "Custom fields", "define-custom-fields-for-the-content": "Define custom fields for the content. Learn more about custom fields in the documentation<\/a>.", From 5ac88f0daaccfa9fcc276397c82071b6bfa0ae6d Mon Sep 17 00:00:00 2001 From: ethan42411 Date: Sun, 24 Nov 2019 11:53:41 +0800 Subject: [PATCH 10/27] Update zh_TW.json (20191124-2) 20191124-2 --- bl-languages/zh_TW.json | 126 ++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/bl-languages/zh_TW.json b/bl-languages/zh_TW.json index 5e9e428e..556bef9b 100644 --- a/bl-languages/zh_TW.json +++ b/bl-languages/zh_TW.json @@ -18,13 +18,13 @@ "Fri": "Fri", "Sat": "Sat", "Sun": "Sun", - "Monday": "Monday", - "Tuesday": "Tuesday", - "Wednesday": "Wednesday", - "Thursday": "Thursday", - "Friday": "Friday", - "Saturday": "Saturday", - "Sunday": "Sunday", + "Monday": "星期一", + "Tuesday": "星期二", + "Wednesday": "星期三", + "Thursday": "星期四", + "Friday": "星期五", + "Saturday": "星期六", + "Sunday": "星期日", "Jan": "Jan", "Feb": "Feb", "Mar": "Mar", @@ -36,18 +36,18 @@ "Oct": "Oct", "Nov": "Nov", "Dec": "Dec", - "January": "January", - "February": "February", - "March": "March", - "April": "April", - "May": "May", - "June": "June", - "July": "July", - "August": "August", - "September": "September", - "October": "October", - "November": "November", - "December": "December" + "January": "一月", + "February": "二月", + "March": "三月", + "April": "四月", + "May": "五月", + "June": "六月", + "July": "七月", + "August": "八月", + "September": "九月", + "October": "十月", + "November": "十一月", + "December": "十二月" }, "dashboard": "主頁面", "manage-users": "管理使用者", @@ -125,7 +125,7 @@ "this-field-is-used-when-you-order-the-content-by-position": "當您依照位置排序內容,此欄位將會被使用", "position": "位置", "friendly-url": "友善網址", - "image-description": "Image description", + "image-description": "圖片描述", "add-a-new-category": "新增一個新分類", "name": "名稱", "username": "使用者名稱", @@ -179,21 +179,21 @@ "confirm-delete-this-action-cannot-be-undone": "確認刪除? 這個動作不可復原", "do-you-want-to-disable-the-user": "您確定要停用此使用者嗎?", "new-password": "新密碼", - "you-can-change-this-field-when-save-the-current-changes": "You can change this field when save the current changes.", + "you-can-change-this-field-when-save-the-current-changes": "當儲存目前變更時,您可以修改此欄位", "items-per-page": "每頁的項目", - "invite-a-friend-to-collaborate-on-your-site": "Invite a friend to collaborate on your site", + "invite-a-friend-to-collaborate-on-your-site": "邀請您的朋友一同合作管理您的網站", "number-of-items-to-show-per-page": "每頁顯示多少項目", "website-or-blog": "網站或是部落格", - "order-content-by": "Order content By", - "edit-or-delete-content-from-your-site": "Edit or delete content from your site", - "order-the-content-by-date-to-build-a-blog": "Order the content by date to build a Blog or order the content by position to build a Website.", + "order-content-by": "依序甚麼規格排序內容", + "edit-or-delete-content-from-your-site": "從您的網站編輯或刪除內容", + "order-the-content-by-date-to-build-a-blog": "依照時間排序建構一個部落個或使用位置排序來建構一個網站", "page-not-found-content": "嘿! 這看起來像是不存在此頁面", "page-not-found": "找不到此頁面", "predefined-pages": "預先定義頁面", - "returning-page-when-the-page-doesnt-exist": "Returning page when the page doesn't exist, leave it blank if you want to returns a default message.", - "returning-page-for-the-main-page": "Returning page for the main page, leave it blank if you want to show all the pages on the main page.", - "full-url-of-your-site": "Full URL of your site. Complete with the protocol HTTP or HTTPS (only if you have enabled SSL on your server).", - "with-the-locales-you-can-set-the-regional-user-interface": "With the locales, you can set the regional user interface, such as the dates in your language. The locales need to be installed on your system.", + "returning-page-when-the-page-doesnt-exist": "當頁面不存在時,則導向此頁面。如果您想要顯示預設訊息,則請保持空白", + "returning-page-for-the-main-page": "返回主頁面的頁面。如果您想要在主頁面顯示全部的頁面,請保持空白", + "full-url-of-your-site": "網站的完整網址,包含http或是https(僅有在伺服器已啟用SSL的情況下)", + "with-the-locales-you-can-set-the-regional-user-interface": "語言環境,您可以設定區域使用者介面語言,或是您所在當地的日期格式,當然語言檔案必須被安裝於系統上", "bludit-installer": "Bludit 安裝程式", "choose-your-language": "選擇您所使用的語言", "next": "下一步", @@ -206,7 +206,7 @@ "email-access-code": "Email存取碼", "whats-next": "接下來", "username-or-password-incorrect": "使用者帳號或密碼不正確", - "follow-bludit-on": "Follow Bludit on", + "follow-bludit-on": "追蹤Bludit", "this-is-a-brief-description-of-yourself-our-your-site": "這是關於您的自己或是網站的簡短介紹,如果想要修改介紹,請至管理介面\/設定\/延伸模組,設定一個名為關於的延伸模組。", "new-version-available": "有新版本可以使用", "new-category-created": "新分類已建立", @@ -215,7 +215,7 @@ "new-user-created": "新使用者已建立", "user-edited": "使用者已編輯", "user-deleted": "使用者已刪除", - "recommended-for-recovery-password-and-notifications": "Recommended for recovery password and notifications.", + "recommended-for-recovery-password-and-notifications": "建議用於恢復密碼與通知訊息", "authentication-token": "Authentication Token", "token": "Token", "current-status": "目前狀態", @@ -223,23 +223,23 @@ "the-changes-have-been-saved": "變更已經儲存", "label": "標籤", "links": "連結", - "this-title-is-almost-always-used-in-the-sidebar-of-the-site": "This title is almost always used in the sidebar of the site.", + "this-title-is-almost-always-used-in-the-sidebar-of-the-site": "該標題通常會被在網站的側邊欄", "password-must-be-at-least-6-characters-long": "密碼長度必須在6字元以上", "ip-address-has-been-blocked": "IP 位址已被封鎖", "try-again-in-a-few-minutes": "請過幾分鐘後再試", - "content-published-from-scheduler": "Content published from scheduler", + "content-published-from-scheduler": "內容已透過排程發表", "blog": "部落格", "complete-all-fields": "完成所有欄位", "static": "靜態", "about-your-site-or-yourself": "關於您的網站或您自己", "homepage": "首頁", "disabled": "停用", - "to-enable-the-user-you-must-set-a-new-password": "To enable the user you must set a new password.", - "delete-the-user-and-associate-his-content-to-admin-user": "Delete the user and associate his content to admin user", - "delete-the-user-and-all-his-content": "Delete the user and all his content", + "to-enable-the-user-you-must-set-a-new-password": "必須設定新密碼才能啟用此使用者", + "delete-the-user-and-associate-his-content-to-admin-user": "刪除此使用者,並將他所建立的內容關連到管理員帳號", + "delete-the-user-and-all-his-content": "刪除此使用者與其所有內容", "user-disabled": "使用者已經停用", "user-password-changed": "使用者密碼已變更", - "the-password-and-confirmation-password-do-not-match": "The password and confirmation password do not match", + "the-password-and-confirmation-password-do-not-match": "密碼和確認密碼不匹配", "scheduled-content": "已排程的內容", "there-are-no-scheduled-content": "目前沒有排程發表的內容", "new-content-created": "新內容已建立", @@ -247,7 +247,7 @@ "content-deleted": "內容已刪除", "undefined": "未定義", "create-new-content-for-your-site": "為您的網站建立新的內容", - "order-items-by": "Order items by", + "order-items-by": "依照什麼規則排序", "all-content": "全部內容", "dynamic": "動態", "type": "類型", @@ -256,58 +256,58 @@ "default": "預設", "latest-content": "最新內容", "default-message": "預設訊息", - "no-parent": "No parent", - "have-you-seen-my-ball": "Have you seen my ball?", + "no-parent": "無繼承", + "have-you-seen-my-ball": "您有看到我的球嗎?", "pagebreak": "Page break", "pages": "頁面", - "this-plugin-may-not-be-supported-by-this-version-of-bludit": "This plugin may not be supported by this version of Bludit", - "previous": "Previous", + "this-plugin-may-not-be-supported-by-this-version-of-bludit": "此延伸模組可能不支援此版本的Bludit", + "previous": "較早之前", "previous-page": "上一頁", "next-page": "下一頁", "scheduled": "已排程", - "this-token-is-similar-to-a-password-it-should-not-be-shared": "This token is similar to a password, it should not be shared.", - "congratulations-you-have-successfully-installed-your-bludit": "Congratulations you have successfully installed your **Bludit**", - "this-theme-may-not-be-supported-by-this-version-of-bludit": "This theme may not be supported by this version of Bludit", + "this-token-is-similar-to-a-password-it-should-not-be-shared": "此token類似於密碼,因此它不應該被公開分享", + "congratulations-you-have-successfully-installed-your-bludit": "恭喜,您已經成功安裝 **Bludit**", + "this-theme-may-not-be-supported-by-this-version-of-bludit": "此佈景主題可能不相容此版本的Bludit", "read-more": "閱讀更多", "remember-me": "記住我", "plugins-position": "延伸模組放置位置", "plugins-sorted": "Plugins sorted", "plugins-position-changed": "延伸模組放置位置已變更", - "drag-and-drop-to-set-the-position-of-the-plugin": "Drag and Drop to set the position of the plugins", - "change-the-position-of-the-plugins": "Change the position of the plugins", - "reading-time": "Reading time", - "minutes": "minutes", - "minute": "minute", + "drag-and-drop-to-set-the-position-of-the-plugin": "拖放來設定延伸模組的位置", + "change-the-position-of-the-plugins": "變更延伸模組的位置", + "reading-time": "閱讀時間", + "minutes": "分鐘", + "minute": "分鐘", "example-page-1-slug": "create-your-own-content", - "example-page-1-title": "Create your own content", - "example-page-1-content": "Start writing your own content or edit the current to fit your needs. To create, edit or remove content you need to login to the admin panel<\/a> with the username `admin` and the password you set on the installation process.", + "example-page-1-title": "建立屬於您自己的內容", + "example-page-1-content": "開始撰寫屬於您自己的內容,或是編輯目前的內容來符合您的需求。想要開始新增、編輯或是移除內容,您需要使用預設管理者帳號admin與安裝時設定的密碼來登入 管理頁面<\/a>。", "example-page-2-slug": "set-up-your-new-site", - "example-page-2-title": "Set up your new site", - "example-page-2-content": "Update the settings of your site from the admin panel<\/a>, you can change the title, description and the social networks from Settings > General<\/a>.", + "example-page-2-title": "設定您的新網站", + "example-page-2-content": "更新您的網站設定透過 管理頁面<\/a>,您可以透過 設定 > 一般設定<\/a>來變更網站標題、網站描述或是社群網站連結。", "example-page-3-slug": "follow-bludit", - "example-page-3-title": "Follow Bludit", - "example-page-3-content": "Get information about news, new releases, new themes or new plugins on our social networks Facebook<\/a>, Twitter<\/a> and YouTube<\/a> or visit our Blog<\/a>.", + "example-page-3-title": "追蹤 Bludit", + "example-page-3-content": "獲得更多關於新版本資訊、新佈景主題或是新的延伸模組,可以透過造訪我們的社群網站Facebook<\/a>, Twitter<\/a> 與 YouTube<\/a> 或是 部落格<\/a>。", "example-page-4-slug": "關於", "example-page-4-title": "關於", "example-page-4-content": "Your About page is typically one of the most visited pages on your site, need to be simple with a few key things, such as your name, who are you, how can contact you, a small story, etc.", "the-extension-zip-is-not-installed": "The extension zip is not installed, to use this plugin you need to install the extension.", "there-are-no-sticky-pages-at-this-moment": "There are no sticky pages at this moment.", - "there-are-no-scheduled-pages-at-this-moment": "There are no scheduled pages at this moment.", + "there-are-no-scheduled-pages-at-this-moment": "目前沒有排程發表的頁面", "update": "更新", "template": "範本", "nickname": "暱稱", - "disable-user": "Disable user", - "delete-user-and-keep-content": "Delete user and keep content", - "delete-user-and-delete-content": "Delete user and delete content (Warning)", + "disable-user": "停用使用者", + "delete-user-and-keep-content": "刪除使用者並保存其建立的內容", + "delete-user-and-delete-content": "刪除使用者並一並刪除其建立的內容(警告)", "social-networks": "Social Networks", "interval": "Interval", "number-in-minutes-for-every-execution-of-autosave": "Number in minutes for every execution of autosave.", "extreme-friendly-url": "Extreme friendly URL", "title-formats": "Title formats", - "delete-content": "Delete content", + "delete-content": "刪除內容", "are-you-sure-you-want-to-delete-this-page": "Are you sure you want to delete this page?", - "sticky": "Sticky", - "actions": "Actions", + "sticky": "便利貼", + "actions": "動作", "edit": "編輯", "options": "選項", "enter-title": "請輸入標題", From 9fff6afa0b8fcc8aa46c5cc0750e0725ead60bab Mon Sep 17 00:00:00 2001 From: ethan42411 Date: Sun, 24 Nov 2019 12:05:11 +0800 Subject: [PATCH 11/27] Update zh_TW.json (20191124-3) 20191124-3 --- bl-languages/zh_TW.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/bl-languages/zh_TW.json b/bl-languages/zh_TW.json index 556bef9b..68e29035 100644 --- a/bl-languages/zh_TW.json +++ b/bl-languages/zh_TW.json @@ -289,9 +289,9 @@ "example-page-3-content": "獲得更多關於新版本資訊、新佈景主題或是新的延伸模組,可以透過造訪我們的社群網站Facebook<\/a>, Twitter<\/a> 與 YouTube<\/a> 或是 部落格<\/a>。", "example-page-4-slug": "關於", "example-page-4-title": "關於", - "example-page-4-content": "Your About page is typically one of the most visited pages on your site, need to be simple with a few key things, such as your name, who are you, how can contact you, a small story, etc.", - "the-extension-zip-is-not-installed": "The extension zip is not installed, to use this plugin you need to install the extension.", - "there-are-no-sticky-pages-at-this-moment": "There are no sticky pages at this moment.", + "example-page-4-content": "您的關於頁面通常是網站頁面瀏覽率最多的頁面之一,需要一些簡單但關鍵的事情,像是您的名字、您是誰、如何聯絡到您,或是一個小故事...等等", + "the-extension-zip-is-not-installed": "擴充套件zip並沒有被安裝,使用此延伸模組必須先安裝此擴充套件", + "there-are-no-sticky-pages-at-this-moment": "目前沒有便利貼頁面", "there-are-no-scheduled-pages-at-this-moment": "目前沒有排程發表的頁面", "update": "更新", "template": "範本", @@ -299,23 +299,23 @@ "disable-user": "停用使用者", "delete-user-and-keep-content": "刪除使用者並保存其建立的內容", "delete-user-and-delete-content": "刪除使用者並一並刪除其建立的內容(警告)", - "social-networks": "Social Networks", - "interval": "Interval", - "number-in-minutes-for-every-execution-of-autosave": "Number in minutes for every execution of autosave.", - "extreme-friendly-url": "Extreme friendly URL", - "title-formats": "Title formats", + "social-networks": "社群網站", + "interval": "間隔", + "number-in-minutes-for-every-execution-of-autosave": "每次執行自動保存的分鐘數", + "extreme-friendly-url": "極其友好的網址", + "title-formats": "標題格式", "delete-content": "刪除內容", - "are-you-sure-you-want-to-delete-this-page": "Are you sure you want to delete this page?", + "are-you-sure-you-want-to-delete-this-page": "您確定想要刪除此頁面嗎?", "sticky": "便利貼", "actions": "動作", "edit": "編輯", "options": "選項", "enter-title": "請輸入標題", "media-manager": "Media Manager", - "set-a-cover-image-from-external-url,-such-as-a-cdn-or-some-server-dedicated-for-images": "Set a cover image from an external URL, such as a CDN or some server dedicated for images.", + "set-a-cover-image-from-external-url,-such-as-a-cdn-or-some-server-dedicated-for-images": "透過外部網址來設定封面圖片,像是CDN或是一些其他的伺服器空間來存放圖片", "user": "使用者", "date-format-format": "日期格式: YYYY-MM-DD Hours:Minutes:Seconds<\/code>", - "start-typing-a-page-title-to-see-a-list-of-suggestions": "Start typing a page title to see a list of suggestions.", + "start-typing-a-page-title-to-see-a-list-of-suggestions": "開始輸入頁面標題來查看建議列表", "field-used-when-ordering-content-by-position": "Field used when ordering content by position", "write-a-template-name-to-filter-the-page-in-the-theme-and-change-the-style-of-the-page": "Write a template name to filter the page in the theme and change the style of the page.", "write-the-tags-separated-by-commas": "Write the tags separated by comma.", @@ -331,8 +331,8 @@ "are-you-sure-you-want-to-delete-this-category?": "您確定想要刪除此分類嗎?", "confirm-new-password": "確認新密碼", "the-nickname-is-almost-used-in-the-themes-to-display-the-author-of-the-content": "The nickname is almost used in the themes to display the author of the content", - "allow-unicode": "Allow Unicode", - "allow-unicode-characters-in-the-url-and-some-part-of-the-system": "Allow Unicode characters in the URL and some part of the system.", + "allow-unicode": "允許Unicode", + "allow-unicode-characters-in-the-url-and-some-part-of-the-system": "允許在網址和系統的某些部份使用Unicode字符", "variables-allowed": "Variables allowed", "tag": "標籤", "drag-and-drop-to-sort-the-plugins": "拖放來排序延伸模組", @@ -341,10 +341,10 @@ "forum-support": "支援討論區", "chat-support": "支援聊天室", "quick-links": "快速連結", - "leave-empty-for-autocomplete-by-bludit": "Leave empty for autocomplete by Bludit.", - "choose-a-password-for-the-user-admin": "Choose a password for the user admin<\/code>", - "access-denied": "Access denied", - "choose-images-to-upload": "Choose images to upload", + "leave-empty-for-autocomplete-by-bludit": "留空來讓Bludit自動完成", + "choose-a-password-for-the-user-admin": "幫使用者admin<\/code>設定一組密碼", + "access-denied": "存取被拒", + "choose-images-to-upload": "選取圖片來進行上傳", "insert": "插入", "upload": "上傳", "autosave": "自動儲存", @@ -360,13 +360,13 @@ "good-evening": "晚上好", "good-night": "晚安", "hello": "您好", - "there-are-no-images-for-the-page": "There are no images for the page.", + "there-are-no-images-for-the-page": "此頁面沒有圖片", "select-cover-image": "選取一個封面照片", "this-plugin-depends-on-the-following-plugins": "This plugin depends on the following plugins.", - "no-pages-found": "No pages found", + "no-pages-found": "找不到頁面", "system-updated": "系統已更新", "security": "安全", - "remove-cover-image": "Remove cover image", + "remove-cover-image": "移除封面圖片", "width": "寬", "height": "高", "quality": "品質", From 033ba81da8ead4eb4d23a33513a0d81542bb83cd Mon Sep 17 00:00:00 2001 From: ethan42411 Date: Sun, 24 Nov 2019 13:23:27 +0800 Subject: [PATCH 12/27] Update zh_TW.json (20191124-4) 20191124-4 --- bl-languages/zh_TW.json | 60 ++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/bl-languages/zh_TW.json b/bl-languages/zh_TW.json index 68e29035..f0b96899 100644 --- a/bl-languages/zh_TW.json +++ b/bl-languages/zh_TW.json @@ -1,6 +1,6 @@ { "language-data": { - "native": "Traditional Chinese (Taiwan)", + "native": "繁體中文 (台灣Taiwan)", "english-name": "Traditional Chinese", "last-update": "2019-11-24", "authors": [ @@ -311,26 +311,26 @@ "edit": "編輯", "options": "選項", "enter-title": "請輸入標題", - "media-manager": "Media Manager", + "media-manager": "多媒體管理器", "set-a-cover-image-from-external-url,-such-as-a-cdn-or-some-server-dedicated-for-images": "透過外部網址來設定封面圖片,像是CDN或是一些其他的伺服器空間來存放圖片", "user": "使用者", "date-format-format": "日期格式: YYYY-MM-DD Hours:Minutes:Seconds<\/code>", "start-typing-a-page-title-to-see-a-list-of-suggestions": "開始輸入頁面標題來查看建議列表", - "field-used-when-ordering-content-by-position": "Field used when ordering content by position", - "write-a-template-name-to-filter-the-page-in-the-theme-and-change-the-style-of-the-page": "Write a template name to filter the page in the theme and change the style of the page.", - "write-the-tags-separated-by-commas": "Write the tags separated by comma.", - "apply-code-noindex-code-to-this-page": "Apply noindex<\/code> to this page.", - "this-tells-search-engines-not-to-show-this-page-in-their-search-results": "This tells search engines not to show this page in their search results.", - "apply-code-nofollow-code-to-this-page": "Apply nofollow<\/code> to this page.", - "this-tells-search-engines-not-to-follow-links-on-this-page": "This tells search engines not to follow links on this page.", - "apply-code-noarchive-code-to-this-page": "Apply noarchive<\/code> to this page.", - "this-tells-search-engines-not-to-save-a-cached-copy-of-this-page": "This tells search engines not to save a cached copy of this page.", + "field-used-when-ordering-content-by-position": "當使用位置排序時所使用的字段", + "write-a-template-name-to-filter-the-page-in-the-theme-and-change-the-style-of-the-page": "撰寫一個範本名稱來套用佈景主題中的頁面,並變更該頁面的風格", + "write-the-tags-separated-by-commas": "用逗號分隔標籤", + "apply-code-noindex-code-to-this-page": "在此頁面內使用 noindex<\/code>", + "this-tells-search-engines-not-to-show-this-page-in-their-search-results": "這將通知搜尋引擎不要將此頁面顯示於他們的搜尋結果", + "apply-code-nofollow-code-to-this-page": "在此頁面內使用 nofollow<\/code>", + "this-tells-search-engines-not-to-follow-links-on-this-page": "這將通知搜尋引擎不要關注此頁面中的連結", + "apply-code-noarchive-code-to-this-page": "在此頁面內使用 noarchive<\/code>", + "this-tells-search-engines-not-to-save-a-cached-copy-of-this-page": "這將會告知搜尋引擎不要將此頁面收錄至快取頁面", "uncategorized": "未分類", "done": "完成", "delete-category": "刪除分類", "are-you-sure-you-want-to-delete-this-category?": "您確定想要刪除此分類嗎?", "confirm-new-password": "確認新密碼", - "the-nickname-is-almost-used-in-the-themes-to-display-the-author-of-the-content": "The nickname is almost used in the themes to display the author of the content", + "the-nickname-is-almost-used-in-the-themes-to-display-the-author-of-the-content": "暱稱通常會被佈景主題用來顯示文章的作者", "allow-unicode": "允許Unicode", "allow-unicode-characters-in-the-url-and-some-part-of-the-system": "允許在網址和系統的某些部份使用Unicode字符", "variables-allowed": "Variables allowed", @@ -348,13 +348,13 @@ "insert": "插入", "upload": "上傳", "autosave": "自動儲存", - "the-content-is-saved-as-a-draft-to-publish-it": "The content is saved as a draft. To publish it click on the button Publish<\/b> or if you still working on it click on Save as draft<\/b>.", + "the-content-is-saved-as-a-draft-to-publish-it": "此內容已被儲存為草稿。可以透過點選發表<\/b>來發佈或是點選儲存為草稿<\/b>來繼續保持編輯狀態", "site": "Site", "first": "First", "last": "Last", - "there-are-no-pages-at-this-moment": "There are no pages at this moment.", - "there-are-no-static-pages-at-this-moment": "There are no static pages at this moment.", - "there-are-no-draft-pages-at-this-moment": "There are no draft pages at this moment.", + "there-are-no-pages-at-this-moment": "目前沒有頁面", + "there-are-no-static-pages-at-this-moment": "目前沒有靜態頁面", + "there-are-no-draft-pages-at-this-moment": "目前沒有草稿頁面", "good-morning": "早安", "good-afternoon": "下午好", "good-evening": "晚上好", @@ -362,7 +362,7 @@ "hello": "您好", "there-are-no-images-for-the-page": "此頁面沒有圖片", "select-cover-image": "選取一個封面照片", - "this-plugin-depends-on-the-following-plugins": "This plugin depends on the following plugins.", + "this-plugin-depends-on-the-following-plugins": "此延伸模組相依以下其他延伸模組", "no-pages-found": "找不到頁面", "system-updated": "系統已更新", "security": "安全", @@ -372,23 +372,23 @@ "quality": "品質", "thumbnails": "縮圖", "thumbnail": "縮圖", - "thumbnail-width-in-pixels": "Thumbnail width in pixels (px).", - "thumbnail-height-in-pixels": "Thumbnail height in pixels (px).", - "thumbnail-quality-in-percentage": "Thumbnail quality in percentage (%).", - "maximum-load-file-size-allowed:": "Maximum load file size allowed:", - "file-type-is-not-supported": "File type is not supported. Allowed types:", - "page-content": "Page content", - "markdown-parser": "Markdown parser", - "site-logo": "Site logo", + "thumbnail-width-in-pixels": "縮圖的寬像素 (px).", + "thumbnail-height-in-pixels": "縮圖的高像素 (px).", + "thumbnail-quality-in-percentage": "縮圖品質百分比 (%).", + "maximum-load-file-size-allowed:": "最大允許載入檔案大小:", + "file-type-is-not-supported": "此檔案類型不被支援,允許的類型為:", + "page-content": "頁面內容", + "markdown-parser": "Markdown 解析器", + "site-logo": "網站logo", "search": "搜尋", "search-plugins": "搜尋延伸模組", "enabled-plugins": "啟用延伸模組", "disabled-plugins": "關閉延伸模組", "remove-logo": "移除logo", "preview": "預覽", - "author-can-write-and-edit-their-own-content": "Author: Can write and edit their own content. Editor: Can write and edit the content of others.", - "custom-fields": "Custom fields", - "define-custom-fields-for-the-content": "Define custom fields for the content. Learn more about custom fields in the documentation<\/a>.", - "start-typing-to-see-a-list-of-suggestions": "Start typing to see a list of suggestions.", - "view": "View" + "author-can-write-and-edit-their-own-content": "作者: 可以撰寫或編輯他們自己的內容。 編輯: 可以撰寫或編輯其他人的內容", + "custom-fields": "自訂欄位", + "define-custom-fields-for-the-content": "自行定義內容的欄位。欲學習如何自訂欄位,請造訪文件<\/a>.", + "start-typing-to-see-a-list-of-suggestions": "開始輸入以查看建議列表", + "view": "查看" } \ No newline at end of file From 0268cd0a727170804a3dd4fa55b7f8217e13c768 Mon Sep 17 00:00:00 2001 From: ethan42411 Date: Sun, 24 Nov 2019 13:26:05 +0800 Subject: [PATCH 13/27] Update zh_TW.json (20191124-5) 20191124-5 --- bl-languages/zh_TW.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bl-languages/zh_TW.json b/bl-languages/zh_TW.json index f0b96899..7bfd1cd3 100644 --- a/bl-languages/zh_TW.json +++ b/bl-languages/zh_TW.json @@ -333,7 +333,7 @@ "the-nickname-is-almost-used-in-the-themes-to-display-the-author-of-the-content": "暱稱通常會被佈景主題用來顯示文章的作者", "allow-unicode": "允許Unicode", "allow-unicode-characters-in-the-url-and-some-part-of-the-system": "允許在網址和系統的某些部份使用Unicode字符", - "variables-allowed": "Variables allowed", + "variables-allowed": "可用的變數", "tag": "標籤", "drag-and-drop-to-sort-the-plugins": "拖放來排序延伸模組", "seo": "SEO", From bbf59daef342063c291eb1a733804c370efe555e Mon Sep 17 00:00:00 2001 From: hide-me <45032974+hide-me@users.noreply.github.com> Date: Mon, 25 Nov 2019 16:22:56 +0300 Subject: [PATCH 14/27] Translated new strings to Russian You added the string "view" but not added "edit" from the same part of code. Also, the status of any pages from smart search can't be translated cuz u again not added it. Sorry that I was absent for a long time --- bl-languages/ru_RU.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bl-languages/ru_RU.json b/bl-languages/ru_RU.json index 2b09252a..346e64ab 100644 --- a/bl-languages/ru_RU.json +++ b/bl-languages/ru_RU.json @@ -388,8 +388,8 @@ "remove-logo": "Удалить логотип", "preview": "Предпросмотр", "author-can-write-and-edit-their-own-content": "Автор: Может писать и редактировать собственные записи. Редактор: может писать и редактировать как свои записи, так и других пользователей.", - "custom-fields": "Custom fields", - "define-custom-fields-for-the-content": "Define custom fields for the content. Learn more about custom fields in the documentation<\/a>.", - "start-typing-to-see-a-list-of-suggestions": "Start typing to see a list of suggestions.", - "view": "View" -} \ No newline at end of file + "custom-fields": "Настраиваемые поля", + "define-custom-fields-for-the-content": "Определите настраиваемые поля для содержимого. Узнайте больше о пользовательских полях в документации<\/a> (только на английском).", + "start-typing-to-see-a-list-of-suggestions": "Начните писать, чтобы увидеть список подсказок.", + "view": "Просмотр" +} From 7c8bad72c574b1d2a3cd1b499f7672e231973ea3 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Sat, 7 Dec 2019 14:24:13 +0100 Subject: [PATCH 15/27] Improve search plugin and add support for UTF8 to Fuzz algorithm --- bl-plugins/search/plugin.php | 5 ++-- bl-plugins/search/vendors/fuzz.php | 46 +++++++++++++++--------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/bl-plugins/search/plugin.php b/bl-plugins/search/plugin.php index a183c1ee..9985fcae 100644 --- a/bl-plugins/search/plugin.php +++ b/bl-plugins/search/plugin.php @@ -116,7 +116,7 @@ EOF; global $url; // Change the whereAmI to avoid load pages in the rule 69.pages - // This is only for performance propose + // This is only for performance purpose $url->setWhereAmI('search'); // Get the string to search from the URL @@ -125,7 +125,6 @@ EOF; // Search the string in the cache and get all pages with matches $list = $this->search($stringToSearch); - $this->numberOfItems = count($list); // Split the content in pages @@ -220,7 +219,7 @@ EOF; // Inlcude Fuzz algorithm require_once($this->phpPath().'vendors/fuzz.php'); $fuzz = new Fuzz($cache, 10, 1, true); - $results = $fuzz->search($text, 3); + $results = $fuzz->search($text, 5); return(array_keys($results)); } diff --git a/bl-plugins/search/vendors/fuzz.php b/bl-plugins/search/vendors/fuzz.php index c1ab7761..72c5eaf7 100644 --- a/bl-plugins/search/vendors/fuzz.php +++ b/bl-plugins/search/vendors/fuzz.php @@ -125,8 +125,8 @@ class Fuzz { $suffix = []; $result = 0; - $n = strlen($source); - $m = strlen($target); + $n = mb_strlen($source, CHARSET); + $m = mb_strlen($target, CHARSET); for ($i = 0; $i <= $n; $i++) { for ($j = 0; $j <= $m; $j++) { @@ -155,8 +155,8 @@ class Fuzz public function getLevenshtein($source, $target) { $matrix = []; - $n = strlen($source); - $m = strlen($target); + $n = mb_strlen($source, CHARSET); + $m = mb_strlen($target, CHARSET); if ($n === 0) { return $m; @@ -208,35 +208,35 @@ class Fuzz $shorter; $longer; - if (strlen($first) > strlen($second)) { - $longer = strtolower($first); - $shorter = strtolower($second); + if (mb_strlen($first, CHARSET) > mb_strlen($second, CHARSET)) { + $longer = mb_strtolower($first, CHARSET); + $shorter = mb_strtolower($second, CHARSET); } else { - $longer = strtolower($second); - $shorter = strtolower($first); + $longer = mb_strtolower($second, CHARSET); + $shorter = mb_strtolower($first, CHARSET); } // Get half the length distance of shorter string - $halfLen = intval((strlen($shorter) / 2) + 1); + $halfLen = intval((mb_strlen($shorter,CHARSET) / 2) + 1); $match1 = $this->_getCharMatch($shorter, $longer, $halfLen); $match2 = $this->_getCharMatch($longer, $shorter, $halfLen); - if ((strlen($match1) == 0 || strlen($match2) == 0) - || (strlen($match1) != strlen($match2)) + if ((mb_strlen($match1, CHARSET) == 0 || mb_strlen($match2, CHARSET) == 0) + || (mb_strlen($match1, CHARSET) != mb_strlen($match2, CHARSET)) ) { return 0.0; } $trans = $this->_getTranspositions($match1, $match2); - $distance = (strlen($match1) / strlen($shorter) - + strlen($match2) / strlen($longer) - + (strlen($match1) - $trans) - / strlen($match1)) / 3.0; + $distance = (mb_strlen($match1, CHARSET) / mb_strlen($shorter, CHARSET) + + mb_strlen($match2, CHARSET) / mb_strlen($longer, CHARSET) + + (mb_strlen($match1, CHARSET) - $trans) + / mb_strlen($match1, CHARSET)) / 3.0; // Apply Winkler Adjustment - $prefixLen = min(strlen($this->_getPrefix($first, $second)), 4); + $prefixLen = min(mb_strlen($this->_getPrefix($first, $second),CHARSET), 4); $jaroWinkler = round(($distance + (0.1 * $prefixLen * (1.0 - $distance))) * 100.0) / 100.0; return $jaroWinkler; @@ -255,8 +255,8 @@ class Fuzz { $common = ''; $copy = $second; - $firstLen = strlen($first); - $secondLen = strlen($second); + $firstLen = mb_strlen($first, CHARSET); + $secondLen = mb_strlen($second, CHARSET); for ($i = 0; $i < $firstLen; $i++) { $char = $first[$i]; @@ -285,7 +285,7 @@ class Fuzz private function _getTranspositions($first, $second) { $trans = 0; - $firstLen = strlen($first); + $firstLen = mb_strlen($first, CHARSET); for ($i = 0; $i < $firstLen; $i++) { if ($first[$i] != $second[$i]) { @@ -307,7 +307,7 @@ class Fuzz */ private function _getPrefix($first, $second) { - if (strlen($first) == 0 || strlen($second) == 0) { + if (mb_strlen($first, CHARSET) == 0 || mb_strlen($second, CHARSET) == 0) { return ''; } @@ -317,7 +317,7 @@ class Fuzz } elseif ($index == 0) { return ''; } else { - return substr($first, 0, $index); + return mb_substr($first, 0, $index, CHARSET); } } @@ -335,7 +335,7 @@ class Fuzz return -1; } - $maxLen = min(strlen($first), strlen($second)); + $maxLen = min(mb_strlen($first, CHARSET), mb_strlen($second, CHARSET)); for ($i = 0; $i < $maxLen; $i++) { if ($first[$i] != $second[$i]) { return $i; From bc4f532b9740945d5b155bcf2cd491ae2599acbc Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Sat, 7 Dec 2019 14:32:39 +0100 Subject: [PATCH 16/27] add support for vk.com social network --- bl-kernel/helpers/theme.class.php | 3 ++- bl-kernel/site.class.php | 6 ++++++ bl-kernel/user.class.php | 6 ++++++ bl-kernel/users.class.php | 3 ++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/bl-kernel/helpers/theme.class.php b/bl-kernel/helpers/theme.class.php index c446d846..cf74099e 100644 --- a/bl-kernel/helpers/theme.class.php +++ b/bl-kernel/helpers/theme.class.php @@ -13,7 +13,8 @@ class Theme { 'instagram'=>'Instagram', 'codepen'=>'Codepen', 'linkedin'=>'Linkedin', - 'mastodon'=>'Mastodon' + 'mastodon'=>'Mastodon', + 'vk'=>'VK' ); foreach ($socialNetworks as $key=>$label) { diff --git a/bl-kernel/site.class.php b/bl-kernel/site.class.php index 7cc93e77..a42179f9 100644 --- a/bl-kernel/site.class.php +++ b/bl-kernel/site.class.php @@ -32,6 +32,7 @@ class Site extends dbJSON { 'linkedin'=> '', 'mastodon'=> '', 'dribbble'=> '', + 'vk'=> '', 'orderBy'=> 'date', // date or position 'extremeFriendly'=> true, 'autosaveInterval'=> 2, // minutes @@ -192,6 +193,11 @@ class Site extends dbJSON { return $this->getField('dribbble'); } + public function vk() + { + return $this->getField('vk'); + } + public function orderBy() { return $this->getField('orderBy'); diff --git a/bl-kernel/user.class.php b/bl-kernel/user.class.php index 75a6b746..0a50cc35 100644 --- a/bl-kernel/user.class.php +++ b/bl-kernel/user.class.php @@ -145,6 +145,11 @@ class User { return $this->getValue('mastodon'); } + public function vk() + { + return $this->getValue('vk'); + } + public function profilePicture() { $filename = $this->getValue('username').'.png'; @@ -169,6 +174,7 @@ class User { $tmp['gitlab'] = $this->gitlab(); $tmp['linkedin'] = $this->linkedin(); $tmp['mastodon'] = $this->mastodon(); + $tmp['vk'] = $this->vk(); $tmp['profilePicture'] = $this->profilePicture(); if ($returnsArray) { diff --git a/bl-kernel/users.class.php b/bl-kernel/users.class.php index b57899f9..1d9bd111 100644 --- a/bl-kernel/users.class.php +++ b/bl-kernel/users.class.php @@ -22,7 +22,8 @@ class Users extends dbJSON { 'github'=>'', 'gitlab'=>'', 'linkedin'=>'', - 'mastodon'=>'' + 'mastodon'=>'', + 'vk'=>'' ); function __construct() From ff57081e3add07357a9b551494c44b2787446a38 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Sat, 7 Dec 2019 14:35:38 +0100 Subject: [PATCH 17/27] add support for vk.com social network --- bl-kernel/admin/views/edit-user.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bl-kernel/admin/views/edit-user.php b/bl-kernel/admin/views/edit-user.php index 15bc463e..22415760 100644 --- a/bl-kernel/admin/views/edit-user.php +++ b/bl-kernel/admin/views/edit-user.php @@ -268,6 +268,15 @@ 'placeholder'=>'', 'tip'=>'' )); + + echo Bootstrap::formInputText(array( + 'name'=>'vk', + 'label'=>'VK', + 'value'=>$user->vk(), + 'class'=>'', + 'placeholder'=>'', + 'tip'=>'' + )); ?> From 95ae4e5061496bc42e296d7be584729582a69410 Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Sat, 7 Dec 2019 18:11:41 +0100 Subject: [PATCH 18/27] add view and edit to the langueage file --- bl-kernel/admin/views/dashboard.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bl-kernel/admin/views/dashboard.php b/bl-kernel/admin/views/dashboard.php index 9a5698a4..acd10438 100644 --- a/bl-kernel/admin/views/dashboard.php +++ b/bl-kernel/admin/views/dashboard.php @@ -66,8 +66,8 @@ html += ''; } From b67c6355a1d5d2598c33a1b538365d2a28c6722e Mon Sep 17 00:00:00 2001 From: Diego Najar Date: Sun, 8 Dec 2019 18:31:57 +0100 Subject: [PATCH 19/27] TinyMCE 5.1.3 --- .../tinymce/plugins/advlist/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/anchor/plugin.min.js | 2 +- .../tinymce/plugins/autolink/plugin.min.js | 4 ++-- .../tinymce/plugins/autoresize/plugin.min.js | 4 ++-- .../tinymce/plugins/autosave/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/bbcode/plugin.min.js | 2 +- .../tinymce/plugins/charmap/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/code/plugin.min.js | 2 +- .../tinymce/plugins/codesample/plugin.min.js | 2 +- .../tinymce/plugins/colorpicker/plugin.min.js | 2 +- .../tinymce/plugins/contextmenu/plugin.min.js | 2 +- .../tinymce/plugins/directionality/plugin.min.js | 2 +- .../tinymce/plugins/fullpage/plugin.min.js | 2 +- .../tinymce/plugins/fullscreen/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/help/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/hr/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/image/plugin.min.js | 4 ++-- .../tinymce/plugins/imagetools/plugin.min.js | 4 ++-- .../tinymce/plugins/importcss/plugin.min.js | 2 +- .../tinymce/plugins/insertdatetime/plugin.min.js | 2 +- .../tinymce/plugins/legacyoutput/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/link/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/lists/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/media/plugin.min.js | 4 ++-- .../tinymce/plugins/nonbreaking/plugin.min.js | 2 +- .../tinymce/plugins/noneditable/plugin.min.js | 2 +- .../tinymce/plugins/pagebreak/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/paste/plugin.min.js | 4 ++-- .../tinymce/plugins/preview/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/print/plugin.min.js | 4 ++-- .../tinymce/plugins/quickbars/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/save/plugin.min.js | 2 +- .../tinymce/plugins/searchreplace/plugin.min.js | 4 ++-- .../tinymce/plugins/spellchecker/plugin.min.js | 2 +- .../tinymce/plugins/tabfocus/plugin.min.js | 2 +- .../tinymce/tinymce/plugins/table/plugin.min.js | 4 ++-- .../tinymce/plugins/template/plugin.min.js | 2 +- .../tinymce/plugins/textcolor/plugin.min.js | 2 +- .../tinymce/plugins/textpattern/plugin.min.js | 4 ++-- .../tinymce/tinymce/plugins/toc/plugin.min.js | 2 +- .../tinymce/plugins/visualblocks/plugin.min.js | 4 ++-- .../tinymce/plugins/visualchars/plugin.min.js | 4 ++-- .../tinymce/plugins/wordcount/plugin.min.js | 2 +- .../skins/ui/oxide-dark/content.inline.min.css | 2 +- .../tinymce/skins/ui/oxide-dark/skin.min.css | 2 +- .../skins/ui/oxide/content.inline.min.css | 2 +- .../tinymce/tinymce/skins/ui/oxide/skin.min.css | 2 +- .../tinymce/skins/ui/oxide/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../tinymce/tinymce/themes/mobile/theme.min.js | 4 ++-- .../tinymce/tinymce/themes/silver/theme.min.js | 4 ++-- bl-plugins/tinymce/tinymce/tinymce.min.js | 4 ++-- 51 files changed, 71 insertions(+), 71 deletions(-) delete mode 100755 bl-plugins/tinymce/tinymce/skins/ui/oxide/tinymce-mobile.woff diff --git a/bl-plugins/tinymce/tinymce/plugins/advlist/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/advlist/plugin.min.js index eb7a9de2..98807029 100755 --- a/bl-plugins/tinymce/tinymce/plugins/advlist/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/advlist/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(){"use strict";function n(){}function o(n){return function(){return n}}function t(){return d}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},i=function(e){e.addCommand("ApplyUnorderedListStyle",function(n,t){l(e,"UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(n,t){l(e,"OL",t["list-style-type"])})},c=function(n){var t=n.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return t?t.split(/[ ,]/):[]},s=function(n){var t=n.getParam("advlist_bullet_styles","default,circle,square");return t?t.split(/[ ,]/):[]},f=o(!1),a=o(!0),d=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:a,getOr:m,getOrThunk:p,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:m,orThunk:p,map:t,each:n,bind:t,exists:f,forall:a,filter:t,equals:g,equals_:g,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(e),e);function g(n){return n.isNone()}function p(n){return n()}function m(n){return n}function y(n,t,e){var r=function(n,t){for(var e=0;ey(e)&&(i=o+g);var l=p(e);l&&ly(e)&&(i=o+g);var l=z(e);if(l&&l]*>((\xa0| |[ \t]|]*>)+?|)|
$","i").test(e)}function i(t){var e=parseInt(v.getItem(o(t)+"time"),10)||0;return!((new Date).getTime()-e>function(t){return r(t.settings.autosave_retention,"20m")}(t))||(g(t,!1),!1)}function u(t){var e=o(t);!a(t)&&t.isDirty()&&(v.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),v.setItem(e+"time",(new Date).getTime().toString()),function(t){t.fire("StoreDraft")}(t))}function s(t){var e=o(t);i(t)&&(t.setContent(v.getItem(e+"draft"),{format:"raw"}),function(t){t.fire("RestoreDraft")}(t))}function c(t,e){var n=function(t){return r(t.settings.autosave_interval,"30s")}(t);e.get()||(m.setInterval(function(){t.removed||u(t)},n),e.set(!0))}function f(t){t.undoManager.transact(function(){s(t),g(t)}),t.focus()}var l=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return l(e())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=tinymce.util.Tools.resolve("tinymce.util.Delay"),v=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=function(t,e){var n=o(t);v.removeItem(n+"draft"),v.removeItem(n+"time"),!1!==e&&function(t){t.fire("RemoveDraft")}(t)};function y(r){for(var o=[],t=1;t(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/(.*?)<\/font>/gi,"$1"),o(//gi,"[img]$1[/img]"),o(/(.*?)<\/span>/gi,"[code]$1[/code]"),o(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/(.*?)<\/span>/gi,"[u]$1[/u]"),o(//gi,"[u]"),o(/]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/
/gi,"\n"),o(//gi,"\n"),o(/
/gi,"\n"),o(/

/gi,""),o(/<\/p>/gi,"\n"),o(/ |\u00a0/gi," "),o(/"/gi,'"'),o(/</gi,"<"),o(/>/gi,">"),o(/&/gi,"&"),t},i=function(t){t=e.trim(t);function o(o,e){t=t.replace(o,e)}return o(/\n/gi,"
"),o(/\[b\]/gi,""),o(/\[\/b\]/gi,""),o(/\[i\]/gi,""),o(/\[\/i\]/gi,""),o(/\[u\]/gi,""),o(/\[\/u\]/gi,""),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),o(/\[url\](.*?)\[\/url\]/gi,'$1'),o(/\[img\](.*?)\[\/img\]/gi,''),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),o(/\[code\](.*?)\[\/code\]/gi,'$1 '),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),t};!function n(){o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=i(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=i(o.content)),o.get&&(o.content=t(o.content))})})}()}(); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/charmap/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/charmap/plugin.min.js index 339de187..9adbda5d 100755 --- a/bl-plugins/tinymce/tinymce/plugins/charmap/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/charmap/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(c){"use strict";function n(){}function i(n){return function(){return n}}function e(){return m}var r,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(n,e){return n.fire("insertCustomChar",{chr:e})},u=function(n,e){var r=a(n,e).chr;n.execCommand("mceInsertContent",!1,r)},o=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(n){return n.settings.charmap},l=function(n){return n.settings.charmap_append},f=i(!1),g=i(!0),m=(r={fold:function(n,e){return n()},is:f,isSome:f,isNone:g,getOr:p,getOrThunk:d,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:p,orThunk:d,map:e,each:n,bind:e,exists:f,forall:g,filter:e,equals:h,equals_:h,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(r),r);function h(n){return n.isNone()}function d(n){return n()}function p(n){return n}function y(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e}(n)===e}}function w(n,e){for(var r=n.length,t=new Array(r),a=0;ae.length)break e;if(!(h instanceof a)){u.lastIndex=0;var m=u.exec(h);if(m){g&&(d=m[1].length);var b=m.index-1+d,y=b+(m=m[0].slice(d)).length,v=h.slice(0,b+1),k=h.slice(y+1),w=[f,1];v&&w.push(v);var x=new a(o,c?S.tokenize(m,c):m,p);w.push(x),k&&w.push(k),Array.prototype.splice.apply(r,w)}}}}}return r},hooks:{all:{},add:function(e,t){var n=S.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=S.hooks.all[e];if(n&&n.length)for(var a=0,r=void 0;r=n[a++];)r(t)}}},s=S.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(s.stringify=function(t,n,e){if("string"==typeof t)return t;if("Array"===S.util.type(t))return t.map(function(e){return s.stringify(e,n,t)}).join("");var a={type:t.type,content:s.stringify(t.content,n,e),tag:"span",classes:["token",t.type],attributes:{},language:n,parent:e};if("comment"===a.type&&(a.attributes.spellcheck="true"),t.alias){var r="Array"===S.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,r)}S.hooks.run("wrap",a);var i="";for(var o in a.attributes)i+=(i?" ":"")+o+'="'+(a.attributes[o]||"")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'" '+i+">"+a.content+""},!g.document)return g.addEventListener&&g.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,a=t.code,r=t.immediateClose;g.postMessage(S.highlight(a,S.languages[n],n)),r&&g.close()},!1),g.Prism}();void 0!==n&&(n.Prism=i),i.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),i.languages.xml=i.languages.markup,i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},i.languages.css.atrule.inside.rest=i.util.clone(i.languages.css),i.languages.markup&&(i.languages.insertBefore("markup","tag",{style:{pattern:/[\w\W]*?<\/style>/i,inside:{tag:{pattern:/|<\/style>/i,inside:i.languages.markup.tag.inside},rest:i.languages.css},alias:"language-css"}}),i.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:i.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:i.languages.css}},alias:"language-css"}},i.languages.markup.tag)),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),i.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),i.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.insertBefore("markup","tag",{script:{pattern:/[\w\W]*?<\/script>/i,inside:{tag:{pattern:/|<\/script>/i,inside:i.languages.markup.tag.inside},rest:i.languages.javascript},alias:"language-javascript"}}),i.languages.js=i.languages.javascript,i.languages.c=i.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0}}}}),delete i.languages.c["class-name"],delete i.languages.c["boolean"],i.languages.csharp=i.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+)\b/i}),i.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0}}),i.languages.cpp=i.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),i.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),i.languages.java=i.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),i.languages.php=i.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),i.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),i.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),i.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),i.languages.markup&&(i.hooks.add("before-highlight",function(t){"php"===t.language&&(t.tokenStack=[],t.backupCode=t.code,t.code=t.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(e){return t.tokenStack.push(e),"{{{PHP"+t.tokenStack.length+"}}}"}))}),i.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),i.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t=0,n=void 0;n=e.tokenStack[t];t++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(t+1)+"}}}",i.highlight(n,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),i.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),i.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:i.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(i);function a(){}function o(e){return function(){return e}}function s(){return f}var l,u={isCodeSample:function B(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")},trimArg:function M(n){return function(e,t){return n(t)}}},d=o(!1),p=o(!0),f=(l={fold:function(e,t){return e()},is:d,isSome:d,isNone:p,getOr:b,getOrThunk:m,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:b,orThunk:m,map:s,each:a,bind:s,exists:d,forall:p,filter:s,equals:h,equals_:h,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(l),l);function h(e){return e.isNone()}function m(e){return e()}function b(e){return e}function y(e){var t=e.selection?e.selection.getNode():null;return u.isCodeSample(t)?w.some(t):w.none()}var v,k=function(n){function e(){return r}function t(e){return e(n)}var a=o(n),r={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:p,isNone:d,getOr:a,getOrThunk:a,getOrDie:a,getOrNull:a,getOrUndefined:a,or:e,orThunk:e,map:function(e){return k(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?r:f},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(d,function(e){return t(n,e)})}};return r},w={some:k,none:s,from:function(e){return null===e||e===undefined?f:k(e)}},x=y,S=function(t,n,a){t.undoManager.transact(function(){var e=y(t);return a=r.DOM.encode(a),e.fold(function(){t.insertContent('

'+a+"
"),t.selection.select(t.$("#__new").removeAttr("id")[0])},function(e){t.dom.setAttrib(e,"class","language-"+n),e.innerHTML=a,i.highlightElement(e),t.selection.select(e)})})},A=function(e){return y(e).fold(function(){return""},function(e){return e.textContent})},C=function(e){return e.settings.codesample_languages},_=function(e){var t=C(e);return t||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}]},N=function(e,n){return x(e).fold(function(){return n},function(e){var t=e.className.match(/language-(\w+)/);return t?t[1]:n})},O=(v="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===v}),z=Array.prototype.slice,P=(O(Array.from)&&Array.from,function(n){var e=_(n),t=function(e){return 0===e.length?w.none():w.some(e[0])}(e).fold(function(){return""},function(e){return e.value}),a=N(n,t),r=A(n);n.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:e},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:a,code:r},onSubmit:function(e){var t=e.getData();S(n,t.language,t.code),e.close()}})}),W=function(t){t.addCommand("codesample",function(){var e=t.selection.getNode();t.selection.isCollapsed()||u.isCodeSample(e)?P(t):t.formatter.toggle("code")})},j=function(n){var r=n.$;n.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(u.trimArg(u.isCodeSample)).each(function(e,t){var n=r(t),a=t.textContent;n.attr("class",r.trim(n.attr("class"))),n.removeAttr("contentEditable"),n.empty().append(r("").each(function(){this.textContent=a}))})}),n.on("SetContent",function(){var e=r("pre").filter(u.trimArg(u.isCodeSample)).filter(function(e,t){return"false"!==t.contentEditable});e.length&&n.undoManager.transact(function(){e.each(function(e,t){r(t).find("br").each(function(e,t){t.parentNode.replaceChild(n.getDoc().createTextNode("\n"),t)}),t.contentEditable="false",t.innerHTML=n.dom.encode(t.textContent),i.highlightElement(t),t.className=r.trim(t.className)})})})},T=function(n){n.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return P(n)},onSetup:function(e){function t(){e.setActive(function(e){var t=e.selection.getStart();return e.dom.is(t,"pre.language-markup")}(n))}return n.on("NodeChange",t),function(){return n.off("NodeChange",t)}}}),n.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return P(n)}})};!function F(){e.add("codesample",function(t){j(t),T(t),W(t),t.on("dblclick",function(e){u.isCodeSample(e.target)&&P(t)})})}()}(window); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/colorpicker/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/colorpicker/plugin.min.js index 7a218ed7..e11153c5 100755 --- a/bl-plugins/tinymce/tinymce/plugins/colorpicker/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/colorpicker/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/contextmenu/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/contextmenu/plugin.min.js index 696f9298..5443e5c8 100755 --- a/bl-plugins/tinymce/tinymce/plugins/contextmenu/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/contextmenu/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(n){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager");!function e(){o.add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/directionality/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/directionality/plugin.min.js index e79bd290..513de872 100755 --- a/bl-plugins/tinymce/tinymce/plugins/directionality/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/directionality/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(i){"use strict";function n(){}function u(n){return function(){return n}}function t(){return a}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=function(n,t){var e,r=n.dom,o=n.selection.getSelectedBlocks();o.length&&(e=r.getAttrib(o[0],"dir"),c.each(o,function(n){r.getParent(n.parentNode,'*[dir="'+t+'"]',r.getRoot())||r.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},d=function(n){n.addCommand("mceDirectionLTR",function(){o(n,"ltr")}),n.addCommand("mceDirectionRTL",function(){o(n,"rtl")})},f=u(!1),l=u(!0),a=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:l,getOr:s,getOrThunk:N,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:s,orThunk:N,map:t,each:n,bind:t,exists:f,forall:l,filter:t,equals:m,equals_:m,toArray:function(){return[]},toString:u("none()")},Object.freeze&&Object.freeze(e),e);function m(n){return n.isNone()}function N(n){return n()}function s(n){return n}function g(n,t){var e=n.dom(),r=i.window.getComputedStyle(e).getPropertyValue(t),o=""!==r||function(n){var t=A(n)?n.dom().parentNode:n.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}(n)?r:w(e,t);return null===o?undefined:o}function T(t,r){return function(e){function n(n){var t=p.fromDom(n.element);e.setActive(function(n){return"rtl"===g(n,"direction")?"rtl":"ltr"}(t)===r)}return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}}var E,O,y=function(e){function n(){return o}function t(n){return n(e)}var r=u(e),o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:l,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return y(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?o:a},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return o},D=function(n){return null===n||n===undefined?a:y(n)},h=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:u(n)}},p={fromHtml:function(n,t){var e=(t||i.document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1")},b=f,n=function(t,e){var n,i,l=f(e),r={};function o(t,e){return t.attr(e)||""}return r.fontface=c(t),r.fontsize=u(t),7===(n=l.firstChild).type&&(r.xml_pi=!0,(i=/encoding="([^"]+)"/.exec(n.value))&&(r.docencoding=i[1])),(n=l.getAll("#doctype")[0])&&(r.doctype=""),(n=l.getAll("title")[0])&&n.firstChild&&(r.title=n.firstChild.value),p.each(l.getAll("meta"),function(t){var e,n=t.attr("name"),i=t.attr("http-equiv");n?r[n.toLowerCase()]=t.attr("content"):"Content-Type"===i&&(e=/charset\s*=\s*(.*)\s*/gi.exec(t.attr("content")))&&(r.docencoding=e[1])}),(n=l.getAll("html")[0])&&(r.langcode=o(n,"lang")||o(n,"xml:lang")),r.stylesheets=[],p.each(l.getAll("link"),function(t){"stylesheet"===t.attr("rel")&&r.stylesheets.push(t.attr("href"))}),(n=l.getAll("body")[0])&&(r.langdir=o(n,"dir"),r.style=o(n,"style"),r.visited_color=o(n,"vlink"),r.link_color=o(n,"link"),r.active_color=o(n,"alink")),r},x=function(t,r,e){var o,n,i,a,l,c=t.dom;function u(t,e,n){t.attr(e,n||undefined)}function s(t){n.firstChild?n.insert(t,n.firstChild):n.append(t)}o=f(e),(n=o.getAll("head")[0])||(a=o.getAll("html")[0],n=new h("head",1),a.firstChild?a.insert(n,a.firstChild,!0):a.append(n)),a=o.firstChild,r.xml_pi?(l='version="1.0"',r.docencoding&&(l+=' encoding="'+r.docencoding+'"'),7!==a.type&&(a=new h("xml",7),o.insert(a,o.firstChild,!0)),a.value=l):a&&7===a.type&&a.remove(),a=o.getAll("#doctype")[0],r.doctype?(a||(a=new h("#doctype",10),r.xml_pi?o.insert(a,o.firstChild):s(a)),a.value=r.doctype.substring(9,r.doctype.length-1)):a&&a.remove(),a=null,p.each(o.getAll("meta"),function(t){"Content-Type"===t.attr("http-equiv")&&(a=t)}),r.docencoding?(a||((a=new h("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,s(a)),a.attr("content","text/html; charset="+r.docencoding)):a&&a.remove(),a=o.getAll("title")[0],r.title?(a?a.empty():s(a=new h("title",1)),a.append(new h("#text",3)).value=r.title):a&&a.remove(),p.each("keywords,description,author,copyright,robots".split(","),function(t){var e,n,i=o.getAll("meta"),l=r[t];for(e=0;e"))},C=Object.prototype.hasOwnProperty,k=(o=function(t,e){return e},function(){for(var t=new Array(arguments.length),e=0;e/g,function(t,e){return unescape(e)})},T=p.each,O=function(t){var e,n="",i="";if(r(t)){var l=a(t);n+='\n'}return n+=_(t),n+="\n\n\n",(e=d(t))&&(n+=""+e+"\n"),(e=a(t))&&(n+='\n'),(e=c(t))&&(i+="font-family: "+e+";"),(e=u(t))&&(i+="font-size: "+e+";"),(e=s(t))&&(i+="color: "+e+";"),n+="\n\n"},D=function(e,n,i){e.on("BeforeSetContent",function(t){!function(t,e,n,i){var l,r,o,a,c="",u=t.dom;if(!(i.selection||(o=A(t.settings.protect,i.content),"raw"===i.format&&e.get()||i.source_view&&v(t)))){0!==o.length||i.source_view||(o=p.trim(e.get())+"\n"+p.trim(o)+"\n"+p.trim(n.get())),-1!==(l=(o=o.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("",l),e.set(g(o.substring(0,l+1))),-1===(r=o.indexOf("\n")),a=b(e.get()),T(a.getAll("style"),function(t){t.firstChild&&(c+=t.firstChild.value)});var s=a.getAll("body")[0];s&&u.setAttribs(t.getBody(),{style:s.attr("style")||"",dir:s.attr("dir")||"",vLink:s.attr("vlink")||"",link:s.attr("link")||"",aLink:s.attr("alink")||""}),u.remove("fullpage_styles");var d=t.getDoc().getElementsByTagName("head")[0];if(c)u.add(d,"style",{id:"fullpage_styles"}).appendChild(m.document.createTextNode(c));var f={};p.each(d.getElementsByTagName("link"),function(t){"stylesheet"===t.rel&&t.getAttribute("data-mce-fullpage")&&(f[t.href]=t)}),p.each(a.getAll("link"),function(t){var e=t.attr("href");if(!e)return!0;f[e]||"stylesheet"!==t.attr("rel")||u.add(d,"link",{rel:"stylesheet",text:"text/css",href:e,"data-mce-fullpage":"1"}),delete f[e]}),p.each(f,function(t){t.parentNode.removeChild(t)})}}(e,n,i,t)}),e.on("GetContent",function(t){!function(t,e,n,i){i.selection||i.source_view&&v(t)||(i.content=P(p.trim(e)+"\n"+p.trim(i.content)+"\n"+p.trim(n)))}(e,n.get(),i.get(),t)})},E=function(t){t.ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}}),t.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}})};!function z(){t.add("fullpage",function(t){var e=i(""),n=i("");w(t,e),E(t),D(t,e,n)})}()}(window); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/fullscreen/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/fullscreen/plugin.min.js index cb148a2f..5189d400 100755 --- a/bl-plugins/tinymce/tinymce/plugins/fullscreen/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/fullscreen/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ -!function(a){"use strict";function e(){}function d(e){return function(){return e}}function n(){return c}var r,t=function(e){function n(){return r}var r=e;return{get:n,set:function(e){r=e},clone:function(){return t(n())}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e){return{isFullscreen:function(){return null!==e.get()}}},u=d(!1),s=d(!0),c=(r={fold:function(e,n){return e()},is:u,isSome:u,isNone:s,getOr:m,getOrThunk:l,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:d(null),getOrUndefined:d(undefined),or:m,orThunk:l,map:n,each:e,bind:n,exists:u,forall:s,filter:n,equals:f,equals_:f,toArray:function(){return[]},toString:d("none()")},Object.freeze&&Object.freeze(r),r);function f(e){return e.isNone()}function l(e){return e()}function m(e){return e}function h(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}function g(e,n){return-1!==e.indexOf(n)}function v(e,n,r){if(!D(r))throw a.console.error("Invalid call to CSS.set. Property ",n,":: Value ",r,":: Element ",e),new Error("CSS value must be a string: "+r);!function(e){return e.style!==undefined&&F(e.style.getPropertyValue)}(e)||e.style.setProperty(n,r)}function O(e,n){var r=e.dom();!function(e,n){for(var r=R(e),t=0,o=r.length;t${name}');return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[(n=e,null==n?"":'
'+function(t){var e=function(e){var t=F(e.plugins);return e.settings.forced_plugins===undefined?t:function(e,t){for(var n=[],o=0,r=e.length;o"+a(t,e)+""}),o=n.length,r=n.join("");return"

"+U.translate(["Plugins installed ({0}):",o])+"

    "+r+"
"}(n)+"
"),(t=b(["Accessibility Checker","Advanced Code Editor","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
  • "+U.translate(e)+"
  • "}).join(""),'

    '+U.translate("Premium plugins:")+"

    ")].join("")}]}},N=tinymce.util.Tools.resolve("tinymce.EditorManager"),L=function(){var e,t,n='TinyMCE '+(e=N.majorVersion,t=N.minorVersion,0===e.indexOf("@")?"X.X.X":e+"."+t)+"";return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+U.translate(["You are using {0}",n])+"

    ",presets:"document"}]}},B=function(){return{name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]}};!function z(){t.add("help",function(e){var t=r({}),n=function(n){return{addTab:function(e){var t=n.get();t[e.name]=e,n.set(t)}}}(t),o=A(e,t);return s(e,o),i(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),n})}()}(); \ No newline at end of file +!function(){"use strict";function e(){}function r(e){return function(){return e}}var a=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return a(t())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){e.addCommand("mceHelp",t)},s=function(e,t){e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t})},c=function(){return(c=Object.assign||function(e){for(var t,n=1,o=arguments.length;n${name}');return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[(n=e,null==n?"":'
    '+function(t){var e=function(e){var t=F(e.plugins);return e.settings.forced_plugins===undefined?t:function(e,t){for(var n=[],o=0,a=e.length;o"+r(t,e)+""}),o=n.length,a=n.join("");return"

    "+U.translate(["Plugins installed ({0}):",o])+"

      "+a+"
    "}(n)+"
    "),(t=y(["Accessibility Checker","Advanced Code Editor","Advanced Tables","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
  • "+U.translate(e)+"
  • "}).join(""),'

    '+U.translate("Premium plugins:")+"

    ")].join("")}]}},N=tinymce.util.Tools.resolve("tinymce.EditorManager"),L=function(){var e,t,n='TinyMCE '+(e=N.majorVersion,t=N.minorVersion,0===e.indexOf("@")?"X.X.X":e+"."+t)+"";return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+U.translate(["You are using {0}",n])+"

    ",presets:"document"}]}},B=function(){return{name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]}};!function z(){t.add("help",function(e){var t=a({}),n=function(n){return{addTab:function(e){var t=n.get();t[e.name]=e,n.set(t)}}}(t),o=A(e,t);return s(e,o),i(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),n})}()}(); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/hr/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/hr/plugin.min.js index 5e1135fa..ff41b30b 100755 --- a/bl-plugins/tinymce/tinymce/plugins/hr/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/hr/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
    ")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};!function e(){n.add("hr",function(n){o(n),t(n)})}()}(); \ No newline at end of file diff --git a/bl-plugins/tinymce/tinymce/plugins/image/plugin.min.js b/bl-plugins/tinymce/tinymce/plugins/image/plugin.min.js index 65672a4d..66c92740 100755 --- a/bl-plugins/tinymce/tinymce/plugins/image/plugin.min.js +++ b/bl-plugins/tinymce/tinymce/plugins/image/plugin.min.js @@ -4,6 +4,6 @@ * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ * - * Version: 5.0.16 (2019-09-24) + * Version: 5.1.3 (2019-12-04) */ -!function(s){"use strict";function o(){}function a(t){return function(){return t}}function t(t){return t}function e(){return l}var n,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=a(!1),c=a(!0),l=(n={fold:function(t,e){return t()},is:u,isSome:u,isNone:c,getOr:d,getOrThunk:f,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:d,orThunk:f,map:e,each:o,bind:e,exists:u,forall:c,filter:e,equals:i,equals_:i,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(n),n);function i(t){return t.isNone()}function f(t){return t()}function d(t){return t}function m(e){return function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e}(t)===e}}function v(t){for(var e=[],n=0,r=t.length;n'+n+"")}else e.insertContent(i(e,t))},g=i,y=function(e){e.addCommand("mceInsertDate",function(){p(e,t(e))}),e.addCommand("mceInsertTime",function(){p(e,o(e))})},M=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return S(t())}}},v=function(n){var t=u(n),r=S(c(n));n.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===r.get()},fetch:function(e){e(M.map(t,function(e){return{type:"choiceitem",text:g(n,e),value:e}}))},onAction:function(){for(var e=[],t=0;t'),o.close()}}},O=i(!1),A=i(!0),C=(e={fold:function(n,t){return n()},is:O,isSome:O,isNone:A,getOr:E,getOrThunk:N,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:E,orThunk:N,map:t,each:u,bind:t,exists:O,forall:A,filter:t,equals:P,equals_:P,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(e),e);function P(n){return n.isNone()}function N(n){return n()}function E(n){return n}function I(n,t){return-1]+>[^<]+<\/a>$/.test(n)||-1===n.indexOf("href=")))},fn=D,ln=function(n,t){return function(n){return n.replace(/\uFEFF/g,"")}(t?t.innerText||t.textContent:n.getContent({format:"text"}))},sn=R,dn=L,mn={sanitize:function(n){return K(q)(n)},sanitizeWith:K,createUi:function(t,e){return function(n){return{name:t,type:"selectbox",label:e,items:n}}},getValue:q},hn=function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return hn(t())}}},pn=function(n,r){function e(n,t){var e=function(n,t){return"link"===t?n.catalogs.link:"anchor"===t?n.catalogs.anchor:J.none()}(r,t.name).getOr([]);return B(o.get(),t.name,e,n)}var o=hn(n.text);return{onChange:function(n,t){return"url"===t.name?function(n){if(o.get().length<=0){var t=n.url.meta.text!==undefined?n.url.meta.text:n.url.value;return J.some({text:t})}return J.none()}(n()):I(["anchor","link"],t.name)?e(n(),t):("text"===t.name&&o.set(n().text),J.none())}}},gn=function(){return(gn=Object.assign||function(n){for(var t,e=1,r=arguments.length;e]+>[^<]+<\/a>$/.test(n)||-1===n.indexOf("href=")))},fn=R,ln=function(n,t){return function(n){return n.replace(/\uFEFF/g,"")}(t?t.innerText||t.textContent:n.getContent({format:"text"}))},sn=L,dn=F,mn={sanitize:function(n){return K(q)(n)},sanitizeWith:K,createUi:function(t,e){return function(n){return{name:t,type:"selectbox",label:e,items:n}}},getValue:q},hn=function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return hn(t())}}},pn=function(n,r){function e(n,t){var e=function(n,t){return"link"===t?n.catalogs.link:"anchor"===t?n.catalogs.anchor:J.none()}(r,t.name).getOr([]);return B(o.get(),t.name,e,n)}var o=hn(n.text);return{onChange:function(n,t){return"url"===t.name?function(n){if(o.get().length<=0){var t=n.url.meta.text!==undefined?n.url.meta.text:n.url.value;return J.some({text:t})}return J.none()}(n()):E(["anchor","link"],t.name)?e(n(),t):("text"===t.name&&o.set(n().text),J.none())}}},gn={},vn={exports:gn};V=undefined,W=gn,H=vn,$=undefined,function(n){"object"==typeof W&&void 0!==H?H.exports=n():"function"==typeof V&&V.amd?V([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=n()}(function(){return function l(i,u,c){function a(t,n){if(!u[t]){if(!i[t]){var e="function"==typeof $&&$;if(!n&&e)return e(t,!0);if(f)return f(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[t]={exports:{}};i[t][0].call(o.exports,function(n){return a(i[t][1][n]||n)},o,o.exports,l,i,u,c)}return u[t].exports}for(var f="function"==typeof $&&$,n=0;ne.length?ne(t,e,n):ee(t,e,n)},[]);return S(n).map(function(e){return e.list})}(e.contentDocument,n).toArray()}function de(e){var n=g(nt.getSelectedListItems(e),En.fromDom);return A(y(n,t(re)),y(function(e){var n=Ge.call(e,0);return n.reverse(),n}(n),t(re)),function(e,n){return{start:e,end:n}})}function le(t,e,r){var n=function(e,n){var t=ut(!1);return g(e,function(e){return{sourceList:e,entries:st(0,n,t,e)}})}(e,de(t));p(n,function(e){!function(e,n){p(v(e,ie),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(n,e)})}(e.entries,r);var n=function(n,e){return N(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i=e.childNodes.length?t.data.length:0}:t.previousSibling&&jn(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&jn(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}}function ve(e,n){var t=g(nt.getSelectedListRoots(e),En.fromDom),r=g(nt.getSelectedDlItems(e),En.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();le(e,t,n),ge(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(dt(e.selection.getRng())),e.nodeChanged(),o=!0}return o}function he(e){return ve(e,"Indent")}function ye(e){return ve(e,"Outdent")}function Ne(e){return ve(e,"Flatten")}function Se(e){return/\btox\-/.test(e.className)}function Oe(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}}function Ce(t,e){Fn.each(e,function(e,n){t.setAttribute(n,e)})}function be(e,n,t){!function(e,n,t){var r=t["list-style-type"]?t["list-style-type"]:null;e.setStyle(n,"list-style-type",r)}(e,n,t),function(e,n,t){Ce(n,t["list-attributes"]),Fn.each(e.select("li",n),function(e){Ce(e,t["list-item-attributes"])})}(e,n,t)}function Le(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&zn(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Xn(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o}function Te(r,o,i){void 0===i&&(i={});var e,n=r.selection.getRng(!0),u="LI",t=nt.getClosestListRootElm(r,r.selection.getStart(!0)),s=r.dom;"false"!==s.getContentEditable(r.selection.getNode())&&("DL"===(o=o.toUpperCase())&&(u="DT"),e=gt(n),Fn.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Le(t,e,!0,r),s=Le(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return Fn.each(a,function(e){if(Xn(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||zn(e))return zn(e)&&u.remove(e),void(o=null);var n=e.nextSibling;lt.isBookmarkNode(e)&&(Xn(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(r,n,t),function(e){var n,t;(t=e.previousSibling)&&Hn(t)&&t.nodeName===o&&function(e,n,t){var r=e.getStyle(n,"list-style-type"),o=t?t["list-style-type"]:"";return r===(o=null===o?"":o)}(s,t,i)?(n=t,e=s.rename(e,u),t.appendChild(e)):(n=s.create(o),e.parentNode.insertBefore(n,e),n.appendChild(e),e=s.rename(e,u)),function(t,r,e){Fn.each(e,function(e){var n;return t.setStyle(r,((n={})[e]="",n))})}(s,e,["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"]),be(s,n,i),vt(r.dom,n)}),r.selection.setRng(pt(e)))}function Ee(e,n,t){return function(e,n){return e&&n&&Hn(e)&&e.nodeName===n.nodeName}(n,t)&&function(e,n,t){return e.getStyle(n,"list-style-type",!0)===e.getStyle(t,"list-style-type",!0)}(e,n,t)&&function(e,n){return e.className===n.className}(n,t)}function De(n,e,t,r,o){if(e.nodeName!==r||ht(o)){var i=gt(n.selection.getRng(!0));Fn.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);be(e.dom,o,r),j(e,Oe(t),o)}else be(e.dom,n,r),j(e,Oe(t),n)}(n,e,r,o)}),n.selection.setRng(pt(i))}else Ne(n)}function we(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),Gn(e,r)&&Nt.remove(r)):Nt.setStyle(r,"listStyleType","none")),Hn(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)}function ke(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(jn(o)&&(t?ie.length?ne(t,e,n):ee(t,e,n)},[]);return S(n).map(function(e){return e.list})}(e.contentDocument,n).toArray()}function de(e){var n=g(Jn.getSelectedListItems(e),bn.fromDom);return A(N(n,t(re)),N(function(e){var n=Xe.call(e,0);return n.reverse(),n}(n),t(re)),function(e,n){return{start:e,end:n}})}function le(t,e,r){var n=function(e,n){var t=Ge(!1);return g(e,function(e){return{sourceList:e,entries:tt(0,n,t,e)}})}(e,de(t));p(n,function(e){!function(e,n){p(v(e,ie),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(n,e)})}(e.entries,r);var n=function(n,e){return y(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i=e.childNodes.length?t.data.length:0}:t.previousSibling&&Mn(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&Mn(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}}function ve(e,n){var t=g(Jn.getSelectedListRoots(e),bn.fromDom),r=g(Jn.getSelectedDlItems(e),bn.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();le(e,t,n),ge(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(ut(e.selection.getRng())),e.nodeChanged(),o=!0}return o}function he(e){return ve(e,"Indent")}function Ne(e){return ve(e,"Outdent")}function ye(e){return ve(e,"Flatten")}function Se(e){return/\btox\-/.test(e.className)}function Oe(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}}function Ce(t,e){Pn.each(e,function(e,n){t.setAttribute(n,e)})}function be(e,n,t){!function(e,n,t){var r=t["list-style-type"]?t["list-style-type"]:null;e.setStyle(n,"list-style-type",r)}(e,n,t),function(e,n,t){Ce(n,t["list-attributes"]),Pn.each(e.select("li",n),function(e){Ce(e,t["list-item-attributes"])})}(e,n,t)}function Le(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&qn(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Vn(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o}function Te(r,o,i){void 0===i&&(i={});var e,n=r.selection.getRng(!0),u="LI",t=Jn.getClosestListRootElm(r,r.selection.getStart(!0)),s=r.dom;"false"!==s.getContentEditable(r.selection.getNode())&&("DL"===(o=o.toUpperCase())&&(u="DT"),e=ct(n),Pn.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Le(t,e,!0,r),s=Le(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return Pn.each(a,function(e){if(Vn(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||qn(e))return qn(e)&&u.remove(e),void(o=null);var n=e.nextSibling;st.isBookmarkNode(e)&&(Vn(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(r,n,t),function(e){var n,t;(t=e.previousSibling)&&Un(t)&&t.nodeName===o&&function(e,n,t){var r=e.getStyle(n,"list-style-type"),o=t?t["list-style-type"]:"";return r===(o=null===o?"":o)}(s,t,i)?(n=t,e=s.rename(e,u),t.appendChild(e)):(n=s.create(o),e.parentNode.insertBefore(n,e),n.appendChild(e),e=s.rename(e,u)),function(t,r,e){Pn.each(e,function(e){var n;return t.setStyle(r,((n={})[e]="",n))})}(s,e,["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"]),be(s,n,i),dt(r.dom,n)}),r.selection.setRng(ft(e)))}function De(e,n,t){return function(e,n){return e&&n&&Un(e)&&e.nodeName===n.nodeName}(n,t)&&function(e,n,t){return e.getStyle(n,"list-style-type",!0)===e.getStyle(t,"list-style-type",!0)}(e,n,t)&&function(e,n){return e.className===n.className}(n,t)}function Ee(n,e,t,r,o){if(e.nodeName!==r||lt(o)){var i=ct(n.selection.getRng(!0));Pn.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);be(e.dom,o,r),j(e,Oe(t),o)}else be(e.dom,n,r),j(e,Oe(t),n)}(n,e,r,o)}),n.selection.setRng(ft(i))}else ye(n)}function we(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),Xn(e,r)&>.remove(r)):gt.setStyle(r,"listStyleType","none")),Un(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)}function ke(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(Mn(o)&&(t?i"}(n):"application/x-shockwave-flash"===n.source1mime?function(e){var t='';return e.poster&&(t+=''),t+=""}(n):-1!==n.source1mime.indexOf("audio")?function(e,t){return t?t(e):'"}(n,o):"script"===n.type?function(e){return'
    {$L->get('disk-usage')}$diskUsage
    Bludit Build Number'.BLUDIT_BUILD.'
    Disk usage'.Filesystem::bytesToHumanFileSize(Filesystem::getSize(PATH_ROOT)).'
    Bludit Developers